1. 19 2月, 2012 5 次提交
    • J
      [SCSI] lpfc 8.3.29: BSG and User interface fixes · 3ef6d24c
      James Smart 提交于
      BSG and User interface fixes:
      
      - Fix driver processing an els command using 16Gb FC Adapter (126345)
      - Change SLI4 FC port internal loopback to inner internal (126409)
      - Fix bug with driver dump command type 4 using 16Gb FC Adapter (126406)
      - Create character device to take a reference on the driver (126082)
      Signed-off-by: NAlex Iannicelli <alex.iannicelli@emulex.com>
      Signed-off-by: NJames Smart <james.smart@emulex.com>
      Signed-off-by: NJames Bottomley <JBottomley@Parallels.com>
      3ef6d24c
    • M
      [SCSI] pm8001: deficient responses to IO_XFER_ERROR_BREAK and IO_XFER_OPEN_RETRY_TIMEOUT · 5954d738
      Mark Salyzyn 提交于
      IO_XFER_ERROR_BREAK and IO_XFER_OPEN_RETRY_TIMEOUT are deficient of the
      required actions as outlined in the programming manual for the pm8001. Due to
      the overlapping code requirements of these recovery responses, we found it
      necessary to bundle them together into one patch.
      
      When a break is received during the command phase (ssp_completion), this is a
      result of a timeout or interruption on the bus. Logic suggests that we should
      retry the command.
      
      When a break is received during the data-phase (ssp_event), the task must be
      aborted on the target or it will retain a data-phase lock turning the target
      reticent to all future media commands yet will successfully respond to TUR,
      INQUIRY and ABORT leading eventually to target failure through several
      abort-cycle loops.
      
      The open retry interval is exceedingly short resulting in occasional target
      drop-off during expander resets or when targets push-back during bad-block
      remapping. Increased effective timeout from 130ms to 1.5 seconds for each try
      so as to trigger after the administrative inquiry/tur timeout in the scsi
      subsystem to keep error-recovery harmonics to a minimum.
      
      When an open retry timeout event is received, the action required by the
      targets is to issue an abort for the outstanding command then logic suggests
      we retry the command as this state is usually an indication of a credit block
      or busy condition on the target.
      
      We hijacked the pm8001_handle_event work queue handler so that it will handle
      task as an argument instead of device for the workers in support of the
      deferred handling outlined above.
      
      Moderate to Heavy bad-path testing on a 2.6.32 vintage kernel, compile-testing
      on scsi-misc-2.6 kernel ...
      Signed-off-by: NMark Salyzyn <mark_salyzyn@xyratex.com>
      Acked-by: NJack Wang <jack_wang@usish.com>
      Signed-off-by: NJames Bottomley <JBottomley@Parallels.com>
      5954d738
    • M
      [SCSI] pm8001: Add FUNC_GET_EVENTS · d95d0001
      Mark Salyzyn 提交于
      Jack noticed I dropped a patch fragment associated with a flags automatic
      variable in mpi_set_phys_g3_with_ssc (ooops) and that the pre-emptive locking
      that piggy-backed this patch was not in-fact necessary because of underlying
      atomic accesses to the hardware. Here is the updated patch fixing these two
      issues.
      
      The pm8001 driver is missing the FUNC_GET_EVENTS handler in the phy control
      function. Since the pm8001_bar4_shift function was not designed to be called
      at runtime, added locking surrounding the adjustment for all accesses.
      Signed-off-by: NMark Salyzyn <mark_salyzyn@xyratex.com>
      Acked-by: NJack Wang <jack_wang@usish.com>
      Signed-off-by: NJames Bottomley <JBottomley@Parallels.com>
      d95d0001
    • M
      [SCSI] pm8001: fix lockup on phy_control hard reset. · 5c4fb76a
      Mark Salyzyn 提交于
      pm8001_phy_control PHY_FUNC_HARD_RESET locks up on second try via
      smp_phy_control because response HW_EVENT_PHY_START_STATUS fails to complete
      previous command. The PM8001F_RUN_TIME flag is not treated as a bit, but a
      state in all readers, yet once we are operational or in the run time state,
      the flags use a bit-set operation.
      Signed-off-by: NMark Salyzyn <mark_salyzyn@xyratex.com>
      Acked-by: NJack Wang <jack_wang@usish.com>
      Signed-off-by: NJames Bottomley <JBottomley@Parallels.com>
      5c4fb76a
    • O
      [SCSI] st: implement PM · 46a243f7
      Oliver Neukum 提交于
      This implements basic power management for SCSI tapes.
      Signed-off-by: NOliver Neukum <oneukum@suse.de>
      Acked-by: NKai Mäkisara <kai.makisara@kolumbus.fi>
      Signed-off-by: NJames Bottomley <JBottomley@Parallels.com>
      46a243f7
  2. 18 2月, 2012 15 次提交
  3. 13 2月, 2012 1 次提交
  4. 10 2月, 2012 6 次提交
  5. 09 2月, 2012 13 次提交
    • J
      ixgbe: ethtool: stats user buffer overrun · 9cc00b51
      John Fastabend 提交于
      If the number of tx/rx queues changes the ethtool ioctl
      ETHTOOL_GSTATS may overrun the userspace buffer. This
      occurs because the general practice in user space to
      query stats is to issue a ETHTOOL_GSSET cmd to learn the
      buffer size needed, allocate the buffer, then call
      ETHTOOL_GSTIRNGS and ETHTOOL_GSTATS. If the number of
      real_num_queues is changed or flow control attributes
      are changed after ETHTOOL_GSSET but before the
      ETHTOOL_GSTRINGS/ETHTOOL_GSTATS a user space buffer
      overrun occurs.
      
      To fix the overrun always return the max buffer size
      needed from get_sset_count() then return all strings
      and stats from get_strings()/get_ethtool_stats().
      
      This _will_ change the output from the ioctl() call
      which could break applications and script parsing in
      theory. I believe these changes should not break existing
      tools because the only changes will be more {tx|rx}_queues
      and the {tx|rx}_pb_* stats will always be returned.
      Existing scripts already need to handle changing number
      of queues because this occurs today depending on system
      and current features. The {tx|rx}_pb_* stats are at the
      end of the output and should be handled by scripts today
      regardless.
      
      Finally get_ethtool_stats and get_strings are free-form
      outputs tools parsing these outputs should be defensive
      anyways. In the end these updates are better then
      having a tool segfault because of a buffer overrun.
      Signed-off-by: NJohn Fastabend <john.r.fastabend@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      9cc00b51
    • J
      ixgbe: dcb: up2tc mapping lost on disable/enable CEE DCB state · 5facb8e0
      John Fastabend 提交于
      Users expect the up2tc mapping to be maintained across a DCB
      enable/disable/enable transition. And since we maintain all
      the other DCB attributes we should do this for up2tc mappings
      as well just to be consistent. Also without this we break
      user space applications that expect this to occur that
      previously worked.
      Signed-off-by: NJohn Fastabend <john.r.fastabend@intel.com>
      Tested-by: NStephen Ko <stephen.s.ko@intel.com>
      Tested-by: NRoss Brattain <ross.b.brattain@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      5facb8e0
    • Y
      ixgbe: do not update real num queues when netdev is going away · 9d837ea2
      Yi Zou 提交于
      If the netdev is already in NETREG_UNREGISTERING/_UNREGISTERED state, do not
      update the real num tx queues. netdev_queue_update_kobjects() is already
      called via remove_queue_kobjects() at NETREG_UNREGISTERING time. So, when
      upper layer driver, e.g., FCoE protocol stack is monitoring the netdev
      event of NETDEV_UNREGISTER and calls back to LLD ndo_fcoe_disable() to remove
      extra queues allocated for FCoE, the associated txq sysfs kobjects are already
      removed, and trying to update the real num queues would cause something like
      below:
      
      ...
      PID: 25138  TASK: ffff88021e64c440  CPU: 3   COMMAND: "kworker/3:3"
       #0 [ffff88021f007760] machine_kexec at ffffffff810226d9
       #1 [ffff88021f0077d0] crash_kexec at ffffffff81089d2d
       #2 [ffff88021f0078a0] oops_end at ffffffff813bca78
       #3 [ffff88021f0078d0] no_context at ffffffff81029e72
       #4 [ffff88021f007920] __bad_area_nosemaphore at ffffffff8102a155
       #5 [ffff88021f0079f0] bad_area_nosemaphore at ffffffff8102a23e
       #6 [ffff88021f007a00] do_page_fault at ffffffff813bf32e
       #7 [ffff88021f007b10] page_fault at ffffffff813bc045
          [exception RIP: sysfs_find_dirent+17]
          RIP: ffffffff81178611  RSP: ffff88021f007bc0  RFLAGS: 00010246
          RAX: ffff88021e64c440  RBX: ffffffff8156cc63  RCX: 0000000000000004
          RDX: ffffffff8156cc63  RSI: 0000000000000000  RDI: 0000000000000000
          RBP: ffff88021f007be0   R8: 0000000000000004   R9: 0000000000000008
          R10: ffffffff816fed00  R11: 0000000000000004  R12: 0000000000000000
          R13: ffffffff8156cc63  R14: 0000000000000000  R15: ffff8802222a0000
          ORIG_RAX: ffffffffffffffff  CS: 0010  SS: 0018
       #8 [ffff88021f007be8] sysfs_get_dirent at ffffffff81178c07
       #9 [ffff88021f007c18] sysfs_remove_group at ffffffff8117ac27
      #10 [ffff88021f007c48] netdev_queue_update_kobjects at ffffffff813178f9
      #11 [ffff88021f007c88] netif_set_real_num_tx_queues at ffffffff81303e38
      #12 [ffff88021f007cc8] ixgbe_set_num_queues at ffffffffa0249763 [ixgbe]
      #13 [ffff88021f007cf8] ixgbe_init_interrupt_scheme at ffffffffa024ea89 [ixgbe]
      #14 [ffff88021f007d48] ixgbe_fcoe_disable at ffffffffa0267113 [ixgbe]
      #15 [ffff88021f007d68] vlan_dev_fcoe_disable at ffffffffa014fef5 [8021q]
      #16 [ffff88021f007d78] fcoe_interface_cleanup at ffffffffa02b7dfd [fcoe]
      #17 [ffff88021f007df8] fcoe_destroy_work at ffffffffa02b7f08 [fcoe]
      #18 [ffff88021f007e18] process_one_work at ffffffff8105d7ca
      #19 [ffff88021f007e68] worker_thread at ffffffff81060513
      #20 [ffff88021f007ee8] kthread at ffffffff810648b6
      #21 [ffff88021f007f48] kernel_thread_helper at ffffffff813c40f4
      Signed-off-by: NYi Zou <yi.zou@intel.com>
      Tested-by: NRoss Brattain <ross.b.brattain@intel.com>
      Tested-by: NStephen Ko <stephen.s.ko@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      9d837ea2
    • A
      ixgbe: Fix broken dependency on MAX_SKB_FRAGS being related to page size · 642c680e
      Alexander Duyck 提交于
      This patch fixes an issue in which RSC will generate corrupted frames when
      PAGE_SIZE is larger than 8K.  Specifically it looks like that in 2.6.39 a
      change was made so that GRO would always have at least 16 frags available
      for coalescing, but the ixgbe RSC logic was not updated.  As such the RSC
      feature would generate a frame larger than 64K and then overflow the value
      in the IP length field.
      
      To correct that I am now basing things on the PAGE_SIZE.
      Signed-off-by: NAlexander Duyck <alexander.h.duyck@intel.com>
      Tested-by: NStephen Ko <stephen.s.ko@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      642c680e
    • G
      ixgbe: Fix case of Tx Hang in PF with 32 VFs · 4cd6923d
      Greg Rose 提交于
      A check for the number of VFs allocated should have used a greater than
      equal operator instead of just greater than.  This caused allocation of
      exactly 32 VFs to not enable the PF transmit and receive enables.
      Signed-off-by: NGreg Rose <gregory.v.rose@intel.com>
      Tested-by: NRobert E Garrett <robertX.e.garrett@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      4cd6923d
    • G
      ixgbe: fix vf lookup · a4b08329
      Greg Rose 提交于
      Recent addition of code to find already allocated VFs failed to take
      account that systems with 2 or more multi-port SR-IOV capable controllers
      might have already enabled VFs.  Make sure that the VFs the function is
      finding are actually subordinate to the particular instance of the adapter
      that is looking for them and not subordinate to some device that has
      previously enabled SR-IOV.
      
      This bug exists in 3.2 stable as well as 3.3 release candidates.
      
      CC: stable@vger.kernel.org
      Reported-by: NDavid Ahern <daahern@cisco.com>
      Signed-off-by: NGreg Rose <gregory.v.rose@intel.com>
      Tested-by: NRobert E Garrett <robertX.e.garrett@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      a4b08329
    • G
      igb: fix vf lookup · 06292921
      Greg Rose 提交于
      Recent addition of code to find already allocated VFs failed to take
      account that systems with 2 or more multi-port SR-IOV capable controllers
      might have already enabled VFs.  Make sure that the VFs the function is
      finding are actually subordinate to the particular instance of the adapter
      that is looking for them and not subordinate to some device that has
      previously enabled SR-IOV.
      
      This is applicable to 3.2+ kernels.
      
      CC: stable@vger.kernel.org
      Reported-by: NDavid Ahern <daahern@cisco.com>
      Signed-off-by: NGreg Rose <gregory.v.rose@intel.com>
      Tested-by: NRobert E Garrett <robertX.e.garrett@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      06292921
    • D
      e1000: add dropped DMA receive enable back in for WoL · b868179c
      Dean Nelson 提交于
      Commit d5bc77a2 broke Wake-on-LAN by
      inadvertently dropping the enabling of DMA receives.
      
      Restore the enabling of DMA receives for WoL.
      
      This is applicable to 3.1+ stable trees.
      
      CC: stable@vger.stable.org
      Reported-by: NTobias Klausmann <klausman@schwarzvogel.de>
      Signed-off-by: NDean Nelson <dnelson@redhat.com>
      Tested-by: NTobias Klausmann <klausman@schwarzvogel.de>
      Tested-by: NAaron Brown <aaron.f.brown@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      b868179c
    • N
      hwmon: (f75375s) Fix bit shifting in f75375_write16 · eb2f255b
      Nikolaus Schulz 提交于
      In order to extract the high byte of the 16-bit word, shift the word to
      the right, not to the left.
      Signed-off-by: NNikolaus Schulz <mail@microschulz.de>
      Cc: stable@kernel.org # 2.6.32+
      Signed-off-by: NGuenter Roeck <guenter.roeck@ericsson.com>
      eb2f255b
    • N
      hwmon: (f75375s) Fix reading of wrong register when initializing the F75387 · a367a1e0
      Nikolaus Schulz 提交于
      Unlike the other chips supported by this driver, the F75387 stores the
      pwm_mode in register F75375_REG_FAN_TIMER, not F75375_REG_CONFIG1.
      Signed-off-by: NNikolaus Schulz <mail@microschulz.de>
      Signed-off-by: NGuenter Roeck <guenter.roeck@ericsson.com>
      a367a1e0
    • N
      hwmon: (f75375s) Fix automatic pwm mode setting for F75373 & F75375 · 09e87e5c
      Nikolaus Schulz 提交于
      In order to enable temperature mode aka automatic mode for the F75373 and
      F75375 chips, the two FANx_MODE bits in the fan configuration register
      need be set to 01, not 10.
      Signed-off-by: NNikolaus Schulz <mail@microschulz.de>
      Cc: stable@kernel.org # 2.6.32+
      Signed-off-by: NGuenter Roeck <guenter.roeck@ericsson.com>
      09e87e5c
    • G
      hwmon: (w83627ehf) Remove duplicate code · eb564e1d
      Guenter Roeck 提交于
      Commit ec3e5a16 slipped in some duplicate code.
      Remove it.
      Signed-off-by: NGuenter Roeck <guenter.roeck@ericsson.com>
      Acked-by: NJean Delvare <khali@linux-fr.org>
      eb564e1d
    • R
      pcmcia: fix socket refcount decrementing on each resume · 025e4ab3
      Russell King 提交于
      This fixes a memory-corrupting bug: not only does it cause the warning,
      but as a result of dropping the refcount to zero, it causes the
      pcmcia_socket0 device structure to be freed while it still has
      references, causing slab caches corruption.  A fatal oops quickly
      follows this warning - often even just a 'dmesg' following the warning
      causes the kernel to oops.
      
      While testing suspend/resume on an ARM device with PCMCIA support, and a
      CF card inserted, I found that after five suspend and resumes, the
      kernel would complain, and shortly die after with slab corruption.
      
        WARNING: at include/linux/kref.h:41 kobject_get+0x28/0x50()
      
      As the message doesn't give a clue about which kobject, and the built-in
      debugging in drivers/base/power/main.c happens too late, this was added
      right before each get_device():
      
        printk("%s: %p [%s] %u\n", __func__, dev, kobject_name(&dev->kobj), atomic_read(&dev->kobj.kref.refcount));
      
      and on the 3rd s2ram cycle, the following behaviour observed:
      
      On the 3rd suspend/resume cycle:
      
        dpm_prepare: c1a0d998 [pcmcia_socket0] 3
        dpm_suspend: c1a0d998 [pcmcia_socket0] 3
        dpm_suspend_noirq: c1a0d998 [pcmcia_socket0] 3
        dpm_resume_noirq: c1a0d998 [pcmcia_socket0] 3
        dpm_resume: c1a0d998 [pcmcia_socket0] 3
        dpm_complete: c1a0d998 [pcmcia_socket0] 2
      
      4th:
      
        dpm_prepare: c1a0d998 [pcmcia_socket0] 2
        dpm_suspend: c1a0d998 [pcmcia_socket0] 2
        dpm_suspend_noirq: c1a0d998 [pcmcia_socket0] 2
        dpm_resume_noirq: c1a0d998 [pcmcia_socket0] 2
        dpm_resume: c1a0d998 [pcmcia_socket0] 2
        dpm_complete: c1a0d998 [pcmcia_socket0] 1
      
      5th:
      
        dpm_prepare: c1a0d998 [pcmcia_socket0] 1
        dpm_suspend: c1a0d998 [pcmcia_socket0] 1
        dpm_suspend_noirq: c1a0d998 [pcmcia_socket0] 1
        dpm_resume_noirq: c1a0d998 [pcmcia_socket0] 1
        dpm_resume: c1a0d998 [pcmcia_socket0] 1
        dpm_complete: c1a0d998 [pcmcia_socket0] 0
        ------------[ cut here ]------------
        WARNING: at include/linux/kref.h:41 kobject_get+0x28/0x50()
        Modules linked in: ucb1x00_core
        Backtrace:
        [<c0212090>] (dump_backtrace+0x0/0x110) from [<c04799dc>] (dump_stack+0x18/0x1c)
        [<c04799c4>] (dump_stack+0x0/0x1c) from [<c021cba0>] (warn_slowpath_common+0x50/0x68)
        [<c021cb50>] (warn_slowpath_common+0x0/0x68) from [<c021cbdc>] (warn_slowpath_null+0x24/0x28)
        [<c021cbb8>] (warn_slowpath_null+0x0/0x28) from [<c0335374>] (kobject_get+0x28/0x50)
        [<c033534c>] (kobject_get+0x0/0x50) from [<c03804f4>] (get_device+0x1c/0x24)
        [<c0388c90>] (dpm_complete+0x0/0x1a0) from [<c0389cc0>] (dpm_resume_end+0x1c/0x20)
        ...
      
      Looking at commit 7b24e798 ("pcmcia: split up central event handler"),
      the following change was made to cs.c:
      
                      return 0;
              }
       #endif
      -
      -       send_event(skt, CS_EVENT_PM_RESUME, CS_EVENT_PRI_LOW);
      +       if (!(skt->state & SOCKET_CARDBUS) && (skt->callback))
      +               skt->callback->early_resume(skt);
              return 0;
       }
      
      And the corresponding change in ds.c is from:
      
      -static int ds_event(struct pcmcia_socket *skt, event_t event, int priority)
      -{
      -       struct pcmcia_socket *s = pcmcia_get_socket(skt);
      ...
      -       switch (event) {
      ...
      -       case CS_EVENT_PM_RESUME:
      -               if (verify_cis_cache(skt) != 0) {
      -                       dev_dbg(&skt->dev, "cis mismatch - different card\n");
      -                       /* first, remove the card */
      -                       ds_event(skt, CS_EVENT_CARD_REMOVAL, CS_EVENT_PRI_HIGH);
      -                       mutex_lock(&s->ops_mutex);
      -                       destroy_cis_cache(skt);
      -                       kfree(skt->fake_cis);
      -                       skt->fake_cis = NULL;
      -                       s->functions = 0;
      -                       mutex_unlock(&s->ops_mutex);
      -                       /* now, add the new card */
      -                       ds_event(skt, CS_EVENT_CARD_INSERTION,
      -                                CS_EVENT_PRI_LOW);
      -               }
      -               break;
      ...
      -    }
      
      -    pcmcia_put_socket(s);
      
      -    return 0;
      -} /* ds_event */
      
      to:
      
      +static int pcmcia_bus_early_resume(struct pcmcia_socket *skt)
      +{
      +       if (!verify_cis_cache(skt)) {
      +               pcmcia_put_socket(skt);
      +               return 0;
      +       }
      
      +       dev_dbg(&skt->dev, "cis mismatch - different card\n");
      
      +       /* first, remove the card */
      +       pcmcia_bus_remove(skt);
      +       mutex_lock(&skt->ops_mutex);
      +       destroy_cis_cache(skt);
      +       kfree(skt->fake_cis);
      +       skt->fake_cis = NULL;
      +       skt->functions = 0;
      +       mutex_unlock(&skt->ops_mutex);
      
      +       /* now, add the new card */
      +       pcmcia_bus_add(skt);
      +       return 0;
      +}
      
      As can be seen, the original function called pcmcia_get_socket() and
      pcmcia_put_socket() around the guts, whereas the replacement code
      calls pcmcia_put_socket() only in one path.  This creates an imbalance
      in the refcounting.
      
      Testing with pcmcia_put_socket() put removed shows that the bug is gone:
      
        dpm_suspend: c1a10998 [pcmcia_socket0] 5
        dpm_suspend_noirq: c1a10998 [pcmcia_socket0] 5
        dpm_resume_noirq: c1a10998 [pcmcia_socket0] 5
        dpm_resume: c1a10998 [pcmcia_socket0] 5
        dpm_complete: c1a10998 [pcmcia_socket0] 5
      Tested-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      Cc: Dominik Brodowski <linux@dominikbrodowski.net>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      025e4ab3