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