public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* [GIT PULL] isci: sas controller driver for 3.0
@ 2011-07-01 23:35 Dan Williams
  2011-07-02 22:45 ` James Bottomley
  2011-07-04 13:45 ` Christoph Hellwig
  0 siblings, 2 replies; 10+ messages in thread
From: Dan Williams @ 2011-07-01 23:35 UTC (permalink / raw)
  To: James Bottomley, Christoph Hellwig
  Cc: Linus Torvalds, linux-scsi, Dave Jiang, Jeff Skirvin,
	Ed Ciechanowski, Ed Nadolski, David Milburn, Jeff Garzik,
	Jacek Danecki, hare

James, please pull from:

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

...to receive the isci driver that supports the integrated 6Gb/s SAS
capabilities of the upcoming Intel(R) C600 series chipset family.  This
part is targeted at standard servers / workstations and provides
up to 8-ports (2x4-port controllers) of SAS beyond the traditional SATA
ports (surfaced by the ahci driver).

Since the last merge candidate [1], the driver has shed an additional
3,500 lines of code:

 34 files changed, 5683 insertions(+), 9248 deletions(-)
 delete mode 100644 drivers/scsi/isci/pool.h
 delete mode 100644 drivers/scsi/isci/sata.c
 delete mode 100644 drivers/scsi/isci/sata.h
 delete mode 100644 drivers/scsi/isci/scu_unsolicited_frame.h
 delete mode 100644 drivers/scsi/isci/state_machine.c
 delete mode 100644 drivers/scsi/isci/state_machine.h
 delete mode 100644 drivers/scsi/isci/timers.c
 delete mode 100644 drivers/scsi/isci/timers.h

Thanks again goes to Christoph for his continued review of the driver.

There was a question in the last pull request about the why this driver
is the size that it is.  According to physical lines of source [2] the
isci driver is now ~1.3x the size of the next largest libsas driver
aic94xx.  Looking over that driver there are several additional
responsibilities that the hardware requires of isci:

1/ OOB management: the sequencing to bring the phys, perform speed
negotiation at all the operation points and handle spin-up ordering is
controlled by software.

2/ Non-fast path protocols: All non-fast path i/o protocols and
conditions (smp, sata-pio, atapi, errors/exceptions) are handled in
software (allowing more hardware resources to be dedicated to the fast
path)

3/ Port configuration and oem parameters: Since this controller is
embedded in the chipset and not a standalone hba the electrical
characteristics of the phys need to be tuned per platform.  The platform
vendor also has the option to customize the port configuration.
Enabling patches like pci_map_biosrom() allow the driver to retrieve
these parameters embedded in the platform BIOS/EFI driver.  We have a
binary blob firmware file that can be used as a backup for these
parameters.

There are still opportunities for code simplification, but we are
starting to approach the underlying complexity of the solution.  In any
event, the diffstat since the initial import makes all the late nights
seem worth it:

   192 files changed, 23575 insertions(+), 60895 deletions(-)

--
Dan for the isci driver team

[1]: http://marc.info/?l=linux-scsi&m=130531654412722&w=2
[2]: generated using David A. Wheeler's 'SLOCCount'.

Adam Gruchala (2):
      isci: merge phy substates
      isci: Added support for C0 to SCU Driver

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

Bartosz Barcinski (2):
      isci: sparse warnings cleanup
      isci: audit usage of BUG_ON macro in isci driver

Christoph Hellwig (7):
      isci: remove mmio wrappers
      isci: remove base_controller abstraction
      isci: remove base_request abstraction
      isci: kill dead data structurs in scic_io_request.h
      isci: simplify request state handlers
      isci: simplify dma coherent allocation
      isci: remove scic_controller state handlers

Dan Williams (187):
      libsas: fix definition of wideport, include local sas address
      isci: import baseline driver with automated conversions
      isci: Kconfig and Makefile
      isci: Make silicon revision configurable
      isci: kill unused build options
      isci: kill unnecessary call to pci_disable_msix()
      isci: kill can queue device file
      isci: auto install isci firmware
      isci: clean up abort checks at submission
      isci: cleanup sci_base_state
      isci: controller state machine cleanup step1
      isci: readable io request state machines step1
      isci: controller state machine cleanup step2
      isci: controller state machine cleanup step3
      isci: kill off dubious usage of likely/unlikely
      isci: fix driver name string
      isci: kill ->dma_pool_name
      isci: use a module scope kmem_cache rather then per-host
      isci: kill isci_controller_init_names
      isci: rename dev_p to pdev
      isci: cleanup scic_remote_device_construct
      isci: __iomem annotations
      isci: remove 'library' dependency for initializing registers
      isci: refactor init to handle arbitrary controller layouts
      isci: move controller allocation to the core (kill isci_module_struct)
      isci: kill 'library' interface
      isci: fix ata protocol detection
      isci: use sas_protocol_ata
      isci: remove some host template debug overrides
      isci: drop isci_queuecommand
      isci: fix up queue parameters
      isci: allow the silicon revision to be specified at runtime
      isci: smp_request is too large for stack allocation
      isci: sci_object cleanup step1
      isci: drop redundant name from path
      isci: consolidate core
      isci: kill SCI_IO_REQUEST_DATA_DIRECTION
      isci: cleanup core consolidation leftovers
      isci: kill a callback cast
      isci: remove SCIC_DEBUG_ENABLED, and fixup an odd macro
      isci: bypass scic_controller_get_handler_methods()
      isci: cleanup "starting" state handling
      isci: implement error isr
      isci: advertise linkrate
      isci: debug fixes
      isci: phy state machine cleanup step1
      isci: clean up remaining silicon revision ifdefs in phy init
      isci: fix sas address reporting
      isci: rework timer api
      isci: fix hang after target reset
      isci: pad stp and smp request sizes
      isci: enable isci for dmar builds
      isci: kill isci_host list in favor of an array
      isci: remove sci_device_handle
      isci: kill "host quiesce" mechanism
      isci: replace isci_remote_device completion with event queue
      isci: preallocate remote devices
      isci: replace remote_device_lock  with scic_lock
      isci: cleanup debug leftovers in isci.h
      x86: introduce pci_map_biosrom()
      isci: Add support for probing OROM for OEM params
      isci: fixup with testing from isci OROM in BIOS
      isci: Errors in the submit path for SATA devices manage the ap lock.
      isci: add "isci_id" attribute
      isci: fix incorrect assumptions about task->dev and task->dev->port being NULL
      isci: task.h compile and checkpatch fixes
      isci: fix oem parameter initialization and mode detection
      Revert "isci: SATA/STP and SMP tasks are never explicitly put in the error path."
      Revert "isci: only call sas_task_abort for tasks with NEED_DEV_RESET"
      isci: reset hardware at init
      isci: fix apc mode definition
      isci: fix a build warning
      Merge branch 'x86-pending' into devel
      isci: reorder init to cleanup unneeded declarations
      isci: kill some long macros
      isci: namespacecheck cleanups
      isci: remove unused "remote_device_started"
      isci: cleanup isci_remote_device[_not]_ready interface
      isci: fix fragile/conditional isci_host lookups
      isci: replace sci_sas_link_rate with sas_linkrate
      Merge commit 'v2.6.38' into devel
      isci: fix oem parameter header definition
      isci: validate oem parameters early, and fallback
      isci: rely on irq core for intx multiplexing, and silence screaming intx
      isci: make a remote_node_context a proper member of a remote_device
      isci: remove rnc->device back pointer
      isci: unify remote_device data structures
      isci: move remote_device handling out of the core
      isci: cleanup remote device construction and comments
      isci: kill smp_discover_response_protocols in favor of domain_device.dev_type
      isci: kill smp_discover_response
      isci: remove usage of sci_sas_address in scic_sds_remote_device
      isci: remove scic_sds_remote_device_get_port_index
      isci: allow fallback to option-rom if efi variable retrieval fails
      isci: defer pci_map_biosrom
      isci: fix CONFIG_EFI=n compile error
      isci: merge remote_device substates into a single state machine
      isci: kill scic_remote_device_get_connection_rate
      isci: fix remote_device start_io regressions
      isci: unify remote_device start_handlers
      isci: unify remote_device stop_handlers
      isci: kill remote_device fail_handler
      isci: unify remote_device destruct_handlers
      isci: unify remote_device reset_handlers
      isci: unify remote_device reset_complete_handlers
      isci: unify remote_device start_io_handlers
      isci: unify remote_device complete_io_handlers
      isci: kill remote_device continue_io_handler
      isci: unify remote_device start_task_handlers
      isci: kill remote_device complete_task_handler
      isci: unify remote_device suspend_handlers
      isci: kill remote_device resume_handler
      isci: unify remote_device event_handlers
      isci: unify remote_device frame_handlers
      isci: kill scic_sds_remote_device.state_handlers
      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
      Revert "isci: Add missing PCI IDs"
      isci: remove 'min memory' infrastructure
      Merge commit 'v3.0-rc2' into devel
      isci: use pci_map_biosrom
      isci: fix isci_terminate_pending() list management
      isci: cleanup/optimize pool implementation
      isci: cleanup tag macros
      isci: cleanup/optimize queue increment macros
      isci: cleanup request allocation
      isci: fix ssp response iu buffer size in isci_tmf
      isci: atomic device lookup and reference counting
      isci: kill isci_remote_device_change_state()
      isci: kill device_sequence
      isci: fix smp response frame overrun
      isci: fix dma_unmap_sg usage
      isci: fix support for arbitrarily large smp requests
      isci: fix isci_task_execute_tmf completion
      isci: fix frame received locking
      isci: unify can_queue tracking on the tci_pool, uplevel tag assignment
      isci: combine request flags
      isci: preallocate requests
      isci: rename / clean up scic_sds_stp_request
      isci: unify isci_request and scic_sds_request
      isci: unify isci_phy and scic_sds_phy
      isci: fix scic_sds_remote_device_terminate_requests
      isci: unify isci_port and scic_sds_port
      isci: unify isci_remote_device and scic_sds_remote_device
      isci: unify isci_host and scic_sds_controller
      isci: retire scic_sds_ and scic_ prefixes
      isci: kill 'get/set' macros
      isci: merge sata.[ch] into request.c
      isci: merge scu_unsolicited_frame.h into unsolicited_frame_control.h
      isci: cleanup silicon revision detection
      isci: pare back error messsages

