From: Karim Raslan Date: Thu, 26 Jun 2014 11:28:25 +0000 (+0100) Subject: mini-os: added arch_init_gnttab X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=c0ff3361fdfea60b09f34bb7277e39217c897f1a;p=people%2Fliuw%2Flibxenctrl-split%2Fmini-os.git mini-os: added arch_init_gnttab Moves some x86-specific code into arch/x86. Signed-off-by: Karim Allah Ahmed [talex5@gmail.com: split into multiple patches] Signed-off-by: Thomas Leonard Acked-by: Samuel Thibault --- diff --git a/arch/x86/mm.c b/arch/x86/mm.c index 35df15b..9c6d1b8 100644 --- a/arch/x86/mm.c +++ b/arch/x86/mm.c @@ -942,3 +942,16 @@ void arch_init_mm(unsigned long* start_pfn_p, unsigned long* max_pfn_p) *start_pfn_p = start_pfn; *max_pfn_p = max_pfn; } + +grant_entry_t *arch_init_gnttab(int nr_grant_frames) +{ + struct gnttab_setup_table setup; + unsigned long frames[nr_grant_frames]; + + setup.dom = DOMID_SELF; + setup.nr_frames = nr_grant_frames; + set_xen_guest_handle(setup.frame_list, frames); + + HYPERVISOR_grant_table_op(GNTTABOP_setup_table, &setup, 1); + return map_frames(frames, nr_grant_frames); +} diff --git a/gnttab.c b/gnttab.c index 6f25006..f395d12 100644 --- a/gnttab.c +++ b/gnttab.c @@ -172,8 +172,6 @@ gnttabop_error(int16_t status) void init_gnttab(void) { - struct gnttab_setup_table setup; - unsigned long frames[NR_GRANT_FRAMES]; int i; #ifdef GNT_DEBUG @@ -182,12 +180,7 @@ init_gnttab(void) for (i = NR_RESERVED_ENTRIES; i < NR_GRANT_ENTRIES; i++) put_free_entry(i); - setup.dom = DOMID_SELF; - setup.nr_frames = NR_GRANT_FRAMES; - set_xen_guest_handle(setup.frame_list, frames); - - HYPERVISOR_grant_table_op(GNTTABOP_setup_table, &setup, 1); - gnttab_table = map_frames(frames, NR_GRANT_FRAMES); + gnttab_table = arch_init_gnttab(NR_GRANT_FRAMES); printk("gnttab_table mapped at %p.\n", gnttab_table); } diff --git a/include/gnttab.h b/include/gnttab.h index acd6c39..c43ad42 100644 --- a/include/gnttab.h +++ b/include/gnttab.h @@ -12,5 +12,6 @@ unsigned long gnttab_end_transfer(grant_ref_t gref); int gnttab_end_access(grant_ref_t ref); const char *gnttabop_error(int16_t status); void fini_gnttab(void); +grant_entry_t *arch_init_gnttab(int nr_grant_frames); #endif /* !__GNTTAB_H__ */