11 Oct, 2007

11 commits

  • First user will be the DCCP transport networking protocol.

    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: David S. Miller

    Arnaldo Carvalho de Melo
     
  • Signed-off-by: Jeff Garzik
    Signed-off-by: David S. Miller

    Jeff Garzik
     
  • Signed-off-by: Jeff Garzik
    Signed-off-by: David S. Miller

    Jeff Garzik
     
  • Signed-off-by: Jeff Garzik
    Signed-off-by: David S. Miller

    Jeff Garzik
     
  • Based upon initial work by Keiichi Kii .

    This patch introduces support for dynamic reconfiguration (adding, removing
    and/or modifying parameters of netconsole targets at runtime) using a
    userspace interface exported via configfs. Documentation is also updated
    accordingly.

    Issues and brief design overview:

    (1) Kernel-initiated creation / destruction of kernel objects is not
    possible with configfs -- the lifetimes of the "config items" is managed
    exclusively from userspace. But netconsole must support boot/module
    params too, and these are parsed in kernel and hence netpolls must be
    setup from the kernel. Joel Becker suggested to separately manage the
    lifetimes of the two kinds of netconsole_target objects -- those created
    via configfs mkdir(2) from userspace and those specified from the
    boot/module option string. This adds complexity and some redundancy here
    and also means that boot/module param-created targets are not exposed
    through the configfs namespace (and hence cannot be updated / destroyed
    dynamically). However, this saves us from locking / refcounting
    complexities that would need to be introduced in configfs to support
    kernel-initiated item creation / destroy there.

    (2) In configfs, item creation takes place in the call chain of the
    mkdir(2) syscall in the driver subsystem. If we used an ioctl(2) to
    create / destroy objects from userspace, the special userspace program is
    able to fill out the structure to be passed into the ioctl and hence
    specify attributes such as local interface that are required at the time
    we set up the netpoll. For configfs, this information is not available at
    the time of mkdir(2). So, we keep all newly-created targets (via
    configfs) disabled by default. The user is expected to set various
    attributes appropriately (including the local network interface if
    required) and then write(2) "1" to the "enabled" attribute. Thus,
    netpoll_setup() is then called on the set parameters in the context of
    _this_ write(2) on the "enabled" attribute itself. This design enables
    the user to reconfigure existing netconsole targets at runtime to be
    attached to newly-come-up interfaces that may not have existed when
    netconsole was loaded or when the targets were actually created. All this
    effectively enables us to get rid of custom ioctls.

    (3) Ultra-paranoid configfs attribute show() and store() operations, with
    sanity and input range checking, using only safe string primitives, and
    compliant with the recommendations in Documentation/filesystems/sysfs.txt.

    (4) A new function netpoll_print_options() is created in the netpoll API,
    that just prints out the configured parameters for a netpoll structure.
    netpoll_parse_options() is modified to use that and it is also exported to
    be used from netconsole.

    Signed-off-by: Satyam Sharma
    Acked-by: Keiichi Kii
    Signed-off-by: Andrew Morton
    Signed-off-by: David S. Miller

    Satyam Sharma
     
  • This stale info came from the original idea, which proved to be
    unnecessarily complex, sacked_out > 0 is easy to do and that when
    it's going to be needed anyway (it _can_ be valid also when
    sacked_out == 0 but there's not going to be a guarantee about it
    for now).

    Signed-off-by: Ilpo Järvinen
    Signed-off-by: David S. Miller

    Ilpo Järvinen
     
  • It is easily calculable when needed and user are not that many
    after all.

    Signed-off-by: Ilpo Järvinen
    Signed-off-by: David S. Miller

    Ilpo Järvinen
     
  • In addition, added a reference about the purpose of the loop.

    Signed-off-by: Ilpo Järvinen
    Signed-off-by: David S. Miller

    Ilpo Järvinen
     
  • It is guaranteed to be valid only when !tp->sacked_out. In most
    cases this seqno is available in the last ACK but there is no
    guarantee for that. The new fast recovery loss marking algorithm
    needs this as entry point.

    Signed-off-by: Ilpo Järvinen
    Signed-off-by: David S. Miller

    Ilpo Järvinen
     
  • This patch provides generic Large Receive Offload (LRO) functionality
    for IPv4/TCP traffic.

    LRO combines received tcp packets to a single larger tcp packet and
    passes them then to the network stack in order to increase performance
    (throughput). The interface supports two modes: Drivers can either
    pass SKBs or fragment lists to the LRO engine.

    Signed-off-by: Jan-Bernd Themann
    Signed-off-by: David S. Miller

    Jan-Bernd Themann
     
  • Several devices have multiple independant RX queues per net
    device, and some have a single interrupt doorbell for several
    queues.

    In either case, it's easier to support layouts like that if the
    structure representing the poll is independant from the net
    device itself.

    The signature of the ->poll() call back goes from:

    int foo_poll(struct net_device *dev, int *budget)

    to

    int foo_poll(struct napi_struct *napi, int budget)

    The caller is returned the number of RX packets processed (or
    the number of "NAPI credits" consumed if you want to get
    abstract). The callee no longer messes around bumping
    dev->quota, *budget, etc. because that is all handled in the
    caller upon return.

    The napi_struct is to be embedded in the device driver private data
    structures.

    Furthermore, it is the driver's responsibility to disable all NAPI
    instances in it's ->stop() device close handler. Since the
    napi_struct is privatized into the driver's private data structures,
    only the driver knows how to get at all of the napi_struct instances
    it may have per-device.

    With lots of help and suggestions from Rusty Russell, Roland Dreier,
    Michael Chan, Jeff Garzik, and Jamal Hadi Salim.

    Bug fixes from Thomas Graf, Roland Dreier, Peter Zijlstra,
    Joseph Fannin, Scott Wood, Hans J. Koch, and Michael Chan.

    [ Ported to current tree and all drivers converted. Integrated
    Stephen's follow-on kerneldoc additions, and restored poll_list
    handling to the old style to fix mutual exclusion issues. -DaveM ]

    Signed-off-by: Stephen Hemminger
    Signed-off-by: David S. Miller

    Stephen Hemminger
     

