Messages in this thread | | | Date | Wed, 14 Jul 2010 13:40:19 -0700 | From | Jeremy Fitzhardinge <> | Subject | Re: [patch 134/149] x86, paravirt: Add a global synchronization point for pvclock |
| |
On 07/14/2010 01:16 PM, Avi Kivity wrote: > On 07/14/2010 08:57 PM, Jeremy Fitzhardinge wrote: >> Anything else? > > 1. set up a mapping > 2. invlpg or set cr3 > 3. use the mapping > > Moving the invlpg will break your code.
invlpg uses memory clobbers. All the crX ops seem to use a __force_order variable to sequence them - but it looks like it's done precisely backwards and it's barking mad to do allow write_crX to be reordered with respect to memory ops.
Hm, looks like glommer added it surreptitiously while unifying system_32.h and system_64.h (system_32.h relied on asm volatile not being reordered; system_64.h used memory clobbers). J
| |