2011-05-13 19:55:43

by Dan Williams

[permalink] [raw]
Subject: [GIT PULL] isci merge candidate

[ Linus, only cc'ing you in case a new-driver merge exception can be
entertained at this very late date. James made clear he needed this in
advance of rc7, and this still needs Christoph's ack, but I would be
remiss not to send this after reaching this milestone...]

James, Christoph,

The isci driver team has now completed the major rework items addressed
in the review on linux-scsi (including removal of state handlers,
merging lldd and 'core', cleaning up the source code layout).

git://git.kernel.org/pub/scm/linux/kernel/git/djbw/isci.git master

We are now at a diffstat of:

46 files changed, 27172 insertions(+), 0 deletions(-)

...which is a massive improvement compared to where we started at the
beginning of this year.

161 files changed, 64288 insertions(+), 0 deletions(-)

This driver supports the 6Gb/s SAS/SATA capabilities of the upcoming
Intel(R) C600 series chipset family, where 2.6.39 is likely to be the
latest upstream kernel release available at that time. Below I include
the full diffstat of the current driver, followed by the changes since
the last release. I want to take this opportunity to thank the
reviewers and highlight that they have been credited with Reported-by's
(55 in total), with Christoph coming out on the top of that list with
44.

drivers/scsi/Kconfig | 13 +
drivers/scsi/Makefile | 1 +
drivers/scsi/isci/Makefile | 9 +
drivers/scsi/isci/firmware/Makefile | 19 +
drivers/scsi/isci/firmware/README | 36 +
drivers/scsi/isci/firmware/create_fw.c | 99 +
drivers/scsi/isci/firmware/create_fw.h | 77 +
drivers/scsi/isci/host.c | 3241 ++++++++++++++++++++++
drivers/scsi/isci/host.h | 828 ++++++
drivers/scsi/isci/init.c | 598 ++++
drivers/scsi/isci/isci.h | 554 ++++
drivers/scsi/isci/phy.c | 1454 ++++++++++
drivers/scsi/isci/phy.h | 583 ++++
drivers/scsi/isci/pool.h | 199 ++
drivers/scsi/isci/port.c | 1960 +++++++++++++
drivers/scsi/isci/port.h | 398 +++
drivers/scsi/isci/port_config.c | 826 ++++++
drivers/scsi/isci/probe_roms.c | 270 ++
drivers/scsi/isci/probe_roms.h | 273 ++
drivers/scsi/isci/registers.h | 1934 +++++++++++++
drivers/scsi/isci/remote_device.c | 1548 +++++++++++
drivers/scsi/isci/remote_device.h | 481 ++++
drivers/scsi/isci/remote_node_context.c | 652 +++++
drivers/scsi/isci/remote_node_context.h | 227 ++
drivers/scsi/isci/remote_node_table.c | 598 ++++
drivers/scsi/isci/remote_node_table.h | 188 ++
drivers/scsi/isci/request.c | 3687 +++++++++++++++++++++++++
drivers/scsi/isci/request.h | 805 ++++++
drivers/scsi/isci/sas.h | 228 ++
drivers/scsi/isci/sata.c | 234 ++
drivers/scsi/isci/sata.h | 79 +
drivers/scsi/isci/scu_completion_codes.h | 283 ++
drivers/scsi/isci/scu_event_codes.h | 336 +++
drivers/scsi/isci/scu_remote_node_context.h | 229 ++
drivers/scsi/isci/scu_task_context.h | 942 +++++++
drivers/scsi/isci/scu_unsolicited_frame.h | 117 +
drivers/scsi/isci/state_machine.c | 162 ++
drivers/scsi/isci/state_machine.h | 124 +
drivers/scsi/isci/task.c | 1557 +++++++++++
drivers/scsi/isci/task.h | 368 +++
drivers/scsi/isci/timers.c | 245 ++
drivers/scsi/isci/timers.h | 88 +
drivers/scsi/isci/unsolicited_frame_control.c | 354 +++
drivers/scsi/isci/unsolicited_frame_control.h | 251 ++
firmware/Makefile | 1 +
firmware/isci/isci_firmware.bin.ihex | 16 +
46 files changed, 27172 insertions(+), 0 deletions(-)

--
Dan for the isci driver team

The following changes since commit 364815082e2069616a6129bc4e59a1e80e33853f:

isci: kill scic_sds_remote_device.state_handlers (2011-05-01 17:15:51 -0700)

are available in the git repository at:

git://git.kernel.org/pub/scm/linux/kernel/git/djbw/isci.git master

Adam Gruchala (1):
isci: merge phy substates

Artur Wojcik (1):
isci: unify isci_host data structures

Dan Williams (38):
isci: remove compile-time (Kconfig) silicon configuration
isci: fix ata locking
isci: implement I_T_nexus_reset
isci: unify phy data structures
isci: unify port data structures
isci: move stp request info to scic_sds_request
isci: make sgl explicit/aligned request object member
isci: move task context alignment from run-time to compile time
isci: make command/response iu explicit request object members
isci: unify request data structures
isci: unify constants
isci: move core/controller to host
isci: uplevel register hardware data structures and unsolicited frame handling
isci: uplevel state machine
isci: uplevel request infrastructure
isci: uplevel phy infrastructure
isci: uplevel port infrastructure
isci: merge ssp task management substates into primary state machine
isci: merge smp request substates into primary state machine
isci: merge stp request substates into primary state machine
isci: unify request abort handlers
isci: unify request frame handlers
isci: remove request task context completion state handler
isci: remove the completion and event state handlers
isci: unify phy start handlers
isci: unify phy stop handlers
isci: unify phy reset handlers
isci: remove phy destruct handlers
isci: unify phy frame handlers
isci: unify phy event handlers
isci: unify phy consume_power handlers
isci: clarify phy to port lookups
isci: unify port start_io and complete_io handlers
isci: unify rnc event handlers
isci: unify rnc destruct handlers
isci: unify rnc suspend/resume handlers
isci: unify rnc start{io|task} handlers
isci: add some type safety to the state machine interface

Dave Jiang (16):
isci: Removing unused define SCIC_SDS_4_ENABLED
isci: Convert SATA fis data structures to Linux native
isci: Convert ATA defines to Linux native defines
isci: Convert SAS identify address frame to Linux Native format
isci: Collapsing of phy_type data structure
isci: renaming sas_capabilities to scic_phy_cap
isci: Fixup SSP command IU and task IU
isci: Convert of sci_ssp_response_iu to ssp_response_iu
isci: Fixup of smp request
isci: Converting smp_response to Linux native smp_resp
isci: remove redundant copies of IAF
isci: fixup SAS iaf protocols data structure
isci: Remove SCIC_SWAP_DWORD()
isci: Using Linux SSP frame header
isci: removing intel_*.h headers
isci: Removing unnecessary functions in request.c

