Jörn Engel [Thu, 12 Apr 2012 21:35:05 +0000 (17:35 -0400)]
[SCSI] sg: remove sg_mutex
With the exception of the detached field, sg_mutex no longer adds any
locking. detached handling has been broken before and is still broken
and this patch does not seem to make things worse than they were to
begin with.
However, I have observed cases of tasks being blocked for >200s waiting
for sg_mutex. So the removal clearly adds value for very little cost.
Signed-off-by: Joern Engel <joern@logfs.org>
Acked-by: Douglas Gilbert <dgilbert@interlog.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Jörn Engel [Wed, 25 Apr 2012 15:17:29 +0000 (11:17 -0400)]
[SCSI] sg: completely protect sfds
sfds is protected by sg_index_lock - except for sg_open(), where it
isn't. Change that and add some documentation.
Signed-off-by: Joern Engel <joern@logfs.org>
Acked-by: Douglas Gilbert <dgilbert@interlog.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Jörn Engel [Tue, 24 Apr 2012 20:13:11 +0000 (16:13 -0400)]
[SCSI] sg: protect sdp->exclude
Changes since v1: set_exclude now returns the new value, which gets
rid of the comma expression and the operator precedence bug. Thanks
to Douglas for spotting it.
sdp->exclude was previously protected by the BKL. The sg_mutex, which
replaced the BKL, only semi-protected it, as it was missing from
sg_release() and sg_proc_seq_show_debug(). Take an explicit spinlock
for it.
Signed-off-by: Joern Engel <joern@logfs.org>
Acked-by: Douglas Gilbert <dgilbert@interlog.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Jörn Engel [Thu, 12 Apr 2012 21:33:58 +0000 (17:33 -0400)]
[SCSI] sg: prevent unwoken sleep
srp->done is protected by sfp->rq_list_lock everywhere, except for this
one case. Result can be that the wake-up happens before the cacheline
with the changed srp->done has arrived, so the waiter can go back to
sleep and never be woken up again.
The wait_event_interruptible() means that anyone trying to debug this
unlikely race will likely notice everything working fine again, as the
next signal will unwedge things. Evil.
Signed-off-by: Joern Engel <joern@logfs.org>
Acked-by: Douglas Gilbert <dgilbert@interlog.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Jörn Engel [Thu, 12 Apr 2012 21:33:39 +0000 (17:33 -0400)]
[SCSI] sg: remove closed flag
After sg_release() has been called, noone should be able to actually use
that filedescriptor anymore. So if closed ever made a difference in the
past five years or so, it would have meant a bug. Remove it.
Signed-off-by: Joern Engel <joern@logfs.org>
Acked-by: Douglas Gilbert <dgilbert@interlog.com>
[jejb: fix up checkpatch warnings]
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Jörn Engel [Thu, 12 Apr 2012 21:33:25 +0000 (17:33 -0400)]
[SCSI] sg: use wait_event_interruptible()
Afaics the use of __wait_event_interruptible() as opposed to
wait_event_interruptible() is purely historic. So let's follow the rest
of the kernel and check the condition before prepare_to_wait() - and
also make the code a bit nicer.
Signed-off-by: Joern Engel <joern@logfs.org>
Acked-by: Douglas Gilbert <dgilbert@interlog.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Jörn Engel [Thu, 12 Apr 2012 21:32:48 +0000 (17:32 -0400)]
[SCSI] sg: remove while (1) non-loop
The while (1) construct isn't actually a loop at all. So let's not
pretent and obfuscate the code.
Signed-off-by: Joern Engel <joern@logfs.org>
Acked-by: Douglas Gilbert <dgilbert@interlog.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Jörn Engel [Thu, 12 Apr 2012 21:32:17 +0000 (17:32 -0400)]
[SCSI] sg: remove unnecessary indentation
blocking is de-facto a constant and the now-removed comment wasn't all
that useful either. Without them and the resulting indentation the code
is a bit nicer to read.
Signed-off-by: Joern Engel <joern@logfs.org>
Acked-by: Douglas Gilbert <dgilbert@interlog.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Dan Williams [Fri, 23 Mar 2012 00:05:11 +0000 (17:05 -0700)]
[SCSI] sd: limit the scope of the async probe domain
sd injects and synchronizes probe work on the global kernel-wide domain.
This runs into conflict with PM that wants to perform resume actions in
async context:
[ 494.237079] INFO: task kworker/u:3:554 blocked for more than 120 seconds.
[ 494.294396] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[ 494.360809] kworker/u:3 D
0000000000000000 0 554 2 0x00000000
[ 494.420739]
ffff88012e4d3af0 0000000000000046 ffff88013200c160 ffff88012e4d3fd8
[ 494.484392]
ffff88012e4d3fd8 0000000000012500 ffff8801394ea0b0 ffff88013200c160
[ 494.548038]
ffff88012e4d3ae0 00000000000001e3 ffffffff81a249e0 ffff8801321c5398
[ 494.611685] Call Trace:
[ 494.632649] [<
ffffffff8149dd25>] schedule+0x5a/0x5c
[ 494.674687] [<
ffffffff8104b968>] async_synchronize_cookie_domain+0xb6/0x112
[ 494.734177] [<
ffffffff810461ff>] ? __init_waitqueue_head+0x50/0x50
[ 494.787134] [<
ffffffff8131a224>] ? scsi_remove_target+0x48/0x48
[ 494.837900] [<
ffffffff8104b9d9>] async_synchronize_cookie+0x15/0x17
[ 494.891567] [<
ffffffff8104ba49>] async_synchronize_full+0x54/0x70 <-- here we wait for async contexts to complete
[ 494.943783] [<
ffffffff8104b9f5>] ? async_synchronize_full_domain+0x1a/0x1a
[ 495.002547] [<
ffffffffa00114b1>] sd_remove+0x2c/0xa2 [sd_mod]
[ 495.051861] [<
ffffffff812fe94f>] __device_release_driver+0x86/0xcf
[ 495.104807] [<
ffffffff812fe9bd>] device_release_driver+0x25/0x32 <-- here we take device_lock()
[ 853.511341] INFO: task kworker/u:4:549 blocked for more than 120 seconds.
[ 853.568693] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[ 853.635119] kworker/u:4 D
ffff88013097b5d0 0 549 2 0x00000000
[ 853.695129]
ffff880132773c40 0000000000000046 ffff880130790000 ffff880132773fd8
[ 853.758990]
ffff880132773fd8 0000000000012500 ffff88013288a0b0 ffff880130790000
[ 853.822796]
0000000000000246 0000000000000040 ffff88013097b5c8 ffff880130790000
[ 853.886633] Call Trace:
[ 853.907631] [<
ffffffff8149dd25>] schedule+0x5a/0x5c
[ 853.949670] [<
ffffffff8149cc44>] __mutex_lock_common+0x220/0x351
[ 854.001225] [<
ffffffff81304bd7>] ? device_resume+0x58/0x1c4
[ 854.049082] [<
ffffffff81304bd7>] ? device_resume+0x58/0x1c4
[ 854.097011] [<
ffffffff8149ce48>] mutex_lock_nested+0x2f/0x36 <-- here we wait for device_lock()
[ 854.145591] [<
ffffffff81304bd7>] device_resume+0x58/0x1c4
[ 854.192066] [<
ffffffff81304d61>] async_resume+0x1e/0x45
[ 854.237019] [<
ffffffff8104bc93>] async_run_entry_fn+0xc6/0x173 <-- ...while running in async context
Provide a 'scsi_sd_probe_domain' so that async probe actions actions can
be flushed without regard for the state of PM, and allow for the resume
path to handle devices that have transitioned from SDEV_QUIESCE to
SDEV_DEL prior to resume.
Acked-by: Alan Stern <stern@rowland.harvard.edu>
[alan: uplevel scsi_sd_probe_domain, clarify scsi_device_resume]
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
[jejb: remove unneeded config guards in include file]
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Stephen M. Cameron [Tue, 1 May 2012 16:43:42 +0000 (11:43 -0500)]
[SCSI] hpsa: dial down lockup detection during firmware flash
Dial back the aggressiveness of the controller lockup detection thread.
Currently it will declare the controller to be locked up if it goes
for 10 seconds with no interrupts and no change in the heartbeat
register. Dial back this to 30 seconds with no heartbeat change, and
also snoop the ioctl path and if a firmware flash command is detected,
dial it back further to 4 minutes until the firmware flash command
completes. The reason for this is that during the firmware flash
operation, the controller apparently doesn't update the heartbeat
register as frequently as it is supposed to, and we can get a false
positive.
Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Stephen M. Cameron [Tue, 1 May 2012 16:43:37 +0000 (11:43 -0500)]
[SCSI] hpsa: removed unused member maxQsinceinit
Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Mike Miller [Tue, 1 May 2012 16:43:32 +0000 (11:43 -0500)]
[SCSI] hpsa: add new RAID level "1(ADM)"
Signed-off-by: Mike Miller <mikem@beardog.cce.hp.com>
Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Stephen M. Cameron [Tue, 1 May 2012 16:43:21 +0000 (11:43 -0500)]
[SCSI] hpsa: factor out hpsa_free_irqs_and_disable_msix
Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Matt Gates [Tue, 1 May 2012 16:43:11 +0000 (11:43 -0500)]
[SCSI] hpsa: refine interrupt handler locking for greater concurrency
Use spinlocks with finer granularity in the submission and
completion paths to allow concurrent execution for multiple
reply queues. In particular, do not hold a spin lock while
submitting a request to the device, nor during most of the
interrupt handler.
Signed-off-by: Matt Gates <matthew.gates@hp.com>
Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Matt Gates [Tue, 1 May 2012 16:43:06 +0000 (11:43 -0500)]
[SCSI] hpsa: use multiple reply queues
Smart Arrays can support multiple reply queues onto which command
completions may be deposited. It can help performance quite a bit
to arrange for command completions to be processed on the same CPU
from which they were submitted to increase the likelihood of cache
hits.
Signed-off-by: Matt Gates <matthew.gates@hp.com>
Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Stephen M. Cameron [Tue, 1 May 2012 16:43:01 +0000 (11:43 -0500)]
[SCSI] hpsa: factor out tail calls to next_command() in process_(non)indexed_cmd()
This is in order to smooth the way for upcoming changes to allow use of
multiple reply queues for command completions.
Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: Matt Gates <matthew.gates@hp.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Stephen M. Cameron [Tue, 1 May 2012 16:42:56 +0000 (11:42 -0500)]
[SCSI] hpsa: do aborts two ways
When aborting a command, the tag is supposed to be
specified as 64-bit little endian. However, some smart
arrays expect the tag of the command to be aborted to be
specified in a strange byte order. How to tell which sort
of Smart Array firmware we're dealing with is not obvious.
However, because of the way we construct our tags, the values
of any outstanding tag when specified with the "strange" byte
order will not collide with the value specified in the correct
order. That means we can safely attempt the abort both ways.
Signed-off-by: Stephen M. Cameron <stephenmcameron@gmail.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Stephen M. Cameron [Tue, 1 May 2012 16:42:51 +0000 (11:42 -0500)]
[SCSI] hpsa: add abort error handler function
Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Stephen M. Cameron [Tue, 1 May 2012 16:42:46 +0000 (11:42 -0500)]
[SCSI] hpsa: remove unused parameter from finish_cmd
Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Stephen M. Cameron [Tue, 1 May 2012 16:42:40 +0000 (11:42 -0500)]
[SCSI] hpsa: do not give up retry of driver cmds after only 3 retries
Instead of giving up after 3 immediate retries of driver initiated
commands, back off the rate of retries and retry a bunch more times.
Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Reviewed-by: Andi Shyti <andi.shyti@gmail.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Matt Bondurant [Tue, 1 May 2012 16:42:35 +0000 (11:42 -0500)]
[SCSI] hpsa: retry driver initiated commands on busy status
In shared SAS configurations we might get a busy status
during driver initiated commands (e.g. during rescan for
devices). We should retry the command in such cases rather
than giving up.
Signed-off-by: Matt Bondurant <Matthew.dav.bondurant@hp.com>
Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Stephen M. Cameron [Tue, 1 May 2012 16:42:30 +0000 (11:42 -0500)]
[SCSI] hpsa: do not read from controller unnecessarily in completion code
MSI/MSI-X interrupts can't race the DMA completion they are communicating
so no need to read from controller to flush the DMA to the host if
MSI or MSI-X interrupts are being used.
Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Stephen M. Cameron [Tue, 1 May 2012 16:42:25 +0000 (11:42 -0500)]
[SCSI] hpsa: suppress excessively chatty error messages
Default behavior for any CHECK CONDITION excepting a few special cases is to
print out certain parts of the sense buffer and the CDB. Default behavior
should be to print nothing and let the upper layers or applications decide what
to do about these. The same information is already available by setting the
appropriate bits of the scsi_logging_level kernel parameter or via
/proc/sys/dev/scsi/logging_level.
Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Stephen M. Cameron [Tue, 1 May 2012 16:42:20 +0000 (11:42 -0500)]
[SCSI] hpsa: enable bus master bit after pci_enable_device
pci_disable_device() disables the bus master bit and pci_enable_device does
not re-enable it. It needs to be enabled.
Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Stephen M. Cameron [Tue, 1 May 2012 16:42:14 +0000 (11:42 -0500)]
[SCSI] hpsa: do not skip disabled devices
There was code to skip "disabled" devices which was intended to
skip devices disabled in the BIOS, but it really just checks to
see if the device can write to host memory, which this is disabled
by pci_disable_device on driver unload, so this check has the effect
of preventing subsequent load of the driver. And devices disabled in
the BIOS don't show up at all anyway, so this check never made any
sense to begin with, and should be removed.
Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Stephen M. Cameron [Tue, 1 May 2012 16:42:09 +0000 (11:42 -0500)]
[SCSI] hpsa: call pci_disable_device on driver unload
As Jenx Axboe explained to me: "In earlier times (2.6.18 and pre, iirc), Linux
disabled IO and mem bars on pci_disable_device(). Now in newer kernel it does
not. And in the newer kernels you run into problems if you DON'T disable the
device on exit, since when it later loads the device is already in the enabled
state - and pci_enable_device() then does nothing. This typically screws
MSI/MSI-X." This is what the big scary comment that says pci_disable_device
does "something nasty" to smart arrays was evidently referring to.
If pci_disable_device is not called on driver rmmod, subsequently insmod'ing
the driver may in result in some cases fail to be able to receive interrupts,
esp. if other drivers are loaded between unloading and loading hpsa.
Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Mike Maslenkin [Sat, 28 Apr 2012 01:32:14 +0000 (05:32 +0400)]
[SCSI] scsi_transport_spi: fix for unbalanced reference counting
Check the domain validation flag on the given device before referencing
scsi_device instance, otherwise if the flag is already set we return without
decrementing the reference count.
Signed-off-by: Mike Maslenkin <mihailm@parallels.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Eddie Wai [Wed, 25 Apr 2012 22:08:37 +0000 (15:08 -0700)]
[SCSI] bnx2i: Updated version and copyright year
Old version: 2.7.0.3
New version: 2.7.2.2
Signed-off-by: Eddie Wai <eddie.wai@broadcom.com>
Reviewed-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Eddie Wai [Wed, 25 Apr 2012 22:03:45 +0000 (15:03 -0700)]
[SCSI] bnx2i: Added the setting of target can_queue via target_alloc
This will set the target can_queue limit to the number of preallocated
session tasks set during creation.
"Could not send nopout" messages were observed without this when the
iSCSI connection experiences dropped frames under heavy I/O stress.
Signed-off-by: Eddie Wai <eddie.wai@broadcom.com>
Reviewed-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Mark Salyzyn [Wed, 25 Apr 2012 17:02:04 +0000 (13:02 -0400)]
[SCSI] pm8001: raise host can queue
This is a followup to a patch provided by Jack Wang on September 21 2011.
After increasing the CAN_QUEUE to 510 in pm8001 we discovered some performance
degredation from time to time. We needed to increase the MPI queue to
compensate and ensure we never hit that limit. We also needed to double
the margin to support event and administrivial commands that take from
the pool resulting in an occasional largely unproductive command completion
with soft error to the caller when the command pool is overloaded temporarily.
Signed-off-by: Mark Salyzyn <mark_salyzyn@xyratex.com>
Acked-by: Jack Wang <jack_wang@usish.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Santosh Yaraganavi [Mon, 23 Apr 2012 13:22:11 +0000 (18:52 +0530)]
[SCSI] ufs: Assign UTRLBAU = upper_32_ bits(UTRLD base address)
UTP Transfer request list base registers UTRLBA and UTRLBAU
must be assigned, lower-32 and upper-32 bits of UTRLD list
physical base addresses respectively.
Currently UTRLBAU is being assigned lower-32 bits of UTRLD
physical base address. This will cause an issue with
controllers that can support 64-bit addressing.
This patch correctly assigns upper-32 bits of UTRLD physical
base address to UTRLBAU.
Reported-by: Rene De Jong <rene.dejong@arm.com>
Signed-off-by: Santosh Yaraganavi <santoshsy@gmail.com>
Reviewed-by: Vinayak Holikatti <vinholikatti@gmail.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Dan Carpenter [Fri, 20 Apr 2012 19:16:54 +0000 (12:16 -0700)]
[SCSI] fcoe: remove a stray unlock
We moved the locking in
dd060e74fb "[SCSI] fcoe: remove frame dropping
code from fcoe_percpu_clean" but this unlock was missed.
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Yi Zou [Fri, 20 Apr 2012 19:16:49 +0000 (12:16 -0700)]
[SCSI] libfcoe: fix VN2VN N_Port_ID Beacon source MAC
FC-BB-6 v1.04 7.9.8.14 N_Port_ID Beacon:
"A N_Port_ID Beacon is multicast and uses the VN_Port MAC address as source
address."
Currently, libfcoe is using ENode MAC, this seems ok and functionality wise
not a problem in my back to back testing setup, however, just fix this to
make libfcoe VN2VN support more spec compliant.
Signed-off-by: Yi Zou <yi.zou@intel.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Robert Love [Fri, 20 Apr 2012 19:16:43 +0000 (12:16 -0700)]
[SCSI] fcoe: Don't hold rtnl_mutex in fcoe_update_src_mac
The rtnl_mutex was held to protect calls to dev_uc_add
and dev_uc_del. Holding rtnl is not required as those
functions make use of the netif_addr_lock* API to
protect the MAC changing.
This change fixes the following regression by removing
the rtnl usage when fcoe_update_src_mac is called.
https://bugzilla.kernel.org/show_bug.cgi?id=42918
the existing dependency chain (in reverse order) is:
-> #1 (&fip->ctlr_mutex){+.+...}:
[<
c1091f70>] lock_acquire+0x80/0x1b0
[<
c147655d>] mutex_lock_nested+0x6d/0x340
[<
f8970c32>] fcoe_ctlr_link_up+0x22/0x180 [libfcoe]
[<
f894620e>] fcoe_create+0x47e/0x6e0 [fcoe]
[<
f8973dd3>] fcoe_transport_create+0x143/0x250 [libfcoe]
[<
c10527e0>] param_attr_store+0x30/0x60
[<
c1052696>] module_attr_store+0x26/0x40
[<
c11a201e>] sysfs_write_file+0xae/0x100
[<
c11449df>] vfs_write+0x8f/0x160
[<
c1144cbd>] sys_write+0x3d/0x70
[<
c147a0c4>] syscall_call+0x7/0xb
-> #0 (rtnl_mutex){+.+.+.}:
[<
c109164b>] __lock_acquire+0x140b/0x1720
[<
c1091f70>] lock_acquire+0x80/0x1b0
[<
c147655d>] mutex_lock_nested+0x6d/0x340
[<
c13a10c4>] rtnl_lock+0x14/0x20
[<
f89445ac>] fcoe_update_src_mac+0x2c/0xb0 [fcoe]
[<
f8971712>] fcoe_ctlr_timer_work+0x712/0xb60 [libfcoe]
[<
c104fb69>] process_one_work+0x179/0x5d0
[<
c10502f1>] worker_thread+0x121/0x2d0
[<
c10550ed>] kthread+0x7d/0x90
[<
c1481a82>] kernel_thread_helper+0x6/0x10
other info that might help us debug this:
Possible unsafe locking scenario:
CPU0 CPU1
---- ----
lock(&fip->ctlr_mutex);
lock(rtnl_mutex);
lock(&fip->ctlr_mutex);
lock(rtnl_mutex);
*** DEADLOCK ***
Signed-off-by: Robert Love <robert.w.love@intel.com>
Tested-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Vasu Dev [Fri, 20 Apr 2012 19:16:38 +0000 (12:16 -0700)]
[SCSI] libfc: defer releasing master lport until complete fcoe interface cleanuped up
The fcoe controller has back references, therefore defer
releasing master lport which gets freed along scsi_host_put
and then free it once fcoe interface is fully cleaned.
Signed-off-by: Vasu Dev <vasu.dev@intel.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Tested-by: Ross Brattain <ross.b.brattain@intel.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Vasu Dev [Fri, 20 Apr 2012 19:16:32 +0000 (12:16 -0700)]
[SCSI] libfc: flush lport worker after its disabled
The lport could get timeout armed while its getting disabled,
so flush lport worker after its disabled and ignore lport
retry in that case instead of WARN_ON.
[13192.936858] WARNING: at drivers/scsi/libfc/fc_lport.c:1573 fc_lport_timeout+0x53/0xa9 [libfc]()
[13192.938026] Hardware name: Bochs
[13192.938620] Modules linked in: fcoe libfcoe libfc scsi_transport_fc scsi_tgt fuse 8021q garp stp llc sunrpc ipv6 uinput microcode joydev pcspkr ixgbe e1000 i2c_piix4 i2c_core virtio_balloon dca mdio virtio_blk virtio_pci virtio_ring virtio floppy [last unloaded: speedstep_lib]
[13192.942589] Pid: 23605, comm: kworker/0:6 Tainted: G W 3.2.0+ #71
[13192.943587] Call Trace:
[13192.944052] [<
ffffffff810403f4>] warn_slowpath_common+0x85/0x9d
[13192.944940] [<
ffffffff81040426>] warn_slowpath_null+0x1a/0x1c
[13192.945734] [<
ffffffffa02746eb>] fc_lport_timeout+0x53/0xa9 [libfc]
[13192.946665] [<
ffffffff81058d88>] process_one_work+0x20c/0x3ad
[13192.947541] [<
ffffffff81058cbe>] ? process_one_work+0x142/0x3ad
[13192.948423] [<
ffffffffa0274698>] ? fc_lport_enter_ns+0x178/0x178 [libfc]
[13192.949363] [<
ffffffff8105a313>] worker_thread+0xfd/0x181
[13192.950191] [<
ffffffff8105a216>] ? manage_workers.clone.15+0x173/0x173
[13192.951100] [<
ffffffff8105e19b>] kthread+0xa4/0xac
[13192.951755] [<
ffffffff814edbb4>] kernel_thread_helper+0x4/0x10
[13192.952520] [<
ffffffff814e5cb4>] ? retint_restore_args+0x13/0x13
[13192.953398] [<
ffffffff8105e0f7>] ? __init_kthread_worker+0x5b/0x5b
[13192.954278] [<
ffffffff814edbb0>] ? gs_change+0x13/0x13
[13192.954911] ---[ end trace
9763213b95bbd803 ]---
Signed-off-by: Vasu Dev <vasu.dev@intel.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Tested-by: Ross Brattain <ross.b.brattain@intel.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Vasu Dev [Fri, 20 Apr 2012 19:16:27 +0000 (12:16 -0700)]
[SCSI] fcoe: remove lport from net device before doing per cpu rx thread cleanup
Remove lport from net device and then do synchronize net device to flush
inflight rx frames for the lport before doing fcoe_percpu_clean.
In case of master lport, remove all rx packet handlers completely and
then only do fcoe_percpu_clean. This required splitting fcoe_interface_cleanup
to do remove part separately and for that added func fcoe_interface_remove
and then call it from fcoe_if_destory before doing fcoe_percpu_clean.
However if fcoe_interface_remove() is already called then
don't call again from fcoe_interface_cleanup() to preserve its
existing flows.
This patch along with Neil's other patch to avoid soft irq context
on ingress will avoid passing up frames on disabled lport as
discussed in this mail thread:-
http://lists.open-fcoe.org/pipermail/devel/2012-February/011947.html
Signed-off-by: Vasu Dev <vasu.dev@intel.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Tested-by: Ross Brattain <ross.b.brattain@intel.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Vinayak Holikatti [Fri, 20 Apr 2012 08:41:50 +0000 (14:11 +0530)]
[SCSI] ufs: Update MAINTAINERS
Add myself and Santosh Y as maintainers for drivers/scsi/ufs/
Signed-off-by: Vinayak Holikatti <vinholikatti@gmail.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Venkatraman S [Thu, 19 Apr 2012 06:16:22 +0000 (11:46 +0530)]
[SCSI] ufs: Fix evaluation of UTP task completion code
While interpreting the result of UTP task completion status,
by using boolean &&, the evaluation would fail when the
UPIU_TASK_MANAGEMENT_FUNC_SUCCEEDED was received.
Either UPIU_TASK_MANAGEMENT_FUNC_COMPL or
UPIU_TASK_MANAGEMENT_FUNC_SUCCEEDED should be
considered as a success result.
Reported-by: Joe Perches <joe@perches.com>
Signed-off-by: Venkatraman S <svenkatr@ti.com>
Reviewed-by: Namjae Jeon <linkinjeon@gmail.com>
Acked-by: Santosh Y <santoshsy@gmail.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Tomas Henzl [Tue, 17 Apr 2012 13:24:48 +0000 (15:24 +0200)]
[SCSI] mpt2sas: move the scsi_host_put to the right place
When scsi_add_host fails the scsi_host_put should be called.
Signed-off-by: Tomas Henzl <thenzl@redhat.com>
Acked-by: "Nandigama, Nagalakshmi" <Nagalakshmi.Nandigama@lsi.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Mike Christie [Mon, 16 Apr 2012 02:47:50 +0000 (21:47 -0500)]
[SCSI] fc class: fix scanning when devs are offline
When a rport is added back or the role is changed the fc class
will queue a scan and then call scsi_target_unblock. The problem
with this is if the devices are in the SDEV_OFFLINE state and
the scan is run before the scsi_target_unblock, then the scan
will see LUN0 as offline and the scan will fail. This patch moves
the unblock call to before the scan, so we know the device state
will be set correctly when the scan is run.
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
David Jeffery [Wed, 11 Apr 2012 16:14:25 +0000 (12:14 -0400)]
[SCSI] st: fix memory leak with >1MB tape I/O
There is a memory leak in the st driver when sending large enough reads or
writes using st's direct I/O path. As part of mapping the application's
memory, a buffer to hold page pointers is allocated and the count of mapped
pages is stored in field do_dio. A non-zero do_dio marks that direct I/O is
in use.
But do_dio is only 1 byte in size. Mapping 256 4k pages overflows
do_dio and causes it to be set to 0, like direct I/O option was not
used. When the I/O completes, the buffer to hold the page pointers is
not freed, and the page counts of the mapped pages are not reduced.
Every I/O of this size then leaks memory.
The size of do_dio needs to be increased to prevent it wrapping around.
Signed-off-by: David Jeffery <djeffery@redhat.com>
Acked-by: Kai Mäkisara <kai.makisara@kolumbus.fi>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Krishna Gudipati [Tue, 10 Apr 2012 01:41:43 +0000 (18:41 -0700)]
[SCSI] bfa: Update the MAINTAINERS file.
Signed-off-by: Krishna Gudipati <kgudipat@brocade.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Krishna Gudipati [Tue, 10 Apr 2012 01:41:18 +0000 (18:41 -0700)]
[SCSI] bfa: Fix bfa logging for Logical port state change notification
Made changes to have the same logging level for Logical port
online and offline events, to display these events in pairs.
Signed-off-by: Krishna Gudipati <kgudipat@brocade.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Krishna Gudipati [Tue, 10 Apr 2012 01:40:43 +0000 (18:40 -0700)]
[SCSI] bfa: sysfs model description fix.
Make changes to remove unsupported model numbers from the sysfs
model description routine.
Signed-off-by: Krishna Gudipati <kgudipat@brocade.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Krishna Gudipati [Tue, 10 Apr 2012 01:40:01 +0000 (18:40 -0700)]
[SCSI] bfa: Fix to defer vport delete handler invocation till firmware logo response.
Made changes to avoid queuing the vport delete work to IM driver
work queue in the bfa_fcb_lport_delete() - since at this stage we
are not completely done with using the vport structure as we are
still waiting for the LOGO response from the fw in online state or
just doing some cleanup. Since queuing up the vport delete work at
this stage will result in the FC transport layer to clean up the vport
before we get the response from firmware.
Made changes to queue the port delete work to the IM driver work queue -
from the bfa_fcs_vport_free() function since at this state we are done
with using the vport data structure and the FCS state machine is completely
cleaned up.
Signed-off-by: Krishna Gudipati <kgudipat@brocade.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
K. Y. Srinivasan [Thu, 5 Apr 2012 19:26:52 +0000 (12:26 -0700)]
[SCSI] storvsc: Properly handle errors from the host
Hyper-V cannot process some commands like ATA_12 and ATA_16. It also returns a
very generic error when this happens (SRB_STATUS_ERROR). Most of the time we
treat SRB_STATUS_ERROR as DID_TARGET_FAILURE which causes error handler retry,
but in the case of pass through commands, they'll never succeed (and the error
handler will offline the device), so put a discriminating block in the command
completion routing and send the SRB_STATUS_ERROR upwards with DID_PASSTHROUGH
for commands we know should not be retried.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
John Soni Jose [Wed, 4 Apr 2012 04:41:52 +0000 (23:41 -0500)]
[SCSI] be2iscsi: Get Port State and Speed of the Adapter
Implement ISCSI_HOST_PARAM_PORT_STATE and ISCSI_HOST_PARAM_PORT_SPEED
to get the Adapter port state and port name
Signed-off-by: John Soni Jose <sony.john-n@emulex.com>
Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Mike Christie [Wed, 4 Apr 2012 04:41:51 +0000 (23:41 -0500)]
[SCSI] be2iscsi: adding functionality to change network settings using iscsiadm
This patch allows iscsiadm to set/ delete static IP and enable /disable
DHCP.
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Jayamohan Kallickal [Wed, 4 Apr 2012 04:41:50 +0000 (23:41 -0500)]
[SCSI] be2iscsi: Adding bsg interface for be2iscsi
Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
John Soni Jose [Wed, 4 Apr 2012 04:41:49 +0000 (23:41 -0500)]
[SCSI] be2iscsi: Get Initiator Name for the iSCSI_Host
Implement the ISCSI_HOST_PARAM_INITIATOR_NAME for .get_host_param
Signed-off-by: John Soni Jose <sony.john-n@emulex.com>
Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Jayamohan Kallickal [Wed, 4 Apr 2012 04:41:48 +0000 (23:41 -0500)]
[SCSI] be2iscsi: Return async handle of unknown opcode to free list.
The async handle corresponding to unknown Opcode was not freed
earlier. This code does the fix for that.
Signed-off-by: John Soni Jose <sony.john-n@emulex.com>
Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Jayamohan Kallickal [Wed, 4 Apr 2012 04:41:47 +0000 (23:41 -0500)]
[SCSI] be2iscsi: Check ASYNC PDU Handle corresponds to HDR/DATA Handle
For each ASYNC PDU received there is an HDR and DATA handle for it.
There will be only 1 HDR ASYNC Handle, but DATA Handle can be more
than 1 for each ASYNC PDU received. Checking if the ASYNC Handle
correspongs to HDR or DATA while returning the Handle to the free list.
hwi_free_async_msg just return the handles to the free list. No return
values are needed so changing the return type to void.
Signed-off-by: John Soni Jose <sony.john-n@emulex.com>
Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Jayamohan Kallickal [Wed, 4 Apr 2012 04:41:46 +0000 (23:41 -0500)]
[SCSI] be2iscsi: Bump the driver Version
Signed-off-by: Minh Tran <MinhDuc.Tran@Emulex.Com>
Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Jayamohan Kallickal [Wed, 4 Apr 2012 04:41:45 +0000 (23:41 -0500)]
[SCSI] be2iscsi: Update external Branding to Emulex
Change MODULE_AUTHOR, driver name and other external print strings from
Serverengines to Emulex.
Signed-off-by: Minh Tran <MinhDuc.Tran@Emulex.Com>
Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Jayamohan Kallickal [Wed, 4 Apr 2012 04:41:44 +0000 (23:41 -0500)]
[SCSI] be2iscsi: Fix the function return values.
Signed-off-by: John Soni Jose <sony.john-n@emulex.com>
Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Jayamohan Kallickal [Wed, 4 Apr 2012 04:41:43 +0000 (23:41 -0500)]
[SCSI] be2iscsi: Code cleanup, removing the goto statement
Signed-off-by: John Soni Jose <sony.john-n@emulex.com>
Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Jayamohan Kallickal [Wed, 4 Apr 2012 04:41:42 +0000 (23:41 -0500)]
[SCSI] be2iscsi: Fix double free of MCCQ info memory.
In case of MCC_Q creation failed, the MCCQ info memory is freed
from be_mcc_queues_destroy and be_mcc_queues_create. This caused
kernel to panic because of double free.
Signed-off-by: John Soni Jose <sony.john-n@emulex.com>
Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Jayamohan Kallickal [Wed, 4 Apr 2012 04:41:41 +0000 (23:41 -0500)]
[SCSI] be2iscsi: Set num_cpu = 1 if pci_enable_msix fails
Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Jayamohan Kallickal [Wed, 4 Apr 2012 04:41:40 +0000 (23:41 -0500)]
[SCSI] be2iscsi: Fix typo function name mismatch
Signed-off-by: Minh Tran <MinhDuc.Tran@Emulex.Com>
Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Mike Christie [Wed, 18 Apr 2012 08:06:00 +0000 (03:06 -0500)]
[SCSI] be2iscsi: Freeing of WRB and SGL Handle in cleanup task
The WRB and SGL Handle allocated for Login task were not freed
back to the pool after the login process was done. This code
releases the WRB and SGL Handle after the login process.
v2:
- Fix up locking so bh calls are not done when not needed.
- Make beiscsi_cleanup_task static.
Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
[various fixes]
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Jayamohan Kallickal [Wed, 4 Apr 2012 04:41:38 +0000 (23:41 -0500)]
[SCSI] be2iscsi: WRB Initialization and Failure code path change
Removing code duplication during the WRB_Handle and WRB
initialization.
Added memory allocation failure handling code during WRB
initialization.
Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Jayamohan Kallickal [Wed, 4 Apr 2012 04:41:37 +0000 (23:41 -0500)]
[SCSI] be2iscsi: Fix in ASYNC PDU stitching logic.
The buffer length passed for processing the ASYNC PDU
was not proper.
Signed-off-by: John Soni Jose <sony.john-n@emulex.com>
Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Jayamohan Kallickal [Wed, 4 Apr 2012 04:41:36 +0000 (23:41 -0500)]
[SCSI] be2iscsi: Fix in the Asynchronous Code Path
Set the ASYNC PDU Handle pBuffer for Data ring with the VA/PA
of the allocated memory for it.
To get the correct ASYNC PDY Handle iterate the list and compare
the PA set during initialization with the passed PHY Address.
The buffer_size and num_enteries are common for HDR and Data ring
Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Akinobu Mita [Wed, 4 Apr 2012 13:14:59 +0000 (22:14 +0900)]
[SCSI] hpsa: use check_signature
Use check_signature to find a signature in the mmio address.
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Acked-by: Mike Miller <mike.miller@hp.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Tomas Henzl [Thu, 29 Mar 2012 15:23:46 +0000 (17:23 +0200)]
[SCSI] aacraid: add an iounmap call to aac_src_ioremap
The patch
116046127d1a3bad2853d02781ad9fee33f05e5a "[SCSI] aacraid: Added
Sync.mode to support series 7/8/9 controllers" removed an iounmap call from
aac_src_ioremap. Before that, the iounmap has been called twice with the same
value (dev->base and dev->regs.src.bar0) and the iounmap complained about it
(iounmap: bad address ...).
The proper solution is a change the paremeter from bar0 to bar1.
Fix this by adding a an iounmap(dev->regs.src.bar1) call.
Signed-off-by: Tomas Henzl <thenzl@redhat.com>
Acked-by: Achim Leubner <achim_leubner@pmc-sierra.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Moger, Babu [Tue, 27 Mar 2012 20:56:20 +0000 (20:56 +0000)]
[SCSI] scsi_dh_alua: Optimize the STPG command
This patch optimizes the set target port group(STPG) command. During our
testing, we found that it is not optimal to send stpg command every time
the path group switch happens. This patch uses PREF (preferred target port)
bit with combination of flags passed by multipath user level tool to
optimize this behaviour. If PREF bit is set then it issues a STPG command,
otherwise it will let implicit transfer take place.
By default there is no change in the behaviour. User tool needs to pass the
parameter to make this change take effect. Patch has been tested on NetApp
E series storage.
Signed-off-by: Babu Moger <babu.moger@netapp.com>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Moger, Babu [Tue, 27 Mar 2012 20:56:08 +0000 (20:56 +0000)]
[SCSI] scsi_dh_alua: Store the PREF bit from RTPG
PREF bit indicates preferred target port group for accessing a logical
unit. This bit is used to optimize the STPG command handling.
Signed-off-by: Babu Moger <babu.moger@netapp.com>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Moger, Babu [Tue, 27 Mar 2012 20:55:49 +0000 (20:55 +0000)]
[SCSI] scsi_dh_alua: Inroduce the set_params interface scsi_dh_alua handler
Handler expects only one parameter to set the flag ALUA_OPTIMIZE_STPG.
This flag is used to optimize the STPG behaviour. There is no change in
behaviour by default.
For example, to set the flag pass the following parameters from multipath.conf
hardware_handler "2 alua 1"
Signed-off-by: Babu Moger <babu.moger@netapp.com>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Roland Dreier [Thu, 1 Mar 2012 06:41:49 +0000 (22:41 -0800)]
[SCSI] be2iscsi: Remove unused OFFSET_IN_PAGE() macro
Signed-off-by: Roland Dreier <roland@purestorage.com>
Reviewed-by: Mike Christie <michaelc@cs.wisc.edu>
Acked-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
nagalakshmi.nandigama@lsi.com [Tue, 20 Mar 2012 06:40:28 +0000 (12:10 +0530)]
[SCSI] mpt2sas: Bump driver vesion to 13.100.00.00
Signed-off-by: Nagalakshmi Nandigama <nagalakshmi.nandigama@lsi.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
nagalakshmi.nandigama@lsi.com [Tue, 20 Mar 2012 06:40:01 +0000 (12:10 +0530)]
[SCSI] mpt2sas: Fix for panic happening because of improper memory allocation
The ioc->pfacts member in the IOC structure is getting set to zero
following a call to _base_get_ioc_facts due to the memset in that routine.
So if the ioc->pfacts was read after a host reset, there would be a NULL
pointer dereference. The routine _base_get_ioc_facts is called from context
of host reset. The problem in _base_get_ioc_facts is the size of
Mpi2IOCFactsReply is 64, whereas the sizeof "struct mpt2sas_facts" is 60,
so there is a four byte overflow resulting from the memset.
Also, there is memset in _base_get_port_facts using the incorrect structure,
it should be "struct mpt2sas_port_facts" instead of Mpi2PortFactsReply.
Signed-off-by: Nagalakshmi Nandigama <nagalakshmi.nandigama@lsi.com>
CC: stable@vger.kernel.org
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
nagalakshmi.nandigama@lsi.com [Tue, 20 Mar 2012 06:39:26 +0000 (12:09 +0530)]
[SCSI] mpt2sas: Fix for hard drive going OFFLINE when hard reset issued and simultaneously another hard drive is hot unplugged
Following the host reset, the firmware discovery is reassigning another hard
drive in the topology to the same device handle as that device is getting hot
removed. Until the driver device removal routine is called, there will be two
hard drive with the matching device handle in the internal device link
list. In the device removal routine, a separate function which moves the
device from BLOCKED into OFFLINE state. Since this routine is passed with the
device handle passed as input parameter, the routine will be traversing the
internal device link list searching for matching device handle. This results
in two devices with matching device handle, therefore both devices goes
OFFLINE.
To fix this issue,the input parameter is changed from device handle to SAS
address, therefore only the device that is hot unplugged will be placed in
OFFLINE state.
Signed-off-by: Nagalakshmi Nandigama <nagalakshmi.nandigama@lsi.com>
Cc: stable@vger.kernel.org
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
nagalakshmi.nandigama@lsi.com [Tue, 20 Mar 2012 06:38:40 +0000 (12:08 +0530)]
[SCSI] mpt2sas: Set the phy identifier of the end device to the phy number of the parent device it is linked to
The phy_identifier inside the routine _transport_set_identify()
is set to sas_device_page_zero->PhyNum. This returns the
phy number of the parent device this device is linked to.
Signed-off-by: Nagalakshmi Nandigama <nagalakshmi.nandigama@lsi.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
nagalakshmi.nandigama@lsi.com [Tue, 20 Mar 2012 06:38:11 +0000 (12:08 +0530)]
[SCSI] mpt2sas : While enabling phy, read the current port number from sas iounit page 0 instead of page 1
The port number is changing after disabling/enabling phys using the SysFS
interface This is because the firmware behavour changed where it would read
the the port number then set it to some different value even though Auto Port
Config is turned on. With this change of behavour in FW, it is possible that
the expanders are moved from one port to another after disabling /enabling
phys. This is occuring because the port number in sas iounit page 1 is not
matching up to the current port in page 0. In order to fix this the driver is
modified to read the current port number from sas iounit page 0 instead of
page 1. Also copy the port and phy flags over from page 0 to page 1.
Signed-off-by: Nagalakshmi Nandigama <nagalakshmi.nandigama@lsi.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
nagalakshmi.nandigama@lsi.com [Tue, 20 Mar 2012 06:37:48 +0000 (12:07 +0530)]
[SCSI] mpt2sas: Fix linux driver sparse errors
Fix several endian issues found by runing sparse.
Signed-off-by: Nagalakshmi Nandigama <nagalakshmi.nandigama@lsi.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
nagalakshmi.nandigama@lsi.com [Tue, 20 Mar 2012 06:37:17 +0000 (12:07 +0530)]
[SCSI] mpt2sas: Fix security scan issues reported by source code analysis tool
Modified the source code as per the findings reported by the source
code analysis tool. Source code for the following functionalities
has been touched. None of the driver functionalities has changed.
- SMP Passthrough IOCTL
- Debug messages for MPT Replies (i.e. bit 9 of Logging Level)
- Task Management using sysfs
- Device removal, i.e. when a target device (including any PD within a volume)
is removed, and Volume Deletion.
- Trace Buffer
Signed-off-by: Nagalakshmi Nandigama <nagalakshmi.nandigama@lsi.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
nagalakshmi.nandigama@lsi.com [Tue, 20 Mar 2012 06:36:50 +0000 (12:06 +0530)]
[SCSI] mpt2sas: Improvement were made to better protect the sas_device, raid_device, and expander_device lists
There were possible race conditions surrounding reading an object
from the link list while from another context in the driver was
removing it. The nature of this enhancement is to rearrange locking
so the link lists are better protected.
Change set:
(1) numerous routines were rearranged so spin locks are held through
the entire time a link list object is being read from or written to.
(2) added new routines for object deletion from link list. Thus ensuring
lock was held during the deletion of the link list object, then and memory
for object freed outside the lock. The memory was freed outside the lock
so driver had access to device object info which was required for
notifying the scsi mid layer that a device was getting deleted.
(3) added the ioc->blocking_handles parameter. This is a bitmask used
to identify which devices need blocking when there is device loss. This was
introduced so that lock can be held for the entire time traversing the link
list objects, and the bitmask was set to indicate which device handles need
blocking. Oustide the lock the ioc->blocking_handles bitmask is traversed,
with the respective device handle the scsi mid layer is called for moving
devices into blocking state.
Signed-off-by: Nagalakshmi Nandigama <nagalakshmi.nandigama@lsi.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
nagalakshmi.nandigama@lsi.com [Tue, 20 Mar 2012 06:35:11 +0000 (12:05 +0530)]
[SCSI] mpt2sas : Perform Target Reset instead of HBA reset when a SATA_PASSTHROUGH cmd timeout happens
Signed-off-by: Nagalakshmi Nandigama <nagalakshmi.nandigama@lsi.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
nagalakshmi.nandigama@lsi.com [Tue, 20 Mar 2012 06:34:43 +0000 (12:04 +0530)]
[SCSI] mpt2sas: Added multisegment mode support for Linux BSG Driver
Added support for Block IO requests with multiple segments (vectors) in
the SMP handler of the SAS Transport Class. This is required by the
BSG driver. Multisegment support added for both, Request and Response.
Signed-off-by: Nagalakshmi Nandigama <nagalakshmi.nandigama@lsi.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
nagalakshmi.nandigama@lsi.com [Tue, 20 Mar 2012 06:34:11 +0000 (12:04 +0530)]
[SCSI] mpt2sas: Removed redundant global mutex for IOCTLs
When the lock_kernel and unlock_kernel routines were removed in the
2.6.39 kernel, a global mutex was added on top of the existing mutex
which already existed. With this implementation, only one IOCTL
will be active at any time no matter how many ever controllers
are present. This causes poor performance.
Removed the global mutex so that the driver can work with the existing
semaphore that was already part of the existing code.
Signed-off-by: Nagalakshmi Nandigama <nagalakshmi.nandigama@lsi.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
nagalakshmi.nandigama@lsi.com [Tue, 20 Mar 2012 06:33:16 +0000 (12:03 +0530)]
[SCSI] mpt2sas: MPI next revision header update
Changeset in MPI headers:
1) Bumped MPI2_HEADER_VERSION_UNIT
2) Added 4K sectors supported bit to CapabilitiesFlags field of IOC Page 6.
3) Added UEFIVersion field to BIOS Page 1 and defined additional
BiosOptions bits to control UEFI behavior.
Signed-off-by: Nagalakshmi Nandigama <nagalakshmi.nandigama@lsi.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
adam radford [Tue, 20 Mar 2012 02:50:06 +0000 (19:50 -0700)]
[SCSI] megaraid_sas: Version and Changelog update
The following patch for megaraid_sas updates the driver version to
v00.00.06.15-rc1, and updates Documentation/scsi/ChangeLog.megaraid_sas.
Signed-off-by: Adam Radford <aradford@gmail.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
adam radford [Tue, 20 Mar 2012 02:50:00 +0000 (19:50 -0700)]
[SCSI] megaraid_sas: Add fpRead/WriteCapable, fpRead/WriteAcrossStripe checks
The following patch for megaraid_sas fixes the fastpath code decision
logic to use fpRead/WriteCapable, fpRead/WriteAcrossStripe flags
instead of the old logic. This fixes a bug where fastpath writes
could be sent to a read only LD.
Signed-off-by: Adam Radford <aradford@gmail.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
adam radford [Tue, 20 Mar 2012 02:49:53 +0000 (19:49 -0700)]
[SCSI] megaraid_sas: Optimize HostMSIxVectors setting
The following patch for megaraid_sas removes an incorrect comment and
optimizes the setting of HostMSIxVectors. This was found during a
code review by Tomas Henzl @ RedHat.
Signed-off-by: Adam Radford <aradford@gmail.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Santosh Nayak [Mon, 19 Mar 2012 15:56:27 +0000 (21:26 +0530)]
[SCSI] pm8001: fix endian issue with code optimization.
Data type of the 'tag' field of 'fw_flash_Update_resp' should be __le32.
Data type of 'pHeader' should be __le32. Remove 2nd cast to 'piomb'.
Signed-off-by: Santosh Nayak <santoshprasadnayak@gmail.com>
Acked-by: Jack Wang <jack_wang@usish.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Linus Torvalds [Thu, 19 Apr 2012 21:54:52 +0000 (14:54 -0700)]
Merge branch 'for-3.4' of git://linux-nfs.org/~bfields/linux
Pull nfsd bugfixes from J. Bruce Fields:
"One bugfix, and one minor header fix from Jeff Layton while we're
here"
* 'for-3.4' of git://linux-nfs.org/~bfields/linux:
nfsd: include cld.h in the headers_install target
nfsd: don't fail unchecked creates of non-special files
Linus Torvalds [Thu, 19 Apr 2012 19:08:11 +0000 (12:08 -0700)]
Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux
Pull drm fixes from Dave Airlie:
"It's like a grab bag of one liners:
- core: fix page flip error path, reorder object teardown.
- usb: fix the drm_usb module license.
- i915: VT switch on SNB with non-native modes fix, and a regression
fix from 3.3.
- radeon: missing unreserve on SI, AGP/VRAM setup fix (fixes radeon on
IA64, but its a generic bug), an rn50 regression from 3.3, turn off
MSIs on rv515 (it loses rearms every so often)."
* 'drm-fixes' of git://people.freedesktop.org/~airlied/linux:
nouveau: Set special lane map for the right chipset
drm/radeon: fix load detect on rn50 with hardcoded EDIDs.
drm: Releasing FBs before releasing GEM objects during drm_release
drm/nouveau/pm: don't read/write beyond end of stack buffer
drivers: gpu: drm: gma500: mdfld_dsi_output.h: Remove not unneeded include of version.h
radeon: fix r600/agp when vram is after AGP (v3)
drm: fix page_flip error handling
drm/radeon/kms: fix the regression of DVI connector check
drm/usb: fix module license on drm/usb layer.
drm/i915: Do not set "Enable Panel Fitter" on SNB pageflips
drm/i915: Hold mode_config lock whilst changing mode for lastclose()
drm/radeon/si: add missing radeon_bo_unreserve in si_rlc_init() v2
drm/radeon: disable MSI on RV515
drm/i915: don't clobber the special upscaling lvds timings
Linus Torvalds [Thu, 19 Apr 2012 17:28:59 +0000 (10:28 -0700)]
Merge git://git.kernel.org/pub/scm/virt/kvm/kvm
Pull KVM updates from Marcelo Tosatti.
* git://git.kernel.org/pub/scm/virt/kvm/kvm:
KVM: lock slots_lock around device assignment
KVM: VMX: Fix kvm_set_shared_msr() called in preemptible context
KVM: unmap pages from the iommu when slots are removed
KVM: PMU emulation: GLOBAL_CTRL MSR should be enabled on reset
Henrik Rydberg [Thu, 12 Apr 2012 22:37:00 +0000 (00:37 +0200)]
nouveau: Set special lane map for the right chipset
The refactoring of the nv50 logic, introduced in
8663bc7c, modified the
test for the special lane map used on some Apple computers with Nvidia
chipsets. The tested MBA3,1 would still boot, but resume from suspend
stopped working. This patch restores the old test, which fixes the problem.
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
Acked-by: Ben Skeggs <bskeggs@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Dave Airlie [Thu, 19 Apr 2012 14:42:58 +0000 (15:42 +0100)]
drm/radeon: fix load detect on rn50 with hardcoded EDIDs.
When the force changes went in back in 3.3.0, we ended up returning
disconnected in the !force case, and the connected in when forced,
as it hit the hardcoded check.
Fix it so all exits go via the hardcoded check and stop spurious
modesets on platforms with hardcoded EDIDs.
Reported-by: Evan McNabb (Red Hat)
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
Signed-off-by: Dave Airlie <airlied@redhat.com>
Prathyush [Sat, 14 Apr 2012 11:52:13 +0000 (17:22 +0530)]
drm: Releasing FBs before releasing GEM objects during drm_release
During DRM release, all the FBs and gem objects are released. If
a gem object is being used as a FB and set to a crtc, it must not
be freed before releasing the framebuffer first.
If FBs are released first, the crtc using the FB is disabled first
so now the GEM object can be freed safely. The CRTC will be enabled
again when the driver restores fbdev mode.
Signed-off-by: Prathyush K <prathyush.k@samsung.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Jim Meyering [Tue, 17 Apr 2012 19:27:54 +0000 (21:27 +0200)]
drm/nouveau/pm: don't read/write beyond end of stack buffer
NUL-terminate after strncpy.
If the parameter "profile" has length 16 or more, then strncpy
leaves "string" with no NUL terminator, so the following search
for '\n' may read beyond the end of that 16-byte buffer.
If it finds a newline there, then it will also write beyond the
end of that stack buffer.
Signed-off-by: Jim Meyering <meyering@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Marcos Paulo de Souza [Wed, 18 Apr 2012 04:30:02 +0000 (01:30 -0300)]
drivers: gpu: drm: gma500: mdfld_dsi_output.h: Remove not unneeded include of version.h
The output of "make versioncheck" points a incorrect include of
version.h in the drivers/gpu/drm/gma500/mdfld_dsi_output.h:
drivers/gpu/drm/gma500/mdfld_dsi_output.h: 32 linux/version.h not needed.
If we take a look in the file, we can agree to remove it.
Cc: David Airlie <airlied@linux.ie>
Cc: <dri-devel@lists.freedesktop.org>
Signed-off-by: Marcos Paulo de Souza <marcos.souza.org@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Jerome Glisse [Tue, 17 Apr 2012 20:51:38 +0000 (16:51 -0400)]
radeon: fix r600/agp when vram is after AGP (v3)
If AGP is placed in the middle, the size_af is off-by-one, it results
in VRAM being placed at 0x7fffffff instead of 0x8000000.
v2: fix the vram_start setup.
v3: also fix r7xx & newer ASIC
Reported-by: russiane39 on #radeon
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Joonyoung Shim [Wed, 18 Apr 2012 04:47:02 +0000 (13:47 +0900)]
drm: fix page_flip error handling
Free event and restore event_space only when page_flip->flags has
DRM_MODE_PAGE_FLIP_EVENT if page_flip() is failed.
Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Dave Airlie [Thu, 19 Apr 2012 13:13:52 +0000 (14:13 +0100)]
Merge branch 'drm-intel-fixes' of git://people.freedesktop.org/~danvet/drm-intel into drm-fixes
* 'drm-intel-fixes' of git://people.freedesktop.org/~danvet/drm-intel:
drm/i915: Do not set "Enable Panel Fitter" on SNB pageflips
drm/i915: Hold mode_config lock whilst changing mode for lastclose()
drm/i915: don't clobber the special upscaling lvds timings
Takashi Iwai [Wed, 18 Apr 2012 13:21:07 +0000 (15:21 +0200)]
drm/radeon/kms: fix the regression of DVI connector check
The check of the encoder type in the commit [
e00e8b5e: drm/radeon/kms:
fix analog load detection on DVI-I connectors] is obviously wrong, and
it's the culprit of the regression on my workstation with DVI-analog
connection resulting in the blank output.
Fixed the typo now.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Dave Airlie [Thu, 19 Apr 2012 08:33:32 +0000 (09:33 +0100)]
drm/usb: fix module license on drm/usb layer.
Allows this module to load correctly with certain debugging options on.
Reported on irc by scientes
Signed-off-by: Dave Airlie <airlied@redhat.com>
Hugh Dickins [Thu, 19 Apr 2012 06:34:46 +0000 (23:34 -0700)]
memcg: fix Bad page state after replace_page_cache
My
9ce70c0240d0 "memcg: fix deadlock by inverting lrucare nesting" put a
nasty little bug into v3.3's version of mem_cgroup_replace_page_cache(),
sometimes used for FUSE. Replacing __mem_cgroup_commit_charge_lrucare()
by __mem_cgroup_commit_charge(), I used the "pc" pointer set up earlier:
but it's for oldpage, and needs now to be for newpage. Once oldpage was
freed, its PageCgroupUsed bit (cleared above but set again here) caused
"Bad page state" messages - and perhaps worse, being missed from newpage.
(I didn't find this by using FUSE, but in reusing the function for tmpfs.)
Signed-off-by: Hugh Dickins <hughd@google.com>
Cc: stable@vger.kernel.org [v3.3 only]
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>