|
|
|
|
|
|
|
|
|
|
xen-ia64-devel
Re: [XenPPC] Re: [Xen-ia64-devel] [PATCH 1/2] remove xencomm page size l
On Wed, Aug 01, 2007 at 02:07:54PM -0500, Hollis Blanchard wrote:
> On Wed, 2007-08-01 at 15:36 +0900, Isaku Yamahata wrote:
> > remove xencomm page size limit.
> > Currently xencomm has page size limit so that a domain with many memory
> > (e.g. 100GB+) can't be created.
> > This patch allows that the address array of struct xencomm_desc to cross
> > page boundary so that the size of struct xencomm_desc can exceed page size.
> > Note that struct xencomm_desc itself can't page boundary.
>
> I'm confused about this.
>
> We noticed a much smaller limit doing save/restore. The p2m mapping
> maxed out at 512MB:
> * a xencomm_desc must fit into 1 page (1<<12)
> * it contains approx 1<<9 64-bit entries
> * each entry points to a page of memory containing 1<<9 entries of
> the p2m array
> * total: 1<<18 p2m entries
> * each p2m entry represents a guest page (1<<12)
> * 1<<30 total guest memory can be represented with a single
> xencomm_desc
>
> But we can issue sequential p2m hcalls with different offsets, so we do.
> So what exactly is the new problem?
The limit is about 64GB for xen/ia64 because xen/ia64 deafult page size
is 16KB.
The issue I'm seeing is the populate physmap hypercall failure
at domain creation. It's essentially same issue you described above.
I want to remove the limitation with the patches.
> Secondly, your patch doesn't make much sense to me, because the Xen side
> is explicitly rejecting xencomm_descs that cross a page boundary. So
> even if Linux sends down a multipage descriptor, Xen will return EINVAL.
> Am I missing something?
The patch description should have been clearer.
It confuses struct xencomm_desc itself (note sizeof(struct xencomm_descs) = 8)
with xencomm_desc->address[] variable sized array.
Please remember
struct xencomm_desc {
uint32_t magic;
uint32_t nr_addrs; /* the number of entries in address[] */
uint64_t address[0];
};
Yes, struct xencomm_descs itself (8 bytes) can not cross page boundary.
But I want to allow the xencomm_descs->address[] variable sized array
to cross page boundary so that nr_addrs can be greater than
((PAGE_SIZE - sizeof(*desc)) / sizeof(desc->address[0]))
where struct xencomm_desc *desc;
> (As a side question, is it really so difficult for you guys to just use
> the common code? I tried very hard to make it easy for you to just
> implement a couple hooks; I can't imagine it would take more than a day
> to do it.)
Sorry for that. It seems to be good time to resolve it.
I'll work on xencomm consolidation.
--
yamahata
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel
|
|
|
|
|