Re: Regression due to 0c44c2d0f459 x86: Use asm goto to implement better modify_and_test() functions

2014-01-31 Thread Alex Williamson
On Wed, 2013-12-04 at 08:44 -0800, H. Peter Anvin wrote:
> On 12/04/2013 12:59 AM, Ingo Molnar wrote:
> > 
> > * H. Peter Anvin  wrote:
> > 
> >> Hi guys,
> >>
> >> 0c44c2d0f459 x86: Use asm goto to implement better modify_and_test()
> >> functions
> >>
> >> causes a regression, because it incorrectly changed the constraints of
> >> bitops.
> >>
> >> Specifically, the GEN_BINARY_RMWcc() hardcodes a constraint as "er", but
> >> it needs to be "Ir" for the bitops themselves.  "I" is correct (as
> >> opposed to "J" even on 64 bits, because we only generate the 64-bit
> >> version when we have a register operand.
> >>
> >> Unfortunately there isn't a way we can get gcc+gas to generate a version
> >> with an offset pointer.
> > 
> > Does the regression manifest itself in any actual breakage - if yes, 
> > how does it look like? (People experiencing similar symptoms will be 
> > helped by seeing a fix matching their problems.)
> > 
> 
> It was discovered because it caused a build failure in a
> not-yet-submitted driver patch.  This happens when someone uses
> test_and_set_bit() or another similar operation on a fixed bit index
> above 255; the assembler throws an error at that point and the build fails.
> 
> *HOWEVER*, for bit indicies in the range 32-255, the current code will
> instead silently miscompile, as the CPU will truncate the argument to 5
> bits.  I don't know if there are any such instances in the current
> kernel, but it is entirely possible there is, with unknown but
> potentially disastrous results.

I'm seeing reports from folks using vfio for PCI device assignment
through QEMU that hugepages aren't being released on VM shutdown and
reverting 0c44c2d0f459 resolves the problem.  I haven't confirmed this
myself nor do I pretend to understand the changes this commit makes.
Thanks,

Alex

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: Regression due to 0c44c2d0f459 x86: Use asm goto to implement better modify_and_test() functions

2014-01-31 Thread Alex Williamson
On Wed, 2013-12-04 at 08:44 -0800, H. Peter Anvin wrote:
 On 12/04/2013 12:59 AM, Ingo Molnar wrote:
  
  * H. Peter Anvin h...@zytor.com wrote:
  
  Hi guys,
 
  0c44c2d0f459 x86: Use asm goto to implement better modify_and_test()
  functions
 
  causes a regression, because it incorrectly changed the constraints of
  bitops.
 
  Specifically, the GEN_BINARY_RMWcc() hardcodes a constraint as er, but
  it needs to be Ir for the bitops themselves.  I is correct (as
  opposed to J even on 64 bits, because we only generate the 64-bit
  version when we have a register operand.
 
  Unfortunately there isn't a way we can get gcc+gas to generate a version
  with an offset pointer.
  
  Does the regression manifest itself in any actual breakage - if yes, 
  how does it look like? (People experiencing similar symptoms will be 
  helped by seeing a fix matching their problems.)
  
 
 It was discovered because it caused a build failure in a
 not-yet-submitted driver patch.  This happens when someone uses
 test_and_set_bit() or another similar operation on a fixed bit index
 above 255; the assembler throws an error at that point and the build fails.
 
 *HOWEVER*, for bit indicies in the range 32-255, the current code will
 instead silently miscompile, as the CPU will truncate the argument to 5
 bits.  I don't know if there are any such instances in the current
 kernel, but it is entirely possible there is, with unknown but
 potentially disastrous results.

I'm seeing reports from folks using vfio for PCI device assignment
through QEMU that hugepages aren't being released on VM shutdown and
reverting 0c44c2d0f459 resolves the problem.  I haven't confirmed this
myself nor do I pretend to understand the changes this commit makes.
Thanks,

Alex

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: Regression due to 0c44c2d0f459 x86: Use asm goto to implement better modify_and_test() functions

2013-12-04 Thread H. Peter Anvin
On 12/04/2013 12:59 AM, Ingo Molnar wrote:
> 
> * H. Peter Anvin  wrote:
> 
>> Hi guys,
>>
>> 0c44c2d0f459 x86: Use asm goto to implement better modify_and_test()
>> functions
>>
>> causes a regression, because it incorrectly changed the constraints of
>> bitops.
>>
>> Specifically, the GEN_BINARY_RMWcc() hardcodes a constraint as "er", but
>> it needs to be "Ir" for the bitops themselves.  "I" is correct (as
>> opposed to "J" even on 64 bits, because we only generate the 64-bit
>> version when we have a register operand.
>>
>> Unfortunately there isn't a way we can get gcc+gas to generate a version
>> with an offset pointer.
> 
> Does the regression manifest itself in any actual breakage - if yes, 
> how does it look like? (People experiencing similar symptoms will be 
> helped by seeing a fix matching their problems.)
> 

It was discovered because it caused a build failure in a
not-yet-submitted driver patch.  This happens when someone uses
test_and_set_bit() or another similar operation on a fixed bit index
above 255; the assembler throws an error at that point and the build fails.

*HOWEVER*, for bit indicies in the range 32-255, the current code will
instead silently miscompile, as the CPU will truncate the argument to 5
bits.  I don't know if there are any such instances in the current
kernel, but it is entirely possible there is, with unknown but
potentially disastrous results.

-hpa

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: Regression due to 0c44c2d0f459 x86: Use asm goto to implement better modify_and_test() functions

2013-12-04 Thread Ingo Molnar

* H. Peter Anvin  wrote:

> Hi guys,
> 
> 0c44c2d0f459 x86: Use asm goto to implement better modify_and_test()
> functions
> 
> causes a regression, because it incorrectly changed the constraints of
> bitops.
> 
> Specifically, the GEN_BINARY_RMWcc() hardcodes a constraint as "er", but
> it needs to be "Ir" for the bitops themselves.  "I" is correct (as
> opposed to "J" even on 64 bits, because we only generate the 64-bit
> version when we have a register operand.
> 
> Unfortunately there isn't a way we can get gcc+gas to generate a version
> with an offset pointer.

Does the regression manifest itself in any actual breakage - if yes, 
how does it look like? (People experiencing similar symptoms will be 
helped by seeing a fix matching their problems.)

Thanks,

ngo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: Regression due to 0c44c2d0f459 x86: Use asm goto to implement better modify_and_test() functions

2013-12-04 Thread Ingo Molnar

* H. Peter Anvin h...@zytor.com wrote:

 Hi guys,
 
 0c44c2d0f459 x86: Use asm goto to implement better modify_and_test()
 functions
 
 causes a regression, because it incorrectly changed the constraints of
 bitops.
 
 Specifically, the GEN_BINARY_RMWcc() hardcodes a constraint as er, but
 it needs to be Ir for the bitops themselves.  I is correct (as
 opposed to J even on 64 bits, because we only generate the 64-bit
 version when we have a register operand.
 
 Unfortunately there isn't a way we can get gcc+gas to generate a version
 with an offset pointer.

Does the regression manifest itself in any actual breakage - if yes, 
how does it look like? (People experiencing similar symptoms will be 
helped by seeing a fix matching their problems.)

Thanks,

ngo
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: Regression due to 0c44c2d0f459 x86: Use asm goto to implement better modify_and_test() functions

2013-12-04 Thread H. Peter Anvin
On 12/04/2013 12:59 AM, Ingo Molnar wrote:
 
 * H. Peter Anvin h...@zytor.com wrote:
 
 Hi guys,

 0c44c2d0f459 x86: Use asm goto to implement better modify_and_test()
 functions

 causes a regression, because it incorrectly changed the constraints of
 bitops.

 Specifically, the GEN_BINARY_RMWcc() hardcodes a constraint as er, but
 it needs to be Ir for the bitops themselves.  I is correct (as
 opposed to J even on 64 bits, because we only generate the 64-bit
 version when we have a register operand.

 Unfortunately there isn't a way we can get gcc+gas to generate a version
 with an offset pointer.
 
 Does the regression manifest itself in any actual breakage - if yes, 
 how does it look like? (People experiencing similar symptoms will be 
 helped by seeing a fix matching their problems.)
 

It was discovered because it caused a build failure in a
not-yet-submitted driver patch.  This happens when someone uses
test_and_set_bit() or another similar operation on a fixed bit index
above 255; the assembler throws an error at that point and the build fails.

*HOWEVER*, for bit indicies in the range 32-255, the current code will
instead silently miscompile, as the CPU will truncate the argument to 5
bits.  I don't know if there are any such instances in the current
kernel, but it is entirely possible there is, with unknown but
potentially disastrous results.

-hpa

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Regression due to 0c44c2d0f459 x86: Use asm goto to implement better modify_and_test() functions

2013-12-03 Thread H. Peter Anvin
Hi guys,

0c44c2d0f459 x86: Use asm goto to implement better modify_and_test()
functions

causes a regression, because it incorrectly changed the constraints of
bitops.

Specifically, the GEN_BINARY_RMWcc() hardcodes a constraint as "er", but
it needs to be "Ir" for the bitops themselves.  "I" is correct (as
opposed to "J" even on 64 bits, because we only generate the 64-bit
version when we have a register operand.

Unfortunately there isn't a way we can get gcc+gas to generate a version
with an offset pointer.

-hpa


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Regression due to 0c44c2d0f459 x86: Use asm goto to implement better modify_and_test() functions

2013-12-03 Thread H. Peter Anvin
Hi guys,

0c44c2d0f459 x86: Use asm goto to implement better modify_and_test()
functions

causes a regression, because it incorrectly changed the constraints of
bitops.

Specifically, the GEN_BINARY_RMWcc() hardcodes a constraint as er, but
it needs to be Ir for the bitops themselves.  I is correct (as
opposed to J even on 64 bits, because we only generate the 64-bit
version when we have a register operand.

Unfortunately there isn't a way we can get gcc+gas to generate a version
with an offset pointer.

-hpa


--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/