Messages in this thread | | | Subject | Re: [PATCH 3/3] KVM: x86/vPMU: Add lazy mechanism to release perf_event per vPMC | From | Paolo Bonzini <> | Date | Wed, 9 Oct 2019 11:21:30 +0200 |
| |
On 09/10/19 10:16, Peter Zijlstra wrote: > On Wed, Oct 09, 2019 at 09:15:03AM +0200, Paolo Bonzini wrote: >> For stuff like hardware registers, bitfields are probably a bad idea >> anyway, so let's only consider the case of space optimization. > > Except for hardware registers? I actually like bitfields to describe > hardware registers.
In theory yes, in practice for MMIO it's a problem that you're not able to see the exact compiler reads or writes. Of course you can do:
union { struct { /* some bitfields here } u; u32 val; }
and only use the bitfields after reading/writing from the register.
> But worse, as used in the parent thread: > > u8 count:7; > bool flag:1; > > Who says the @flag thing will even be the msb of the initial u8 and not > a whole new variable due to change in base type?
Good point.
>> bool bitfields preserve the magic behavior where something like this: >> >> foo->x = y; >> >> (x is a bool bitfield) would be compiled as >> >> foo->x = (y != 0); > > This is confusion; if y is a single bit bitfield, then there is > absolutely _NO_ difference between these two expressions.
y is not in a struct so it cannot be a single bit bitfield. :) If y is an int and foo->x is a bool bitfield, you get the following:
foo->x = 6; /* foo->x is 1, it would be 0 for int:1 */ foo->x = 7; /* foo->x is 1, it would be 1 for int:1 */
Anyway it's good that we agree on the important thing about the patch!
Paolo
> The _only_ thing about _Bool is that it magically casts values to 0,1. > Single bit bitfield variables have no choice but to already be in that > range.
| |