1. 18 3月, 2008 11 次提交
  2. 17 3月, 2008 15 次提交
    • J
      c40e7cb8
    • T
      pata_ali: use atapi_cmd_type() to determine cmd type instead of transfer size · 4a38e733
      Tejun Heo 提交于
      pata_ali was using qc->nbytes to determine whether a command is
      data transfer type or not.  As now qc->nbytes can be extended by
      padding and draining buffers, these tests are not useful anymore.
      
      Use atapi_cmd_type() instead.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
      Cc: Rafael J. Wysocki <rjw@sisk.pl>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      4a38e733
    • T
      ahci: implement skip_host_reset parameter · a22e6444
      Tejun Heo 提交于
      Under certain circumstances (SSP turned off by the BIOS) and for
      debugging purposes, skipping global controller reset is helpful.  Add
      a kernel parameter for it.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      a22e6444
    • T
      ahci: request all PCI BARs · dea55137
      Tejun Heo 提交于
      ahci is often implemented with accompanying SFF compatible interface
      and legacy IDE driver may attach to the legacy IO ports when the
      controller is already claimed by ahci and vice-versa.  This patch
      makes ahci use pcim_iomap_regions_request_all() so that all IO regions
      are claimed on attach.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      dea55137
    • T
      libata-acpi: improve dock event handling · 233f1120
      Tejun Heo 提交于
      Improve ACPI hotplug handling such that dock event is handled properly.
      
      * Register handlers for dock events.
      
      * Directly detach device on EJECT_REQUEST instead of signaling hotplug
        event.  This prevents libata from accessing severed controller
        and/or device.
      
      * While at it, use named constants for ACPI events and move uevent
        signaling inside host lock.
      
      Original patch and testing by Holger Macht.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Cc: Holger Macht <hmacht@suse.de>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      233f1120
    • C
      virtio: fix race in enable_cb · 4265f161
      Christian Borntraeger 提交于
      There is a race in virtio_net, dealing with disabling/enabling the callback.
      I saw the following oops:
      
      kernel BUG at /space/kvm/drivers/virtio/virtio_ring.c:218!
      illegal operation: 0001 [#1] SMP
      Modules linked in: sunrpc dm_mod
      CPU: 2 Not tainted 2.6.25-rc1zlive-host-10623-gd358142-dirty #99
      Process swapper (pid: 0, task: 000000000f85a610, ksp: 000000000f873c60)
      Krnl PSW : 0404300180000000 00000000002b81a6 (vring_disable_cb+0x16/0x20)
                 R:0 T:1 IO:0 EX:0 Key:0 M:1 W:0 P:0 AS:0 CC:3 PM:0 EA:3
      Krnl GPRS: 0000000000000001 0000000000000001 0000000010005800 0000000000000001
                 000000000f3a0900 000000000f85a610 0000000000000000 0000000000000000
                 0000000000000000 000000000f870000 0000000000000000 0000000000001237
                 000000000f3a0920 000000000010ff74 00000000002846f6 000000000fa0bcd8
      Krnl Code: 00000000002b819a: a7110001           tmll    %r1,1
                 00000000002b819e: a7840004           brc     8,2b81a6
                 00000000002b81a2: a7f40001           brc     15,2b81a4
                >00000000002b81a6: a51b0001           oill    %r1,1
                 00000000002b81aa: 40102000           sth     %r1,0(%r2)
                 00000000002b81ae: 07fe               bcr     15,%r14
                 00000000002b81b0: eb7ff0380024       stmg    %r7,%r15,56(%r15)
                 00000000002b81b6: a7f13e00           tmll    %r15,15872
      Call Trace:
      ([<000000000fa0bcd0>] 0xfa0bcd0)
       [<00000000002b8350>] vring_interrupt+0x5c/0x6c
       [<000000000010ab08>] do_extint+0xb8/0xf0
       [<0000000000110716>] ext_no_vtime+0x16/0x1a
       [<0000000000107e72>] cpu_idle+0x1c2/0x1e0
      
      The problem can be triggered with a high amount of host->guest traffic.
      I think its the following race:
      
      poll says netif_rx_complete
      poll calls enable_cb
      enable_cb opens the interrupt mask
      a new packet comes, an interrupt is triggered----\
      enable_cb sees that there is more work           |
      enable_cb disables the interrupt                 |
             .                                         V
             .                            interrupt is delivered
             .                            skb_recv_done does atomic napi test, ok
       some waiting                       disable_cb is called->check fails->bang!
             .
      poll would do napi check
      poll would do disable_cb
      
      The fix is to let enable_cb not disable the interrupt again, but expect the
      caller to do the cleanup if it returns false. In that case, the interrupt is
      only disabled, if the napi test_set_bit was successful.
      Signed-off-by: NChristian Borntraeger <borntraeger@de.ibm.com>
      Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (cleaned up doco)
      4265f161
    • A
      virtio: Enable netpoll interface for netconsole logging · da74e89d
      Amit Shah 提交于
      Add a new poll_controller handler that the netpoll interface needs.
      
      This enables netconsole logging from a kvm guest over the virtio
      net interface.
      Signed-off-by: NAmit Shah <amitshah@gmx.net>
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      da74e89d
    • R
      virtio: handle > 2 billion page balloon targets · bdc1681c
      Rusty Russell 提交于
      If the host asks for a huge target towards_target() can overflow, and
      we up oops as we try to release more pages than we have.  The simple
      fix is to use a 64-bit value.
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      bdc1681c
    • J
      virtio: Fix sysfs bits to have proper block symlink · c4839346
      Jeremy Katz 提交于
      Fix up so that the virtio_blk devices in sysfs link correctly to their
      block device.  This then allows them to be detected by hal, etc
      Signed-off-by: NJeremy Katz <katzj@redhat.com>
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      c4839346
    • A
      virtio: Use spin_lock_irqsave/restore for virtio-pci · 27ebe308
      Anthony Liguori 提交于
      virtio-pci acquires its spin lock in an interrupt context so it's necessary
      to use spin_lock_irqsave/restore variants.  This patch fixes guest SMP when
      using virtio devices in KVM.
      Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      27ebe308
    • A
      The ps2esdi driver was marked as BROKEN more than two years ago due to being · 2af3e601
      Adrian Bunk 提交于
      no longer working for some time.
      
      A driver that had been marked as BROKEN for such a long time seems to be
      unlikely to be revived in the forseeable future.
      
      But if anyone wants to ever revive this driver, the code is still present in
      the older kernel releases.
      Signed-off-by: NAdrian Bunk <bunk@kernel.org>
      Acked-by: NAlan Cox <alan@redhat.com>
      Cc: Jens Axboe <jens.axboe@oracle.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      2af3e601
    • D
      drm/ati_pcigart: fix the PCIGART to use drm_pci to allocate GART table. · b05c2385
      Dave Airlie 提交于
      This fixes a problem on 64-bit with 4GB with ATI RS690 chipsets. It
      makes sure the pcigart table is allocated in coherent memory for DMA operations.
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      b05c2385
    • A
      drm/radeon: fixup RV550 chip family · 16d3be46
      Alex Deucher 提交于
      This fixes up the RV550 chips which are based on RV515, not RV530.
      It also adds another RS690 PCI ID.
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      16d3be46
    • T
      drm/via: attempt again to stabilise the AGP DMA command submission. · f0fb6d77
      Thomas Hellstrom 提交于
      It's worth remembering that all new bright ideas on how to make this command reader work properly and according to docs will probably fail :( Bring in some old code.
      
      Also allow a larger SG-DMA download stride, and remove unnecessary waits for
      command regulators pauses.
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      f0fb6d77
    • M
      drm: Fix race that can lockup the kernel · 9df5808c
      Mike Isely 提交于
      The i915_vblank_swap() function schedules an automatic buffer swap
      upon receipt of the vertical sync interrupt.  Such an operation is
      lengthy so it can't be allowed to happen in normal interrupt context,
      thus the DRM implements this by scheduling the work in a kernel
      softirq-scheduled tasklet.  In order for the buffer swap to work
      safely, the DRM's central lock must be taken, via a call to
      drm_lock_take() located in drivers/char/drm/drm_irq.c within the
      function drm_locked_tasklet_func().  The lock-taking logic uses a
      non-interrupt-blocking spinlock to implement the manipulations needed
      to take the lock.  This semantic would be safe if all attempts to use
      the spinlock only happen from process context.  However this buffer
      swap happens from softirq context which is really a form of interrupt
      context.  Thus we have an unsafe situation, in that
      drm_locked_tasklet_func() can block on a spinlock already taken by a
      thread in process context which will never get scheduled again because
      of the blocked softirq tasklet.  This wedges the kernel hard.
      
      To trigger this bug, run a dual-head cloned mode configuration which
      uses the i915 drm, then execute an opengl application which
      synchronizes buffer swaps against the vertical sync interrupt.  In my
      testing, a lockup always results after running anywhere from 5 minutes
      to an hour and a half.  I believe dual-head is needed to really
      trigger the problem because then the vertical sync interrupt handling
      is no longer predictable (due to being interrupt-sourced from two
      different heads running at different speeds).  This raises the
      probability of the tasklet trying to run while the userspace DRI is
      doing things to the GPU (and manipulating the DRM lock).
      
      The fix is to change the relevant spinlock semantics to be the
      interrupt-blocking form.  After this change I am no longer able to
      trigger the lockup; the longest test run so far was 20 hours (test
      stopped after that point).
      
      Note: I have examined the places where this spinlock is being
      employed; all are reasonably short bounded sequences and should be
      suitable for interrupts being blocked without impacting overall kernel
      interrupt response latency.
      Signed-off-by: NMike Isely <isely@pobox.com>
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      9df5808c
  3. 16 3月, 2008 4 次提交
  4. 14 3月, 2008 10 次提交