[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] ia64: Fixes after changes to grant table code.
# HG changeset patch # User kfraser@xxxxxxxxxxxxxxxxxxxxx # Date 1171901163 0 # Node ID 01476c7804b2ec8577be537f8868e9690bbab7d5 # Parent 184db7a674d93d92d0d963a7b3c80f1889983a9e ia64: Fixes after changes to grant table code. Signed-off-by: Isaku Yamahata <yamahata@xxxxxxxxxxxxx> --- xen/arch/ia64/xen/domain.c | 10 +++++++++ xen/include/asm-ia64/grant_table.h | 41 ++++++++++++++++++++++--------------- 2 files changed, 35 insertions(+), 16 deletions(-) diff -r 184db7a674d9 -r 01476c7804b2 xen/arch/ia64/xen/domain.c --- a/xen/arch/ia64/xen/domain.c Mon Feb 19 16:05:34 2007 +0000 +++ b/xen/arch/ia64/xen/domain.c Mon Feb 19 16:06:03 2007 +0000 @@ -521,6 +521,16 @@ int arch_domain_create(struct domain *d) if ((d->arch.mm.pgd = pgd_alloc(&d->arch.mm)) == NULL) goto fail_nomem; + /* + * grant_table_create() can't fully initialize grant table for domain + * because it is called before arch_domain_create(). + * Here we complete the initialization which requires p2m table. + */ + spin_lock(&d->grant_table->lock); + for (i = 0; i < nr_grant_frames(d->grant_table); i++) + ia64_gnttab_create_shared_page(d, d->grant_table, i); + spin_unlock(&d->grant_table->lock); + d->arch.ioport_caps = rangeset_new(d, "I/O Ports", RANGESETF_prettyprint_hex); diff -r 184db7a674d9 -r 01476c7804b2 xen/include/asm-ia64/grant_table.h --- a/xen/include/asm-ia64/grant_table.h Mon Feb 19 16:05:34 2007 +0000 +++ b/xen/include/asm-ia64/grant_table.h Mon Feb 19 16:06:03 2007 +0000 @@ -13,15 +13,6 @@ int destroy_grant_host_mapping(unsigned // for grant transfer void guest_physmap_add_page(struct domain *d, unsigned long gpfn, unsigned long mfn); - -// for grant table shared page -#define gnttab_create_shared_page(d, t, i) \ - do { \ - share_xen_page_with_guest( \ - virt_to_page((char *)(t)->shared + ((i) << PAGE_SHIFT)), \ - (d), XENSHARE_writable); \ - } while (0) - /* XXX * somewhere appropriate @@ -39,14 +30,32 @@ void guest_physmap_add_page(struct domai /* Guest physical address of the grant table. */ #define IA64_GRANT_TABLE_PADDR IA64_XMAPPEDREGS_PADDR(NR_CPUS) -#define gnttab_shared_maddr(d, t, i) \ - virt_to_maddr((char*)(t)->shared + ((i) << PAGE_SHIFT)) +#define gnttab_shared_maddr(t, i) (virt_to_maddr((t)->shared[(i)])) +#define gnttab_shared_page(t, i) (virt_to_page((t)->shared[(i)])) -# define gnttab_shared_gmfn(d, t, i) \ - ({ assign_domain_page((d), \ - IA64_GRANT_TABLE_PADDR + ((i) << PAGE_SHIFT), \ - gnttab_shared_maddr((d), (t), (i))); \ - (IA64_GRANT_TABLE_PADDR >> PAGE_SHIFT) + (i);}) +#define ia64_gnttab_create_shared_page(d, t, i) \ + do { \ + BUG_ON((d)->arch.mm.pgd == NULL); \ + assign_domain_page((d), \ + IA64_GRANT_TABLE_PADDR + ((i) << PAGE_SHIFT), \ + gnttab_shared_maddr((t), (i))); \ + } while (0) + +/* + * for grant table shared page + * grant_table_create() might call this macro before allocating the p2m table. + * In such case, arch_domain_create() completes the initialization. + */ +#define gnttab_create_shared_page(d, t, i) \ + do { \ + share_xen_page_with_guest(gnttab_shared_page((t), (i)), \ + (d), XENSHARE_writable); \ + if ((d)->arch.mm.pgd) \ + ia64_gnttab_create_shared_page((d), (t), (i)); \ + } while (0) + +#define gnttab_shared_gmfn(d, t, i) \ + ((IA64_GRANT_TABLE_PADDR >> PAGE_SHIFT) + (i)) #define gnttab_mark_dirty(d, f) ((void)f) _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |