# HG changeset patch # User yamahata@xxxxxxxxxxxxx # Date 1168064285 -32400 # Node ID c8d2889b25dab855003adcc836cd3acf4ddb6245 # Parent 79fd3532f2e4c3c019cd535edf1068bc3cd96e93 PATCHNAME: grow_granttable_ppc Signed-off-by: Isaku Yamahata diff -r 79fd3532f2e4 -r c8d2889b25da xen/arch/powerpc/mm.c --- a/xen/arch/powerpc/mm.c Sat Jan 06 15:11:05 2007 +0900 +++ b/xen/arch/powerpc/mm.c Sat Jan 06 15:18:05 2007 +0900 @@ -411,7 +411,13 @@ ulong pfn2mfn(struct domain *d, ulong pf if (pfn & foreign_map_pfn) { t = PFN_TYPE_FOREIGN; mfn = foreign_to_mfn(d, pfn); - } else if (pfn >= max_page && pfn < (max_page + NR_GRANT_FRAMES)) { + } else if (pfn >= max_page && pfn < + (max_page + d->grant_table->nr_grant_frames)) { + /* XXX access d->grant_table->nr_grant_frames without lock. + * Currently on powerpc dynamic expanding grant table is + * inhibited by setting NR_GRANT_FRAMES_MAX = NR_GRANT_FRAMES + * so that this access is safe. + */ /* Its a grant table access */ t = PFN_TYPE_GNTTAB; mfn = gnttab_shared_mfn(d, d->grant_table, (pfn - max_page)); @@ -489,9 +495,15 @@ unsigned long mfn_to_gmfn(struct domain ulong gnttab_mfn; ulong rma_mfn; + /* XXX access d->grant_table->nr_grant_frames without lock. + * Currently on powerpc dynamic expanding grant table is + * inhibited by setting NR_GRANT_FRAMES_MAX = NR_GRANT_FRAMES + * so that this access is safe. + */ /* grant? */ gnttab_mfn = gnttab_shared_mfn(d, d->grant_table, 0); - if (mfn >= gnttab_mfn && mfn < (gnttab_mfn + NR_GRANT_FRAMES)) + if (mfn >= gnttab_mfn && mfn < + (gnttab_mfn + d->grant_table->nr_grant_frames)) return max_page + (mfn - gnttab_mfn); /* IO? */ diff -r 79fd3532f2e4 -r c8d2889b25da xen/include/asm-powerpc/grant_table.h --- a/xen/include/asm-powerpc/grant_table.h Sat Jan 06 15:11:05 2007 +0900 +++ b/xen/include/asm-powerpc/grant_table.h Sat Jan 06 15:18:05 2007 +0900 @@ -41,11 +41,11 @@ int destroy_grant_host_mapping( #define gnttab_create_shared_page(d, t, i) \ do { \ share_xen_page_with_guest( \ - virt_to_page((char *)(t)->shared + ((i) * PAGE_SIZE)), \ + virt_to_page((t)->shared_frames[(i)]), \ (d), XENSHARE_writable); \ } while ( 0 ) -#define gnttab_shared_mfn(d, t, i) (((ulong)((t)->shared) >> PAGE_SHIFT) + (i)) +#define gnttab_shared_mfn(d, t, i) (virt_to_mfn((t)->shared_frames[(i)])) #define gnttab_shared_gmfn(d, t, i) \ (mfn_to_gmfn(d, gnttab_shared_mfn(d, t, i)))