I am sponsoring the following fasttrack for myself. Micro/patch binding
is requested. I believe the case qualifies for self review (since all
the interfaces are Consolidation Private) and have filed it as Closed
Approved Automatic. If there is a request, I'd be happy to convert it
to a fasttrack and set the timer to enable further discussion.

-Chris


1. Introduction
   1.1. Project/Component Working Name:
        mdi_is_dev_supported
   1.2. Name of Document Author/Supplier:
        Author: Chris Horne
   1.3. Date of This Document:
        Tue Feb 17 19:48:03 MST 2009

4.0 Technical Description

    For a given pHCI device unit-address, the current MPxIO [1] pHCI
    devinfo.vs.pathinfo enumeration sequence must be:

     1. For device at given unit-address, obtain device identity
        information using pHCI private methods.

     2. Assume that device will be supported by vHCI: create
        pHCI-pathinfo/vHCI-client representation.

     3. Online pHCI-pathinfo/vHCI-client. If above assumption was
        incorrect, online will fail.

     4. If pHCI-pathinfo/vHCI-client online above failed:

        4a: Tear down pHCI-pathinfo/vHCI-client enumeration.

        4b: Perform pHCI-devinfo enumeration.

    A new, alternative, MPxIO enumeration sequence is proposed. The new
    enumeration sequence has three goals:

     1. Reuse: Obtain device identity information using existing pHCI
        transport services.

        In the current sequence, not being able to reuse existing pHCI
        transport services complicates pHCI driver implementation
        substantially.

     2. Don't assume: Ask the vHCI if something is supported, and
        enumerate based that answer.

        In the existing sequence, having to unwind after making an
        incorrect assumption complicates a pHCI driver implementation.

     3. Don't break things: Support for the new sequence can't break
        consumers using the current sequence.

        The new sequence is an alternative, not a replacement of the
        existing sequence - both sequences are supported.

    For a given pHCI device unit-address, the new MPxIO pHCI enumeration
    devinfo.vs.pathinfo enumeration sequence will be:

     1. For device at given unit-address:

        1a: Initialize a transitory "probe" pHCI-devinfo child (bound
            to nulldriver [2] and hidden [3]).

        1b: Obtain device identity information using existing
            pHCI-devinfo transport methods.

     2. Use the new mdi_is_dev_supported() interface to ask the vHCI
        code if the device being "probed" by the pHCI code is
        supported.

        2a: YES: perform pHCI-pathinfo/vHCI-client enumeration.

        2b: NO:  perform pHCI-devinfo enumeration.

    In the vHCI implementation of vo_is_dev_supported(), it is possible
    (by agreement between the pHCI and vHCI) to have the vHCI code
    issue additional commands, using the initialized "probe" node
    transport, to determine device support

    The new mdi_is_dev_supported() function returns MDI_SUCCESS to the
    pHCI enumeration code if the vHCI supports the device, otherwise
    MDI_FAILURE is returned.

    In the case of scsi_vhci, the vo_is_dev_supported implementation
    uses existing code to determine if there is a failover module
    willing to accept responsibility for the path management of the
    device.

4.5 Interfaces:

    ------------------------------------------------------------------
    Interface Name              Comm.Lev.       Comments
    ------------------------------------------------------------------

    mdi_is_dev_supported        Cons.Private    Does vHCI support a
                                                device?

    vo_is_dev_supported         "               new mdi_vhci_ops_t
                                                ops_vector function
                                                pointer.

    Prototypes (common/sys/mdi_impldefs.h):

        int mdi_is_dev_supported(char *class,
                dev_info_t *pdip, void *cinfo);

        int     (*vo_is_dev_supported)(dev_info_t *vdip,
                        dev_info_t *pdip, void *cinfo);

    What was defined as vhci_ops_t in [1] was delivered as
    mdi_vhci_ops_t, and the details of what is represented in the PSARC
    case (Consolidation Private) differer dramatically from the
    delivered mdi_vhci_ops_t ops vector. The above interfaces extend
    mdi_vhci_ops_t by adding vo_is_dev_supported. While mdi_vhci_ops_t
    is a versioned interface, it is also consolidation private with no
    contracts or known consumers outside ON. Given this, we opted to
    not roll the version number - it is cleaner to just make the
    required changes (while there is no exposure, avoid accumulating
    version checking code that serves no real purpose).

    While SCSAv3 work will use these interfaces, there is no intent to
    ever promote the above interfaces - use will be well hidden from
    HBA drivers by other new SCSA discovery and enumeration
    interfaces.

4.6 Man page changes:

    None.

4.7 Release Binding

    Micro/patch binding is requested.

4.8 References

    [1] PSARC/1999/647  Multiplexed I/O Framework
        http://sac.eng/PSARC/1999/647
        http://www.opensolaris.org/os/community/arc/caselog/1999/647
        http://sac.eng/PSARC/1999/647/related_cases.html

    [2] PSARC/2008/674  nulldriver
        http://sac.eng/PSARC/2008/674
        http://www.opensolaris.org/os/community/arc/caselog/2008/674

    [3] PSARC/2009/103  ndi hidden nodes
        http://sac.eng/PSARC/2009/103
        http://www.opensolaris.org/os/community/arc/caselog/2009/103

6. Resources and Schedule
    6.4. Steering Committee requested information
        6.4.1. Consolidation C-team Name:
                ON
    6.5. ARC review type: Automatic
    6.6. ARC Exposure: open

Reply via email to