1. 22 Aug, 2011 20 commits
    • Roland Dreier's avatar
      target: Convert acl_node_lock to be IRQ-disabling · 28638887
      Roland Dreier authored
      With qla2xxx, acl_node_lock is taken inside qla2xxx's hardware_lock,
      which is taken in hardirq context.  This means acl_node_lock must become
      an IRQ-disabling lock; in particular this fixes lockdep warnings along
      the lines of
      
          ======================================================
          [ INFO: HARDIRQ-safe -> HARDIRQ-unsafe lock order detected ]
      
           (&(&se_tpg->acl_node_lock)->rlock){+.....}, at: [<ffffffffa026f872>] transport_deregister_session+0x92/0x140 [target_core_mod]
      
          and this task is already holding:
           (&(&ha->hardware_lock)->rlock){-.-...}, at: [<ffffffffa017c5e7>] qla_tgt_stop_phase1+0x57/0x2c0 [qla2xxx]
          which would create a new lock dependency:
           (&(&ha->hardware_lock)->rlock){-.-...} -> (&(&se_tpg->acl_node_lock)->rlock){+.....}
      
          but this new dependency connects a HARDIRQ-irq-safe lock:
           (&(&ha->hardware_lock)->rlock){-.-...}
      
          to a HARDIRQ-irq-unsafe lock:
           (&(&se_tpg->acl_node_lock)->rlock){+.....}
      Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
      Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
      28638887
    • Roland Dreier's avatar
      target: Make locking in transport_deregister_session() IRQ safe · e63a8e19
      Roland Dreier authored
      At least the tcm_qla2xxx fabric driver calls into transport_deregister_session()
      while holding an IRQ-disabled spinlock, so the inner locking needs to
      use spin_lock_irqsave() instead of spin_lock_bh().
      
      This fixes warnings seen with tcm_qla2xxx like:
      
          WARNING: at kernel/softirq.c:159 local_bh_enable_ip+0x98/0xb0()
          Call Trace:
           [<ffffffff8104e65f>] warn_slowpath_common+0x7f/0xc0
           [<ffffffff8104e6ba>] warn_slowpath_null+0x1a/0x20
           [<ffffffff81055368>] local_bh_enable_ip+0x98/0xb0
           [<ffffffff814d5284>] _raw_spin_unlock_bh+0x14/0x20
           [<ffffffffa027b7f6>] transport_deregister_session+0x96/0x180 [target_core_mod]
           [<ffffffffa00f7731>] tcm_qla2xxx_free_session+0xd1/0x170 [tcm_qla2xxx]
           [<ffffffffa01b9173>] qla_tgt_sess_put+0xc3/0x140 [qla2xxx]
           [<ffffffffa01bf40f>] qla_tgt_stop_phase1+0x8f/0x2c0 [qla2xxx]
           [<ffffffffa00f735e>] tcm_qla2xxx_tpg_store_enable+0x6e/0xd0 [tcm_qla2xxx]
           [<ffffffffa026ca29>] target_fabric_tpg_attr_store+0x39/0x40 [target_core_mod]
           [<ffffffffa00a575d>] configfs_write_file+0xbd/0x120 [configfs]
           [<ffffffff811464a6>] vfs_write+0xc6/0x180
           [<ffffffff811467c1>] sys_write+0x51/0x90
           [<ffffffff814dd382>] system_call_fastpath+0x16/0x1b
      Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
      Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
      e63a8e19
    • Roland Dreier's avatar
      tcm_fc: init/exit functions should not be protected by "#ifdef MODULE" · 4e0f0529
      Roland Dreier authored
      There's no need for the #ifdef protection when building into the kernel,
      and in fact we need the module_init() for the initialization function to
      be called.
      Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
      Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
      4e0f0529
    • Roland Dreier's avatar
      target: Print subpage too for unhandled MODE SENSE pages · f15ea578
      Roland Dreier authored
      Make a log message more useful by printing both the page and subpage
      that an initiator is requesting.
      Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
      Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
      f15ea578
    • Dan Carpenter's avatar
      iscsi-target: Fix iscsit_allocate_se_cmd_for_tmr failure path bugs · ba773669
      Dan Carpenter authored
      This patch fixes two bugs in allocation failure handling in
      iscsit_allocate_se_cmd_for_tmr():
      
      This first reported by DanC is a free-after call to transport_free_se_cmd(), this
      patch drops the transport_free_se_cmd() call all together, as iscsit_release_cmd()
      will release existing allocations as expected.
      
      The second is a bug where iscsi_cmd_t was being leaked on a cmd->tmr_req allocation
      failure, so make this jump to iscsit_release_cmd() as well.
      Signed-off-by: default avatarDan Carpenter <error27@gmail.com>
      Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
      ba773669
    • Chris Boot's avatar
      iscsi-target: Implement iSCSI target IPv6 address printing. · 6626a057
      Chris Boot authored
      The iSCSI target configfs code to print out an initiator's IPv6 address
      is not fully implemented. This patch uses snprintf() with the "%pI6c"
      format string to format the IPv6 address for display purposes.
      Signed-off-by: default avatarChris Boot <bootc@bootc.net>
      Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
      6626a057
    • Nicholas Bellinger's avatar
      target: Fix task SGL chaining breakage with transport_allocate_data_tasks · c3c74c7a
      Nicholas Bellinger authored
      This patch fixes two bugs associated with transport_do_task_sg_chain()
      operation where transport_allocate_data_tasks() was incorrectly setting
      task_padded_sg for all tasks, and causing bogus task->task_sg_nents
      assignments + OOPsen with fabrics depending upon this code.  The first bit
      here adds a task_sg_nents_padded check in transport_allocate_data_tasks()
      to include an extra SGL vector when necessary for tasks that expect to
      be linked using sg_chain().
      
      The second change involves making transport_do_task_sg_chain() properly
      account for the extra SGL vector when task->task_padded_sg is set for
      the non trailing ->task_sg or single ->task_sg allocations.  Note this
      patch also removes the BUG_ON(!task->task_padded_sg) check within
      transport_do_task_sg_chain() as we expect this to happen normally
      with the updated logic in transport_allocate_data_tasks(), along with
      being bogus for CONTROL_SG_IO_CDB type payloads.
      
      So far this bugfix has been tested with tcm_qla2xxx and iblock backends
      in (task_count > 1)( and (task_count == 1) operation.
      Reported-by: default avatarKiran Patil <kiran.patil@intel.com>
      Cc: Kiran Patil <kiran.patil@intel.com>
      Cc: Andy Grover <agrover@redhat.com>
      Cc: Christoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
      c3c74c7a
    • Nicholas Bellinger's avatar
      target: Fix task count > 1 handling breakage and use max_sector page alignment · 525a48a2
      Nicholas Bellinger authored
      This patch addresses recent breakage with multiple se_task (task_count > 1)
      operation following backend dev->se_sub_dev->se_dev_attrib.max_sectors in new
      transport_allocate_data_tasks() code.  The initial bug here was a bogus
      task->task_sg_nents assignment in transport_allocate_data_tasks() based on
      the passed parameter, which now uses DIV_ROUND_UP(task_size, PAGE_SIZE) to
      determine the proper number of per task SGL entries for the (task_count > 1)
      case.
      
      This also means we now need to enforce a PAGE_SIZE aligned max_sector count
      value for this to work as expected without bringing back the pre v3.1
      transport_map_mem_to_sg() logic to handle SGL offsets across multiple tasks.
      So this patch adds se_dev_align_max_sectors() to round down max_sectors as
      necessary to ensure this alignment via se_dev_set_default_attribs() and
      se_dev_align_max_sectors() and keeps it simple for (task_count > 1)
      operation.
      
      So far this bugfix has been tested with (task_count > 1) operation
      using iscsi-target and iblock backends.
      Reported-by: default avatarChris Boot <bootc@bootc.net>
      Cc: Kiran Patil <kiran.patil@intel.com>
      Cc: Andy Grover <agrover@redhat.com>
      Cc: Christoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
      525a48a2
    • Nicholas Bellinger's avatar
      target: Add missing DATA_SG_IO transport_cmd_get_valid_sectors check · 01cde4d5
      Nicholas Bellinger authored
      This patch adds the missing transport_cmd_get_valid_sectors() check for
      SCF_SCSI_DATA_SG_IO_CDB type payloads to ensure that a received LBA + range
      does not exeed past the end of associated backend struct se_device.
      
      This patch also fixes a bug in the failure path of transport_new_cmd_obj()
      where this check can fail, so change to use a signed 'rc' and return '-EINVAL'
      to signal proper transport_generic_request_failure() handling.
      Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
      01cde4d5
    • Nicholas Bellinger's avatar
      target: Fix SYNCHRONIZE_CACHE zero LBA + range breakage · 7abbe7f3
      Nicholas Bellinger authored
      This patch fixes a SYNCHRONIZE_CACHE CDB handling bug with IBLOCK/FILEIO
      backends where transport_cmd_get_valid_sectors() was incorrectly rejecting
      a zero LBA + range CDB from being processed, and returning CHECK_CONDITION.
      
      This includes changing transport_cmd_get_valid_sectors() to return '0' on
      success and '-EINVAL' on failure (this makes more sense than sectors),
      and to only check transport_cmd_get_valid_sectors() when a non zero LBA +
      range SYNCHRONIZE_CACHE operation has been receieved for the non passthrough
      case.
      Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
      7abbe7f3
    • Nicholas Bellinger's avatar
      target: Remove duplicate task completions in transport_emulate_control_cdb · 72f4ba1e
      Nicholas Bellinger authored
      This patch removes a duplicate set of transport_complete_task() calls in
      target_emulate_unmap() and target_emulate_write_same() as the completion
      call is already done within transport_emulate_control_cdb()
      
      This patch also adds a check in transport_emulate_control_cdb() for the
      existing SCF_EMULATE_CDB_ASYNC flag currently used by SYNCHRONIZE_CACHE
      in order to handle IMMEDIATE processing.
      Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
      72f4ba1e
    • Nicholas Bellinger's avatar
      target: Fix WRITE_SAME usage with transport_get_size · 12850626
      Nicholas Bellinger authored
      For all flavours of WRITE_SAME, we only expect to handle a single block
      of data-out buffer payload, regardless of the number of logical blocks
      presented in the CDB.  This patch changes all flavours of WRITE_SAME in
      transport_generic_cmd_sequencer() to pass '1' into transport_get_size()
      instead of the extracted 'sectors' to properly handle the default usage
      of sg_write_same without the --xferlen parameter.
      Reported-by: default avatarEric Seppanen <eric@purestorage.com>
      Signed-off-by: default avatarNicholas Bellinger <nab@risingtidesystems.com>
      12850626
    • Nicholas Bellinger's avatar
      target: Add WRITE_SAME (10) parsing and refactor passthrough checks · 706d5860
      Nicholas Bellinger authored
      This patch adds initial WRITE_SAME (10) w/ UNMAP=1 support following updates in
      sbcr26 to allow UNMAP=1 for the non 16 + 32 byte CDB case.  It also refactors
      current pSCSI passthrough passthrough checks into target_check_write_same_discard()
      ahead of UNMAP=0 w/ write payload support into target_core_iblock.c.
      
      This includes the support for handling WRITE_SAME in transport_emulate_control_cdb(),
      and converts target_emulate_write_same to accept num_blocks directly for
      WRITE_SAME, WRITE_SAME_16 and WRITE_SAME_32.
      Reported-by: default avatarEric Seppanen <eric@purestorage.com>
      Cc: Roland Dreier <roland@purestorage.com>
      Cc: Christoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarNicholas Bellinger <nab@risingtidesystems.com>
      706d5860
    • Nicholas Bellinger's avatar
      target: Fix write payload exception handling with ->new_cmd_map · 16ab8e60
      Nicholas Bellinger authored
      This patch fixes a bug for fabrics using tfo->new_cmd_map() that
      are expect transport_generic_request_failure() to be calling
      transport_send_check_condition_and_sense() for both READ and WRITE,
      instead of only for READ exceptions.
      
      This was originally observed with a failed WRITE_SAME_16 w/ unmap=0
      using tcm_loop.
      Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
      16ab8e60
    • Dan Carpenter's avatar
      iscsi-target: forever loop bug in iscsit_attach_ooo_cmdsn() · 387e96c0
      Dan Carpenter authored
      This patch fixes a forever loop bug in iscsit_attach_ooo_cmdsn()
      while walking sess->sess_ooo_cmdsn_list when the received
      CmdSN is less than the tail of the list.
      Signed-off-by: default avatarDan Carpenter <error27@gmail.com>
      Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
      387e96c0
    • Dan Carpenter's avatar
      iscsi-target: remove duplicate return · c2337c70
      Dan Carpenter authored
      We returned on the line before already.
      Signed-off-by: default avatarDan Carpenter <error27@gmail.com>
      Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
      c2337c70
    • Julia Lawall's avatar
      target: Convert target_core_rd.c to use use BUG_ON · 6fc61488
      Julia Lawall authored
      Use BUG_ON(x) rather than if(x) BUG();
      
      The semantic patch that fixes this problem is as follows:
      (http://coccinelle.lip6.fr/)
      
      // <smpl>
      @@ identifier x; @@
      -if (x) BUG();
      +BUG_ON(x);
      
      @@ identifier x; @@
      -if (!x) BUG();
      +BUG_ON(!x);
      // </smpl>
      Signed-off-by: default avatarJulia Lawall <julia@diku.dk>
      Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
      6fc61488
    • Jesper Juhl's avatar
      iscsi-target: Fix leak on failure in iscsi_copy_param_list() · 9be08c58
      Jesper Juhl authored
      We leak memory if the allocations for 'new_param->name' or
      'new_param->value' fail in iscsi_target_parameters.c::iscsi_copy_param_list()
      
      We also do a lot of variable assignments that are completely pointless
      if the allocations fail.
      
      So, let's move the allocations before the assignments and also make
      sure that we free whatever was allocated to one if the allocation fail.
      
      There's also some small CodingStyle fixups in there (curly braces on
      both branches of if statement, only one variable per line) since I was
      in the area anyway. And finally, error messages in the function are
      put on a single line for easy grep'abillity.
      Signed-off-by: default avatarJesper Juhl <jj@chaosbits.net>
      Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
      9be08c58
    • Thomas Meyer's avatar
      target: Use ERR_CAST inlined function · e1750ba2
      Thomas Meyer authored
      Use ERR_CAST inlined function instead of ERR_PTR(PTR_ERR(...))
      
      The semantic patch that makes this output is available
      in scripts/coccinelle/api/err_cast.cocci.
      
      More information about semantic patching is available at
      http://coccinelle.lip6.fr/Signed-off-by: default avatarThomas Meyer <thomas@m3y3r.de>
      Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
      e1750ba2
    • Nicholas Bellinger's avatar
      target: Make standard INQUIRY return 'not connected' for tpg_virt_lun0 · 052605c6
      Nicholas Bellinger authored
      This patch changes target_emulate_inquiry_std() to set the 'not connected'
      (0x35) bit in standard INQUIRY response data when we are processing a
      request to a virtual LUN=0 mapping from struct se_device *g_lun0_dev that
      have been setup for us in transport_lookup_cmd_lun().
      
      This addresses an issue where qla2xxx FC clients need to be able
      to create demo-mode I_T FC Nexuses by default, but should not be
      exposing the default set of TPG LUNs to all FC clients.  This includes
      adding an new optional target_core_fabric_ops->tpg_check_demo_mode_login_only()
      caller to allow demo_mode nexuses to skip the old default of bulding
      a demo-mode MappedLUNs list via core_tpg_add_node_to_devs().
      
      (roland: Add missing tpg_check_demo_mode_login_only check in core_dev_add_lun)
      Reported-by: default avatarRoland Dreier <roland@purestorage.com>
      Cc: Andrew Vasquez <andrew.vasquez@qlogic.com>
      Signed-off-by: default avatarNicholas Bellinger <nab@risingtidesystems.com>
      052605c6
  2. 17 Aug, 2011 1 commit
  3. 14 Aug, 2011 13 commits
  4. 13 Aug, 2011 6 commits
    • Jaehoon Chung's avatar
      mmc: remove unused "ddr" parameter in struct mmc_ios · 7fd781e8
      Jaehoon Chung authored
      "mmc: dw_mmc: Fix DDR mode support" removed the last user.
      Signed-off-by: default avatarJaehoon Chung <jh80.chung@samsung.com>
      Signed-off-by: default avatarKyungmin Park <kyungmin.park@samsung.com>
      Signed-off-by: default avatarChris Ball <cjb@laptop.org>
      7fd781e8
    • Seungwon Jeon's avatar
      mmc: dw_mmc: Fix DDR mode support. · 6daa7778
      Seungwon Jeon authored
      Host driver can't get a hint of DDR mode through ios->ddr flag anymore.
      ios->timing is currently used to inform DDR mode as a substitute.
      And capability of MMC_CAP_MMC_HIGHSPEED is added for DDR support.
      Signed-off-by: default avatarSeungwon Jeon <tgih.jun@samsung.com>
      Acked-by: default avatarWill Newton <will.newton@imgtec.com>
      Signed-off-by: default avatarChris Ball <cjb@laptop.org>
      6daa7778
    • Jaehoon Chung's avatar
    • Andy Shevchenko's avatar
      mmc: sdhci: use f_max instead of host->clock for timeouts · 65be3fef
      Andy Shevchenko authored
      When timeout_clk is calculated the host->clock could be zero.
      So, instead of host->clock the calculation now uses mmc->f_max.
      Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>
      Signed-off-by: default avatarChris Ball <cjb@laptop.org>
      65be3fef
    • Andy Shevchenko's avatar
      mmc: sdhci: move timeout_clk calculation farther down · 272308ca
      Andy Shevchenko authored
      This moves the calculation below the assignment of mmc->f_max, which
      we need for calculating timeout_clk in the next patch in this series.
      Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Signed-off-by: default avatarChris Ball <cjb@laptop.org>
      272308ca
    • Andy Shevchenko's avatar
      mmc: sdhci: check host->clock before using it as a denominator · 78a2ca27
      Andy Shevchenko authored
      Sometimes host->clock could be zero which is a legal situation. This
      patch checks host->clock before usage as a denominator when timeout is
      calculated. A similar patch is applied for mmc core (see commit e9b86841,
      "mmc: fix division by zero in MMC core").
      
      Without this patch, the execution of the sdhci_calc_timeout could end up
      with a backtrace:
      
      <0>[    4.014319] divide error: 0000 [#1] PREEMPT SMP
      <4>[    4.014352] Modules linked in: g_ether
      <4>[    4.014376]
      <4>[    4.014393] Pid: 33, comm: kworker/u:2 Not tainted 3.0.0+ #646
      <4>[    4.014421] EIP: 0060:[<c12fa38e>] EFLAGS: 00010046 CPU: 1
      <4>[    4.014449] EIP is at sdhci_calc_timeout+0x2e/0x100
      <4>[    4.014468] EAX: 00000000 EBX: f5930fc8 ECX: 00000000 EDX: 00000000
      <4>[    4.014488] ESI: f5291de8 EDI: f5291db8 EBP: f5291c6c ESP: f5291c50
      <4>[    4.014508]  DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
      <0>[    4.014529] Process kworker/u:2 (pid: 33, ti=f5290000 task=f53065a0 task.ti=f5290000)
      <0>[    4.014546] Stack:
      <4>[    4.014557]  00000082 c1054fdd f5291c78 04000000 f5930fc8 f5291de8 f5291db8 f5291cac
      <4>[    4.014611]  c12fab7c c107a98b f5291c88 c13b6d3f f593109c f5882000 f5291cac c1054fdd
      <4>[    4.014663]  00000000 00000000 f5882000 00000082 f5930fc8 f5291db8 0000000a f5291ccc
      <0>[    4.014716] Call Trace:
      <4>[    4.014743]  [<c1054fdd>] ? mod_timer+0x11d/0x380
      <4>[    4.014770]  [<c12fab7c>] sdhci_prepare_data+0x2c/0x3a0
      <4>[    4.014798]  [<c107a98b>] ? trace_hardirqs_off+0xb/0x10
      <4>[    4.014827]  [<c13b6d3f>] ? _raw_spin_unlock_irqrestore+0x2f/0x60
      <4>[    4.014854]  [<c1054fdd>] ? mod_timer+0x11d/0x380
      <4>[    4.014880]  [<c12fc7db>] sdhci_send_command+0xdb/0x210
      <4>[    4.014906]  [<c12fd5f3>] sdhci_request+0xc3/0x150
      <4>[    4.014932]  [<c12ec56a>] mmc_start_request+0xda/0x200
      <4>[    4.014960]  [<c120d7c2>] ? __raw_spin_lock_init+0x32/0x60
      <4>[    4.014989]  [<c1066a85>] ? __init_waitqueue_head+0x35/0x50
      <4>[    4.015015]  [<c12ec70b>] mmc_wait_for_req+0x7b/0x90
      <4>[    4.015045]  [<c12f0c67>] mmc_send_cxd_data+0xf7/0x130
      <4>[    4.015076]  [<c12ecbc0>] ? mmc_erase+0x140/0x140
      <4>[    4.015102]  [<c12f139d>] mmc_send_ext_csd+0x1d/0x20
      <4>[    4.015125]  [<c12efef0>] mmc_get_ext_csd+0x70/0x140
      <4>[    4.015151]  [<c12effe8>] mmc_compare_ext_csds+0x28/0x190
      <4>[    4.015176]  [<c12f039f>] mmc_init_card+0x24f/0x650
      <4>[    4.015201]  [<c13b6d5d>] ? _raw_spin_unlock_irqrestore+0x4d/0x60
      <4>[    4.015226]  [<c107fd9c>] ? trace_hardirqs_on_caller+0x11c/0x160
      <4>[    4.015255]  [<c12f09a4>] mmc_attach_mmc+0xa4/0x190
      <4>[    4.015282]  [<c12ee3f0>] mmc_rescan+0x210/0x240
      <4>[    4.015311]  [<c105f9b6>] process_one_work+0x176/0x550
      <4>[    4.015336]  [<c105f93a>] ? process_one_work+0xfa/0x550
      <4>[    4.015360]  [<c12ee1e0>] ? mmc_init_erase+0x140/0x140
      <4>[    4.015385]  [<c1061c2a>] worker_thread+0x12a/0x2c0
      <4>[    4.015410]  [<c1061b00>] ? manage_workers.clone.18+0x100/0x100
      <4>[    4.015437]  [<c1066244>] kthread+0x74/0x80
      <4>[    4.015463]  [<c10661d0>] ? __init_kthread_worker+0x60/0x60
      <4>[    4.015490]  [<c13b7dfa>] kernel_thread_helper+0x6/0xd
      <0>[    4.015507] Code: 57 89 d7 56 53 89 c3 83 ec 10 8b 40 04 8b 72 28 f6 c4 10 89 45 f0 0f 85 91 00 00 00 85 f6 0f 84 c1 00 00 00 8b 4e 04 31 d2 89 c8 <f7> 73 58 ba d3 4d 62 10 89 c1 8b 06 f7 e2 c1 ea 06 01 d1 f7 45
      <0>[    4.015829] EIP: [<c12fa38e>] sdhci_calc_timeout+0x2e/0x100 SS:ESP 0068:f5291c50
      Reported-by: default avatarAlexander Shishkin <alexander.shishkin@linux.intel.com>
      Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Signed-off-by: default avatarChris Ball <cjb@laptop.org>
      78a2ca27