On Wed, 2017-08-02 at 14:59 -0400, Nitesh Narayan Lal wrote: > > > > -struct hypervisor_pages hypervisor_pagelist[MAX_FGPT_ENTRIES]; > > > +struct hypervisor_pages hypervisor_pagelist[MAX_FGPT_ENTRIES - > > > 1]; > > > + > > > +static void empty_hyperlist(void) > > > +{ > > > + int i = 0; > > > + > > > + while (i < MAX_FGPT_ENTRIES - 1) { > > > > MAX_FGPT_ENTRIES in-place of 'MAX_FGPT_ENTRIES - 1' here > > and at similar other places? > > This is because CPU local list has a total of 1000 entries > (MAX_FGPT_ENTRIES) where as CPU global list has 999 entries. If you > see > the arch_free_page_slowpath() and consider a situation where there > are > 1000 entries of singly allocated free pages in cpu-local list i.e., > none > of them are re-allocated. While adding them to the cpu global list > when > cpu local list index reaches to 1000 the outer loop will terminate > due > to which cpu global list index will never reach to 1000 and > compress_hyperlist()/make_hypercall() will never be called. > > > Can you explain why the hypervisor_pagelist is smaller than the cpu local list? This makes no sense to me. Why are they not the same size? That would certainly make the code easier to read. -- All rights reversed
Attachment:
signature.asc
Description: This is a digitally signed message part