Darrick J. Wong (1):
      libsas: Don't issue commands to devices that have been hot-removed

Dave Jiang (49):
      isci: Loading oem params through binary firmware instead of via module params
      isci: move initialization to managed device model
      isci: remove sci_environment.h file
      isci: Moved lld logging calls to dev_* calls
      isci: Remove logger in core and use appropriate dev_* calls
      isci: Removing ASSERT() calls and change them to BUG_ON()
      isci: Move pci mapping functions to dma mapping functions
      isci: Remove MIN/MAX macro and use native linux macros
      isci: remove special macros for upper and lower 32 bits
      isci: Removing over-enthusiastic gotos
      isci: clean up scic_cb_io_request_get_physical_address()
      isci: removing unused loglevel module param
      isci: Move firmware loading to per PCI device
      isci: Removed special macros that does 64bit address math
      isci: Make the driver copy data directly from and to sg for PIO
      isci: have the driver use native SG calls and DMA-API
      isci: Change event notify calls from scic_cb_* to isci_event_*
      isci: Removing deprecated functions
      isci: Adding support for phy enable and disable
      isci: Cleanup warning messages for phy resets
      isci: Adding EFI variable skeletal support
      isci: update efi variable name and guid
      isci: copy the oem parameters instead of assign
      isci: Fixup for OEM parameter EFI variable retrieval
      isci: exposing user parameters via module params
      isci: Remove event_* calls as they are just wrappers
      isci: Remove "screaming" data types
      isci: replace this_* and the_* variables with more meaningful names
      isci: removing non-working ATAPI code
      isci: Remove excessive log noise with expander hot-unplug
      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
      isci: removing the kmalloc in smp request construct
      isci: Retrieve the EFI variable for OEM parameter
      isci: Removing unused variables compiler warnings

Edmund Nadolski (28):
      isci: remove extraneous typedefs/enums/comments from sci_types.h
      isci: remove SCI_TIMER_CALLBACK_T typedef
      isci: remove SCI_OBJECT_HANDLE_T typedef
      isci: remove SCI_TASK_REQUEST_HANDLE_T typedef
      isci: remove SCI_IO_REQUEST_HANDLE_T typedef
      isci: remove SCI_PHY_HANDLE_T typedef
      isci: fix typo recieved to received
      isci: remove SCI_PORT_HANDLE_T typedef
      isci: remove SCI_REMOTE_DEVICE_HANDLE_T typedef
      isci: remove SCI_MEMORY_DESCRIPTOR_HANDLE_T typedef
      isci: remove SCI_CONTROLLER_HANDLE_T typedef
      isci: remove unused SC_LIBRARY_HANDLE_T typedef
      isci: remove SCI_INVALID_HANDLE
      isci: kill sci_types.h
      isci: enable interrupts during controller start, and flush discovery
      isci: remove scic_controller_get_handler_methods and ilk
      isci: kill scic_controller_get_port_handle function
      isci: remove scic_sds_port_increment_request_count
      isci: replace isci_timer list with proper embedded timers
      isci: convert port config agent timer to sci_timer
      isci: convert phy sata_timeout_timer to sci_timer
      isci: convert power control timer to sci_timer
      isci: convert scic_timeout_timer to sci_timer
      isci: convert phy_startup_timer to sci_timer
      isci: Remove tmf timeout_timer
      isci: remove isci_timer interface
      isci: state machine cleanup
      isci: additional state machine cleanup

Havard Skinnemoen (2):
      isci: Add missing PCI IDs
      isci: Initialize proc_name field in scsi_host_template

Henryk Dembkowski (6):
      isci: remote device and node cleanup step1
      isci: coding style changes for remote device
      isci: c99 tables cleanup step1
      isci: coding style changes for remote device
      isci: Move transport layer registers from port to phy
      isci: add support for 2 more oem parmeters

Jacek Danecki (2):
      isci: Add support for user parameters in SCIC layer
      isci: rnc state machine table c99 conversion

Jack Wang (1):
      [SCSI] libsas: fix bug for vacant phy

Jeff Skirvin (29):
      isci: isci_request_cleanup_completed_loiterer checks task before task_done
      isci: Changes in isci_host_completion_routine
      isci: fix completion / abort path.
      isci: Any reset indicated on an I/O completion escalates it to the error path.
      isci: save the i/o tag outside the scic request structure.
      isci: Cleaning up task execute path.
      isci: Code review change for completion pointer cleanup.
      isci: Termination handling cleanup, added termination timeouts.
      isci: Fix TMF build for SAS/SATA LUN reset cases.
      isci: Fixed BUG_ON in isci_abort_task_process_cb callback.
      isci: Always set response/status for requests going into the error path.
      isci: All pending requests are terminated before stopping the device.
      isci: don't hold scic_lock over calls to sas_task_abort()
      isci: only call sas_task_abort for tasks with NEED_DEV_RESET
      isci: SATA/STP and SMP tasks are never explicitly put in the error path.
      isci: Properly handle requests in the "aborting" state.
      isci: Free host lock for SATA/STP abort escalation at submission time.
      isci: Fix use of SATA soft reset state machine.
      isci: Qualify when the host lock is managed for STP/SATA callbacks.
      isci: Move the reset delay after the remote node resumption.
      isci: filter broadcast change notifications during SMP phy resets
      isci: Add decode for SMP request retry error condition
      isci: Requests that do not start must be set to "complete"
      isci: Handle timed-out request terminations correctly
      isci: Explicitly decode remote node ready and suspended states
      isci: Hard reset failure will link reset all phys in the port
      isci: Disable link layer hang detection
      isci: Terminate dev requests on FIS err bit rx in NCQ
      isci: Device reset should request sas_phy_reset(phy, true)

Maciej Patelczyk (10):
      isci: Implement SCU AFE recipe 10.
      isci: Removed struct sci_base_object from state machine.
      isci: Removed sci_base_object from scic_sds_controller.
      isci: Removed sci_base_object from scic_sds_phy.
      isci: Removed sci_base_object from scic_sds_port.
      isci: Removed sci_base_object from scic_sds_remote_device.
      isci: Removed sci_base_object from scic_sds_remote_node_context.
      isci: Removed sci_base_object from scic_sds_request.
      isci: Removed sci_object.h from project.
      isci: possible buffer overflow in isci_parse_oem_parameters fixed

Maciej Trela (3):
      isci: remove base_remote_device abstraction
      isci: remove base_port abstraction
      isci: remove base_phy abstraction

