[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2] xen/arm: p2m: Correctly flush TLB in create_p2m_entries
On Tue, 2014-01-14 at 12:41 +0000, Julien Grall wrote: > On 01/13/2014 05:57 PM, Ian Campbell wrote: > > On Mon, 2014-01-13 at 17:37 +0000, Julien Grall wrote: > >> On 01/13/2014 05:10 PM, Ian Campbell wrote: > >>> Hrm, our TLB flush discipline is horribly confused isn't it... > >>> > >>> On Thu, 2014-01-09 at 16:34 +0000, Julien Grall wrote: > >>>> The p2m is shared between VCPUs for each domain. Currently Xen only flush > >>>> TLB on the local PCPU. This could result to mismatch between the mapping > >>>> in the > >>>> p2m and TLBs. > >>>> > >>>> Flush TLB entries used by this domain on every PCPU. The flush can also > >>>> be > >>>> moved out of the loop because: > >>>> - ALLOCATE: only called for dom0 RAM allocation, so the flush is > >>>> never called > >>> > >>> OK. > >>> > >>> An ASSERT(!third[third_table_offset(addr)].p2m.valid) might be > >>> worthwhile if that is the case. > >> > >> Will add it. > > > > Thanks. > > > >>> (I'm not sure why ALLOCATE can't be replaced by allocation followed by > >>> an INSERT, it's seems very special case) > >>> > >>>> - INSERT: if valid = 1 that would means with have replaced a > >>>> page that already belongs to the domain. A VCPU can write on the > >>>> wrong page. > >>>> This can append for dom0 with the 1:1 mapping because the mapping is > >>>> not > >>>> removed from the p2m. > >>> > >>> "append"? Do you mean "happen"? > >> > >> I meant "happen". > >> > >>> > >>> In the non-dom0 1:1 case eventually the page will be freed, I guess by a > >>> subsequent put_page elsewhere -- do they all contain the correct > >>> flushing? Or do we just leak? > >> > >> As for foreign mapping the INSERT function should be hardened. We don't > > > > Did you mean "handled"? > > I meant both :). Actually we don't have any check in this function as > for REMOVE case. > > I don't think it's possible to do it for 4.4, we take a reference on the > mapping every time a new entrie is added in the p2m. Can we pull the: /* TODO: Handle other p2m type */ if ( p2m_is_foreign(pte.p2m.type) ) { ASSERT(mfn_valid(mfn)); put_page(mfn_to_page(mfn)); } out to above the switch and have it be: pte = third[third_table_offset(addr)] flsuh = pte.p2m.valid /* TODO: Handle other p2m type */ if (pte.p2m.valid && p2m_is_foreign(pte.p2m.type) { ASSERT(mfn_valid(mfn)); put_page(mfn_to_page(mfn)); } I think that would be acceptable for 4.4, unless there is some complication I'm not foreseeing? Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |