aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2011-07-03isci: fix ssp response iu buffer size in isci_tmfDan Williams1-1/+2
In isci_task_request_complete() we save the response/sense data from the command. Make sure isci_tmf has enough space to hold the full response. [ it does not look like we actually use this data, and response_data_len/sense_data_len should be specifying the byte count, in any event do the simple fix first so we don't corrupt memory ] Reported-by: Adam Gruchala <[email protected]> Tested-by: Edmund Nadolski <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: cleanup request allocationDan Williams3-223/+121
Rather than return an error code and update a pointer that was passed by reference just return the request object directly (or null if allocation failed). Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: cleanup/optimize queue increment macrosDan Williams4-90/+44
Every single i/o or event completion incurs a test and branch to see if the cycle bit changed. For power-of-2 queue sizes the cycle bit can be read directly from the rollover of the queue pointer. Likely premature optimization, but the hidden if() and hidden assignments / side-effects in the macros were already asking to be cleaned up. Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: cleanup tag macrosDan Williams5-114/+52
A tag is a 16 bit number where the upper four bits is a sequence number and the remainder is the task context index (tci). Sanitize the macro names and shave 256-bytes out of scic_sds_controller by reducing the size of io_request_sequence. scic_sds_io_tag_construct --> ISCI_TAG scic_sds_io_tag_get_sequence --> ISCI_TAG_SEQ scic_sds_io_tag_get_index() --> ISCI_TAG_TCI scic_sds_io_sequence_increment() [delete / open code] Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: cleanup/optimize pool implementationDan Williams4-231/+56
The circ_buf macros are ~6% faster, as measured by perf, because they take advantage of power-of-two math assumptions i.e. no test and branch for rollover. Their semantics are clearer than the hidden side effects in pool.h (like sci_pool_get() which hides an assignment). Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: Disable link layer hang detectionJeff Skirvin1-5/+2
Some targets exceed the hang detect timer. Use the OS timeout to catch hung tasks. Signed-off-by: Jeff Skirvin <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: Hard reset failure will link reset all phys in the portJeff Skirvin1-5/+17
In the case where the hard reset process fails, each link in the port is put through a link reset sequence. Signed-off-by: Jeff Skirvin <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: Explicitly decode remote node ready and suspended statesJeff Skirvin1-2/+13
The remote node context should only signal a device reset condition in a suspended state. Signed-off-by: Jeff Skirvin <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: fix isci_terminate_pending() list managementDan Williams3-71/+67
Walk through the list of pending requests being careful to consider that multiple requests can be terminated when the lock is dropped (i.e. invalidating the 'next' reference established by list_for_each_entry_safe). Also noticed that all callers to isci_terminate_pending_requests() specifying terminating, so just drop the parameter. Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: Handle timed-out request terminations correctlyJeff Skirvin2-186/+181
In the situation where a termination of an I/O times-out, make sure that the linkage from the request to the task is severed completely. Also make sure that the selection of tasks to terminate occurs under scic_lock. Signed-off-by: Jeff Skirvin <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: Requests that do not start must be set to "complete"Jeff Skirvin1-1/+2
Requests that fail at start because of a reset pending condition must be set to complete in order to allow for later cleanup. Signed-off-by: Jeff Skirvin <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: Add decode for SMP request retry error conditionJeff Skirvin2-10/+52
There are situations with slow expanders in which a first attempt to execute an SMP request will fail with a timeout. Immediate subsequent retries will generally succeed. This change makes sure SMP I/O failures are immediately failed to libsas so that retries happen with no discovery process timeout delay. Signed-off-by: Jeff Skirvin <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: filter broadcast change notifications during SMP phy resetsJeff Skirvin3-41/+338
When resetting a sata device in the domain we have seen occasions where libsas prematurely marks a device gone in the time it takes for the device to re-establish the link. This plays badly with software raid arrays. Other libsas drivers have non-uniform delays in their reset handlers to try to cover this condition, but not sufficient to close the hole. Given that a sata device can take many seconds to recover we filter bcns and poll for the device reattach state before notifying libsas that the port needs the domain to be rediscovered. Once this has been proven out at the lldd level we can think about uplevelling this feature to a common implementation in libsas. Signed-off-by: Jeff Skirvin <[email protected]> [ use kzalloc instead of kmem_cache ] Signed-off-by: Dave Jiang <[email protected]> [ use eventq and time macros ] Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: Move the reset delay after the remote node resumption.Jeff Skirvin1-1/+3
Delay after bringing up the RNC to allow for resumption latency. Signed-off-by: Jeff Skirvin <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: remove 'min memory' infrastructureDan Williams6-472/+144
The old 'core' had aspirations of running in severely memory constrained environments like bios option-rom, it's not needed for Linux and gets in the way of other cleanups (like unifying/reducing the number of structure members in scic_sds_controller/isci_host). This also fixes a theoretical bug in that the driver would blindly override the silicon advertised limits for number of ports, task contexts, and remote node contexts. Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: Added support for C0 to SCU DriverAdam Gruchala6-39/+88
C0 silicon updates the pci revision id and requires new AFE parameters for phy signal integrity. Support for previous silicon revisions is deprecated (it's also broken for the theoretical case of multiple controllers at different silicon revisions, all the more reason to get it removed as soon as possible) Signed-off-by: Adam Gruchala <[email protected]> [fixed up deprecated silicon support] Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: additional state machine cleanupEdmund Nadolski13-294/+62
Additional state machine cleanups: o Remove static functions sci_state_machine_exit_state() and sci_state_machine_enter_state() o Combines sci_base_state_machine_construct() and sci_base_state_machine_start() into a single function, sci_init_sm() o Remove sci_base_state_machine_stop() which is unused. o Kill state_machine.[ch] Signed-off-by: Edmund Nadolski <[email protected]> [fixed too large to inline functions] Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: state machine cleanupEdmund Nadolski15-1160/+1076
This cleans up several areas of the state machine mechanism: o Rename sci_base_state_machine_change_state to sci_change_state o Remove sci_base_state_machine_get_state function o Rename 'state_machine' struct member to 'sm' in client structs o Shorten the name of request states o Shorten state machine state names as follows: SCI_BASE_CONTROLLER_STATE_xxx to SCIC_xxx SCI_BASE_PHY_STATE_xxx to SCI_PHY_xxx SCIC_SDS_PHY_STARTING_SUBSTATE_xxx to SCI_PHY_SUB_xxx SCI_BASE_PORT_STATE_xxx to SCI_PORT_xxx and SCIC_SDS_PORT_READY_SUBSTATE_xxx to SCI_PORT_SUB_xxx SCI_BASE_REMOTE_DEVICE_STATE_xxx to SCI_DEV_xxx SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_xxx to SCI_STP_DEV_xxx SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_xxx to SCI_SMP_DEV_xxx SCIC_SDS_REMOTE_NODE_CONTEXT_xxx_STATE to SCI_RNC_xxx Signed-off-by: Edmund Nadolski <[email protected]> Signed-off-by: Dave Jiang <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: Removing unused variables compiler warningsDave Jiang2-10/+1
Newer gcc's are better at identifying "set, but not used" variables. Signed-off-by: Dave Jiang <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: Retrieve the EFI variable for OEM parameterDave Jiang2-51/+24
We can call the EFI get_variable service routine directly to retrieve the EFI variable that holds the OEM parameters table. Signed-off-by: Dave Jiang <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: removing the kmalloc in smp request constructDave Jiang1-16/+10
It doesn't look like there is any reason to do a kmalloc. We can do the byte swap in place and avoid the allocation. This allow us to remove a kmalloc and a memcpy. Signed-off-by: Dave Jiang <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: remove isci_timer interfaceEdmund Nadolski9-352/+1
Delete code which is no longer used. Signed-off-by: Edmund Nadolski <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: Remove tmf timeout_timerEdmund Nadolski2-87/+20
Replace the timeout_timer in the isci_tmf with a call to wait_for_completion_timeout Signed-off-by: Edmund Nadolski <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: convert phy_startup_timer to sci_timerEdmund Nadolski2-47/+34
Signed-off-by: Edmund Nadolski <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: convert scic_timeout_timer to sci_timerEdmund Nadolski2-28/+36
Signed-off-by: Edmund Nadolski <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: convert power control timer to sci_timerEdmund Nadolski2-58/+50
Signed-off-by: Edmund Nadolski <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: convert phy sata_timeout_timer to sci_timerEdmund Nadolski3-49/+35
Convert the sata_timeout_timer in the scic_sds_phy struct to use a struct sci_timer Signed-off-by: Edmund Nadolski <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: convert port config agent timer to sci_timerEdmund Nadolski3-77/+53
Signed-off-by: Edmund Nadolski <[email protected]> [squashed collateral cleanups] Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: replace isci_timer list with proper embedded timersEdmund Nadolski4-25/+60
Rather than preallocating a list of timers and doling them out at runtime, embed a struct timerlist in each object that needs one. A struct sci_timer interface is introduced to manage the timer cancellation semantics which currently need to guarantee the timer is cancelled while holding spin_lock(ihost->scic_lock). Since the timeout functions also need to acquire the lock it currently prevents the driver from using del_timer_sync() for runtime cancellations. del_timer_sync() is used however before the objects go out of scope. Signed-off-by: Edmund Nadolski <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: add some type safety to the state machine interfaceDan Williams8-194/+148
Now that any given object type only has one state_machine we can use container_of() to get back to the given state machine owner. Reported-by: Christoph Hellwig <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: unify rnc start{io|task} handlersDan Williams3-307/+47
Unify rnc start{io|task} handlers and delete the state handler infrastructure. Reported-by: Christoph Hellwig <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: unify rnc suspend/resume handlersDan Williams2-234/+104
Unify rnc suspend/resume handlers and delete the state handlers. Reported-by: Christoph Hellwig <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: unify rnc destruct handlersDan Williams2-80/+39
Unify rnc destruct handlers and delete the state handler. Reported-by: Christoph Hellwig <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: unify rnc event handlersDan Williams2-270/+111
Unify rnc event handlers and delete the state handler. Reported-by: Christoph Hellwig <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: unify port start_io and complete_io handlersDan Williams2-428/+59
Unify the handlers and kill the state handler infrastructure. Reported-by: Christoph Hellwig <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: unify port link_up and link_down handlersPiotr Sawicki2-179/+76
Unify the handlers and kill the state handler implementations. Reported-by: Christoph Hellwig <[email protected]> Signed-off-by: Piotr Sawicki <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: remove port frame and event handlersPiotr Sawicki2-43/+0
Unused infrastructure. Reported-by: Christoph Hellwig <[email protected]> Signed-off-by: Piotr Sawicki <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: unify port reset, add_phy, and remove_phy handlersPiotr Sawicki2-327/+163
Unify the implementations and remove the state handlers. Reported-by: Christoph Hellwig <[email protected]> Signed-off-by: Piotr Sawicki <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: remove port destruct handlerPiotr Sawicki2-40/+0
The handler was never used. Signed-off-by: Piotr Sawicki <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: unify port stop handlersPiotr Sawicki3-62/+24
Implement the stop handlers directly in scic_sds_port_stop() Reported-by: Christoph Hellwig <[email protected]> Signed-off-by: Piotr Sawicki <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: remove port start handlerPiotr Sawicki3-110/+80
remove the handler from the port state handler table and implement the logic directly in scic_sds_port_start(). Signed-off-by: Piotr Sawicki <[email protected]> [remove a level of indirection] Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: merge port ready substates into primary state machinePiotr Sawicki2-256/+210
This conversion was complicated by the fact that the ready state exit routine took unconditional action beyond just stopping the substate machine (like in previous conversions). In order to ensure identical behaviour every state transition needs to be instrumented to catch ready-->!ready transitions and execute scic_sds_port_invalidate_dummy_remote_node() Reported-by: Christoph Hellwig <[email protected]> Signed-off-by: Piotr Sawicki <[email protected]> [fix ready state exit handling] Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: c99 port state handlersPiotr Sawicki1-121/+106
Name the table fields for consistancy and clarity. Signed-off-by: Piotr Sawicki <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: clarify phy to port lookupsDan Williams5-12/+11
While cleaning up the driver it is very tempting to convert scic_sds_get_* macros to their open coded equivalent. They are all just pointer dereferences *except* scic_sds_phy_get_port() which returns NULL if the phy is assigned to the dummy port. Clarify this by renaming it to phy_get_non_dummy_port(). Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: unify phy consume_power handlersDan Williams2-527/+83
Unify the implementations in scic_sds_phy_consume_power_handler(), and kill the state handler plus infrastructure. Reported-by: Christoph Hellwig <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: unify phy event handlersDan Williams2-642/+384
Unify the implementations in scic_sds_phy_event_handler(), and kill the state handler Reported-by: Christoph Hellwig <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: unify phy frame handlersDan Williams2-179/+93
Unify the implementations in scic_sds_phy_frame_handler(), and kill the state handler Reported-by: Christoph Hellwig <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: remove phy destruct handlersDan Williams2-34/+0
Unused infrastructure. Reported-by: Christoph Hellwig <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: unify phy reset handlersDan Williams2-47/+12
Unify the implementations in scic_sds_phy_reset(), and kill the state handler Reported-by: Christoph Hellwig <[email protected]> Signed-off-by: Dan Williams <[email protected]>
2011-07-03isci: unify phy stop handlersDan Williams2-62/+23
Merge all implementations in scic_sds_phy_stop(), and kill the state handler Reported-by: Christoph Hellwig <[email protected]> Signed-off-by: Dan Williams <[email protected]>