Pawel Marek (1):
      isci: controller stop/start fixes

Piotr Sawicki (11):
      isci: fix for asserts during aborts/resets to SAS/SATA in APC mode
      isci: handle cases where a d2h fis is used report an ncq error
      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

Tomasz Chudy (3):
      isci: fix "no outbound task timeout" default value
      isci: Add Support for new TC completion codes
      isci: workaround port task scheduler starvation issue

 drivers/scsi/Kconfig                          |   13 +
 drivers/scsi/Makefile                         |    1 +
 drivers/scsi/isci/Makefile                    |    8 +
 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                      | 2751 ++++++++++++++++++++
 drivers/scsi/isci/host.h                      |  542 ++++
 drivers/scsi/isci/init.c                      |  565 ++++
 drivers/scsi/isci/isci.h                      |  538 ++++
 drivers/scsi/isci/phy.c                       | 1312 ++++++++++
 drivers/scsi/isci/phy.h                       |  504 ++++
 drivers/scsi/isci/port.c                      | 1757 +++++++++++++
 drivers/scsi/isci/port.h                      |  306 +++
 drivers/scsi/isci/port_config.c               |  754 ++++++
 drivers/scsi/isci/probe_roms.c                |  242 ++
 drivers/scsi/isci/probe_roms.h                |  249 ++
 drivers/scsi/isci/registers.h                 | 1934 ++++++++++++++
 drivers/scsi/isci/remote_device.c             | 1501 +++++++++++
 drivers/scsi/isci/remote_device.h             |  352 +++
 drivers/scsi/isci/remote_node_context.c       |  627 +++++
 drivers/scsi/isci/remote_node_context.h       |  224 ++
 drivers/scsi/isci/remote_node_table.c         |  598 +++++
 drivers/scsi/isci/remote_node_table.h         |  188 ++
 drivers/scsi/isci/request.c                   | 3391 +++++++++++++++++++++++++
 drivers/scsi/isci/request.h                   |  448 ++++
 drivers/scsi/isci/sas.h                       |  219 ++
 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/task.c                      | 1675 ++++++++++++
 drivers/scsi/isci/task.h                      |  367 +++
 drivers/scsi/isci/unsolicited_frame_control.c |  225 ++
 drivers/scsi/isci/unsolicited_frame_control.h |  278 ++
 firmware/Makefile                             |    1 +
 firmware/isci/isci_firmware.bin.ihex          |   16 +
 38 files changed, 23607 insertions(+), 0 deletions(-)
 create mode 100644 drivers/scsi/isci/Makefile
 create mode 100644 drivers/scsi/isci/firmware/Makefile
 create mode 100644 drivers/scsi/isci/firmware/README
 create mode 100644 drivers/scsi/isci/firmware/create_fw.c
 create mode 100644 drivers/scsi/isci/firmware/create_fw.h
 create mode 100644 drivers/scsi/isci/host.c
 create mode 100644 drivers/scsi/isci/host.h
 create mode 100644 drivers/scsi/isci/init.c
 create mode 100644 drivers/scsi/isci/isci.h
 create mode 100644 drivers/scsi/isci/phy.c
 create mode 100644 drivers/scsi/isci/phy.h
 create mode 100644 drivers/scsi/isci/port.c
 create mode 100644 drivers/scsi/isci/port.h
 create mode 100644 drivers/scsi/isci/port_config.c
 create mode 100644 drivers/scsi/isci/probe_roms.c
 create mode 100644 drivers/scsi/isci/probe_roms.h
 create mode 100644 drivers/scsi/isci/registers.h
 create mode 100644 drivers/scsi/isci/remote_device.c
 create mode 100644 drivers/scsi/isci/remote_device.h
 create mode 100644 drivers/scsi/isci/remote_node_context.c
 create mode 100644 drivers/scsi/isci/remote_node_context.h
 create mode 100644 drivers/scsi/isci/remote_node_table.c
 create mode 100644 drivers/scsi/isci/remote_node_table.h
 create mode 100644 drivers/scsi/isci/request.c
 create mode 100644 drivers/scsi/isci/request.h
 create mode 100644 drivers/scsi/isci/sas.h
 create mode 100644 drivers/scsi/isci/scu_completion_codes.h
 create mode 100644 drivers/scsi/isci/scu_event_codes.h
 create mode 100644 drivers/scsi/isci/scu_remote_node_context.h
 create mode 100644 drivers/scsi/isci/scu_task_context.h
 create mode 100644 drivers/scsi/isci/task.c
 create mode 100644 drivers/scsi/isci/task.h
 create mode 100644 drivers/scsi/isci/unsolicited_frame_control.c
 create mode 100644 drivers/scsi/isci/unsolicited_frame_control.h
 create mode 100644 firmware/isci/isci_firmware.bin.ihex




^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [GIT PULL] isci: sas controller driver for 3.0
  2011-07-01 23:35 [GIT PULL] isci: sas controller driver for 3.0 Dan Williams
@ 2011-07-02 22:45 ` James Bottomley
  2011-07-03  2:43   ` Dan Williams
  2011-07-04 13:45 ` Christoph Hellwig
  1 sibling, 1 reply; 10+ messages in thread
From: James Bottomley @ 2011-07-02 22:45 UTC (permalink / raw)
  To: Dan Williams
  Cc: Christoph Hellwig, Linus Torvalds, linux-scsi, Dave Jiang,
	Jeff Skirvin, Ed Ciechanowski, Ed Nadolski, David Milburn,
	Jeff Garzik, Jacek Danecki, hare

On Fri, 2011-07-01 at 16:35 -0700, Dan Williams wrote:
> James, please pull from:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/djbw/isci.git master
> 
> ...to receive the isci driver that supports the integrated 6Gb/s SAS
> capabilities of the upcoming Intel(R) C600 series chipset family.  This
> part is targeted at standard servers / workstations and provides
> up to 8-ports (2x4-port controllers) of SAS beyond the traditional SATA
> ports (surfaced by the ahci driver).
> 
> Since the last merge candidate [1], the driver has shed an additional
> 3,500 lines of code:

Look, this tree is unacceptable because

A. It's not bisectable.  This is what happens when I try a bisection:

HEAD is now at f6edc9b isci: unify constants
scripts/kconfig/conf --oldnoconfig Kconfig
#
# configuration written to .config
#
scripts/kconfig/conf --silentoldconfig Kconfig
  CHK     include/linux/version.h
  CHK     include/generated/utsrelease.h
  CALL    scripts/checksyscalls.sh
  CC [M]  drivers/scsi/isci/init.o
In file included from drivers/scsi/isci/init.c:66:0:
drivers/scsi/isci/core/scic_controller.h:67:6: error: nested redefinition of 'enum sci_controller_mode'
drivers/scsi/isci/core/scic_controller.h:67:6: error: redeclaration of 'enum sci_controller_mode'
drivers/scsi/isci/isci.h:75:6: note: originally defined here
drivers/scsi/isci/core/scic_controller.h:68:2: error: redeclaration of enumerator 'SCI_MODE_SPEED'
drivers/scsi/isci/isci.h:76:2: note: previous definition of 'SCI_MODE_SPEED' was here
drivers/scsi/isci/core/scic_controller.h:69:2: error: redeclaration of enumerator 'SCI_MODE_SIZE'
drivers/scsi/isci/isci.h:77:2: note: previous definition of 'SCI_MODE_SIZE' was here
make[1]: *** [drivers/scsi/isci/init.o] Error 1
make: *** [drivers/scsi/isci/isci.ko] Error 2

And B. It's got contaminated history like this:

commit bf94796e9b00fa3cc6d5f8021ceb547312fbed78
Author: Jack Wang <jack_wang@usish.com>
Date:   Thu Dec 2 13:27:05 2010 -0800

    [SCSI] libsas: fix bug for vacant phy
    
    This patch fix bug reported by Chuck. And this new version incorporate comments
    from Hannes. Please consider to include it into mainline.
    
    [ upstream: 2bc72c91 ]
    Signed-off-by: Jack Wang <jack_wang@usish.com>
    Signed-off-by: Lindar Liu <lindar_liu@usish.com>
    Tested-by: Chuck Tuffli <Chuck_Tuffli@pmc-sierra.com>
    Signed-off-by: James Bottomley <James.Bottomley@suse.de>

commit 258c6a82d41929cee8e357887a6ba0518fb4085f
Author: Dan Williams <dan.j.williams@intel.com>
Date:   Tue Nov 23 09:47:14 2010 -0800

    libsas: fix definition of wideport, include local sas address
    
    To date libsas has only looked at the attached sas address when
    determining the formation of wide ports.  The specification and some
    hardware expects that phys with different addresses will not form a wide
    port unless the local peer phys also match each other.  Introduce a flag
    to select stricter behavior at sas_register_ha() time.  The flag can be
    dropped once it is known that all libsas users expect the same behavior.
    
    Current drivers just initialize this field to zero and get the
    traditional behavior.
    
    [upstream: 00f0254ed9b19164d416dc2e3c2e81eda55a6faf]
    Reported-by: Patrick Thomson <patrick.s.thomson@intel.com>
    Cc: Jeff Skirvin <jeffrey.d.skirvin@intel.com>
    Cc: Jack Wang <jack_wang@usish.com>
    Signed-off-by: Dan Williams <dan.j.williams@intel.com>

commit 73782d7e0e27b4a8b285f56e2f2c11534e33239f
Author: Darrick J. Wong <djwong@us.ibm.com>
Date:   Tue Nov 23 09:48:34 2010 -0800

    libsas: Don't issue commands to devices that have been hot-removed
    
    sd will get hung up issuing commands to flush write cache if a SAS
    device behind the expander is unplugged without warning.  Change libsas
    to reject commands to domain devices that have already gone away.
    
    [maciej.trela@intel.com: removed setting ->gone in sas_deform_port() to
     permit sync cache commands at module removal]
    
    [upstream: 56dd2c0691a5a387b7b05835fe547dc6fade9407]
    Signed-off-by: Darrick J. Wong <djwong@us.ibm.com>
    linux-scsi-reference: <20071204223516.GA6767@tree.beaverton.ibm.com>
    Cc: Jeff Garzik <jeff@garzik.org>
    Cc: Brian King <brking@linux.vnet.ibm.com>
    Cc: Patrick Thomson <patrick.s.thomson@intel.com>
    Cc: Jeff Skirvin <jeffrey.d.skirvin@intel.com>
    Tested-by: Haipao Fan <haipao.fan@intel.com>
    Signed-off-by: Maciej Trela <maciej.trela@intel.com>
    Signed-off-by: Dan Williams <dan.j.williams@intel.com>

I need clean history and a bisectable tree ... By Sunday, since this has
to be in linux-next before the next kernel release, which will likely be
Monday.

Since the tree is huge, I don't think this is fixable in the timescale,
so just a single patch will do ... I can construct that, but I need the
change log from you, please.

James



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [GIT PULL] isci: sas controller driver for 3.0
  2011-07-02 22:45 ` James Bottomley