Edmund Nadolski (2):
isci: kill scic_controller_get_port_handle function
isci: remove scic_sds_port_increment_request_count

Jacek Danecki (1):
isci: rnc state machine table c99 conversion

Piotr Sawicki (9):
isci: unify request start handlers
isci: c99 port state handlers
isci: merge port ready substates into primary state machine
isci: remove port start handler
isci: unify port stop handlers
isci: remove port destruct handler
isci: unify port reset, add_phy, and remove_phy handlers
isci: remove port frame and event handlers
isci: unify port link_up and link_down handlers

drivers/scsi/Kconfig | 18 -
drivers/scsi/isci/Makefile | 19 +-
drivers/scsi/isci/core/intel_ata.h | 554 ----
drivers/scsi/isci/core/intel_sas.h | 737 -----
drivers/scsi/isci/core/intel_sat.h | 95 -
drivers/scsi/isci/core/intel_sata.h | 280 --
drivers/scsi/isci/core/intel_scsi.h | 474 ---
drivers/scsi/isci/core/sci_base_state.h | 84 -
drivers/scsi/isci/core/sci_controller.h | 69 -
drivers/scsi/isci/core/sci_controller_constants.h | 215 --
drivers/scsi/isci/core/sci_status.h | 409 ---
drivers/scsi/isci/core/sci_util.c | 100 -
drivers/scsi/isci/core/sci_util.h | 108 -
drivers/scsi/isci/core/scic_config_parameters.h | 299 --
drivers/scsi/isci/core/scic_controller.h | 143 -
drivers/scsi/isci/core/scic_io_request.h | 328 --
drivers/scsi/isci/core/scic_phy.h | 306 --
drivers/scsi/isci/core/scic_port.h | 97 -
drivers/scsi/isci/core/scic_sds_controller.c | 3081 ------------------
drivers/scsi/isci/core/scic_sds_controller.h | 599 ----
drivers/scsi/isci/core/scic_sds_phy.c | 2405 --------------
drivers/scsi/isci/core/scic_sds_phy.h | 462 ---
drivers/scsi/isci/core/scic_sds_port.c | 2484 ---------------
drivers/scsi/isci/core/scic_sds_port.h | 450 ---
.../isci/core/scic_sds_port_configuration_agent.h | 108 -
drivers/scsi/isci/core/scic_sds_port_registers.h | 66 -
drivers/scsi/isci/core/scic_sds_request.c | 1800 -----------
drivers/scsi/isci/core/scic_sds_request.h | 484 ---
drivers/scsi/isci/core/scic_sds_smp_request.c | 628 ----
drivers/scsi/isci/core/scic_sds_smp_request.h | 68 -
drivers/scsi/isci/core/scic_sds_ssp_request.c | 243 --
.../scsi/isci/core/scic_sds_stp_packet_request.h | 114 -
drivers/scsi/isci/core/scic_sds_stp_pio_request.h | 105 -
drivers/scsi/isci/core/scic_sds_stp_request.c | 1813 -----------
drivers/scsi/isci/core/scic_sds_stp_request.h | 196 --
drivers/scsi/isci/core/scic_task_request.h | 147 -
drivers/scsi/isci/core/scu_constants.h | 151 -
drivers/scsi/isci/core/scu_viit_data.h | 178 --
drivers/scsi/isci/host.c | 2869 +++++++++++++++++-
drivers/scsi/isci/host.h | 671 ++++-
drivers/scsi/isci/init.c | 18 +-
drivers/scsi/isci/isci.h | 503 +++-
drivers/scsi/isci/phy.c | 1397 ++++++++-
drivers/scsi/isci/phy.h | 527 +++-
drivers/scsi/isci/{core/sci_pool.h => pool.h} | 0
drivers/scsi/isci/port.c | 1907 ++++++++++--
drivers/scsi/isci/port.h | 343 ++-
...ds_port_configuration_agent.c => port_config.c} | 264 +-
drivers/scsi/isci/probe_roms.c | 2 -
drivers/scsi/isci/probe_roms.h | 125 +-
.../isci/{core/scu_registers.h => registers.h} | 110 +-
drivers/scsi/isci/remote_device.c | 152 +-
drivers/scsi/isci/remote_device.h | 3 +-
drivers/scsi/isci/remote_node_context.c | 1135 ++-----
drivers/scsi/isci/remote_node_context.h | 105 +-
drivers/scsi/isci/remote_node_table.c | 2 -
drivers/scsi/isci/remote_node_table.h | 9 +-
drivers/scsi/isci/request.c | 3305 +++++++++++++++++---
drivers/scsi/isci/request.h | 485 +++-
drivers/scsi/isci/sas.h | 228 ++
drivers/scsi/isci/sata.c | 138 +-
drivers/scsi/isci/sata.h | 4 -
drivers/scsi/isci/sci_environment.h | 125 -
.../scsi/isci/{core => }/scu_completion_codes.h | 0
drivers/scsi/isci/{core => }/scu_event_codes.h | 0
drivers/scsi/isci/{core => }/scu_task_context.h | 0
.../scsi/isci/{core => }/scu_unsolicited_frame.h | 0
.../sci_base_state_machine.c => state_machine.c} | 26 +-
.../sci_base_state_machine.h => state_machine.h} | 71 +-
drivers/scsi/isci/task.c | 322 +--
drivers/scsi/isci/task.h | 51 +-
drivers/scsi/isci/timers.c | 1 +
...frame_control.c => unsolicited_frame_control.c} | 20 +-
...frame_control.h => unsolicited_frame_control.h} | 19 +-
74 files changed, 12145 insertions(+), 22709 deletions(-)
delete mode 100644 drivers/scsi/isci/core/intel_ata.h
delete mode 100644 drivers/scsi/isci/core/intel_sas.h
delete mode 100644 drivers/scsi/isci/core/intel_sat.h
delete mode 100644 drivers/scsi/isci/core/intel_sata.h
delete mode 100644 drivers/scsi/isci/core/intel_scsi.h
delete mode 100644 drivers/scsi/isci/core/sci_base_state.h
delete mode 100644 drivers/scsi/isci/core/sci_controller.h
delete mode 100644 drivers/scsi/isci/core/sci_controller_constants.h
delete mode 100644 drivers/scsi/isci/core/sci_status.h
delete mode 100644 drivers/scsi/isci/core/sci_util.c
delete mode 100644 drivers/scsi/isci/core/sci_util.h
delete mode 100644 drivers/scsi/isci/core/scic_config_parameters.h
delete mode 100644 drivers/scsi/isci/core/scic_controller.h
delete mode 100644 drivers/scsi/isci/core/scic_io_request.h
delete mode 100644 drivers/scsi/isci/core/scic_phy.h
delete mode 100644 drivers/scsi/isci/core/scic_port.h
delete mode 100644 drivers/scsi/isci/core/scic_sds_controller.c
delete mode 100644 drivers/scsi/isci/core/scic_sds_controller.h
delete mode 100644 drivers/scsi/isci/core/scic_sds_phy.c
delete mode 100644 drivers/scsi/isci/core/scic_sds_phy.h
delete mode 100644 drivers/scsi/isci/core/scic_sds_port.c
delete mode 100644 drivers/scsi/isci/core/scic_sds_port.h
delete mode 100644 drivers/scsi/isci/core/scic_sds_port_configuration_agent.h
delete mode 100644 drivers/scsi/isci/core/scic_sds_port_registers.h
delete mode 100644 drivers/scsi/isci/core/scic_sds_request.c
delete mode 100644 drivers/scsi/isci/core/scic_sds_request.h
delete mode 100644 drivers/scsi/isci/core/scic_sds_smp_request.c
delete mode 100644 drivers/scsi/isci/core/scic_sds_smp_request.h
delete mode 100644 drivers/scsi/isci/core/scic_sds_ssp_request.c
delete mode 100644 drivers/scsi/isci/core/scic_sds_stp_packet_request.h
delete mode 100644 drivers/scsi/isci/core/scic_sds_stp_pio_request.h
delete mode 100644 drivers/scsi/isci/core/scic_sds_stp_request.c
delete mode 100644 drivers/scsi/isci/core/scic_sds_stp_request.h
delete mode 100644 drivers/scsi/isci/core/scic_task_request.h
delete mode 100644 drivers/scsi/isci/core/scu_constants.h
delete mode 100644 drivers/scsi/isci/core/scu_viit_data.h
rename drivers/scsi/isci/{core/sci_pool.h => pool.h} (100%)
rename drivers/scsi/isci/{core/scic_sds_port_configuration_agent.c => port_config.c} (80%)
rename drivers/scsi/isci/{core/scu_registers.h => registers.h} (95%)
create mode 100644 drivers/scsi/isci/sas.h
delete mode 100644 drivers/scsi/isci/sci_environment.h
rename drivers/scsi/isci/{core => }/scu_completion_codes.h (100%)
rename drivers/scsi/isci/{core => }/scu_event_codes.h (100%)
rename drivers/scsi/isci/{core => }/scu_task_context.h (100%)
rename drivers/scsi/isci/{core => }/scu_unsolicited_frame.h (100%)
rename drivers/scsi/isci/{core/sci_base_state_machine.c => state_machine.c} (86%)
rename drivers/scsi/isci/{core/sci_base_state_machine.h => state_machine.h} (71%)
rename drivers/scsi/isci/{core/scic_sds_unsolicited_frame_control.c => unsolicited_frame_control.c} (96%)
rename drivers/scsi/isci/{core/scic_sds_unsolicited_frame_control.h => unsolicited_frame_control.h} (93%)

