lkml.org 
[lkml]   [2005]   [May]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] pci-sysfs: backport fix for 2.6.11.12
    Greg, before 2.6.12, pci_write_config in pci-sysfs.c was broken, causing
    incorrect data being written to the configuration register,
    which in the case of my userspace driver results in system failure.

    This has been fixed in 2.6.12-rc5:

    http://www.kernel.org/diff/diffview.cgi?file=%2Fpub%2Flinux%2Fkernel%2Fv2.6%2Ftesting%2Fpatch-2.6.12-rc5.bz2;z=2656

    Would you please consider merging the fix for 2.6.11.12 as well?

    Alternatively (since there were multiple other changes in pci-sysfs.c), here's
    a small patch to fix just this issue.

    Thanks,
    MST


    cast from (signed) char to unsigned int in pci_write_config
    causes the result to be sign extended, clobbering high bits in the result.
    Thus:

    # setpci -s 07:00.0 14.L=E4
    # setpci -s 07:00.0 14.L
    ffffffe4

    Signed-off-by: Michael S. Tsirkin <mst@mellanox.co.il>

    --- linux-2.6.11-openib/drivers/pci/pci-sysfs.c.bad 2005-05-30 13:45:02.000000000 +0300
    +++ linux-2.6.11-openib/drivers/pci/pci-sysfs.c 2005-05-30 13:51:39.000000000 +0300
    @@ -161,10 +161,10 @@ pci_write_config(struct kobject *kobj, c
    }

    while (size > 3) {
    - unsigned int val = buf[off - init_off];
    - val |= (unsigned int) buf[off - init_off + 1] << 8;
    - val |= (unsigned int) buf[off - init_off + 2] << 16;
    - val |= (unsigned int) buf[off - init_off + 3] << 24;
    + unsigned int val = (u8)buf[off - init_off];
    + val |= (unsigned int)(u8)buf[off - init_off + 1] << 8;
    + val |= (unsigned int)(u8)buf[off - init_off + 2] << 16;
    + val |= (unsigned int)(u8)buf[off - init_off + 3] << 24;
    pci_write_config_dword(dev, off, val);
    off += 4;
    size -= 4;
    --
    MST - Michael S. Tsirkin
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-05-31 20:34    [W:0.022 / U:31.444 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site