@ 2011-07-03  2:43   ` Dan Williams
  2011-07-03  5:16     ` James Bottomley
  0 siblings, 1 reply; 10+ messages in thread
From: Dan Williams @ 2011-07-03  2:43 UTC (permalink / raw)
  To: James Bottomley
  Cc: Christoph Hellwig, Linus Torvalds, linux-scsi, Jiang, Dave,
	Skirvin, Jeffrey D, Ciechanowski, Ed, Nadolski, Edmund,
	David Milburn, Jeff Garzik, Danecki, Jacek, hare@suse.de

On 07/02/2011 03:45 PM, James Bottomley wrote:
> Look, this tree is unacceptable because
>
> A. It's not bisectable.  This is what happens when I try a bisection:
[..]
> make[1]: *** [drivers/scsi/isci/init.o] Error 1

This was inadvertent, but breakage is breakage.

> And B. It's got contaminated history like this:

This was on purpose.  We were in the position of stabilizing / 
validating the driver while carrying out the cleanups.  To minimize back 
merges I duplicated upstream fixes/enabling in these instances.  If this 
is de-facto unacceptable I will adjust my tree management going forward. 
  But I don't believe it is given occasions where two maintainers take 
the same patch through their respective trees.

> I need clean history and a bisectable tree ... By Sunday, since this has
> to be in linux-next before the next kernel release, which will likely be
> Monday.

I certainly can rebase this to address the compile breakage.  Although 
this does throw away old commit ids which have seen validation both 
inside and outside of Intel, but that's unavoidable at this point.

The value I see in maintaining the history (even with some re-written 
ids) is:

1/ The history is available in mainline and not a side tree.  Care went 
into the commit changelogs.  They provide driver documentation and 
contain notes about future cleanups and improvements.

2/ Code reviewers are credited with Reported-by tags for the commits 
they generated.

3/ The history is instructive of the dangers of OS abstraction drivers.

> Since the tree is huge, I don't think this is fixable in the timescale,
> so just a single patch will do ... I can construct that, but I need the
> change log from you, please.

I can go either way, but my preference is a rebase to clean up the 
bisection.

--
Dan

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [GIT PULL] isci: sas controller driver for 3.0
  2011-07-03  2:43   ` Dan Williams
@ 2011-07-03  5:16     ` James Bottomley
  2011-07-03  5:46       ` Dan Williams
  0 siblings, 1 reply; 10+ messages in thread
From: James Bottomley @ 2011-07-03  5:16 UTC (permalink / raw)
  To: Dan Williams
  Cc: Christoph Hellwig, Linus Torvalds, linux-scsi, Jiang, Dave,
	Skirvin, Jeffrey D, Ciechanowski, Ed, Nadolski, Edmund,
	David Milburn, Jeff Garzik, Danecki, Jacek, hare@suse.de

On Sat, 2011-07-02 at 19:43 -0700, Dan Williams wrote:
> On 07/02/2011 03:45 PM, James Bottomley wrote:
> > Look, this tree is unacceptable because
> >
> > A. It's not bisectable.  This is what happens when I try a bisection:
> [..]
> > make[1]: *** [drivers/scsi/isci/init.o] Error 1
> 
> This was inadvertent, but breakage is breakage.

That's fine for a development tree.  When you submit a series of
patches, whether directly or via a git tree, they have to be bisectable.
This isn't negotiable because any old user has to be able to perform a
bisection.

This is why most submissions tend to be patches rather than git trees.
To submit a git tree, you really have to prove that you knew the rules
when you created and ran it (like no bisectability breaks etc.)

> > And B. It's got contaminated history like this:
> 
> This was on purpose.  We were in the position of stabilizing / 
> validating the driver while carrying out the cleanups.  To minimize back 
> merges I duplicated upstream fixes/enabling in these instances.  If this 
> is de-facto unacceptable I will adjust my tree management going forward. 

Yes, it is.

>   But I don't believe it is given occasions where two maintainers take 
> the same patch through their respective trees.

These aren't the same patches applied by different maintainers; it's a
cherry pick backport which shouldn't be there.

> > I need clean history and a bisectable tree ... By Sunday, since this has
> > to be in linux-next before the next kernel release, which will likely be
> > Monday.
> 
> I certainly can rebase this to address the compile breakage.  Although 
> this does throw away old commit ids which have seen validation both 
> inside and outside of Intel, but that's unavoidable at this point.
> 
> The value I see in maintaining the history (even with some re-written 
> ids) is:
> 
> 1/ The history is available in mainline and not a side tree.  Care went 
> into the commit changelogs.  They provide driver documentation and 
> contain notes about future cleanups and improvements.
> 
> 2/ Code reviewers are credited with Reported-by tags for the commits 
> they generated.
> 
> 3/ The history is instructive of the dangers of OS abstraction drivers.

The internal intel history is completely irrelevant.  I can see value to
maintaining the commit history after publication because several
non-intel people worked on it and it's nice to credit them.

> > Since the tree is huge, I don't think this is fixable in the timescale,
> > so just a single patch will do ... I can construct that, but I need the
> > change log from you, please.
> 
> I can go either way, but my preference is a rebase to clean up the 
> bisection.

I just stopped at the first failure ... please ensure that there aren't
any more ... as in test every bisection point in the tree, don't just
squash the commit I've flagged as failing.

The fact that there is a bisection failure tends to indicate you haven't
been careful to check each commit in the tree ... which does make it
suspect and will mean every commit in the reconstituted tree needs
checking for bisectability.

James



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [GIT PULL] isci: sas controller driver for 3.0
  2011-07-03  5:16     ` James Bottomley
@ 2011-07-03  5:46       ` Dan Williams
  2011-07-03 11:37         ` Dan Williams
  0 siblings, 1 reply; 10+ messages in thread