commit de2ac6c33c407c8bf73549b95822ac310ffcae94
Author: Dave Jiang <[email protected]>
Date: Fri Apr 22 06:39:48 2011 +0000

isci: Removing unused define SCIC_SDS_4_ENABLED

Signed-off-by: Dave Jiang <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit f3bc679e4267bee67eaf677d360b9e102e9d7d68
Author: Dan Williams <[email protected]>
Date: Wed May 4 13:49:32 2011 -0700

isci: remove compile-time (Kconfig) silicon configuration

Pre-production silicon support is deprecated, and will be removed
completely in the future.

Signed-off-by: Dan Williams <[email protected]>

commit 2810ee48ca4bb953e4aba11c8d7e53bd3ea7c0d3
Author: Dave Jiang <[email protected]>
Date: Wed May 4 15:02:02 2011 -0700

isci: Convert SATA fis data structures to Linux native

Converting of sata_fis_reg_d2h to dev_to_host_fis
Converting of sata_fis_reg_h2d to host_to_dev_fis

Signed-off-by: Dave Jiang <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit b997bba32c8b5ad364a8f4e5d72fb0924751f7c9
Author: Dave Jiang <[email protected]>
Date: Wed May 4 15:02:03 2011 -0700

isci: Convert ATA defines to Linux native defines

* Removing all intel_sata and intel_ata defines
* Removing the usage of SAT_PROTOCOL_*. We can get everything from sas_task
* Moved SATA FIS types to local sas.h. These defines will have to go
into include/scsi/sas.h eventually.
* Added offsets for SATA FIS header in order to grab the values

Signed-off-by: Dave Jiang <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit 3d5a05d40473d3489ba3f3dc785d39174daf3b68
Author: Dave Jiang <[email protected]>
Date: Wed May 4 15:37:52 2011 -0700

isci: Convert SAS identify address frame to Linux Native format

Convert struct sci_sas_identify_address_frame to struct sas_identify_frame

Signed-off-by: Dave Jiang <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit a438e964357df049235d93eee837f431e67adb04
Author: Dave Jiang <[email protected]>
Date: Wed May 4 16:13:17 2011 -0700

isci: Collapsing of phy_type data structure

Collapsing of struct scic_sds_phy phy_type data structure

Signed-off-by: Dave Jiang <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit ab004c814754df4ab8534fdcf57a1e5f7ff1b162
Author: Dave Jiang <[email protected]>
Date: Wed May 4 16:16:44 2011 -0700

isci: renaming sas_capabilities to scic_phy_cap

This seems to be a data structure that represents the phy capabilities
register from the hardware and has nothing to do with SAS data structs.
Moving and fixup

Signed-off-by: Dave Jiang <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit b3b4593bedf134f8edb3f212583c57dacb19f34d
Author: Dave Jiang <[email protected]>
Date: Wed May 4 17:44:54 2011 -0700

isci: Fixup SSP command IU and task IU

Fixup of SSP command IU and SSP task IU to something that looks like Linux

Signed-off-by: Dave Jiang <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit af4522b2b7cb3c9084ec48b2cf943e36a0c6e3aa
Author: Dave Jiang <[email protected]>
Date: Wed May 4 17:53:24 2011 -0700

isci: Convert of sci_ssp_response_iu to ssp_response_iu

