[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Xen-devel] [xen-unstable test] 6947: regressions - trouble: broken/fail/pass
>>> On 02.05.11 at 14:13, Keir Fraser <keir.xen@xxxxxxxxx> wrote:
> On 02/05/2011 13:00, "Jan Beulich" <JBeulich@xxxxxxxxxx> wrote:
>>> (2) Change the xmalloc lock to spin_lock_irqsave(). This would also have to
>>> be transitively applied to at least the heap_lock in page_alloc.c. One issue
>>> with this (and indeed with calling alloc_heap_pages at all with IRQs
>>> disabled) is that alloc_heap_pages does actually assume IRQs are enabled
>>> (for example, it calls flush_tlb_mask()) -- actually I think this limitation
>>> probably predates the tsc rendezvous changes, and could be a source of
>>> latent bugs in earlier Xen releases.
>> (2b) Make only the xmalloc() lock disable IRQs, and don't allow it to
>> go into the page allocator when IRQs were disabled on entry. Have
>> a reserve page available on each pCPU (requires that in a single
>> hypercall there can't be allocations adding up to more than PAGE_SIZE),
>> and when consumed, re-fill this page e.g. from a softirq or tasklet.
> You'd have to release/acquire the xmalloc lock across the ->get_mem call.
Not sure what you're trying to make me aware of - initial acquire
would be spin_lock_irqsave(), prior to ->get_mem() it would
spin_unlock_irqrestore(), and the ->get_mem() handler would be
responsible for not calling into the page allocator when interrupts
are (still) disabled (and instead use the per-CPU reserve page if
populated, triggering its re-population).
Xen-devel mailing list