Messages in this thread | | | Subject | Re: [Xen-devel] [PATCH v4 0/3] x86: modify_ldt improvement, test, and config option | From | Andrew Cooper <> | Date | Wed, 29 Jul 2015 01:47:52 +0100 |
| |
On 29/07/2015 01:21, Andy Lutomirski wrote: > On Tue, Jul 28, 2015 at 10:10 AM, Boris Ostrovsky > <boris.ostrovsky@oracle.com> wrote: >> On 07/28/2015 01:07 PM, Andy Lutomirski wrote: >>> On Tue, Jul 28, 2015 at 9:30 AM, Andrew Cooper >>> <andrew.cooper3@citrix.com> wrote: >>>> I suspect that the set_ldt(NULL, 0) call hasn't reached Xen before >>>> xen_free_ldt() is attempting to nab back the pages which Xen still has >>>> mapped as an LDT. >>>> >>> I just instrumented it with yet more LSL instructions. I'm pretty >>> sure that set_ldt really is clearing at least LDT entry zero. >>> Nonetheless the free_ldt call still oopses. >>> >> Yes, I added some instrumentation to the hypervisor and we definitely set >> LDT to NULL before failing. >> >> -boris > Looking at map_ldt_shadow_page: what keeps shadow_ldt_mapcnt from > getting incremented once on each CPU at the same time if both CPUs > fault in the same shadow LDT page at the same time?
Nothing, but that is fine. If a page is in use in two vcpus LDTs, it is expected to have a type refcount of 2.
> Similarly, what > keeps both CPUs from calling get_page_type at the same time and > therefore losing track of the page type reference count?
a cmpxchg() loop in the depths of __get_page_type().
> > I don't see why vmalloc or vm_unmap_aliases would have anything to do > with this, though.
Nor me. I have compiled your branch and will see about reproducing the issue myself tomorrow.
~Andrew
| |