Converting to Linux native format. However the isci driver does a lot of
the calculation based on the max size of this data structure and the
Linux data structure only has a pointer to the response data. Thus the
sizeof(struct ssp_response_iu) will be incorrect and we need to define
the max size.

Signed-off-by: Dave Jiang <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit 57719e478ca7f1cd31c408060aa57b3cffa99b4b
Author: Dave Jiang <[email protected]>
Date: Wed May 4 18:01:22 2011 -0700

isci: Fixup of smp request

The struct smp_request data structure has be fixed up for Linux consumption.
This probably should go to scsi/sas.h eventually.

Signed-off-by: Dave Jiang <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit 114d9668d68a43d18376949dec917eee254d1e53
Author: Dave Jiang <[email protected]>
Date: Wed May 4 18:07:09 2011 -0700

isci: Converting smp_response to Linux native smp_resp

Signed-off-by: Dave Jiang <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit 4ed8872de3b76708819eb510ef3982ce35ae627f
Author: Dave Jiang <[email protected]>
Date: Wed May 4 18:08:35 2011 -0700

isci: remove redundant copies of IAF

We need to remove the extra copies of identify address frame that's
being kept around. We only need the one copy that libsas is using.

Signed-off-by: Dave Jiang <[email protected]>
[further cleanups]
Signed-off-by: Dan Williams <[email protected]>

commit e7e68e596c9bf0c3dc35b101f0d46b14b6905fcd
Author: Dave Jiang <[email protected]>
Date: Wed May 4 18:22:33 2011 -0700

isci: fixup SAS iaf protocols data structure

Moved the actual data structure that's read from the phy register to phy
header. Removed the parsing of identify address frame protocol bits as
that seemed not necessary and we can use existing information.

Signed-off-by: Dave Jiang <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit 7eac8f6083bd6b31f99492cb720c2ddacbf4c3c1
Author: Dave Jiang <[email protected]>
Date: Wed May 4 18:28:32 2011 -0700

isci: Remove SCIC_SWAP_DWORD()

Use Linux native swab32() call instead of SCIC_SWAP_DWORD().

We need to swab() because the hardware munges the data into a
"big-endian dword" stream which is byte-swapped from the sas definition
regardless of host endian.

Signed-off-by: Dave Jiang <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit 390b33cf7630ebe2aa18574da15db687f64c53de
Author: Dave Jiang <[email protected]>
Date: Wed May 4 18:45:05 2011 -0700

isci: Using Linux SSP frame header

Removing of struct sci_ssp_frame_header and migrate to struct ssp_frame_hdr.

Signed-off-by: Dave Jiang <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit 70e346fccd1745e5828c6ecaa11c23cf2c66a96b
Author: Dave Jiang <[email protected]>
Date: Wed May 4 19:01:01 2011 -0700

isci: removing intel_*.h headers

Signed-off-by: Dave Jiang <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit 5109c4077e06d00fa50c30c231251dee2768a5a9
Author: Dan Williams <[email protected]>
Date: Thu May 5 17:47:44 2011 -0700

isci: fix ata locking

Upstream commit a29b5dad "libata: fix locking for sas paths" switched
libsas ata locking to the ata_host lock. We need to do the same when
returning ata tasks from the execute path.

Signed-off-by: Dan Williams <[email protected]>

commit fd0ef2c28ff6e6040f31bc4c1206ef9e0fb677e1
Author: Dan Williams <[email protected]>
Date: Mon May 2 13:59:25 2011 -0700

isci: implement I_T_nexus_reset

This is a requirement for 2.6.39's new libata eh.

Still some questions about lldd_dev_gone racing against dev->lldd_dev
lookups, but we are at least no more broken than mvsas in this regard.

We also short-circuit I_T_nexus_reset invocations from the device
discovery path (IDEV_EH similar to MVS_DEV_EH) to filter out the
resulting domain rediscoveries triggered by the reset.

Signed-off-by: Dan Williams <[email protected]>

commit bf128b79b7a6425891c5b11f2a24f10ee5d64ee0
Author: Artur Wojcik <[email protected]>
Date: Wed May 4 07:58:16 2011 +0000

isci: unify isci_host data structures

Make it explicit that isci_host and scic_sds_controller are one in the same
object.

Signed-off-by: Artur Wojcik <[email protected]>
[removed ->ihost back pointer]
Signed-off-by: Dan Williams <[email protected]>

commit 8b5b701b86d89c70732b4359526e4f980c44f146
Author: Dave Jiang <[email protected]>
Date: Fri May 6 02:17:37 2011 +0000

isci: Removing unnecessary functions in request.c

No need for wrappers, just access sas_task directly.

Signed-off-by: Dave Jiang <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit c76dd82133f4e53a7aef0c3c746b86449e9ded1e
Author: Edmund Nadolski <[email protected]>
Date: Thu May 5 01:11:43 2011 +0000

isci: kill scic_controller_get_port_handle function

This function is just overkill and its usage is inconsistent. Replace
with inlined code.

Signed-off-by: Edmund Nadolski <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit 5f475beafa9c124844c54fb7380c655793e6d00f
Author: Edmund Nadolski <[email protected]>
Date: Thu May 5 01:11:49 2011 +0000

isci: remove scic_sds_port_increment_request_count

Removes excessive encapsulation function.

Signed-off-by: Edmund Nadolski <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit 8498b81db8ab656b8675e04aedc903f518f096ec
Author: Jacek Danecki <[email protected]>
Date: Tue May 3 04:21:07 2011 +0000

isci: rnc state machine table c99 conversion

This makes the subsequent patches to delete rnc->state_handler more
clear.

Signed-off-by: Jacek Danecki <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit 9161854f50bdc6f8f150e810f7b5c52806d604aa
Author: Dan Williams <[email protected]>
Date: Fri May 6 17:36:38 2011 -0700

isci: unify phy data structures

Make scic_sds_phy a member of isci_phy and merge their lifetimes which
means removing the phy table from scic_sds_controller in favor of the
one at that isci_host level.

Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit 29687c7bc306079af7e103ac6a9256c901c68fc9
Author: Dan Williams <[email protected]>
Date: Sat May 7 10:11:43 2011 -0700

isci: unify port data structures

Make scic_sds_port a member of isci_port and merge their lifetimes which
means removing the port table from scic_sds_controller in favor of the
one at the isci_host level. Merge ihost->sas_ports into ihost->ports.
_
Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit 29ac6fee477cec1b83c5d27d4cffad272156bcbe
Author: Dan Williams <[email protected]>
Date: Sat May 7 15:59:09 2011 -0700

