Pull in change from trunk for reporting bus relations.

The current code passes the bus filter instance's CA GUID and then does a 
lookup based on the GUID to find that instance's port and IOU managers for 
reporting bus relations.  This patch pulls in a change from the trunk where the 
bus filter instance is passed in, removing the need to perform the lookup.

Signed-off-by: Fab Tillier <[email protected]>

diff -dwup3 -X excl.txt -r 
c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\core\bus\kernel\bus_iou_mgr.c 
.\core\bus\kernel\bus_iou_mgr.c
--- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\core\bus\kernel\bus_iou_mgr.c 
Fri Aug 03 17:54:45 2012
+++ .\core\bus\kernel\bus_iou_mgr.c     Thu Jul 26 16:18:08 2012
@@ -515,52 +515,25 @@ iou_mgr_pnp_cb(
  */
 #pragma prefast(suppress: 28167, "The irql level is restored here")
 NTSTATUS iou_mgr_get_bus_relations(
-       IN              const   net64_t                                         
ca_guid,
+       IN                              bus_filter_t*                           
p_bfi,
        IN                              IRP* const                              
        p_irp )
 {
        NTSTATUS                        status;
-       bus_filter_t            *p_bfi;
-       iou_mgr_t                       *p_iou_mgr;
-       DEVICE_RELATIONS        *p_rel;
 
        BUS_ENTER( BUS_DBG_PNP );
 
-       BUS_PRINT(BUS_DBG_PNP, ("CA_guid %I64x\n",ca_guid));
-
-       /* special case guid == 0 - walk all bus filter instances */
-       if ( ca_guid == 0ULL ) {
-               for(p_bfi=g_bus_filters; p_bfi < 
&g_bus_filters[MAX_BUS_FILTERS]; p_bfi++) {
-                       p_iou_mgr = p_bfi->p_iou_mgr;
-                       if ( !p_iou_mgr )
-                               continue;
-                       cl_mutex_acquire( &p_iou_mgr->pdo_mutex );
-                       status = bus_get_relations( &p_iou_mgr->iou_list, 
ca_guid, p_irp );
-                       cl_mutex_release( &p_iou_mgr->pdo_mutex );
-               }
-               p_rel = (DEVICE_RELATIONS*)p_irp->IoStatus.Information;
-               if ( p_rel ) {
-                       BUS_PRINT(BUS_DBG_PNP, ("CA_guid 0 Reports %d 
relations\n", p_rel->Count));
-               }
-               BUS_EXIT( BUS_DBG_PNP );
-               return STATUS_SUCCESS;
-       }
+       BUS_PRINT(BUS_DBG_PNP, ("CA_guid %I64x\n",p_bfi->ca_guid));
 
-       p_bfi = get_bfi_by_ca_guid(ca_guid);
-       if (p_bfi == NULL) {
-               BUS_TRACE_EXIT(BUS_DBG_PNP,
-                                                               ("NULL p_bfi 
from ca_guid %I64x ?\n",ca_guid));
-               return STATUS_UNSUCCESSFUL;
-       }
-       p_iou_mgr = p_bfi->p_iou_mgr;
+       CL_ASSERT( p_bfi->ca_guid );
 
        BUS_PRINT(BUS_DBG_PNP, ("%s for ca_guid %I64x iou_mgr %p\n",
-                                                       p_bfi->whoami, ca_guid, 
p_iou_mgr) );
-       if (!p_iou_mgr)
+                                                       p_bfi->whoami, 
p_bfi->ca_guid, p_bfi->p_iou_mgr) );
+       if (!p_bfi->p_iou_mgr)
                return STATUS_NO_SUCH_DEVICE;
 
-       cl_mutex_acquire( &p_iou_mgr->pdo_mutex );
-       status = bus_get_relations( &p_iou_mgr->iou_list, ca_guid, p_irp );
-       cl_mutex_release( &p_iou_mgr->pdo_mutex );
+       cl_mutex_acquire( &p_bfi->p_iou_mgr->pdo_mutex );
+       status = bus_get_relations( &p_bfi->p_iou_mgr->iou_list, 
p_bfi->ca_guid, p_irp );
+       cl_mutex_release( &p_bfi->p_iou_mgr->pdo_mutex );
 
        BUS_EXIT( BUS_DBG_PNP );
        return status;
diff -dwup3 -X excl.txt -r 
c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\core\bus\kernel\bus_iou_mgr.h 
.\core\bus\kernel\bus_iou_mgr.h
--- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\core\bus\kernel\bus_iou_mgr.h 
Thu May 31 11:22:15 2012
+++ .\core\bus\kernel\bus_iou_mgr.h     Thu Jul 26 16:17:12 2012
@@ -59,7 +59,7 @@ create_iou_mgr(
 
 NTSTATUS
 iou_mgr_get_bus_relations(
-       IN              const   net64_t                                         
ca_guid,
+       IN                      struct _bus_filter_instance*    p_bfi,
        IN                              IRP* const                              
        p_irp );
 
 #endif
diff -dwup3 -X excl.txt -r 
c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\core\bus\kernel\bus_pnp.c 
.\core\bus\kernel\bus_pnp.c
--- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\core\bus\kernel\bus_pnp.c     
Fri Aug 03 17:54:45 2012
+++ .\core\bus\kernel\bus_pnp.c Thu Jul 26 16:20:52 2012
@@ -1010,12 +1010,12 @@ fdo_query_bus_relations(
                        ioc_pnp_request_ioc_rescan();
                }
 
-               status = port_mgr_get_bus_relations( p_bfi->ca_guid, p_irp );
+               status = port_mgr_get_bus_relations( p_bfi, p_irp );
 
                if( status == STATUS_SUCCESS || 
                        status == STATUS_NO_SUCH_DEVICE )
                {
-                       status = iou_mgr_get_bus_relations( p_bfi->ca_guid, 
p_irp );
+                       status = iou_mgr_get_bus_relations( p_bfi, p_irp );
                }
                if( status == STATUS_NO_SUCH_DEVICE )
                        status = STATUS_SUCCESS;
@@ -1502,7 +1502,7 @@ fdo_query_pnp_state(
        *p_action = IrpSkip;
 
        BUS_EXIT( BUS_DBG_PNP );
-       return STATUS_SUCCESS;;
+       return STATUS_SUCCESS;
 }
 
 #pragma alloc_text( PAGED , fdo_query_interface )
diff -dwup3 -X excl.txt -r 
c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\core\bus\kernel\bus_port_mgr.c 
.\core\bus\kernel\bus_port_mgr.c
--- 
c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\core\bus\kernel\bus_port_mgr.c    
    Fri Aug 03 17:54:45 2012
+++ .\core\bus\kernel\bus_port_mgr.c    Thu Jul 26 16:38:31 2012
@@ -535,57 +535,25 @@ port_mgr_pnp_cb(
  */
 #pragma prefast(suppress: 28167, "The irql level is restored here")
 NTSTATUS port_mgr_get_bus_relations(
-       IN              const   net64_t                                         
ca_guid,
+       IN                              bus_filter_t*                           
p_bfi,
        IN                              IRP* const                              
        p_irp )
 {
        NTSTATUS                        status;
-       bus_filter_t            *p_bfi;
-       port_mgr_t                      *p_port_mgr;
-       DEVICE_RELATIONS        *p_rel;
 
        BUS_ENTER( BUS_DBG_PNP );
 
-       BUS_PRINT(BUS_DBG_PNP, ("CA_guid %I64x\n",ca_guid));
-
-       /* special case guid == 0 - walk all bus filter instances */
-       if ( ca_guid == 0ULL ) {
-               BUS_PRINT(BUS_DBG_PNP, ("CA_guid 0\n"));
-               for(p_bfi=g_bus_filters; p_bfi < 
&g_bus_filters[MAX_BUS_FILTERS]; p_bfi++) {
-                       p_port_mgr = p_bfi->p_port_mgr;
-                       if ( !p_port_mgr )
-                               continue;
-                       cl_mutex_acquire( &p_port_mgr->pdo_mutex );
-                       status = bus_get_relations( &p_port_mgr->port_list,
-                                                                               
p_bfi->ca_guid,
-                                                                               
p_irp );
-                       cl_mutex_release( &p_port_mgr->pdo_mutex );
-               }
-
-               p_rel = (DEVICE_RELATIONS*)p_irp->IoStatus.Information;
-               if ( p_rel ) {
-                       BUS_PRINT(BUS_DBG_PNP, ("CA_guid 0 Reports %d\n", 
p_rel->Count));
-               }
-               BUS_EXIT( BUS_DBG_PNP );
-               return STATUS_SUCCESS;
-       }
+       BUS_PRINT(BUS_DBG_PNP, ("CA_guid %I64x\n",p_bfi->ca_guid));
 
-       p_bfi = get_bfi_by_ca_guid(ca_guid);
-       if (p_bfi == NULL) {
-               BUS_PRINT(BUS_DBG_PNP,
-                       ("Null *p_bfi from ca_guid %I64x\n",ca_guid));
-               BUS_EXIT( BUS_DBG_PNP );
-               return STATUS_NO_SUCH_DEVICE;
-       }
-       p_port_mgr = p_bfi->p_port_mgr;
+       CL_ASSERT( p_bfi->ca_guid );
 
        BUS_PRINT(BUS_DBG_PNP, ("%s for ca_guid %I64x port_mgr %p\n",
-                                                       p_bfi->whoami, ca_guid, 
p_port_mgr) );
-       if (!p_port_mgr)
+                                                       p_bfi->whoami, 
p_bfi->ca_guid, p_bfi->p_port_mgr) );
+       if (!p_bfi->p_port_mgr)
                return STATUS_NO_SUCH_DEVICE;
 
-       cl_mutex_acquire( &p_port_mgr->pdo_mutex );
-       status = bus_get_relations( &p_port_mgr->port_list, ca_guid, p_irp );
-       cl_mutex_release( &p_port_mgr->pdo_mutex );
+       cl_mutex_acquire( &p_bfi->p_port_mgr->pdo_mutex );
+       status = bus_get_relations( &p_bfi->p_port_mgr->port_list, 
p_bfi->ca_guid, p_irp );
+       cl_mutex_release( &p_bfi->p_port_mgr->pdo_mutex );
 
        BUS_EXIT( BUS_DBG_PNP );
        return STATUS_SUCCESS;
@@ -2015,8 +1983,6 @@ port_query_bus_info(
        //TODO: loaded.
        p_bus_info->LegacyBusType = Internal;
 
-
-
        len = sizeof(ULONG);
 
        status = IoGetDeviceProperty( p_hca_dev, DevicePropertyBusNumber , 
sizeof(ULONG), &BusNumber, &len );
@@ -2029,7 +1995,6 @@ port_query_bus_info(
                return status;
        }
 
-    
        p_bus_info->BusNumber = BusNumber;
 
        p_irp->IoStatus.Information = (ULONG_PTR)p_bus_info;
diff -dwup3 -X excl.txt -r 
c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\core\bus\kernel\bus_port_mgr.h 
.\core\bus\kernel\bus_port_mgr.h
--- 
c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\core\bus\kernel\bus_port_mgr.h    
    Thu May 31 11:22:15 2012
+++ .\core\bus\kernel\bus_port_mgr.h    Thu Jul 26 16:18:31 2012
@@ -64,7 +64,7 @@ create_port_mgr(
 
 NTSTATUS
 port_mgr_get_bus_relations(
-       IN              const   net64_t                                         
ca_guid,
+       IN              struct _bus_filter_instance     *p_bfi,
        IN                              IRP* const                              
        p_irp );
 
 #endif

Attachment: ndv2.26.patch
Description: ndv2.26.patch

_______________________________________________
ofw mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw

Reply via email to