This case was approved at the meeting on March 11.

Update the IAM file to reflect this.

alan.


Alan Hargreaves wrote:
> I am sponsoring this Update Fast Track for behalf of James McPherson.
>
> 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:
>        Specification update for Pluggable fwflash
>     1.2. Name of Document Author/Supplier:
>        Author:  James McPherson
>     1.3  Date of This Document:
>       08 March, 2009
> 4. Technical Description
>
> Title
> -----
>
> Specification update for Pluggable fwflash(1M) PSARC/2008/151
>
> Problem
> -------
>
> PSARC/2008/151 introduced Pluggable fwflash(1M), and defined a plugin
> architecture to make supporting new hardware a straight-forward task.
>
> It has become apparent as new plugins are defined that there are some
> limitations in the existing specification, which requires updating.
>
>
> Limitation #1 is that the identification plugin does not have a means
> of managing its own memory. This opens the door to plugin memory leaks,
> and core dumps if memory needs to be allocated inside the plugin rather
> than depending on an external library which provides its own memory
> management.
>
> Limitation #2 is that when we have many different possible VENDOR types
> reported for a driver (eg, SEAGATE, HITACHI, SAMSUNG, IBM....), then
> we could create a link farm in /usr/lib/fwflash/verify for every possible
> name, but this is tiresome and requires continual maintenance as new devices
> or vendors are supported.
>
> While writing a plugin to support flashing disks attached via sd(7D), we
> discovered that there are some SATA disks which report their vendor
> property inconsistently with others. 
>
>
> For example, note the inquiry-vendor-id for this Seagate 320Gb SATA disk:
>
>
> name='inquiry-product-id' type=string items=1
>     value='ST3320620AS'
> name='inquiry-device-type' type=int items=1
>     value=00000000
> name='inquiry-revision-id' type=string items=1
>     value='3.AAK'
> name='inquiry-vendor-id' type=string items=1
>     value='ST3320620AS'
> name='pm-capable' type=int items=1
>     value=00000001
> name='sas-mpt' type=boolean
> name='compatible' type=string items=5
>     value='scsiclass,00.vATA.pST3320620AS.rK' + 
>         'scsiclass,00.vATA.pST3320620AS' + 
>         'scsa,00.bmpt' + 'scsiclass,00' + 'scsiclass'
>
>
> Compared with a Samsung 320Gb SATA disk:
>
>
> name='inquiry-revision-id' type=string items=1
>     value='CP100-12'
> name='inquiry-product-id' type=string items=1
>     value='HD321KJ'
> name='inquiry-vendor-id' type=string items=1
>     value='SAMSUNG'
> name='pm-capable' type=int items=1
>     value=00000001
> name='guid' type=string items=1
>     value='50000f001bb01248'
> name='sas-mpt' type=boolean
> name='port-wwn' type=byte items=8
>     value=48.12.b0.1b.00.0f.00.50
> name='target-port' type=string items=1
>     value='4812b01b000f0050'
> name='compatible' type=string items=5
>     value='scsiclass,00.vATA.pSAMSUNG_HD321KJ.r0-12' + 
>         'scsiclass,00.vATA.pSAMSUNG_HD321KJ' + 
>         'scsa,00.bmpt' + 'scsiclass,00' + 'scsiclass'
>
>
> Also note the inquiry-revision-id property, which in both cases differs from
> what is specified in the first 'compatible' property.
>
> Just using libdevinfo properties to identify these devices results in
> reporting information which is not as correct as possible, and which may
> confuse the user:
>
> Device[0]                     /dev/dsk/c4t5000CCA00510A7CCd0s2
>   Class [sd]
>       Vendor                 : HITACHI
>       Product                : HUS1514SBSUN146G
>       Firmware revision      : SA02
>       Inquiry Serial Number  : 000742B94YPC        J4V94YPC
>       GUID                   : 5000cca00510a7cc
>
> ...
> Device[5]                     /dev/dsk/c3t5d0s2
>   Class [sd]
>       Vendor                 : SAMSUNG
>       Product                : HD321KJ
>       Firmware revision      : CP100-12
>       Inquiry Serial Number  : S0MQJ1KPB01248      
>       GUID                   : 50000f001bb01248
>
> ...
> Device[7]                     /dev/dsk/c3t7d0s2
>   Class [sd]
>       Vendor                 : ST3320620AS
>       Product                : ST3320620AS
>       Firmware revision      : 3.AAK
>       Inquiry Serial Number  : 6QF1N2MN
>       GUID                   : (not supported)
>
>
> Allowing the identification plugin to manage its own memory allows us
> to report more correct information for such devices, based on the
> 'compatible' property:
>
>
> Device[5]                     /dev/dsk/c3t5d0s2
>   Class [sd]
>       Vendor                 : SAMSUNG
>       Product                : HD321KJ
>       Firmware revision      : 0-12
>       Inquiry Serial Number  : S0MQJ1KPB01248      
>       GUID                   : 50000f001bb01248
>
> ...
> Device[7]                     /dev/dsk/c3t7d0s2
>   Class [sd]
>       Vendor                 : SEAGATE
>       Product                : ST3320620AS
>       Firmware revision      : K
>       Inquiry Serial Number  : 6QF1N2MN
>       GUID                   : (not supported)
>
>
>
>
>
> Proposed solution
> -----------------
>
> The proposal has two elements:
>
>
> #1. Allow verification plugins to be named in the form
>
>       drivername-GENERIC.so
>
>     which will be used as a fallback filename option in the
>     verification loader. (For example, "sd-GENERIC.so"). This removes
>     the need for a link farm in /usr/lib/fwflash/verify and decreases
>     the maintenance burden.
>
>
>
> #2. Add two definitions to fwflash.h. Firstly
>
>       #define FWPLUGIN_VERSION_2      2
>
>     and if an identification plugin defines
>
>       unsigned int plugin_version = FWPLUGIN_VERSION_2;
>
>     in its struct fw_plugin definition, then the fwflash cleanup function
>     will invoke the plugin cleanup function at the appropriate point:
>
>       int (*fw_cleanup)(struct devicelist *thisdev);
>     
>     It is an error condition for an identification plugin to define
>     plugin_version >= FWPLUGIN_VERSION_2, and to not also define the
>     fw_cleanup() function.
>
>
> Diffs for <fwflash/fwflash.h> are found below.
>
>
>
> Stability classifications
> -------------------------
>
> The precursor to this case, PSARC/2008/151 Pluggable fwflash(1m), indicated
> that struct fw_plugin was Committed. This classification remains current.
>
>
>
>
>
> Manpage changes
> ---------------
>
> No manpage changes are required for this change.
>
>
>
> <fwflash/fwflash.h> diffs
> -------------------------
>
>
> --- a/usr/src/cmd/fwflash/common/fwflash.h    Tue Oct 14 20:37:29 2008 -0700
> +++ b/usr/src/cmd/fwflash/common/fwflash.h    Wed Mar 04 17:44:22 2009 +1000
> @@ -19,7 +19,7 @@
>   * CDDL HEADER END
>   */
>  /*
> - * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
> + * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
>   * Use is subject to license terms.
>   */
>  
> @@ -57,7 +57,8 @@
>   */
>  
>  #define      FWPLUGIN_VERSION_1      1
> -
> +#define      FWPLUGIN_VERSION_2      2
> +     
>  struct devicelist;
>  
>  struct fw_plugin {
> @@ -120,6 +121,16 @@
>        * All identification plugins must support this operation.
>        */
>       int (*fw_devinfo)(struct devicelist *thisdev);
> +
> +     /*
> +      * Function entry point to allow the plugin to clean up its
> +      * data structure use IF plugin_version == FWPLUGIN_VERSION_2.
> +      *
> +      * If this function is not defined in the plugin, that is not
> +      * an error condition unless the plugin_version variable is
> +      * defined.
> +      */
> +     void (*fw_cleanup)(struct devicelist *thisdev);
>  };
>  
>
>
>
> 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
>
>   

-- 
Alan Hargreaves - http://blogs.sun.com/tpenta
Staff Engineer (Kernel/VOSJEC/Performance)
Asia Pacific/Emerging Markets
Sun Microsystems


Reply via email to