From: Dan Williams @ 2011-07-03  5:46 UTC (permalink / raw)
  To: James Bottomley
  Cc: Christoph Hellwig, Linus Torvalds, linux-scsi, Jiang, Dave,
	Skirvin, Jeffrey D, Ciechanowski, Ed, Nadolski, Edmund,
	David Milburn, Jeff Garzik, Danecki, Jacek, hare@suse.de

On 07/02/2011 10:16 PM, James Bottomley wrote:
> On Sat, 2011-07-02 at 19:43 -0700, Dan Williams wrote:
>> On 07/02/2011 03:45 PM, James Bottomley wrote:
>>> Look, this tree is unacceptable because
>>>
>>> A. It's not bisectable.  This is what happens when I try a bisection:
>> [..]
>>> make[1]: *** [drivers/scsi/isci/init.o] Error 1
>>
>> This was inadvertent, but breakage is breakage.
>
> That's fine for a development tree.  When you submit a series of
> patches, whether directly or via a git tree, they have to be bisectable.
> This isn't negotiable because any old user has to be able to perform a
> bisection.
>
> This is why most submissions tend to be patches rather than git trees.
> To submit a git tree, you really have to prove that you knew the rules
> when you created and ran it (like no bisectability breaks etc.)

Yup, knew it, blew it.

>>> And B. It's got contaminated history like this:
>>
>> This was on purpose.  We were in the position of stabilizing /
>> validating the driver while carrying out the cleanups.  To minimize back
>> merges I duplicated upstream fixes/enabling in these instances.  If this
>> is de-facto unacceptable I will adjust my tree management going forward.
>
> Yes, it is.
>
>>    But I don't believe it is given occasions where two maintainers take
>> the same patch through their respective trees.
>
> These aren't the same patches applied by different maintainers; it's a
> cherry pick backport which shouldn't be there.

Ok, should have handled these with backmerges then, but these won't be 
there in the rebased tree.

[..]
> The internal intel history is completely irrelevant.  I can see value to
> maintaining the commit history after publication because several
> non-intel people worked on it and it's nice to credit them.
>

Ok, everything prior to the first publicly available driver will be 
squashed.

>>> Since the tree is huge, I don't think this is fixable in the timescale,
>>> so just a single patch will do ... I can construct that, but I need the
>>> change log from you, please.
>>
>> I can go either way, but my preference is a rebase to clean up the
>> bisection.
>
> I just stopped at the first failure ... please ensure that there aren't
> any more ... as in test every bisection point in the tree, don't just
> squash the commit I've flagged as failing.
>
> The fact that there is a bisection failure tends to indicate you haven't
> been careful to check each commit in the tree ... which does make it
> suspect and will mean every commit in the reconstituted tree needs
> checking for bisectability.
>

Will verify each commit.

