2.6.29 and previous versions seem to contain this bug which I found just
eyeballing the code:
static inline void pci_write_bits32(struct pci_dev *pdev, int offset,
u32 value, u32 mask)
{
if (mask != 0xffff) {
u32 buf;
pci_read_config_dword(pdev, offset, &buf);
value &= mask;
buf &= ~mask;
value |= buf;
}
pci_write_config_dword(pdev, offset, value);
}
I'm pretty sure that "if" statement should be:
if (mask != 0xffffffff) {
Please copy my email address in any response as I do not subscribe.
Thanks,
Jeff Haran
Brocade
(cc maintainer)
On Thu, 26 Mar 2009 16:54:01 -0700 "Jeff Haran" <[email protected]> wrote:
> 2.6.29 and previous versions seem to contain this bug which I found just
> eyeballing the code:
>
> static inline void pci_write_bits32(struct pci_dev *pdev, int offset,
> u32 value, u32 mask)
> {
> if (mask != 0xffff) {
> u32 buf;
>
> pci_read_config_dword(pdev, offset, &buf);
> value &= mask;
> buf &= ~mask;
> value |= buf;
> }
>
> pci_write_config_dword(pdev, offset, value);
> }
>
> I'm pretty sure that "if" statement should be:
>
> if (mask != 0xffffffff) {
>
> Please copy my email address in any response as I do not subscribe.
>
> Thanks,