isci: move stp request info to scic_sds_request

In preparation for unifying allocation of all request information make stp
data available in all requests. Incidentally collapse indentation.

Signed-off-by: Dan Williams <[email protected]>

commit 03e2d94c2e3dcdfb127d7e347b55021f917e2deb
Author: Dan Williams <[email protected]>
Date: Sun May 8 01:56:57 2011 -0700

isci: make sgl explicit/aligned request object member

Towards unifying request objects we need all members to be defined in the
object and not carved out of anonymous buffer space.

Signed-off-by: Dan Williams <[email protected]>

commit 3a2629eab4c972daef0240ff6da602b3a3916590
Author: Dan Williams <[email protected]>
Date: Sat May 7 19:07:14 2011 -0700

isci: move task context alignment from run-time to compile time

Remove usage of PTR_ALIGN by arranging for the task context to be aligned by
the compiler. Another step towards unifying isci_request and
scic_sds_request. Once this is complete the task context in the request can
likely be removed in favor of building the task directly to tc memory (see:
scic_sds_controller_copy_task_context). It's not clear why this needs to be
cacheline aligned if we just end up copying before submission...

Signed-off-by: Dan Williams <[email protected]>

commit f3aa5407b946f61e9dd21786cb882a6421763fc1
Author: Dan Williams <[email protected]>
Date: Sun May 8 02:35:32 2011 -0700

isci: make command/response iu explicit request object members

Final elimination of the anonymous data at the end of the request
structure.

Signed-off-by: Dan Williams <[email protected]>

commit 201ad9b45a5f0597c12c46cf44745c46d3bc7541
Author: Dan Williams <[email protected]>
Date: Sun May 8 11:47:15 2011 -0700

isci: unify request data structures

Make scic_sds_request a proper member of isci_request. Also let's us
get rid of the dma pool object size tracking since we now know that all
requests are sizeof(isci_request). While cleaning up the construct
routine incidentally replaced SCI_FIELD_OFFSET with offsetof.

Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit f6edc9bb505c709561ad0b9b9caa2bc2461247b0
Author: Dan Williams <[email protected]>
Date: Sun May 8 15:49:15 2011 -0700

isci: unify constants

cross driver constants are spread out over multiple header files, consolidate
them into isci.h, and push some includes out to the source files that need
them.

TODO: remove SCI_MODE_SIZE infrastructure.
TODO: task.h is full of inlines that are too large

Signed-off-by: Dan Williams <[email protected]>

commit 933dd596a1e25eac842ec8c5c03ac53ae94b4825
Author: Dan Williams <[email protected]>
Date: Sun May 8 17:34:44 2011 -0700

isci: move core/controller to host

Now that the data structures are unified unify the implementation in
host.[ch] and cleanup namespace pollution.

Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit fa7c74b1f7f251eb7634a79ac1277e24b6bd7204
Author: Dan Williams <[email protected]>
Date: Sun May 8 21:36:46 2011 -0700

isci: uplevel register hardware data structures and unsolicited frame handling

Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit b5be45e2f19bf02f4a86db0c2de897c3de0f7776
Author: Dan Williams <[email protected]>
Date: Sun May 8 22:15:10 2011 -0700

isci: uplevel state machine

unify core/sci_base_state.h and core/sci_base_state_machine.[ch] into
state_machine.[ch]

Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit 234ef4864c222af1eb63ad4fa69ebcdf2f50fa19
Author: Dan Williams <[email protected]>
Date: Tue May 10 02:28:45 2011 -0700

isci: uplevel request infrastructure

* Consolidate tiny header files
* Move files out of core/ (drop core/scic_sds_ prefix)
* Merge core/scic_sds_request.[ch] into request.[ch]
* Cleanup request.c namespace (clean forward declarations and global
namespace pollution)

Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit 9adac25a927f4465b0e678178709b43d8adf3f41
Author: Dan Williams <[email protected]>
Date: Tue May 10 02:28:45 2011 -0700

isci: uplevel phy infrastructure

Merge core/scic_sds_phy.[ch] into phy.[ch]

Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit d18e754f0733203e9ae7b3d7e4fe3c5419516da2
Author: Dan Williams <[email protected]>
Date: Tue May 10 02:28:46 2011 -0700

isci: uplevel port infrastructure

* Move port configuration agent implementation
* Merge core/scic_sds_port.[ch] into port.[ch]

Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit 7a2b2f700b9f6834759706b003894f06944e2383
Author: Dan Williams <[email protected]>
Date: Tue May 10 02:28:47 2011 -0700

isci: merge ssp task management substates into primary state machine

Remove usage of the request substate machine for ssp task management
requests identified by:
ireq->ttype == tmf_task && dev->dev_type == SAS_END_DEV;

The only routine that checks the base 'started' state is
scic_sds_io_request_tc_completion which calls the substate machine
handler if we are not in the 'started' state or we are 'started' and no
substate machine is defined. This routine requires no conversion
because we have transitioned out of 'started' and the substate routine
will be called naturally as a result.

There are also no side effects of this conversion on exiting the
'started', state because it only stops the substate machine, which is no
longer relevant for this transaction type.

Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit 9172b21beaaf8160eae5d50143c932a16677929a
Author: Dan Williams <[email protected]>
Date: Tue May 10 02:28:48 2011 -0700

isci: merge smp request substates into primary state machine

Remove usage of the request substate machine for smp requests identified by:
task->task_proto == SAS_PROTOCOL_SMP

While merging over the smp_request infrastructure noticed that all the
assign buffer implementations are now equal, so moved it to
scic_sds_general_request_construct.

Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit 12ce26b30513806128ba311354acbedfadf48781
Author: Dan Williams <[email protected]>
Date: Tue May 10 02:28:49 2011 -0700

isci: merge stp request substates into primary state machine

Remove usage of the request substate machine for stp requests, and kill
the request substate infrastructure.

Similar to the previous conversions this adds the substates to the
primary state machine and arranges for the 'started' state to transition
to the proper stp substate.

Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit 6234bd737b5d0a06d201ec7ce204cc85f9e1d371
Author: Dan Williams <[email protected]>
Date: Tue May 10 02:39:11 2011 -0700

isci: unify request abort handlers

Unify the implementation in scic_sds_io_request_terminate and kill the state
handler.

Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit 1761433a3c3bcb602d09bfe0de1c2de0d343f09d
Author: Piotr Sawicki <[email protected]>
Date: Tue May 10 23:50:32 2011 +0000

isci: unify request start handlers