--
Dan

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [GIT PULL] isci: sas controller driver for 3.0
  2011-07-03  5:46       ` Dan Williams
@ 2011-07-03 11:37         ` Dan Williams
  2011-07-03 19:14           ` James Bottomley
  0 siblings, 1 reply; 10+ messages in thread
From: Dan Williams @ 2011-07-03 11:37 UTC (permalink / raw)
  To: James Bottomley
  Cc: Christoph Hellwig, Linus Torvalds, linux-scsi, Jiang, Dave,
	Skirvin, Jeffrey D, Ciechanowski, Ed, Nadolski, Edmund,
	David Milburn, Jeff Garzik, Danecki, Jacek, hare@suse.de

On Sat, 2011-07-02 at 22:46 -0700, Dan Williams wrote:
> > I just stopped at the first failure ... please ensure that there aren't
> > any more ... as in test every bisection point in the tree, don't just
> > squash the commit I've flagged as failing.
> >
> > The fact that there is a bisection failure tends to indicate you haven't
> > been careful to check each commit in the tree ... which does make it
> > suspect and will mean every commit in the reconstituted tree needs
> > checking for bisectability.
> >
> 
> Will verify each commit.

I have pushed out a rebased tree it:

1/ discards the history prior to the first public release of the driver.

2/ discards merge commits and the cherry-pick backports

3/ deletes the reverts, and moves the CONFIG_EFI=n compile fix into the
patch that introduced efi support.  No other commit edits were required
after this step.

4/ passes a compile test of every commit using a script like:
for p in $(stg series --noprefix | xargs)
do
        stg goto $p
        if ! make -j 8; then
                echo $p >> build-breakers
        else
                echo $p >> build-clean
        fi
done

5/ is identical to the previous release

I moved the old tree to a 'historical' branch.

--

The following changes since commit 59c5f46fbe01a00eedf54a23789634438bb80603:

  Linux 3.0-rc2 (2011-06-06 18:06:33 +0900)

are available in the git repository at:
  git://git.kernel.org/pub/scm/linux/kernel/git/djbw/isci.git master

Adam Gruchala (2):
      isci: merge phy substates
      isci: Added support for C0 to SCU Driver

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

Bartosz Barcinski (2):
      isci: sparse warnings cleanup
      isci: audit usage of BUG_ON macro in isci driver

Christoph Hellwig (7):
      isci: remove mmio wrappers
      isci: remove base_controller abstraction
      isci: remove base_request abstraction
      isci: kill dead data structurs in scic_io_request.h
      isci: simplify request state handlers
      isci: simplify dma coherent allocation
      isci: remove scic_controller state handlers

Dan Williams (142):
      isci: Intel(R) C600 Series Chipset Storage Control Unit Driver
      isci: kill SCI_IO_REQUEST_DATA_DIRECTION
      isci: cleanup core consolidation leftovers
      isci: kill a callback cast
      isci: remove SCIC_DEBUG_ENABLED, and fixup an odd macro
      isci: bypass scic_controller_get_handler_methods()
      isci: cleanup "starting" state handling
      isci: implement error isr
      isci: advertise linkrate
      isci: debug fixes
      isci: phy state machine cleanup step1
      isci: clean up remaining silicon revision ifdefs in phy init
      isci: fix sas address reporting
      isci: rework timer api
      isci: fix hang after target reset
      isci: pad stp and smp request sizes
      isci: enable isci for dmar builds
      isci: kill isci_host list in favor of an array
      isci: remove sci_device_handle
      isci: kill "host quiesce" mechanism
      isci: replace isci_remote_device completion with event queue
      isci: preallocate remote devices
      isci: replace remote_device_lock  with scic_lock
      isci: cleanup debug leftovers in isci.h
      isci: Errors in the submit path for SATA devices manage the ap lock.
      isci: add "isci_id" attribute
      isci: fix incorrect assumptions about task->dev and task->dev->port being NULL
      isci: task.h compile and checkpatch fixes
      isci: reset hardware at init
      isci: Add support for probing OROM for OEM params
      isci: fixup with testing from isci OROM in BIOS
      isci: fix oem parameter initialization and mode detection
      isci: fix apc mode definition
      isci: fix a build warning
      isci: reorder init to cleanup unneeded declarations
      isci: kill some long macros
      isci: namespacecheck cleanups
      isci: remove unused "remote_device_started"
      isci: cleanup isci_remote_device[_not]_ready interface
      isci: fix fragile/conditional isci_host lookups
      isci: replace sci_sas_link_rate with sas_linkrate
      isci: fix oem parameter header definition
      isci: validate oem parameters early, and fallback
      isci: rely on irq core for intx multiplexing, and silence screaming intx
      isci: make a remote_node_context a proper member of a remote_device
      isci: remove rnc->device back pointer
      isci: unify remote_device data structures
      isci: move remote_device handling out of the core
      isci: cleanup remote device construction and comments
      isci: kill smp_discover_response_protocols in favor of domain_device.dev_type
      isci: kill smp_discover_response
      isci: remove usage of sci_sas_address in scic_sds_remote_device
      isci: remove scic_sds_remote_device_get_port_index
      isci: allow fallback to option-rom if efi variable retrieval fails
      isci: merge remote_device substates into a single state machine
      isci: kill scic_remote_device_get_connection_rate
      isci: fix remote_device start_io regressions
      isci: unify remote_device start_handlers
      isci: unify remote_device stop_handlers
      isci: kill remote_device fail_handler
      isci: unify remote_device destruct_handlers
      isci: unify remote_device reset_handlers
      isci: unify remote_device reset_complete_handlers
      isci: unify remote_device start_io_handlers
      isci: unify remote_device complete_io_handlers
      isci: kill remote_device continue_io_handler
      isci: unify remote_device start_task_handlers
      isci: kill remote_device complete_task_handler
      isci: unify remote_device suspend_handlers
      isci: kill remote_device resume_handler
      isci: unify remote_device event_handlers
      isci: unify remote_device frame_handlers
      isci: kill scic_sds_remote_device.state_handlers
      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
      isci: remove 'min memory' infrastructure
      isci: fix isci_terminate_pending() list management
      isci: cleanup/optimize pool implementation
      isci: cleanup tag macros
      isci: cleanup/optimize queue increment macros
      isci: cleanup request allocation
      isci: fix ssp response iu buffer size in isci_tmf
      isci: atomic device lookup and reference counting
      isci: kill isci_remote_device_change_state()
      isci: kill device_sequence
      isci: fix smp response frame overrun
      isci: fix dma_unmap_sg usage
      isci: fix support for arbitrarily large smp requests
      isci: fix isci_task_execute_tmf completion
      isci: fix frame received locking
      isci: unify can_queue tracking on the tci_pool, uplevel tag assignment
      isci: combine request flags
      isci: preallocate requests
      isci: rename / clean up scic_sds_stp_request
      isci: unify isci_request and scic_sds_request
      isci: unify isci_phy and scic_sds_phy
      isci: fix scic_sds_remote_device_terminate_requests
      isci: unify isci_port and scic_sds_port
      isci: unify isci_remote_device and scic_sds_remote_device
      isci: unify isci_host and scic_sds_controller
      isci: retire scic_sds_ and scic_ prefixes
      isci: kill 'get/set' macros
      isci: merge sata.[ch] into request.c
      isci: merge scu_unsolicited_frame.h into unsolicited_frame_control.h
      isci: cleanup silicon revision detection
      isci: pare back error messsages

Dave Jiang (38):
      isci: removing unused loglevel module param
      isci: Move firmware loading to per PCI device
      isci: Removed special macros that does 64bit address math
      isci: Make the driver copy data directly from and to sg for PIO
      isci: have the driver use native SG calls and DMA-API
      isci: Change event notify calls from scic_cb_* to isci_event_*
      isci: Removing deprecated functions
      isci: Adding support for phy enable and disable
      isci: Cleanup warning messages for phy resets
      isci: Adding EFI variable skeletal support
      isci: update efi variable name and guid
      isci: copy the oem parameters instead of assign
      isci: Fixup for OEM parameter EFI variable retrieval
      isci: exposing user parameters via module params
      isci: Remove event_* calls as they are just wrappers
      isci: Remove "screaming" data types
      isci: replace this_* and the_* variables with more meaningful names
      isci: removing non-working ATAPI code
      isci: Remove excessive log noise with expander hot-unplug
      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
      isci: removing the kmalloc in smp request construct
      isci: Retrieve the EFI variable for OEM parameter
      isci: Removing unused variables compiler warnings

Edmund Nadolski (17):
      isci: remove unused SC_LIBRARY_HANDLE_T typedef
      isci: remove SCI_INVALID_HANDLE
      isci: kill sci_types.h
      isci: enable interrupts during controller start, and flush discovery
      isci: remove scic_controller_get_handler_methods and ilk
      isci: kill scic_controller_get_port_handle function
      isci: remove scic_sds_port_increment_request_count
      isci: replace isci_timer list with proper embedded timers
      isci: convert port config agent timer to sci_timer
      isci: convert phy sata_timeout_timer to sci_timer
      isci: convert power control timer to sci_timer
      isci: convert scic_timeout_timer to sci_timer
      isci: convert phy_startup_timer to sci_timer
      isci: Remove tmf timeout_timer
      isci: remove isci_timer interface
      isci: state machine cleanup
      isci: additional state machine cleanup

Havard Skinnemoen (1):
      isci: Initialize proc_name field in scsi_host_template

Henryk Dembkowski (6):
      isci: remote device and node cleanup step1
      isci: coding style changes for remote device
      isci: c99 tables cleanup step1
      isci: coding style changes for remote device
      isci: Move transport layer registers from port to phy
      isci: add support for 2 more oem parmeters

Jacek Danecki (2):
      isci: Add support for user parameters in SCIC layer
      isci: rnc state machine table c99 conversion

Jeff Skirvin (27):
      isci: isci_request_cleanup_completed_loiterer checks task before task_done
      isci: Changes in isci_host_completion_routine
      isci: fix completion / abort path.
      isci: Any reset indicated on an I/O completion escalates it to the error path.
      isci: save the i/o tag outside the scic request structure.
      isci: Cleaning up task execute path.
      isci: Code review change for completion pointer cleanup.
      isci: Termination handling cleanup, added termination timeouts.
      isci: Fix TMF build for SAS/SATA LUN reset cases.
      isci: Fixed BUG_ON in isci_abort_task_process_cb callback.
      isci: Always set response/status for requests going into the error path.
      isci: All pending requests are terminated before stopping the device.
      isci: don't hold scic_lock over calls to sas_task_abort()
      isci: Properly handle requests in the "aborting" state.
      isci: Free host lock for SATA/STP abort escalation at submission time.
      isci: Fix use of SATA soft reset state machine.
      isci: Qualify when the host lock is managed for STP/SATA callbacks.
      isci: Move the reset delay after the remote node resumption.
      isci: filter broadcast change notifications during SMP phy resets
      isci: Add decode for SMP request retry error condition
      isci: Requests that do not start must be set to "complete"
      isci: Handle timed-out request terminations correctly
      isci: Explicitly decode remote node ready and suspended states
      isci: Hard reset failure will link reset all phys in the port
      isci: Disable link layer hang detection
      isci: Terminate dev requests on FIS err bit rx in NCQ
      isci: Device reset should request sas_phy_reset(phy, true)

Maciej Patelczyk (10):
      isci: Implement SCU AFE recipe 10.
      isci: Removed struct sci_base_object from state machine.
      isci: Removed sci_base_object from scic_sds_controller.
      isci: Removed sci_base_object from scic_sds_phy.
      isci: Removed sci_base_object from scic_sds_port.
      isci: Removed sci_base_object from scic_sds_remote_device.
      isci: Removed sci_base_object from scic_sds_remote_node_context.
      isci: Removed sci_base_object from scic_sds_request.
      isci: Removed sci_object.h from project.
      isci: possible buffer overflow in isci_parse_oem_parameters fixed

Maciej Trela (3):
      isci: remove base_remote_device abstraction
      isci: remove base_port abstraction
      isci: remove base_phy abstraction

Pawel Marek (1):
      isci: controller stop/start fixes

Piotr Sawicki (11):
      isci: fix for asserts during aborts/resets to SAS/SATA in APC mode
      isci: handle cases where a d2h fis is used report an ncq error
      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

Tomasz Chudy (3):
      isci: fix "no outbound task timeout" default value
      isci: Add Support for new TC completion codes
      isci: workaround port task scheduler starvation issue

 drivers/scsi/Kconfig                          |   13 +
 drivers/scsi/Makefile                         |    1 +
 drivers/scsi/isci/Makefile                    |    8 +
 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                      | 2751 ++++++++++++++++++++
 drivers/scsi/isci/host.h                      |  542 ++++
 drivers/scsi/isci/init.c                      |  565 ++++
 drivers/scsi/isci/isci.h                      |  538 ++++
 drivers/scsi/isci/phy.c                       | 1312 ++++++++++
 drivers/scsi/isci/phy.h                       |  504 ++++
 drivers/scsi/isci/port.c                      | 1757 +++++++++++++
 drivers/scsi/isci/port.h                      |  306 +++
 drivers/scsi/isci/port_config.c               |  754 ++++++
 drivers/scsi/isci/probe_roms.c                |  242 ++
 drivers/scsi/isci/probe_roms.h                |  249 ++
 drivers/scsi/isci/registers.h                 | 1934 ++++++++++++++
 drivers/scsi/isci/remote_device.c             | 1501 +++++++++++
 drivers/scsi/isci/remote_device.h             |  352 +++
 drivers/scsi/isci/remote_node_context.c       |  627 +++++
 drivers/scsi/isci/remote_node_context.h       |  224 ++
 drivers/scsi/isci/remote_node_table.c         |  598 +++++
 drivers/scsi/isci/remote_node_table.h         |  188 ++
 drivers/scsi/isci/request.c                   | 3391 +++++++++++++++++++++++++
 drivers/scsi/isci/request.h                   |  448 ++++
 drivers/scsi/isci/sas.h                       |  219 ++
 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/task.c                      | 1675 ++++++++++++
 drivers/scsi/isci/task.h                      |  367 +++
 drivers/scsi/isci/unsolicited_frame_control.c |  225 ++
 drivers/scsi/isci/unsolicited_frame_control.h |  278 ++
 firmware/Makefile                             |    1 +
 firmware/isci/isci_firmware.bin.ihex          |   16 +
 38 files changed, 23607 insertions(+), 0 deletions(-)
 create mode 100644 drivers/scsi/isci/Makefile
 create mode 100644 drivers/scsi/isci/firmware/Makefile
 create mode 100644 drivers/scsi/isci/firmware/README
 create mode 100644 drivers/scsi/isci/firmware/create_fw.c
 create mode 100644 drivers/scsi/isci/firmware/create_fw.h
 create mode 100644 drivers/scsi/isci/host.c
 create mode 100644 drivers/scsi/isci/host.h
 create mode 100644 drivers/scsi/isci/init.c
 create mode 100644 drivers/scsi/isci/isci.h
 create mode 100644 drivers/scsi/isci/phy.c
 create mode 100644 drivers/scsi/isci/phy.h
 create mode 100644 drivers/scsi/isci/port.c
 create mode 100644 drivers/scsi/isci/port.h
 create mode 100644 drivers/scsi/isci/port_config.c
 create mode 100644 drivers/scsi/isci/probe_roms.c
 create mode 100644 drivers/scsi/isci/probe_roms.h
 create mode 100644 drivers/scsi/isci/registers.h
 create mode 100644 drivers/scsi/isci/remote_device.c
 create mode 100644 drivers/scsi/isci/remote_device.h
 create mode 100644 drivers/scsi/isci/remote_node_context.c
 create mode 100644 drivers/scsi/isci/remote_node_context.h
 create mode 100644 drivers/scsi/isci/remote_node_table.c
 create mode 100644 drivers/scsi/isci/remote_node_table.h
 create mode 100644 drivers/scsi/isci/request.c
 create mode 100644 drivers/scsi/isci/request.h
 create mode 100644 drivers/scsi/isci/sas.h
 create mode 100644 drivers/scsi/isci/scu_completion_codes.h
 create mode 100644 drivers/scsi/isci/scu_event_codes.h
 create mode 100644 drivers/scsi/isci/scu_remote_node_context.h
 create mode 100644 drivers/scsi/isci/scu_task_context.h
 create mode 100644 drivers/scsi/isci/task.c
 create mode 100644 drivers/scsi/isci/task.h
 create mode 100644 drivers/scsi/isci/unsolicited_frame_control.c
 create mode 100644 drivers/scsi/isci/unsolicited_frame_control.h
 create mode 100644 firmware/isci/isci_firmware.bin.ihex



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [GIT PULL] isci: sas controller driver for 3.0
  2011-07-03 11:37         ` Dan Williams
