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:
         IRM Framework Extension(s)
    1.2. Name of Document Author/Supplier:
         Author:  Prasad Singamsetty
    1.3  Date of This Document:
        21 September, 2009
4. Technical Description


                IRM Framework Extension(s) 

1.0  Introduction

     PSARC/2008/628 introduced the generic Interrupt Resource Management
     (IRM) feature and it was enabled on SPARC platforms. It also defined
     DDI and NDI interfaces necessary for creating and managing interrupt
     resource pool(s). But this feature was not enabled or delivered
     for x86 platforms.

     On x86 platforms, the global interrupt resources (vectors) are
     associated with the local APIC (Advanced Programmable Interrupt
     Controller) which is a component of CPU. So, the number of
     interrupt resources in the system scales with the number of
     CPUs present in the system. Since the number of CPUs present
     in the system can dynamically change due to CPU hot-plug,
     CPU offlineing, etc., the available interrupt resource pool
     can change dynamically. In the current IRM framework there is
     no interface defined to allow the IRM pool to be resized
     dynamically.

     This project will define the additional interface(s) needed in the
     generic IRM framework and support the IRM feature on x86 platforms.

2.0  Problem

     Dynamic resizing of IRM pool is not supported with the current
     IRM framework. This is necessary to enable IRM feature on
     x86 platforms.

3.0  Technical Details

     A new NDI interface will be added to the IRM framework that
     would allow dynamic resizing of an IRM pool by the platform
     specific nexus drivers. This interface will be available for
     both x86 and SPARC platforms but it is not needed on SPARC
     at this time.

        int ndi_irm_resize_pool(ddi_irm_pool_t *poolp, uint_t size);

                poolp           Pointer to IRM pool

                size            New total number of available vectors
                                in the pool (i.e. new value for ipool_totsz)

     The ndi_irm_resize_pool() function will reset the pool size
     to the specified value. If the new pool size is reduced from the
     previous size then it may trigger resource re-balancing
     operation by IRM if the number of free vectors is less
     than the reduction in pool size.

4.0  Interfaces

     This project exports the following interfaces:

     Interface                  Classification          Comments
     -------------------------------------------------------------------
     ndi_irm_resize_pool        Consol. Private         Resize the pool
     -------------------------------------------------------------------

5.0  Release Summary

     Solaris Next, S10 Update
     Micro/Patch Release

6.0  Man Pages

6.1  ndi_irm_resize_pool

     NAME
        ndi_irm_resize_pool - resize the pool size

     SYNOPSIS
        #include <sys/types.h>
        #include <sys/ddi.h>
        #include <sys/sunndi.h>
        
        int ndi_irm_resize_pool(ddi_irm_pool_t *poolp, uint_t size);

     INTERFACE LEVEL
        ON Consolidation Private

     PARAMETERS
        poolp           Pointer to IRM pool

        size            New total number of available vectors in the pool
                        (i.e. new value for ipool_totsz)

        The ndi_irm_resize_pool() function will reset the pool size
        to the specified value. If the new pool size is reduced from the
        previous size then it may trigger resource re-balancing operation
        by IRM.

     RETURN VALUES
        DDI_SUCCESS     on success
        
        DDI_EINVAL      invalid parameters

        DDI_FAILURE     failure to resize the pool
                        (e.g: rebalance operation failed)

     PLATFORMS
        x86, SPARC

7.0  Dependencies

     Enabling IRM feature on x86 platforms is done as a follow on
     work to the following RFE:

     CR 6669984 Solaris x86 need to provide large number of interrupt vectors
                 for MSI/MSI-X

     The reason for this dependency is the inherent limitations on the
     current implementation of pcplusmp module (APIC module) where the
     number of vectors available for each interrupt priority level (IPL)
     is limited to 32, 16 or less in the system. So, having an IRM feature
     on the current implementation adds no value to the system.

     NOTE: The current plan is to integrate IRM feature along with
     the APIC code changes for the above RFE.

8.0  References

     [1] Interrupt Resource Management
         http://sac.sfbay/PSARC/2008/628/

     [2] Advanced DDI Interrupt Framework
         http://sac.eng/arc/PSARC/2004/253/

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