Unify the implementation in scic_sds_request_start and kill the state
handler.

Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Piotr Sawicki <[email protected]>
[remove scic_sds_request_constructed_state_start_handler]
Signed-off-by: Dan Williams <[email protected]>

commit 32f7215e45b9ab5b3ffb6f83b2dae4ac9f12627b
Author: Dan Williams <[email protected]>
Date: Wed May 11 08:27:47 2011 -0700

isci: unify request frame handlers

Unify the implementation in scic_sds_io_request_frame_handler and kill
the state handler.

Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit e0b70d098c39108bbae012446dab630cb434676a
Author: Dan Williams <[email protected]>
Date: Wed May 11 08:27:47 2011 -0700

isci: remove request task context completion state handler

Unlike the other conversions this only updates
scic_sds_io_request_tc_completion() to call the old state handlers directly
(with less verbose names). This was done for future patch readability, the
implementations have only minor differences for different completion codes.
Without a reference to the function name it would be difficult to dicern which
state is being updated. Considered changing the order to look up the
completion code before the state but that was not a clean conversion either.

Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit d25de0260c436a240116f54aa4a9a74a18a052ac
Author: Dan Williams <[email protected]>
Date: Wed May 11 08:29:56 2011 -0700

isci: remove the completion and event state handlers

With these handlers gone the rest of the state handler infrastructure is
removed.

Added some WARN_ONCEs where previously we would cause NULL pointer
dereferences or silently run handlers from a previous state.

Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit fee682b2523209be5c0f85a2b01e88b981da014e
Author: Adam Gruchala <[email protected]>
Date: Tue May 10 23:54:23 2011 +0000

isci: merge phy substates

Merged states and substates into one state machine, as we always
unconditionally transitioned to the substate machine it was straightforward to
enter that substate from the starting state.

Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Adam Gruchala <[email protected]>
[fixed construction, starting_state_enter, and starting check]
Signed-off-by: Dan Williams <[email protected]>

commit 6f48c086d209242ba577d952cae54614364f9d4e
Author: Dan Williams <[email protected]>
Date: Thu May 12 03:44:24 2011 -0700

isci: unify phy start handlers

Implement all handlers in scic_sds_phy_start(), and kill the state handler

Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit 8b420c28b084eae3c0e5fe61fe47f5e7f6459c7e
Author: Dan Williams <[email protected]>
Date: Thu May 12 04:01:03 2011 -0700

isci: unify phy stop handlers

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]>

commit bccca56e9d4dae9714725ff643f8e3feffd828eb
Author: Dan Williams <[email protected]>
Date: Thu May 12 04:02:07 2011 -0700

isci: unify phy reset handlers

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]>

commit c6791c98bf4a265696f88536f4ed14301d4ec019
Author: Dan Williams <[email protected]>
Date: Thu May 12 04:10:41 2011 -0700

isci: remove phy destruct handlers

Unused infrastructure.

Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit b661e4cbaa1b11cc3e08d593f0de6466bf9ce58c
Author: Dan Williams <[email protected]>
Date: Thu May 12 04:17:51 2011 -0700

isci: unify phy frame handlers

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]>

commit c8a8f82cf6b4d87a54d1a64c2f3f81c631db26f1
Author: Dan Williams <[email protected]>
Date: Thu May 12 04:27:29 2011 -0700

isci: unify phy event handlers

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]>

commit f303b153b8d91272423a5719c3f1a47cc15085bf
Author: Dan Williams <[email protected]>
Date: Thu May 12 04:51:41 2011 -0700

isci: unify phy consume_power handlers

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]>

commit cc6df933c4ca68992b805873fd0a60f7aad27209
Author: Dan Williams <[email protected]>
Date: Thu May 12 06:00:31 2011 -0700

isci: clarify phy to port lookups

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]>

commit 4dd184072b1bcdd0bc5f1b76c821a9a32679b66c
Author: Piotr Sawicki <[email protected]>
Date: Wed May 11 23:52:16 2011 +0000

isci: c99 port state handlers

Name the table fields for consistancy and clarity.

Signed-off-by: Piotr Sawicki <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit 57754861a6f1a1f31eae0c48e1b4d0b4db2f93d4
Author: Piotr Sawicki <[email protected]>
Date: Wed May 11 23:52:21 2011 +0000

isci: merge port ready substates into primary state machine

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]>

commit 51fac19d6444e74916f4d6b0eb9f0383fed2ed59
Author: Piotr Sawicki <[email protected]>
Date: Wed May 11 23:52:26 2011 +0000

isci: remove port start handler

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]>

commit f839d90f59a2cba316665260639e09a27f68f044
Author: Piotr Sawicki <[email protected]>
Date: Wed May 11 23:52:31 2011 +0000

isci: unify port stop handlers

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]>

commit 014de5fc8d4e3792d3ccee80bd66a8029a694edb
Author: Piotr Sawicki <[email protected]>
Date: Wed May 11 23:52:37 2011 +0000

isci: remove port destruct handler

The handler was never used.

Signed-off-by: Piotr Sawicki <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit b62ddc1249ca1c356914dede54d890e5582d4e4a
Author: Piotr Sawicki <[email protected]>
Date: Thu May 12 19:10:03 2011 +0000

isci: unify port reset, add_phy, and remove_phy handlers

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]>

commit 523fc82d825ba522dff4db6ceee3c5550f51f3ab
Author: Piotr Sawicki <[email protected]>
Date: Thu May 12 19:10:08 2011 +0000

isci: remove port frame and event handlers

Unused infrastructure.

Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Piotr Sawicki <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit a04243ef266acff0cebc684b45da3bb73181fe43
Author: Piotr Sawicki <[email protected]>
Date: Thu May 12 19:10:14 2011 +0000

isci: unify port link_up and link_down handlers

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]>

commit 4c7a6cdae93385ad4025d2861cba0b411d3d68ff
Author: Dan Williams <[email protected]>
Date: Thu May 12 07:16:06 2011 -0700

isci: unify port start_io and complete_io handlers

Unify the handlers and kill the state handler infrastructure.

Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit db4d55bf4774b589bb4ffcbef114635bbb542208
Author: Dan Williams <[email protected]>
Date: Thu May 12 07:46:59 2011 -0700

isci: unify rnc event handlers

Unify rnc event handlers and delete the state handler.

Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit d28f3adba2228d55a8f5479a3e3bb21327ab70d3
Author: Dan Williams <[email protected]>
Date: Thu May 12 08:26:56 2011 -0700

isci: unify rnc destruct handlers

Unify rnc destruct handlers and delete the state handler.

Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit ae0b906dad84c094c588fc79dc798f01b537515b
Author: Dan Williams <[email protected]>
Date: Thu May 12 08:50:23 2011 -0700

