Re: [PATCH 2/2] kvm-unit-tests: VMX: Test cases for nested EPT

Paolo Bonzini
2013-09-09T14:26:55Z

Il 09/09/2013 16:11, Arthur Chunqi Li ha scritto:
>>> >> +volatile u32 stage;
>>> >> +volatile bool init_fail;
>> >
>> > Why volatile?
> Because init_fail is only set but not used later in ept_init(), and if
> I don't add volatile, compiler may optimize the setting to init_fail.
>
> This occasion firstly occurred when I write set_stage/get_stage. If
> one variant is set in a function but not used later, the compiler
> usually optimizes this setting as redundant assignment and remove it.

No, the two are different. "stage" is written several times in the same
function, with no code in the middle:

stage++;
*p = 1;
stage++;

To the compiler, the first store is dead. The compiler doesn't know
that "*p = 1" traps to the hypervisor.

But this is not the case for "init_fail".

Paolo