2009-03-27 00:11:03

by Jeff Haran

[permalink] [raw]
Subject: bug in drivers/edac/edac_core.h pci_write_bits32()

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


2009-04-06 04:48:54

by Andrew Morton

[permalink] [raw]
Subject: Re: bug in drivers/edac/edac_core.h pci_write_bits32()

(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,