09 Oct, 2007

1 commit

  • All the current page_mkwrite() implementations also set the page dirty. Which
    results in the set_page_dirty_balance() call to _not_ call balance, because the
    page is already found dirty.

    This allows us to dirty a _lot_ of pages without ever hitting
    balance_dirty_pages(). Not good (tm).

    Force a balance call if ->page_mkwrite() was successful.

    Signed-off-by: Peter Zijlstra
    Signed-off-by: Linus Torvalds

    Peter Zijlstra
     

08 Oct, 2007

1 commit

  • It turns out that there are a few other five-second timers in the
    kernel, and if the timers get in sync, the load-average can get
    artificially inflated by events that just happen to coincide.

    So just offset the load average calculation it by a timer tick.

    Noticed by Anders Boström, for whom the coincidence started triggering
    on one of his machines with the JBD jiffies rounding code (JBD is one of
    the subsystems that also end up using a 5-second timer by default).

    Tested-by: Anders Boström
    Cc: Chuck Ebbert
    Cc: Arjan van de Ven
    Cc: Andrew Morton
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

27 Sep, 2007

1 commit

  • This reverts commit 184c44d2049c4db7ef6ec65794546954da2c6a0e.

    As noted by Dave Jones:
    "Linus, please revert the above cset. It doesn't seem to be
    necessary (it was added to fix a miscompile in 'make allnoconfig'
    which doesn't seem to be repeatable with it reverted) and actively
    breaks the ARM SA1100 framebuffer driver."

    Requested-by: Dave Jones
    Cc: Russell King
    Cc: Andrew Morton
    Cc: Andi Kleen
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

21 Sep, 2007

1 commit

  • This simplifies signalfd code, by avoiding it to remain attached to the
    sighand during its lifetime.

    In this way, the signalfd remain attached to the sighand only during
    poll(2) (and select and epoll) and read(2). This also allows to remove
    all the custom "tsk == current" checks in kernel/signal.c, since
    dequeue_signal() will only be called by "current".

    I think this is also what Ben was suggesting time ago.

    The external effect of this, is that a thread can extract only its own
    private signals and the group ones. I think this is an acceptable
    behaviour, in that those are the signals the thread would be able to
    fetch w/out signalfd.

    Signed-off-by: Davide Libenzi
    Signed-off-by: Linus Torvalds

    Davide Libenzi
     

20 Sep, 2007

4 commits

  • add /proc/sys/kernel/sched_compat_yield to make sys_sched_yield()
    more agressive, by moving the yielding task to the last position
    in the rbtree.

    with sched_compat_yield=0:

    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    2539 mingo 20 0 1576 252 204 R 50 0.0 0:02.03 loop_yield
    2541 mingo 20 0 1576 244 196 R 50 0.0 0:02.05 loop

    with sched_compat_yield=1:

    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    2584 mingo 20 0 1576 248 196 R 99 0.0 0:52.45 loop
    2582 mingo 20 0 1576 256 204 R 0 0.0 0:00.00 loop_yield

    Signed-off-by: Ingo Molnar
    Signed-off-by: Peter Zijlstra

    Ingo Molnar
     
  • This patch proposes fixes to the reference counting of memory policy in the
    page allocation paths and in show_numa_map(). Extracted from my "Memory
    Policy Cleanups and Enhancements" series as stand-alone.

    Shared policy lookup [shmem] has always added a reference to the policy,
    but this was never unrefed after page allocation or after formatting the
    numa map data.

    Default system policy should not require additional ref counting, nor
    should the current task's task policy. However, show_numa_map() calls
    get_vma_policy() to examine what may be [likely is] another task's policy.
    The latter case needs protection against freeing of the policy.

    This patch adds a reference count to a mempolicy returned by
    get_vma_policy() when the policy is a vma policy or another task's
    mempolicy. Again, shared policy is already reference counted on lookup. A
    matching "unref" [__mpol_free()] is performed in alloc_page_vma() for
    shared and vma policies, and in show_numa_map() for shared and another
    task's mempolicy. We can call __mpol_free() directly, saving an admittedly
    inexpensive inline NULL test, because we know we have a non-NULL policy.

    Handling policy ref counts for hugepages is a bit trickier.
    huge_zonelist() returns a zone list that might come from a shared or vma
    'BIND policy. In this case, we should hold the reference until after the
    huge page allocation in dequeue_hugepage(). The patch modifies
    huge_zonelist() to return a pointer to the mempolicy if it needs to be
    unref'd after allocation.

    Kernel Build [16cpu, 32GB, ia64] - average of 10 runs:

    w/o patch w/ refcount patch
    Avg Std Devn Avg Std Devn
    Real: 100.59 0.38 100.63 0.43
    User: 1209.60 0.37 1209.91 0.31
    System: 81.52 0.42 81.64 0.34

    Signed-off-by: Lee Schermerhorn
    Acked-by: Andi Kleen
    Cc: Christoph Lameter
    Acked-by: Mel Gorman
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Lee Schermerhorn
     
  • It turned out, that the user namespace is released during the do_exit() in
    exit_task_namespaces(), but the struct user_struct is released only during the
    put_task_struct(), i.e. MUCH later.

    On debug kernels with poisoned slabs this will cause the oops in
    uid_hash_remove() because the head of the chain, which resides inside the
    struct user_namespace, will be already freed and poisoned.

    Since the uid hash itself is required only when someone can search it, i.e.
    when the namespace is alive, we can safely unhash all the user_struct-s from
    it during the namespace exiting. The subsequent free_uid() will complete the
    user_struct destruction.

    For example simple program

    #include

    char stack[2 * 1024 * 1024];

    int f(void *foo)
    {
    return 0;
    }

    int main(void)
    {
    clone(f, stack + 1 * 1024 * 1024, 0x10000000, 0);
    return 0;
    }

    run on kernel with CONFIG_USER_NS turned on will oops the
    kernel immediately.

    This was spotted during OpenVZ kernel testing.

    Signed-off-by: Pavel Emelyanov
    Signed-off-by: Alexey Dobriyan
    Acked-by: "Serge E. Hallyn"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Pavel Emelyanov
     
  • Surprisingly, but (spotted by Alexey Dobriyan) the uid hash still uses
    list_heads, thus occupying twice as much place as it could. Convert it to
    hlist_heads.

    Signed-off-by: Pavel Emelyanov
    Signed-off-by: Alexey Dobriyan
    Acked-by: Serge Hallyn
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Pavel Emelyanov
     

17 Sep, 2007

3 commits

  • * 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6:
    [VLAN]: Fix net_device leak.
    [PPP] generic: Fix receive path data clobbering & non-linear handling
    [PPP] generic: Call skb_cow_head before scribbling over skb
    [NET] skbuff: Add skb_cow_head
    [BRIDGE]: Kill clone argument to br_flood_*
    [PPP] pppoe: Fill in header directly in __pppoe_xmit
    [PPP] pppoe: Fix data clobbering in __pppoe_xmit and return value
    [PPP] pppoe: Fix skb_unshare_check call position
    [SCTP]: Convert bind_addr_list locking to RCU
    [SCTP]: Add RCU synchronization around sctp_localaddr_list
    [PKT_SCHED]: sch_cbq.c: Shut up uninitialized variable warning
    [PKTGEN]: srcmac fix
    [IPV6]: Fix source address selection.
    [IPV4]: Just increment OutDatagrams once per a datagram.
    [IPV6]: Just increment OutDatagrams once per a datagram.
    [IPV6]: Fix unbalanced socket reference with MSG_CONFIRM.
    [NET_SCHED] protect action config/dump from irqs
    [NET]: Fix two issues wrt. SO_BINDTODEVICE.

    Linus Torvalds
     
  • When CONFIG_ISA is disabled, the isa_driver support will not be compiled
    in. Define stubs so that we don't get link-time errors.

    Signed-off-by: Matthew Wilcox
    Signed-off-by: Linus Torvalds

    Matthew Wilcox
     
  • This patch adds an optimised version of skb_cow that avoids the copy if
    the header can be modified even if the rest of the payload is cloned.

    This can be used in encapsulating paths where we only need to modify the
    header. As it is, this can be used in PPPOE and bridging.

    Signed-off-by: Herbert Xu
    Signed-off-by: David S. Miller

    Herbert Xu
     

13 Sep, 2007

1 commit


12 Sep, 2007

7 commits

  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
    Input: usbtouchscreen - correctly set 'phys'
    Input: i8042 - add HP Pavilion DV4270ca to the MUX blacklist
    Input: i8042 - fix modpost warning
    Input: add more Braille keycodes

    Linus Torvalds
     
  • Taneli Vähäkangas reported that commit
    786d7e1612f0b0adb6046f19b906609e4fe8b1ba aka "Fix rmmod/read/write races
    in /proc entries" broke SBCL + SLIME combo.

    The old code in do_select() used DEFAULT_POLLMASK, if couldn't find
    ->poll handler. The new code makes ->poll always there and returns 0 by
    default, which is not correct. Return DEFAULT_POLLMASK instead.

    Steps to reproduce:

    install emacs, SBCL, SLIME
    emacs
    M-x slime in *inferior-lisp* buffer
    [watch it doing "Connecting to Swank on port X.."]

    Please, apply before 2.6.23.

    P.S.: why SBCL can't just read(2) /proc/cpuinfo is a mystery.

    Signed-off-by: Alexey Dobriyan
    Cc: T Taneli Vahakangas
    Cc: Oleg Nesterov
    Cc: "Eric W. Biederman"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alexey Dobriyan
     
  • The AdvanSys driver wants to align some pointers, and the ALIGN macro
    doesn't work for pointers. Rather than try to make it work, add a new
    PTR_ALIGN macro which is typesafe.

    Signed-off-by: Matthew Wilcox
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Matthew Wilcox
     
  • * master.kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6:
    pdc202xx_new: PLL detection fix
    via82cxxx: add Arima W730-K8 and other rebadgings to short cables list
    pmac: build fix
    pata_ali/alim15x3: override 80-wire cable detection for Toshiba S1800-814
    hpt366: UltraDMA filter for SATA cards (take 2)
    ide: add ide_dev_is_sata() helper (take 2)
    hpt366: fix PCI clock detection for HPT374 (take 4)
    pdc202xx_new: fix PCI refcounting
    ide: fix PCI refcounting
    mpc8xx: Only build mpc8xx on arch/ppc

    Linus Torvalds
     
  • This patch has added #include to include/linux/leds.h
    for rwlock_t.

    Signed-off-by: Yoichi Yuasa
    Signed-off-by: Richard Purdie

    Yoichi Yuasa
     
  • Make the SATA drive detection code from eighty_ninty_three() into inline
    ide_dev_is_sata() helper fixing it along the way to be more strict while
    checking word 80 for the reserved values...

    Signed-off-by: Sergei Shtylyov
    Signed-off-by: Bartlomiej Zolnierkiewicz

    Sergei Shtylyov
     
  • * master.kernel.org:/pub/scm/linux/kernel/git/gregkh/pci-2.6:
    PCI: irq and pci_ids patch for Intel Tolapai
    PCI: unhide SMBus on Compaq Deskpro EP 401963-001 motherboard
    PCI: Remove __devinit from pcibios_get_irq_routing_table
    PCI: remove devinit from pci_read_bridge_bases
    PCI AER: fix warnings when PCIEAER=n

    Linus Torvalds
     

11 Sep, 2007

4 commits

  • This patch adds the Intel Tolapai LPC and SMBus Controller DID's.

    Signed-off-by: Jason Gaston
    Signed-off-by: Greg Kroah-Hartman

    Jason Gaston
     
  • Fix warnings when CONFIG_PCIEAER=n:

    drivers/pci/pcie/portdrv_pci.c:105: warning: statement with no effect
    drivers/pci/pcie/portdrv_pci.c:226: warning: statement with no effect
    drivers/scsi/arcmsr/arcmsr_hba.c:352: warning: statement with no effect

    Signed-off-by: Randy Dunlap
    Acked-by: Linas Vepstas
    Signed-off-by: Greg Kroah-Hartman

    Randy Dunlap
     
  • So I've had a deadlock reported to me. I've found that the sequence of
    events goes like this:

    1) process A (modprobe) runs to remove ip_tables.ko

    2) process B (iptables-restore) runs and calls setsockopt on a netfilter socket,
    increasing the ip_tables socket_ops use count

    3) process A acquires a file lock on the file ip_tables.ko, calls remove_module
    in the kernel, which in turn executes the ip_tables module cleanup routine,
    which calls nf_unregister_sockopt

    4) nf_unregister_sockopt, seeing that the use count is non-zero, puts the
    calling process into uninterruptible sleep, expecting the process using the
    socket option code to wake it up when it exits the kernel

    4) the user of the socket option code (process B) in do_ipt_get_ctl, calls
    ipt_find_table_lock, which in this case calls request_module to load
    ip_tables_nat.ko

    5) request_module forks a copy of modprobe (process C) to load the module and
    blocks until modprobe exits.

    6) Process C. forked by request_module process the dependencies of
    ip_tables_nat.ko, of which ip_tables.ko is one.

    7) Process C attempts to lock the request module and all its dependencies, it
    blocks when it attempts to lock ip_tables.ko (which was previously locked in
    step 3)

    Theres not really any great permanent solution to this that I can see, but I've
    developed a two part solution that corrects the problem

    Part 1) Modifies the nf_sockopt registration code so that, instead of using a
    use counter internal to the nf_sockopt_ops structure, we instead use a pointer
    to the registering modules owner to do module reference counting when nf_sockopt
    calls a modules set/get routine. This prevents the deadlock by preventing set 4
    from happening.

    Part 2) Enhances the modprobe utilty so that by default it preforms non-blocking
    remove operations (the same way rmmod does), and add an option to explicity
    request blocking operation. So if you select blocking operation in modprobe you
    can still cause the above deadlock, but only if you explicity try (and since
    root can do any old stupid thing it would like.... :) ).

    Signed-off-by: Neil Horman
    Signed-off-by: Patrick McHardy
    Signed-off-by: David S. Miller

    Neil Horman
     
  • Signed-off-by: Joseph Chan
    Signed-off-by: Jeff Garzik

    Joseph Chan
     