isci: unify rnc suspend/resume handlers

Unify rnc suspend/resume handlers and delete the state handlers.

Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Dan Williams <[email protected]>

commit 42944bd5c4ef835811019f3ee4f83d4d94716fbf
Author: Dan Williams <[email protected]>
Date: Thu May 12 09:27:52 2011 -0700

isci: unify rnc start{io|task} handlers

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]>

commit b0733ad3d6efab9659bd77b405587b36d03fe276
Author: Dan Williams <[email protected]>
Date: Thu May 12 07:42:17 2011 -0700

isci: add some type safety to the state machine interface

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-05-13 20:35:18

by Linus Torvalds

[permalink] [raw]
Subject: Re: [GIT PULL] isci merge candidate

On Fri, May 13, 2011 at 1:14 PM, Dan Williams <[email protected]> wrote:
>
> [ Linus, only cc'ing you in case a new-driver merge exception can be
> entertained at this very late date. ?James made clear he needed this in
> advance of rc7, and this still needs Christoph's ack, but I would be
> remiss not to send this after reaching this milestone...]

So I can merge new drivers at any stage in the development cycle, but
I only do that for drivers with mass appeal.

What's the likely user base of this? Why is it a SCSI driver rather
than SATA? Why is it so f&*%ing big?

The size may be a massive improvement over what it has been, but if
this is some kind of replacement for the current AHCI situation, it's
still a massive step backwards.

So what does that mean in practical terms:

"This driver supports the 6Gb/s SAS/SATA capabilities of the upcoming
Intel(R) C600 series chipset family"

