>
> Changelogs should not describe WHAT the patch is doing. We can see that from 
> the patch. Changelogs should describe the WHY and CONCEPTS not implementation 
> details.

So enable for Ring 3 MWAIT for Knights Landing + explanation of model 
comparison and potential issues below. Should be Ok. 

>From your cover letter:
>
>     "Removed warning from 32-bit build"
>
>First of all, the warning
>
 >  arch/x86/include/asm/bitops.h:72:1: note: expected 'volatile long unsigned 
 > int *'
>but argument is of type 'unsigned int *'
 >   set_bit(long nr, volatile unsigned long *addr)
>
>is not at all 32bit specific.
>
>Handing an unsigned int pointer to a function which expects a unsigned long is 
>even more wrong on 64bit.
>
>So now for your 'removal fix': It's just as sloppy as anything else what I've 
>seen from you before.
>
>Handing a typecasted unsigned int pointer to a function which expects an 
>unsigned long pointer is just broken and a clear sign of careless tinkering.

I thought this to be 32 issue because it popped up in 32 build. The reason for 
this is probably that sizeof(int) is equal to sizeof(long) on x64.
I used the cast following set_cpu_cap define which does exactly the same thing 
with u32* type. 
Is using unsigned long would be OK.  

>The only reason why this 'works' is because x86 is a little endian 
>architecture and the bit number is a constant and set_bit gets translated it 
>into:
>
>    orb 0x02, 0x0(%rip) 
>
>Now if you look really close to that disassembly then you might notice, that 
>this sets bit 1 and not as you tell in patch 2/5:
>
>  "Introduce ELF_HWCAP2 variable for x86 and reserve its bit 0 to expose
>    the ring 3 MONITOR/MWAIT."
>
> So why does it not set bit 0?
>
> Simply because you hand in HWCAP2_RING3MWAIT as bit number, which is defined 
> as:
>
>+#define HWCAP2_RING3MWAIT              (1 << 0)
>
>Crap, crap, crap.
>
> What's so !$@&*(? wrong with doing the simple, obvious and correct:
>
>       ELF_HWCAP2 |= HWCAP2_RING3MWAIT;
>
> C is really hard, right?

I used set_bit because I wanted to be sure that this operation to be done 
atomically. There might be data race when multiple values of ELF_HWCAP2 will be 
set by multiple threads.
Thanks for the bit 1 issue I missed that. I can define HWCAP_RING3MWAIT_BIT 0 
and set it by set_bit?
I could use OR operator as there are no other HWCAP2 values.
I would choose option 1 but as you have seen I have some tendency to write 
sloppy code and not respond to emails.
But I am willing to change.

Best Regards,
Grzegorz

       

Reply via email to