05 Sep, 2007

1 commit


01 Sep, 2007

3 commits

  • Ryusuke Konishi says:

    The recent truncate_complete_page() clears the dirty flag from a page
    before calling a_ops->invalidatepage(),
    ^^^^^^
    static void
    truncate_complete_page(struct address_space *mapping, struct page *page)
    {
    ...
    cancel_dirty_page(page, PAGE_CACHE_SIZE); will call
    a_ops->invalidatepage()
    ...
    }

    and this is disturbing nfs_wb_page_priority() from calling
    nfs_writepage_locked() that is expected to handle the pending
    request (=nfs_page) associated with the page.

    int nfs_wb_page_priority(struct inode *inode, struct page *page, int how)
    {
    ...
    if (clear_page_dirty_for_io(page)) {
    ret = nfs_writepage_locked(page, &wbc);
    if (ret < 0)
    goto out;
    }
    ...
    }

    Since truncate_complete_page() will get rid of the page after
    a_ops->invalidatepage() returns, the request (=nfs_page) associated
    with the page becomes a garbage in nfs_inode->nfs_page_tree.
    ------------------------

    Fix this by ensuring that nfs_wb_page_priority() recognises that it may
    also need to clear out non-dirty pages that have an nfs_page associated
    with them.

    Signed-off-by: Trond Myklebust

    Trond Myklebust
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/mingo/linux-2.6-sched:
    sched: clean up task_new_fair()
    sched: small schedstat fix
    sched: fix wait_start_fair condition in update_stats_wait_end()
    sched: call update_curr() in task_tick_fair()
    sched: make the scheduler converge to the ideal latency
    sched: fix sleeper bonus limit

    Linus Torvalds
     
  • * 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev:
    [libata] Bump driver versions
    ata_piix: implement IOCFG bit18 quirk
    libata: implement BROKEN_HPA horkage and apply it to affected drives
    sata_promise: FastTrack TX4200 is a second-generation chip
    pata_marvell: Add more identifiers
    ata_piix: add Satellite U200 to broken suspend list
    ata: add ATA_MWDMA* and ATA_SWDMA* defines
    ata_piix: IDE mode SATA patch for Intel Tolapai
    libata-core: Allow translation setting to fail

    Linus Torvalds
     