exactly? What's the market for that C600 series? Does that chipset
also do some AHCI emulation capability (making this driver be a "if
you need full capabilties thing" etc) Yadda yadda.

I don't want to merge 30k lines of driver that nobody will practically
speaking actually use.

Linus

2011-05-13 21:45:15

by Dan Williams

[permalink] [raw]
Subject: Re: [GIT PULL] isci merge candidate

On 05/13/2011 01:34 PM, Linus Torvalds wrote:
> On Fri, May 13, 2011 at 1:14 PM, Dan Williams<[email protected]> wrote:
>>
>> [ Linus, only cc'ing you in case a new-driver merge exception can be
>> entertained at this very late date. James made clear he needed this in
>> advance of rc7, and this still needs Christoph's ack, but I would be
>> remiss not to send this after reaching this milestone...]
>
> So I can merge new drivers at any stage in the development cycle, but
> I only do that for drivers with mass appeal.
>
> What's the likely user base of this?

This storage controller is integrated into the chipset that will be the
basis for upcoming workstation / server platforms.

> Why is it a SCSI driver rather than SATA? Why is it so f&*%ing big?

It's a SAS (serial-attached-scsi) driver so it ties in to libsas rather
than libata (libsas itself ties in to libata for tunnelling SATA
protocol over SAS). The size is attributable to the fact that all
protocol handling for non-fast path i/o is handled by software. There
are still cleanups that can be made, but likely not on the on the same
order of what we have already done.

> The size may be a massive improvement over what it has been, but if
> this is some kind of replacement for the current AHCI situation, it's
> still a massive step backwards.

So it's not a replacement for AHCI and AHCI will still be included in
this chipset. However, AHCI in this timeframe only gives you up to
4-ports at 3Gb/s and 2-ports at 6Gb/s direct attached SATA. This
controller in comparison includes up to 8-ports 6Gb/s of SAS/SATA
connectivity allowing drives to optionally be connected through an
expander topology.

> So what does that mean in practical terms:
>
> "This driver supports the 6Gb/s SAS/SATA capabilities of the upcoming
> Intel(R) C600 series chipset family"
>
> exactly? What's the market for that C600 series?

Standard workstations and servers.

> Does that chipset
> also do some AHCI emulation capability (making this driver be a "if
> you need full capabilties thing" etc) Yadda yadda.

Yes. We expect the majority of platforms to populate at least some of
the AHCI ports. That being said populating zero AHCI ports is also a
valid configuration option and some platform vendors may take this route.

> I don't want to merge 30k lines of driver that nobody will practically
> speaking actually use.

I will note that if a user is on a platform without AHCI they will be
missing ATAPI support as that was a feature of the isci driver that was
deferred while the cleanup/rewrite was happening.

--
Dan

2011-05-13 21:46:14

by Jeff Garzik

[permalink] [raw]
Subject: Re: [GIT PULL] isci merge candidate

On 05/13/2011 04:34 PM, Linus Torvalds wrote:
> What's the likely user base of this?

Pretty big, I imagine.

> Why is it a SCSI driver rather
> than SATA?

It's "server" SAS hardware, a la mvsas driver. SAS hardware is that
"lovely" superset of SATA + SCSI, where SATA is one of several frame
formats the device may speak. So it is definitely a SCSI driver, that
hooks into SATA processing via ata_sas_* hooks and functions.

> Why is it so f&*%ing big?

1. Because it's a SAS driver :)

2. Because it used to be an ugly vendor driver, now in the process of
being cleaned up, rather than a nice, clean from-scratch Linux driver.

So it's a bit of a tough call. It still needs more hammering and
cleaning, but if this is what winds up on all Intel "server" boards that
makes it pretty important.

Jeff

2011-05-13 22:17:01

by Benjamin Herrenschmidt

[permalink] [raw]
Subject: Re: [GIT PULL] isci merge candidate


> It's a SAS (serial-attached-scsi) driver so it ties in to libsas rather
> than libata (libsas itself ties in to libata for tunnelling SATA
> protocol over SAS). The size is attributable to the fact that all
> protocol handling for non-fast path i/o is handled by software. There
> are still cleanups that can be made, but likely not on the on the same
> order of what we have already done.

How much of that non-fast-path could/should be in generic code vs. in
the driver specific code ? IE. If somebody comes up with another "dumb"
SAS adapter tomorrow that doesn't do all that magic in an offload CPU,
is any of that code re-usable ?

Cheers,
Ben.

2011-05-14 08:49:53

by Christoph Hellwig

[permalink] [raw]
Subject: Re: [GIT PULL] isci merge candidate

On Fri, May 13, 2011 at 01:14:40PM -0700, Dan Williams wrote:
> The isci driver team has now completed the major rework items addressed
> in the review on linux-scsi (including removal of state handlers,
> merging lldd and 'core', cleaning up the source code layout).

I've looked over the driver a bit and I'm quite impressed with what
you're archived in the short time since taking over the driver from
whoever came up with the mess that it was initially.

I don't think you're quite done yet with the todo list that was given
to you yet. One thing that springs to mind is wrappers in timers.c,
which are not just ugly, but in case of isci_task_execute_tmf is plain
wrong as the implementation assumes all timers have the same lifetime
rules as the isci_host. You'll need to at least replace that last usage
with a direct wait_for_completion_timeout, and even better get rid
of it entirely.

Also not quite done yet, although I'm happy with postponing that for now
is the unification of the various data structures from the different
layers of the original driver, e.g. isci_phy vs scic_sds_phy,
isci_port vs scic_sds_port, isci_remote_device vs scic_sds_remote_device
and isci_request vs scic_sds_request.

And of course there's a lot of room for additional further cleanups
that should be able to shave off another couple thousands of lines, but
these never were on the plate for the initial merge anyway.

2011-05-17 00:39:30

by Dan Williams

[permalink] [raw]
Subject: Re: [GIT PULL] isci merge candidate

On Fri, May 13, 2011 at 3:16 PM, Benjamin Herrenschmidt
<[email protected]> wrote:
>
>> It's a SAS (serial-attached-scsi) driver so it ties in to libsas rather
>> than libata (libsas itself ties in to libata for tunnelling SATA
>> protocol over SAS). ?The size is attributable to the fact that all
>> protocol handling for non-fast path i/o is handled by software. ?There
>> are still cleanups that can be made, but likely not on the on the same
>> order of what we have already done.
>
> How much of that non-fast-path could/should be in generic code vs. in
> the driver specific code ? IE. If somebody comes up with another "dumb"

I prefer the word "thin" :-), where "fat" refers to controllers that
hide this logic in offload cpu's, firmware, and or custom asics.

> SAS adapter tomorrow that doesn't do all that magic in an offload CPU,
> is any of that code re-usable ?

At a minimum It would require a more verbose interface to
libsas/libata (or new libframe?) to allow us to deliver raw
unsolicited frames into common protocol handlers. The concern would
be wrangling different sets of protocol states and exception
conditions that individual vendors would choose to/not to offload. To
date no other libsas based controller has taken this approach.

--
Dan

2011-05-17 00:47:26

by Jeff Garzik

[permalink] [raw]
Subject: Re: [GIT PULL] isci merge candidate

On Mon, May 16, 2011 at 8:39 PM, Dan Williams <[email protected]> wrote:
> At a minimum It would require a more verbose interface to
> libsas/libata (or new libframe?) to allow us to deliver raw
> unsolicited frames into common protocol handlers.

...which is where SAS and SATA have been heading for a while, anyway.
With chained SAS expander setup you have a network, if an annoying,
manually configured and routed one. Over that network you deliver
frames of various types.

Jeff

2011-05-17 03:41:35

by Douglas Gilbert

[permalink] [raw]
Subject: Re: [GIT PULL] isci merge candidate

On 11-05-16 08:47 PM, Jeff Garzik wrote:
> On Mon, May 16, 2011 at 8:39 PM, Dan Williams<[email protected]> wrote:
>> At a minimum It would require a more verbose interface to
>> libsas/libata (or new libframe?) to allow us to deliver raw
>> unsolicited frames into common protocol handlers.
>
> ...which is where SAS and SATA have been heading for a while, anyway.
> With chained SAS expander setup you have a network, if an annoying,
> manually configured and routed one. Over that network you deliver
> frames of various types.

For SAS-2 expanders, edit the above to:
s/manually/self/

Doug Gilbert

2011-05-17 03:56:19

by James Bottomley

[permalink] [raw]
Subject: Re: [GIT PULL] isci merge candidate

On Sat, 2011-05-14 at 10:49 +0200, Christoph Hellwig wrote:
> On Fri, May 13, 2011 at 01:14:40PM -0700, Dan Williams wrote:
> > The isci driver team has now completed the major rework items addressed
> > in the review on linux-scsi (including removal of state handlers,
> > merging lldd and 'core', cleaning up the source code layout).
>
> I've looked over the driver a bit and I'm quite impressed with what
> you're archived in the short time since taking over the driver from
> whoever came up with the mess that it was initially.

Yes, me too, thanks for doing this.

> I don't think you're quite done yet with the todo list that was given
> to you yet. One thing that springs to mind is wrappers in timers.c,
> which are not just ugly, but in case of isci_task_execute_tmf is plain
> wrong as the implementation assumes all timers have the same lifetime
> rules as the isci_host. You'll need to at least replace that last usage
> with a direct wait_for_completion_timeout, and even better get rid
> of it entirely.
>
> Also not quite done yet, although I'm happy with postponing that for now
> is the unification of the various data structures from the different
> layers of the original driver, e.g. isci_phy vs scic_sds_phy,
> isci_port vs scic_sds_port, isci_remote_device vs scic_sds_remote_device
> and isci_request vs scic_sds_request.

Give me a feel for this: If we put the driver in now, all cleanups
effectively get postponed until .41 (because they're no longer really
-rc candidates). If the driver gets included in a .40-rc, we have a
couple more months to get the basic cleanups done.

Dan, where's the hardware release at ... as in how urgent is 39-rc last
vs .40 rc?

> And of course there's a lot of room for additional further cleanups
> that should be able to shave off another couple thousands of lines, but
> these never were on the plate for the initial merge anyway.

Right ... I'm happy with the basic progress so far.

James

2011-05-17 22:11:27

by Dan Williams

[permalink] [raw]
Subject: Re: [GIT PULL] isci merge candidate

On Mon, May 16, 2011 at 8:56 PM, James Bottomley
<[email protected]> wrote
> Give me a feel for this: If we put the driver in now, all cleanups
> effectively get postponed until .41 (because they're no longer really
> -rc candidates). ?If the driver gets included in a .40-rc, we have a
> couple more months to get the basic cleanups done.

...all cleanups and the features like atapi support that were deferred
to get this initial cleanup done would be delayed until .41.

> Dan, where's the hardware release at ... as in how urgent is 39-rc last
> vs .40 rc?

Re-reviewed this internally with the latest hardware schedule and it
seems a .40-rc merge is workable. Especially in light of the caveats
that would be specified for the .39 and .40 version of the driver if
we merged now.

>> And of course there's a lot of room for additional further cleanups
>> that should be able to shave off another couple thousands of lines, but
>> these never were on the plate for the initial merge anyway.
>
> Right ... I'm happy with the basic progress so far.

Which achieves the goal of demonstrating that the driver is on a solid
upstream trajectory. Just need to take the opportunity to get things
finalized properly in .40-rc.

--
Dan