I botched the e-mail address for networking-discuss in sac_next case.  
I'm resending so they get it.  Sorry for the duplicate for those of you 
who also get PSARC mail.

    -- Garrett

Garrett D'Amore - sun microsystems wrote:
> Template Version: @(#)sac_nextcase 1.68 02/23/09 SMI
> This information is Copyright 2009 Sun Microsystems
> 1. Introduction
>     1.1. Project/Component Working Name:
>        Driver Private Minor Numbers for GLDv3
>     1.2. Name of Document Author/Supplier:
>        Author:  Garrett D'Amore
>     1.3  Date of This Document:
>       24 July, 2009
> 4. Technical Description
>
> Driver Private Minor Numbers for GLDv3
> --------------------------------------
>
> Problem:
>
>     If a device driver that is a GLDv3 mac provider desires to export
>     additional minor nodes (such as for use with the techniques
>     described in PSARC 2009/380), then the driver must be able to
>     allocate minor numbers in a way that does not conflict with
>     GLDv3's use of them.
>
>     GLDv3 currently allocates minor numbers as follows: 0 is used for
>     the special DLPI style 2 node, numbers 1-1000 are used for PPAs
>     (minor = PPA + 1), and minor numbers from 1001 through MAXMIN32
>     are used for dynamic stream allocations.  (Numbers above MAXMIN32
>     are effectively useless since minor numbers must be accessible to
>     32-bit applications.)  Note that this latter range is shared
>     across all device drivers using a global id_space_t.
>
>     We are currently in the process of trying to engineer a driver
>     that is both an InfiniBand HCA, and a GLDv3 ethernet provider.  So
>     the problem of minor number allocation is not merely a theoretical
>     curiosity.
>
> Solution:
>
>     We propose to constrain the range of minor numbers used by GLDv3
>     to just half that that it currently uses, leaving half of the
>     minor numbers available for driver private use.  We will also
>     export the value that represents the first minor number available
>     for driver private as the macro MAC_PRIVATE_MINOR.
>
>     This will take the value 0x20000.  Note that MAXMIN32 takes the
>     value 0x3ffff.  The construction of MAC_PRIVATE_MINOR is
>     calculated from MAXMIN32:
>
>              #define MAC_PRIVATE_MINOR ((MAXMIN32 + 1) / 2)
>
>     This macro will be available in <sys/mac_provider.h>
>
> Imported Interfaces:
>
>     +---------------------------------------------------------------------+
>     | Interface               Commitment Level        Comments                
>   |
>     +---------------------------------------------------------------------+
>     | GLDv3           Consolidation Private   Specifically the mac      |
>     |                                         provider interfaces.      |
>     | MAXMIN32                Committed               <sys/mkdev.h>           
>   |
>     +---------------------------------------------------------------------+
>
> Exported Interfaces:
>
>     +---------------------------------------------------------------------+
>     | Interface               Commitment Level        Comments                
>   |
>     +---------------------------------------------------------------------+
>     | MAC_PRIVATE_MINOR       Consolidation Private   Start of driver private 
>   |
>     |                                         minor numbers.            |
>     +---------------------------------------------------------------------+
>
> Limitations:
>
>     This approach allows drivers like our hybrid ethernet/IB driver to
>     be constructed.  However, it does have one drawback, which is that
>     there will only be about 130,000 possible concurrent streams that
>     can be open against all GLDv3 devices at a time.  This is roughly
>     half the current number allowed.  We don't think this is a
>     limitation.  If it becomes one, there is an alternate approach
>     that can be used; see below.
>
>     The other limitation is that this assumes that mac providers which
>     need to have separate minor number management are not also
>     participating in other frameworks which have the same minor number
>     allocation issue.  At the moment we are not aware of any such
>     cases, but if the situation arises there is an alternate approach
>     that can be used; see below.
>
> Ramifications for Mac Providers:
>
>     Drivers that make use of this feature will have to do some
>     additional work as well.  Most obviously, they will need to
>     provide an alternate implementation of getinfo(9e).  They will
>     also need to provide alternate implementations of open(9e) and
>     possibly other functions as well, in the cb_ops and streamtab
>     structures.  The logical place for them to do this will be after
>     calling mac_init_ops().  mac_init_ops() currently allocates
>     storage on the heap for these structures, private to the driver,
>     so such modifications can be made in drivers harmlessly.  This
>     behavior will have to become part of the interface specification
>     for GLDv3 mac providers.
>
>     Of course, current mac providers that don't need this
>     functionality will not require any modification.
>
>
> Alternate Approach:
>
>     An alternate way of solving this problem would be to give the
>     ability to Mac providers to manage their own minor number spaces.
>     This could be triggered by a capability.  This heavier weight
>     solution would be ultimately flexible, but would require more
>     significant changes to the GLDv3.  After discussion with several
>     other engineers, we decided against using this approach at this
>     time, because we didn't feel the complexity was needed, or is
>     likely to be needed for the foreseeable future.  One benefit of
>     this atlernate approach, is that it could be used to provide
>     per-driver minor number spaces, which could ease pressure on the
>     minor number spaces, if such pressure is ever found to be a
>     concern.  However, we have a difficult time imagining a system
>     where more than 100,000 concurrent mac clients would be in use.
>
>
> 6. Resources and Schedule
>     6.4. Steering Committee requested information
>       6.4.1. Consolidation C-team Name:
>               ON
>     6.5. ARC review type: FastTrack
>     6.6. ARC Exposure: open
>
>   


Reply via email to