[ofw][patch][CORE,HW] remove PDO from the upper HCA interface
Leonid Keller
leonid at mellanox.co.il
Sun Mar 29 08:41:17 PDT 2009
Applied in 2065.
________________________________
From: ofw-bounces at lists.openfabrics.org
[mailto:ofw-bounces at lists.openfabrics.org] On Behalf Of Leonid Keller
Sent: Wednesday, March 25, 2009 5:55 PM
To: ofw at lists.openfabrics.org
Subject: [ofw][patch][CORE,HW] remove PDO from the upper HCA
interface
This patch removes p_hca_dev field of the upper CA interface
(ci_interface_t), which contains PDO of HCA device.
IBBUS, now sitting over HCA, gets this PDO in add_device
function and stores it (in this patch) in new p_hca_dev field in IBAL CA
object.
All the usages of ci_interface_t.p_hca_dev field is replaced by
usage of p_hca_dev in IBAL CA object.
p_hca_obj field, added in 2019 patch in RDMA_INTERFACE_VERBS,
removed and placed instead of p_hca_dev in ci_interface_t.
Removing of PDO filed from the interface required changing of
ib_register_ca prototype (for technical reasons).
It is - an interface function, so the interface version number
was increased (IB_CI_INTERFACE_VERSION=5).
Index: core/al/al_ca.h
===================================================================
--- core/al/al_ca.h (revision 2055)
+++ core/al/al_ca.h (working copy)
@@ -50,6 +50,7 @@
cl_list_item_t list_item;
#if defined(CL_KERNEL)
ib_ca_handle_t h_um_ca;
+ PDEVICE_OBJECT p_hca_dev;
#endif
} ib_ca_t;
Index: core/al/al_ci_ca.h
===================================================================
--- core/al/al_ci_ca.h (revision 2055)
+++ core/al/al_ci_ca.h (working copy)
@@ -56,7 +56,9 @@
ib_api_status_t
create_ci_ca(
IN al_obj_t *p_parent_obj,
- IN const ci_interface_t* p_ci );
+ IN const ci_interface_t* p_ci,
+ IN const PDEVICE_OBJECT p_hca_dev
+ );
DEVICE_OBJECT*
get_ca_dev(
Index: core/al/kernel/al_ci_ca.c
===================================================================
--- core/al/kernel/al_ci_ca.c (revision 2055)
+++ core/al/kernel/al_ci_ca.c (working copy)
@@ -84,7 +84,9 @@
ib_api_status_t
create_ci_ca(
IN al_obj_t *p_parent_obj,
- IN const ci_interface_t* p_ci )
+ IN const ci_interface_t* p_ci,
+ IN const PDEVICE_OBJECT p_hca_dev
+ )
{
ib_api_status_t status;
cl_status_t cl_status;
@@ -185,6 +187,9 @@
return status;
}
+ /* store HCA device object into CA object */
+ p_ci_ca->h_ca->p_hca_dev = p_hca_dev;
+
/* Get a list of the port GUIDs on this CI CA. */
status = get_port_info( p_ci_ca );
if( status != IB_SUCCESS )
@@ -516,6 +521,6 @@
{
ASSERT( h_ca );
- ObReferenceObject( h_ca->obj.p_ci_ca->verbs.p_hca_dev );
- return h_ca->obj.p_ci_ca->verbs.p_hca_dev;
-}
\ No newline at end of file
+ ObReferenceObject( h_ca->p_hca_dev );
+ return h_ca->p_hca_dev;
+}
Index: core/al/kernel/al_mgr.c
===================================================================
--- core/al/kernel/al_mgr.c (revision 2055)
+++ core/al/kernel/al_mgr.c (working copy)
@@ -256,7 +256,9 @@
*/
ib_api_status_t
ib_register_ca(
- IN const ci_interface_t* p_ci )
+ IN const ci_interface_t* p_ci,
+ IN const PDEVICE_OBJECT p_hca_dev
+ )
{
ib_api_status_t status;
@@ -283,7 +285,7 @@
}
/* Construct and initialize the CA structure. */
- status = create_ci_ca( &gp_al_mgr->obj, p_ci );
+ status = create_ci_ca( &gp_al_mgr->obj, p_ci, p_hca_dev );
if( status != IB_SUCCESS )
{
AL_PRINT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
Index: core/bus/kernel/bus_iou_mgr.c
===================================================================
--- core/bus/kernel/bus_iou_mgr.c (revision 2055)
+++ core/bus/kernel/bus_iou_mgr.c (working copy)
@@ -417,7 +417,7 @@
{
/* Invalidate bus relations for the HCA. */
IoInvalidateDeviceRelations(
- p_ext->h_ca->obj.p_ci_ca->verbs.p_hca_dev, BusRelations );
+ p_ext->h_ca->p_hca_dev, BusRelations );
/* Release the reference on the CA object. */
deref_al_obj( &p_ext->h_ca->obj );
@@ -787,7 +787,7 @@
/* Tell the PnP Manager to rescan for the HCA's bus relations.
*/
IoInvalidateDeviceRelations(
- p_iou_ext->pdo.h_ca->obj.p_ci_ca->verbs.p_hca_dev,
BusRelations );
+ p_iou_ext->pdo.h_ca->p_hca_dev, BusRelations );
/* Invalidate removal relations for the bus driver. */
IoInvalidateDeviceRelations(
@@ -885,7 +885,7 @@
/* Invalidate bus relations for the HCA. */
IoInvalidateDeviceRelations(
- p_ext->h_ca->obj.p_ci_ca->verbs.p_hca_dev, BusRelations );
+ p_ext->h_ca->p_hca_dev, BusRelations );
/* free PNP context */
cl_free( p_ctx );
@@ -1561,7 +1561,7 @@
p_ext = p_dev_obj->DeviceExtension;
if( !p_ext->h_ca ||
!p_ext->b_present ||
- !p_ext->h_ca->obj.p_ci_ca->verbs.p_hca_dev ||
+ !p_ext->h_ca->p_hca_dev ||
p_ext->b_reported_missing )
{
return STATUS_NO_SUCH_DEVICE;
@@ -1569,7 +1569,7 @@
status = cl_fwd_query_ifc(
- p_ext->h_ca->obj.p_ci_ca->verbs.p_hca_dev, p_io_stack );
+ p_ext->h_ca->p_hca_dev, p_io_stack );
}
else
{
Index: core/bus/kernel/bus_pnp.c
===================================================================
--- core/bus/kernel/bus_pnp.c (revision 2055)
+++ core/bus/kernel/bus_pnp.c (working copy)
@@ -47,6 +47,7 @@
#include "iba/ib_ci_ifc.h"
#include "iba/ib_cm_ifc.h"
#include "al_cm_cep.h"
+#include "al_mgr.h"
/* Interface names are generated by IoRegisterDeviceInterface.
*/
@@ -460,8 +461,11 @@
}
p_ext->hca_ifc_taken = TRUE;
+ /* bind BFI to HCA by CA GUID. Have to be before
ib_register_ca */
+ p_bfi->ca_guid = p_ext->hca_ifc.Verbs.guid;
+
/* register HCA */
- ib_status = ib_register_ca( &p_ext->hca_ifc.Verbs );
+ ib_status = ib_register_ca( &p_ext->hca_ifc.Verbs,
p_ext->cl_ext.p_pdo );
if( ib_status != IB_SUCCESS )
{
BUS_TRACE_EXIT( BUS_DBG_ERROR, ("ib_register_ca returned
%s.\n",
@@ -469,9 +473,6 @@
return STATUS_UNSUCCESSFUL;
}
- /* bind BFI to HCA by CA GUID */
- p_bfi->ca_guid = p_ext->hca_ifc.Verbs.guid;
-
BUS_TRACE_EXIT(BUS_DBG_PNP, ("%s bound to CA guid %I64x\n",
p_bfi->whoami,p_bfi->ca_guid));
return status;
Index: core/bus/kernel/bus_port_mgr.c
===================================================================
--- core/bus/kernel/bus_port_mgr.c (revision 2055)
+++ core/bus/kernel/bus_port_mgr.c (working copy)
@@ -415,7 +415,7 @@
{
/* Invalidate bus relations for the HCA. */
IoInvalidateDeviceRelations(
- p_ext->h_ca->obj.p_ci_ca->verbs.p_hca_dev, BusRelations );
+ p_ext->h_ca->p_hca_dev, BusRelations );
/* Release the reference on the CA object. */
deref_al_obj( &p_ext->h_ca->obj );
@@ -925,7 +925,7 @@
/* Tell the PnP Manager to rescan for the HCA's bus
relations. */
IoInvalidateDeviceRelations(
- p_port_ext->pdo.h_ca->obj.p_ci_ca->verbs.p_hca_dev,
BusRelations );
+ p_port_ext->pdo.h_ca->p_hca_dev, BusRelations );
}
/* Invalidate removal relations for the bus driver. */
@@ -985,7 +985,7 @@
/* Tell the PnP Manager to rescan for the HCA's bus relations.
*/
IoInvalidateDeviceRelations(
- p_port_ext->pdo.h_ca->obj.p_ci_ca->verbs.p_hca_dev,
BusRelations );
+ p_port_ext->pdo.h_ca->p_hca_dev, BusRelations );
BUS_EXIT( BUS_DBG_PNP );
return CL_SUCCESS;
@@ -1125,7 +1125,7 @@
/* Tell the PnP Manager to rescan for the HCA's bus relations.
*/
IoInvalidateDeviceRelations(
- pmatched_guid_ext->pdo.h_ca->obj.p_ci_ca->verbs.p_hca_dev,
BusRelations );
+ pmatched_guid_ext->pdo.h_ca->p_hca_dev, BusRelations );
/* Invalidate removal relations for the bus driver. */
IoInvalidateDeviceRelations(
@@ -1267,7 +1267,7 @@
/* Invalidate bus relations for the HCA. */
IoInvalidateDeviceRelations(
- p_ext->h_ca->obj.p_ci_ca->verbs.p_hca_dev, BusRelations );
+ p_ext->h_ca->p_hca_dev, BusRelations );
/* Free PNP context memory */
cl_free( p_ctx );
@@ -1796,7 +1796,7 @@
return STATUS_NO_SUCH_DEVICE;
}
- p_hca_dev = p_ext->pdo.h_ca->obj.p_ci_ca->verbs.p_hca_dev;
+ p_hca_dev = p_ext->pdo.h_ca->p_hca_dev;
/* Get the length of the HCA's location. */
status = IoGetDeviceProperty( p_hca_dev,
@@ -2017,14 +2017,14 @@
p_ext = p_dev_obj->DeviceExtension;
if( !p_ext->h_ca ||
!p_ext->b_present ||
- !p_ext->h_ca->obj.p_ci_ca->verbs.p_hca_dev ||
+ !p_ext->h_ca->p_hca_dev ||
p_ext->b_reported_missing )
{
return STATUS_NO_SUCH_DEVICE;
}
status = cl_fwd_query_ifc(
- p_ext->h_ca->obj.p_ci_ca->verbs.p_hca_dev, p_io_stack );
+ p_ext->h_ca->p_hca_dev, p_io_stack );
}
else
{
Index: core/winmad/kernel/wm_driver.c
===================================================================
--- core/winmad/kernel/wm_driver.c (revision 2055)
+++ core/winmad/kernel/wm_driver.c (working copy)
@@ -233,7 +233,7 @@
size = 0;
ib_status = pDevice->VerbsInterface.Verbs.
- query_ca(pDevice->VerbsInterface.p_hca_obj, NULL, &size,
NULL);
+ query_ca(pDevice->VerbsInterface.Verbs.p_hca_obj, NULL,
&size, NULL);
if (ib_status != IB_INSUFFICIENT_MEMORY) {
attr = NULL;
goto out;
@@ -245,7 +245,7 @@
}
ib_status = pDevice->VerbsInterface.Verbs.
- query_ca(pDevice->VerbsInterface.p_hca_obj, attr, &size,
NULL);
+ query_ca(pDevice->VerbsInterface.Verbs.p_hca_obj, attr,
&size, NULL);
if (ib_status != IB_SUCCESS) {
ExFreePool(attr);
attr = NULL;
Index: core/winverbs/kernel/wv_driver.c
===================================================================
--- core/winverbs/kernel/wv_driver.c (revision 2055)
+++ core/winverbs/kernel/wv_driver.c (working copy)
@@ -477,7 +477,7 @@
if (!NT_SUCCESS(status)) {
return status;
}
- dev->hDevice = dev->Interface.p_hca_obj;
+ dev->hDevice = dev->Interface.Verbs.p_hca_obj;
KeAcquireGuardedMutex(&Lock);
create = IsListEmpty(&DevList);
Index: hw/mlx4/kernel/hca/drv.c
===================================================================
--- hw/mlx4/kernel/hca/drv.c (revision 2055)
+++ hw/mlx4/kernel/hca/drv.c (working copy)
@@ -282,8 +102,7 @@
setup_ci_interface( p_fdo->hca.guid, !!hca_is_livefish(p_fdo),
pIfc );
- pIfc->p_hca_dev =
WdfDeviceWdmGetPhysicalDevice(p_fdo->FdoDevice);
- ASSERT(pIfc->p_hca_dev);
+ pIfc->p_hca_obj = &p_fdo->hca;
pIfc->vend_id = (uint32_t)p_fdo->bus_ib_ifc.pdev->ven_id;
pIfc->dev_id = (uint16_t)p_fdo->bus_ib_ifc.pdev->dev_id;
pIfc->dev_revision = (uint16_t)p_fdo->hca.hw_ver;
@@ -1215,8 +868,7 @@
setup_ci_interface( p_fdo->hca.guid, !!hca_is_livefish(p_fdo),
pIfc );
- pIfc->p_hca_dev = p_fdo->cl_ext.p_pdo;
- ASSERT(pIfc->p_hca_dev);
+ pIfc->p_hca_obj = &p_fdo->hca;
pIfc->vend_id = (uint32_t)p_fdo->bus_ib_ifc.pdev->ven_id;
pIfc->dev_id = (uint16_t)p_fdo->bus_ib_ifc.pdev->dev_id;
pIfc->dev_revision = (uint16_t)p_fdo->hca.hw_ver;
@@ -1641,7 +1293,6 @@
p_ifc->InterfaceHeader.InterfaceReference = __ref_ifc;
p_ifc->InterfaceHeader.InterfaceDereference = __deref_ifc;
p_ifc->Verbs = *p_hca_ifc;
- p_ifc->p_hca_obj = &p_fdo->hca;
/* take the reference before returning. */
__ref_ifc( p_dev_obj );
Index: hw/mthca/kernel/hca_pnp.c
===================================================================
--- hw/mthca/kernel/hca_pnp.c (revision 2055)
+++ hw/mthca/kernel/hca_pnp.c (working copy)
@@ -242,7 +242,7 @@
!!mthca_is_livefish(p_ext->hca.mdev),
pIfc );
- pIfc->p_hca_dev = p_ext->cl_ext.p_pdo;
+ pIfc->p_hca_obj = &p_ext->hca.hob;
pIfc->vend_id = (uint32_t)p_ext->hcaConfig.VendorID;
pIfc->dev_id = (uint16_t)p_ext->hcaConfig.DeviceID;
pIfc->dev_revision = (uint16_t)p_ext->hca.hw_ver;
@@ -877,7 +877,6 @@
p_ifc->InterfaceHeader.InterfaceReference = __ref_ifc;
p_ifc->InterfaceHeader.InterfaceDereference = __deref_ifc;
p_ifc->Verbs = *p_hca_ifc;
- p_ifc->p_hca_obj = &p_ext->hca.hob;
/* take the reference before returning. */
__ref_ifc( p_dev_obj );
Index: inc/iba/ib_ci.h
===================================================================
--- inc/iba/ib_ci.h (revision 2055)
+++ inc/iba/ib_ci.h (working copy)
@@ -2793,10 +2793,10 @@
net64_t guid;
/*
- * Device object of the HCA. In Windows, this is a pointer to
the PDO
- * for the HCA device.
+ * Handle, returned by open_ca function of HCA upper interface
(ci_interface_t)
+ * It has ib_ca_handle_t type
*/
- void *p_hca_dev;
+ void *p_hca_obj;
/*
* Vendor ID, Device ID, Device Revision of the HCA
@@ -2936,7 +2936,9 @@
*/
AL_EXPORT ib_api_status_t
ib_register_ca (
- IN const ci_interface_t *p_ci );
+ IN const ci_interface_t* p_ci,
+ IN const PDEVICE_OBJECT p_hca_dev
+ );
/*
* DESCRIPTION
* This routine is called by a HCA kernel mode driver to inform
the
@@ -2950,6 +2952,8 @@
* p_ci
* [in] Pointer to the ci_interface_t structure that has the
function
* vector to support verbs functionality.
+* p_hca_dev
+* PDO of HCA device
*
* RETURN VALUE
* IB_SUCCESS
Index: inc/kernel/iba/ib_ci_ifc.h
===================================================================
--- inc/kernel/iba/ib_ci_ifc.h (revision 2055)
+++ inc/kernel/iba/ib_ci_ifc.h (working copy)
@@ -49,13 +49,15 @@
*********/
-#define IB_CI_INTERFACE_VERSION (4)
+#define IB_CI_INTERFACE_VERSION (5)
/* Function type for ib_register_ca. Match the definition in
ib_ci.h */
typedef ib_api_status_t
(*ib_pfn_register_ca_t)(
- IN const ci_interface_t* const p_ci );
+ IN const ci_interface_t* const p_ci,
+ IN const PDEVICE_OBJECT p_hca_dev
+ );
/* Function type for ib_deregister_ca. Matches the definition
in ib_ci.h */
Index: inc/kernel/rdma/verbs.h
===================================================================
--- inc/kernel/rdma/verbs.h (revision 2055)
+++ inc/kernel/rdma/verbs.h (working copy)
@@ -57,7 +57,6 @@
{
INTERFACE InterfaceHeader;
ci_interface_t Verbs;
- void * p_hca_obj;
} RDMA_INTERFACE_VERBS;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openfabrics.org/pipermail/ofw/attachments/20090329/1d269f4f/attachment.html>
More information about the ofw
mailing list