- 03 2月, 2015 40 次提交
-
-
由 Webb Scales 提交于
Hoist the conditional out of do_not_scan_if_controller_locked_up() and place it in the caller (this improves the code structure, making it more consistent with other uses and enabling tail-call optimization); rename the function to hpsa_scan_complete(), and use it at the end of hpsa_scan_start() as well. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NWebb Scales <webbnh@hp.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Webb Scales 提交于
Move the code which sets up the SG descriptor out of hpsa_scatter_gather() and into a subroutine where it can be reused (in the next patch). The Ext field is now assigned unconditionally: this makes the refactor much simpler, but more importantly it removes a conditional operation from inside the loop. The case for which the conditional formerly tested is now executed (unconditionally) after the loop is exited. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NWebb Scales <webbnh@hp.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Stephen Cameron 提交于
Performance tweak, avoid unnecessary function calls. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Stephen Cameron 提交于
Printing the address of the command pointer is of little value, change to print the CDB. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Stephen Cameron 提交于
There's no reason for it to be a void *, it should be a struct scsi_cmnd * Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Don Brace 提交于
Returning failed from the device reset handler will get the device kicked offline, which is fine if the controller is locked up anyhow. Cannot abort a command from a failed controller. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Reviewed-by: NJustin Lindley <justin.lindley@pmcs.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Stephen Cameron 提交于
Command allocation is the thing that takes the longest in the main i/o path, so check for controller lockup immediately after this to prevent submitting commands to locked up controller as much as possible. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Stephen Cameron 提交于
In the code that translates logical drive LBAs to physical drive LBAs if we overflow the raid map disk data array we will get the wrong answers. We do not expect that to happen, but best to be on the safe side and guard against it anyway. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Stephen Cameron 提交于
Acking controller events on controllers that do not support it can cause such controllers to lock up. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NJoe Handzik <joseph.t.handzik@hp.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Stephen Cameron 提交于
In set_encrypt_ioaccel2() and in hpsa_scsi_ioaccel_raid_map there were BUG_ONs that looked like this: BUG_ON(!(dev->offload_config && dev->offload_enabled)); But, In hpsa_ack_ctlr_events() we have this, /* Stop sending new RAID offload reqs via the IO accelerator */ scsi_block_requests(h->scsi_host); for (i = 0; i < h->ndevices; i++) h->dev[i]->offload_enabled = 0; hpsa_drain_accel_commands(h); So, we set offload_enabled = 0 for all drives, then do this drain_accel_commands, so that means accel commands could still be in flight, ie. perhaps having just been submitted into hpsa_scsi_ioaccel_raid_map concurrent with ->offload_enabled having just been set to zero. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Stephen Cameron 提交于
No need to check whether interrupt pending for MSI(X) and conversely, no need to check whether MSI(X) interrupts are being used when checking if interrupts are pending. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Don Brace 提交于
Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Don Brace 提交于
Performance enhancement. Remove spin_locks from the driver. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Robert Elliott 提交于
Empirically, this improves performance slightly (~2% max IOPS) by allowing cmd_alloc to remember where it left off searching for free commands between calls instead of always starting its search at command 0. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NRobert Elliott <elliott@hp.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Webb Scales 提交于
This means changing the allocator to reference count commands. The reference count is now the authoritative indicator of whether a command is allocated or not. The h->cmd_pool_bits bitmap is now only a heuristic hint to speed up the allocation process, it is no longer the authoritative record of allocated commands. Since we changed the command allocator to use reference counting as the authoritative indicator of whether a command is allocated, fail_all_outstanding_cmds needs to use the reference count not h->cmd_pool_bits for this purpose. Fix hpsa_drain_accel_commands to use the reference count as the authoritative indicator of whether a command is allocated instead of the h->cmd_pool_bits bitmap. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Don Brace 提交于
When using the ioaccel submission methods, requests destined for RAID volumes are sometimes diverted to physical devices. The OS has no or limited knowledge of these physical devices, so it is up to the driver to avoid pushing the device too hard. It is better to honor the physical device queue limit rather than making the device spew zillions of TASK SET FULL responses. This is so that hpsa based devices support /sys/block/sdNN/device/queue_type of simple, which lets the SCSI midlayer automatically adjust the queue_depth based on TASK SET FULL and GOOD status. Adjust the queue depth for a new device after it is created based on the maximum queue depths of the physical devices that constitute the device. This drops the maximum queue depth from .can_queue of 1024 to something like 174 for single-drive RAID-0, 348 for two-drive RAID-1, etc. It also adjusts for the ratio of data to parity drives. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NWebb Scales <webbnh@hp.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Don Brace 提交于
Instead of kicking the commands all the way back to the mid layer, use a work queue. This enables having a mechanism for the driver to be able to resubmit the commands down the "normal" raid path without turning off the ioaccel feature entirely whenever an error is encountered on the ioaccel path, and prevent excessive rescanning of devices. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Stephen Cameron 提交于
Factor out the bottom part of the queuecommand function which is the part that builds commands for submitting down the "normal' RAID stack path of a Smart Array. Need to factor this out to improve how commands that were initially sent down one of the "ioaccellerated" paths but which have some sort of error condition are retried down the "normal" path. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Stephen Cameron 提交于
The original reasoning behind doing this was faulty. An error of some sort would be encountered, accelerated i/o would be disabled for that logical drive, the command would be kicked back out to the SCSI midlayer for a retry, and since i/o accelerator mode was disabled, it would get retried down the RAID path. However, something needs to turn ioaccellerator mode back on, and this rescan request was what did that. However, it was racy, and extremely bad for performance to rescan all devices, so, don't do that. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Don Brace 提交于
By not doing maintaining a list of queued commands, we can eliminate some spin locking in the main i/o path and gain significant improvement in IOPS. Remove the queuing code and the code that calls it; remove now-unused interrupt code; remove DIRECT_LOOKUP_BIT. Now that the passthru commands share the same command pool as the main i/o path, and the total size of the pool is less than or equal to the number of commands that will fit in the hardware fifo, there is no need to check to see if we are exceeding the hardware fifo's depth. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Reviewed-by: NRobert Elliott <elliott@hp.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Stephen Cameron 提交于
We have commands reserved for internal use. This is laying the groundwork for removing the internal queue of commands from the driver so that the locks that protect that queue may be removed. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Stephen Cameron 提交于
We need to reserve some commands for device rescans, aborts, and the pass through ioctls, etc. so we cannot give them all to the scsi mid layer. This is in preparation for removing cmd_special_alloc and cmd_special_free so that we can stop queuing commands internally in the driver so that we can remove the locks thta protect the queue that we will no longer have. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Robert Elliott 提交于
If hpsa_allocate_cmd_pool failed, we were calling two functions unnecessarily: hpsa_free_sg_chain_blocks(h); hpsa_free_cmd_pool(h); This didn't cause any problem, as those functions can tolerate being called when what they free hasn't been allocated (relevant pointers would be NULL) but it is potentially confusing. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NRobert Elliott <elliott@hp.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Robert Elliott 提交于
Partial allocation failure wasn't handled correctly Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NRobert Elliott <elliott@hp.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Robert Elliott 提交于
Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NRobert Elliott <elliott@hp.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Robert Elliott 提交于
Return the actual error code instead of a generic error code. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NRobert Elliott <elliott@hp.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Robert Elliott 提交于
Make the function name more descriptive. We use more than one interrupt. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NRobert Elliott <elliott@hp.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Robert Elliott 提交于
Enhance error reporting. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NRobert Elliott <elliott@hp.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Stephen Cameron 提交于
Cleanup comments to be more specific. Make messages more informational. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NRobert Elliott <elliott@hp.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Webb Scales 提交于
Encapsulate the conditional predicate which tests for legacy controllers in a separate function and rework the code comments. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NWebb Scales <webbnh@hp.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Robert Elliott 提交于
There is nothing worrisome about the "Waiting for controller to respond to no-op" print, so use dev_info rather than dev_warn. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NRobert Elliott <elliott@hp.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Robert Elliott 提交于
If the board ID lookup function fails, return the return code rather than return -ENODEV. The only board ID failure reason right now is -ENODEV, so this just provides more informative prints in kdump and adapts to future changes. Tested with error injection while booting with reset_devices on the kernel command line: [ 62.804324] injecting error in inj_hpsa_lookup_board_id: 1 11 [ 62.804423] hpsa 0000:04:00.0: Board ID not found (the pci probe layer does not print an additional message if -ENODEV is the reason) Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NRobert Elliott <elliott@hp.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Robert Elliott 提交于
Return the real reason for kdump_hard_reset failure rather than change them all to -ENODEV. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NRobert Elliott <elliott@hp.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Robert Elliott 提交于
The queue depth printed at startup is in decimal, so shouldn't have a 0x prefix. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NRobert Elliott <elliott@hp.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Robert Elliott 提交于
In MSI and MSI-X mode, where hpsa asks for more than one interrupt, hpsa_request_irqs forgets if the first request_irq call failed if later ones succeed. It needs to exit the loop on any failure rather than continue, freeing all irqs that were requested until that point. Also, it needs to clear out the q numbers up to MAX_REPLY_QUEUES. The same is true for the general hpsa_free_irqs function. Tested with error injection of -ENOSYS on the 4th call: [ 9.277691] injecting error in inj_request_irq: 1 4 [ 9.277780] hpsa 0000:02:00.0: failed to get irq 35 for hpsa1 [ 10.711623] scsi host1: Error handler scsi_eh_1 exiting [ 10.739170] hpsa: probe of 0000:02:00.0 failed with error -38 Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NRobert Elliott <elliott@hp.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Fabian Frederick 提交于
Remove unused variable in hpsa_free_cmd_pool. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NFabian Frederick <fabf@skynet.be> Acked-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Robert Elliott 提交于
Change the function names to have hpsa prefix. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NRobert Elliott <elliott@hp.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Robert Elliott 提交于
HP now uses RAID-6 rather than RAID-ADG (Advanced Data Guarding) as the marketing name for our implementation of RAID-6. The driver considers RAID-1 and RAID-1+0 to be the same level, and considers RAID-1ADM and RAID-1+0ADM to be the same level. Parenthesis can be used to reflect the optional +0 portion of both those RAID levels. Rename: RAID-ADG to RAID-6 RAID-1(1+0) to RAID-1(+0) RAID-1(ADM) to RAID-1(+0)ADM Also, add another const after the pointer type as suggested by checkpatch.pl so the array is: static const char * const raid_label[] Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NRobert Elliott <elliott@hp.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Don Brace 提交于
We change drive queue depths to match drive reported queue depths. The name of the SML function was changed from scsi_adjust_queue_depth changed to scsi_change_queue_depth. Reviewed-by: NScott Teel <scott.teel@pmcs.com> Signed-off-by: NDon Brace <don.brace@pmcs.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-
由 Don Brace 提交于
Change how SA controllers are reset by changing PCI power levels. The hpsa driver was finding the PCI_PM_CTRL_STATE_MASK offset then reading/writing a bitmask to change the power state. There are kernel functions that do the same operations. Better to use the kernel functions. Signed-off-by: NDon Brace <don.brace@pmcs.com> Reviewed-by: NScott Teel <scott.teel@pmcs.com> Reviewed-by: NWebb Scales <webbnh@hp.com> Signed-off-by: NChristoph Hellwig <hch@lst.de>
-