@ 2011-07-03 19:14           ` James Bottomley
  0 siblings, 0 replies; 10+ messages in thread
From: James Bottomley @ 2011-07-03 19:14 UTC (permalink / raw)
  To: Dan Williams
  Cc: Christoph Hellwig, Linus Torvalds, linux-scsi, Jiang, Dave,
	Skirvin, Jeffrey D, Ciechanowski, Ed, Nadolski, Edmund,
	David Milburn, Jeff Garzik, Danecki, Jacek, hare@suse.de

On Sun, 2011-07-03 at 04:37 -0700, Dan Williams wrote:
> On Sat, 2011-07-02 at 22:46 -0700, Dan Williams wrote:
> > > I just stopped at the first failure ... please ensure that there aren't
> > > any more ... as in test every bisection point in the tree, don't just
> > > squash the commit I've flagged as failing.
> > >
> > > The fact that there is a bisection failure tends to indicate you haven't
> > > been careful to check each commit in the tree ... which does make it
> > > suspect and will mean every commit in the reconstituted tree needs
> > > checking for bisectability.
> > >
> > 
> > Will verify each commit.
> 
> I have pushed out a rebased tree it:
> 
> 1/ discards the history prior to the first public release of the driver.
> 
> 2/ discards merge commits and the cherry-pick backports
> 
> 3/ deletes the reverts, and moves the CONFIG_EFI=n compile fix into the
> patch that introduced efi support.  No other commit edits were required
> after this step.
> 
> 4/ passes a compile test of every commit using a script like:
> for p in $(stg series --noprefix | xargs)
> do
>         stg goto $p
>         if ! make -j 8; then
>                 echo $p >> build-breakers
>         else
>                 echo $p >> build-clean
>         fi
> done
> 
> 5/ is identical to the previous release

Great, thanks.

You still have nine legitimate checkpatch.pl errors (all of which were
introduced in your series).  I applied the following to fix them, but I
need future patches to be checkpatch clean as well, please.

James

---

diff --git a/drivers/scsi/isci/phy.c b/drivers/scsi/isci/phy.c
index d8f893e..79313a7 100644
--- a/drivers/scsi/isci/phy.c
+++ b/drivers/scsi/isci/phy.c
@@ -197,7 +197,7 @@ sci_phy_link_layer_initialization(struct isci_phy *iphy,
 	llctl = SCU_SAS_LLCTL_GEN_VAL(NO_OUTBOUND_TASK_TIMEOUT,
 		(u8)ihost->user_parameters.no_outbound_task_timeout);
 
-	switch(phy_user->max_speed_generation) {
+	switch (phy_user->max_speed_generation) {
 	case SCIC_SDS_PARM_GEN3_SPEED:
 		link_rate = SCU_SAS_LINK_LAYER_CONTROL_MAX_LINK_RATE_GEN3;
 		break;
diff --git a/drivers/scsi/isci/probe_roms.c b/drivers/scsi/isci/probe_roms.c
index 4b9d813..917d437 100644
--- a/drivers/scsi/isci/probe_roms.c
+++ b/drivers/scsi/isci/probe_roms.c
@@ -34,8 +34,9 @@
 #include "task.h"
 #include "probe_roms.h"
 
-static efi_char16_t isci_efivar_name[] =
-			{'R', 's', 't', 'S', 'c', 'u', 'O'};
+static efi_char16_t isci_efivar_name[] = {
+	'R', 's', 't', 'S', 'c', 'u', 'O'
+};
 
 struct isci_orom *isci_request_oprom(struct pci_dev *pdev)
 {
diff --git a/drivers/scsi/isci/remote_device.c b/drivers/scsi/isci/remote_device.c
index 85e54f5..b6e6368 100644
--- a/drivers/scsi/isci/remote_device.c
+++ b/drivers/scsi/isci/remote_device.c
@@ -73,7 +73,7 @@
 static void isci_remote_device_not_ready(struct isci_host *ihost,
 				  struct isci_remote_device *idev, u32 reason)
 {
-	struct isci_request * ireq;
+	struct isci_request *ireq;
 
 	dev_dbg(&ihost->pdev->dev,
 		"%s: isci_device = %p\n", __func__, idev);
diff --git a/drivers/scsi/isci/request.h b/drivers/scsi/isci/request.h
index 11bc279..7a1d5a9 100644
--- a/drivers/scsi/isci/request.h
+++ b/drivers/scsi/isci/request.h
@@ -440,8 +440,8 @@ void sci_smp_request_copy_response(struct isci_request *ireq);
 static inline int isci_task_is_ncq_recovery(struct sas_task *task)
 {
 	return (sas_protocol_ata(task->task_proto) &&
-	        task->ata_task.fis.command == ATA_CMD_READ_LOG_EXT &&
-	        task->ata_task.fis.lbal == ATA_LOG_SATA_NCQ);
+		task->ata_task.fis.command == ATA_CMD_READ_LOG_EXT &&
+		task->ata_task.fis.lbal == ATA_LOG_SATA_NCQ);
 
 }
 
diff --git a/drivers/scsi/isci/task.c b/drivers/scsi/isci/task.c
index 2df45c5..d6bcdd0 100644
--- a/drivers/scsi/isci/task.c
+++ b/drivers/scsi/isci/task.c
@@ -88,44 +88,45 @@ static void isci_task_refuse(struct isci_host *ihost, struct sas_task *task,
 	 * function should not be completed to the host in the regular path.
 	 */
 	switch (disposition) {
-		case isci_perform_normal_io_completion:
-			/* Normal notification (task_done) */
-			dev_dbg(&ihost->pdev->dev,
-				"%s: Normal - task = %p, response=%d, "
-				"status=%d\n",
-				__func__, task, response, status);
+	case isci_perform_normal_io_completion:
+		/* Normal notification (task_done) */
+		dev_dbg(&ihost->pdev->dev,
+			"%s: Normal - task = %p, response=%d, "
+			"status=%d\n",
+			__func__, task, response, status);
 
-			task->lldd_task = NULL;
+		task->lldd_task = NULL;
 
-			isci_execpath_callback(ihost, task, task->task_done);
-			break;
+		isci_execpath_callback(ihost, task, task->task_done);
+		break;
 
-		case isci_perform_aborted_io_completion:
-			/* No notification because this request is already in the
-			* abort path.
-			*/
-			dev_dbg(&ihost->pdev->dev,
-				 "%s: Aborted - task = %p, response=%d, "
-				"status=%d\n",
-				 __func__, task, response, status);
-			break;
+	case isci_perform_aborted_io_completion:
+		/*
+		 * No notification because this request is already in the
+		 * abort path.
+		 */
+		dev_dbg(&ihost->pdev->dev,
+			"%s: Aborted - task = %p, response=%d, "
+			"status=%d\n",
+			__func__, task, response, status);
+		break;
 
-		case isci_perform_error_io_completion:
-			/* Use sas_task_abort */
-			dev_dbg(&ihost->pdev->dev,
-				 "%s: Error - task = %p, response=%d, "
-				"status=%d\n",
-				 __func__, task, response, status);
+	case isci_perform_error_io_completion:
+		/* Use sas_task_abort */
+		dev_dbg(&ihost->pdev->dev,
+			"%s: Error - task = %p, response=%d, "
+			"status=%d\n",
+			__func__, task, response, status);
 
-			isci_execpath_callback(ihost, task, sas_task_abort);
-			break;
+		isci_execpath_callback(ihost, task, sas_task_abort);
+		break;
 
-		default:
-			dev_dbg(&ihost->pdev->dev,
-				 "%s: isci task notification default case!",
-				 __func__);
-			sas_task_abort(task);
-			break;
+	default:
+		dev_dbg(&ihost->pdev->dev,
+			"%s: isci task notification default case!",
+			__func__);
+		sas_task_abort(task);
+		break;
 	}
 }
 
@@ -1056,7 +1057,7 @@ int isci_task_abort_task(struct sas_task *task)
 	dev_dbg(&isci_host->pdev->dev,
 		"%s: old_request == %p\n", __func__, old_request);
 
-	any_dev_reset = isci_device_is_reset_pending(isci_host,isci_device);
+	any_dev_reset = isci_device_is_reset_pending(isci_host, isci_device);
 
 	spin_lock_irqsave(&task->task_state_lock, flags);
 
@@ -1115,9 +1116,9 @@ int isci_task_abort_task(struct sas_task *task)
 				__func__, task);
 		}
 		goto out;
-	}
-	else
+	} else {
 		spin_unlock_irqrestore(&task->task_state_lock, flags);
+	}
 
 	spin_lock_irqsave(&isci_host->scic_lock, flags);
 



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [GIT PULL] isci: sas controller driver for 3.0
  2011-07-01 23:35 [GIT PULL] isci: sas controller driver for 3.0 Dan Williams
  2011-07-02 22:45 ` James Bottomley