31 Aug, 2007

2 commits

  • For hugepage mappings, the file offset, like the address and size, needs to
    be aligned to the size of a hugepage.

    In commit 68589bc353037f233fe510ad9ff432338c95db66, the check for this was
    moved into prepare_hugepage_range() along with the address and size checks.
    But since BenH's rework of the get_unmapped_area() paths leading up to
    commit 4b1d89290b62bb2db476c94c82cf7442aab440c8, prepare_hugepage_range()
    is only called for MAP_FIXED mappings, not for other mappings. This means
    we're no longer ever checking for an aligned offset - I've confirmed that
    mmap() will (apparently) succeed with a misaligned offset on both powerpc
    and i386 at least.

    This patch restores the check, removing it from prepare_hugepage_range()
    and putting it back into hugetlbfs_file_mmap(). I'm putting it there,
    rather than in the get_unmapped_area() path so it only needs to go in one
    place, than separately in the half-dozen or so arch-specific
    implementations of hugetlb_get_unmapped_area().

    Signed-off-by: David Gibson
    Cc: Adam Litke
    Cc: Andi Kleen
    Cc: "David S. Miller"
    Cc: Benjamin Herrenschmidt
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Gibson
     
  • We find that SB700 and SB800 use the same SMBus device ID as SB600, which is
    0x4385, instead of the already submitted 0x4395.

    Besides removing the wrong SB700 device ID, add SB800 support to kernel, by
    renaming the PCI_DEVICE_ID_ATI_IXP600_SMBUS into
    PCI_DEVICE_ID_ATI_SBX00_SMBUS.

    Signed-off-by: Shane Huang
    Signed-off-by: Jean Delvare
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Shane Huang