@ 2011-07-04 13:45 ` Christoph Hellwig
  2011-07-04 14:07   ` Douglas Gilbert
  1 sibling, 1 reply; 10+ messages in thread
From: Christoph Hellwig @ 2011-07-04 13:45 UTC (permalink / raw)
  To: Dan Williams
  Cc: James Bottomley, Christoph Hellwig, Linus Torvalds, linux-scsi,
	Dave Jiang, Jeff Skirvin, Ed Ciechanowski, Ed Nadolski,
	David Milburn, Jeff Garzik, Jacek Danecki, hare

On Fri, Jul 01, 2011 at 04:35:48PM -0700, Dan Williams wrote:
> James, please pull from:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/djbw/isci.git master
> 
> ...to receive the isci driver that supports the integrated 6Gb/s SAS
> capabilities of the upcoming Intel(R) C600 series chipset family.  This
> part is targeted at standard servers / workstations and provides
> up to 8-ports (2x4-port controllers) of SAS beyond the traditional SATA
> ports (surfaced by the ahci driver).

The driver looks okay to me.  It's not stellar, but so much better
than the original.  I'll make sure to keep your TODO list long after
the merge, though :)


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [GIT PULL] isci: sas controller driver for 3.0
  2011-07-04 13:45 ` Christoph Hellwig
@ 2011-07-04 14:07   ` Douglas Gilbert
  2011-07-04 14:38     ` Matthew Wilcox
  0 siblings, 1 reply; 10+ messages in thread
From: Douglas Gilbert @ 2011-07-04 14:07 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: Dan Williams, James Bottomley, Linus Torvalds, linux-scsi,
	Dave Jiang, Jeff Skirvin, Ed Ciechanowski, Ed Nadolski,
	David Milburn, Jeff Garzik, Jacek Danecki, hare

On 11-07-04 03:45 PM, Christoph Hellwig wrote:
> On Fri, Jul 01, 2011 at 04:35:48PM -0700, Dan Williams wrote:
>> James, please pull from:
>>
>>    git://git.kernel.org/pub/scm/linux/kernel/git/djbw/isci.git master
>>
>> ...to receive the isci driver that supports the integrated 6Gb/s SAS
>> capabilities of the upcoming Intel(R) C600 series chipset family.  This
>> part is targeted at standard servers / workstations and provides
>> up to 8-ports (2x4-port controllers) of SAS beyond the traditional SATA
>> ports (surfaced by the ahci driver).

s/surfaced/serviced/

> The driver looks okay to me.  It's not stellar, but so much better
> than the original.  I'll make sure to keep your TODO list long after
> the merge, though :)


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [GIT PULL] isci: sas controller driver for 3.0
  2011-07-04 14:07   ` Douglas Gilbert
@ 2011-07-04 14:38     ` Matthew Wilcox
  0 siblings, 0 replies; 10+ messages in thread
From: Matthew Wilcox @ 2011-07-04 14:38 UTC (permalink / raw)
  To: Douglas Gilbert
  Cc: Christoph Hellwig, Dan Williams, James Bottomley, Linus Torvalds,
	linux-scsi, Dave Jiang, Jeff Skirvin, Ed Ciechanowski,
	Ed Nadolski, David Milburn, Jeff Garzik, Jacek Danecki, hare

On Mon, Jul 04, 2011 at 04:07:04PM +0200, Douglas Gilbert wrote:
> On 11-07-04 03:45 PM, Christoph Hellwig wrote:
>> On Fri, Jul 01, 2011 at 04:35:48PM -0700, Dan Williams wrote:
>>> James, please pull from:
>>>
>>>    git://git.kernel.org/pub/scm/linux/kernel/git/djbw/isci.git master
>>>
>>> ...to receive the isci driver that supports the integrated 6Gb/s SAS
>>> capabilities of the upcoming Intel(R) C600 series chipset family.  This
>>> part is targeted at standard servers / workstations and provides
>>> up to 8-ports (2x4-port controllers) of SAS beyond the traditional SATA
>>> ports (surfaced by the ahci driver).
>
> s/surfaced/serviced/

"surfaced" seems to be a popular term within Intel.  I believe it comes
from Windows.  It means "the ahci driver is responsible for creating
the device entries for the SATA ports".

-- 
Matthew Wilcox				Intel Open Source Technology Centre
"Bill, look, we understand that you're interested in selling us this
operating system, but compare it to ours.  We can't possibly take such
a retrograde step."

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2011-07-04 14:38 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-07-01 23:35 [GIT PULL] isci: sas controller driver for 3.0 Dan Williams
2011-07-02 22:45 ` James Bottomley
2011-07-03  2:43   ` Dan Williams
2011-07-03  5:16     ` James Bottomley
2011-07-03  5:46       ` Dan Williams
2011-07-03 11:37         ` Dan Williams
2011-07-03 19:14           ` James Bottomley
2011-07-04 13:45 ` Christoph Hellwig
2011-07-04 14:07   ` Douglas Gilbert
2011-07-04 14:38     ` Matthew Wilcox

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox