[ofw] RE: Ibbus as a filter driver for mthca.
Leonid Keller
leonid at mellanox.co.il
Wed Aug 6 09:47:54 PDT 2008
One important question was missed: How IBBUS coexist with WinVerbs
filter driver ?
Today WinVerbs is a simple filter driver AFAIK and will sit under IBBUS.
How will it use IBAL interface (for CM, for example) ?
I'd say, that it should be a class filter driver, dependent on IBBUS -
if it is possible to require - and sit above IBBUS.
Sean ?
> -----Original Message-----
> From: Smith, Stan [mailto:stan.smith at intel.com]
> Sent: Tuesday, August 05, 2008 9:11 PM
> To: Reuven Amitai; Leonid Keller; Tzachi Dar; Fab Tillier;
> Alex Estrin; James Yang; Ishai Rabinovitz
> Cc: ofw at lists.openfabrics.org
> Subject: RE: Ibbus as a filter driver for mthca.
>
> Hello,
> I CC'ed the list as I forgot to when writing the original note.
>
> Reuven Amitai wrote:
> > Hi Stan,
> >
> > I installed the driver (ibbus driver as a upper filter
> driver) and ran
> > basic tests (IOU will come soon).
> > Install/Uninstall using msi, Install using .inf, IPoIB
> enable/disable
> > with multiple HCAs, all seem to work for me.
>
> Good news, thank you for investing time to test.
>
> >
> > I have few questions from what I saw:
> > 1. Disable/Enable require restart:
> > Trying to disable/enable mthca device require a reboot
> in order to
> > complete the operation.
>
> Yes - mthca disable invokes a reboot request. Is this 'new'
> behavior in that the 'current' mthca driver upon right-click
> disable does not require a reboot?
> I'm not sure if this can be stopped/corrected?
>
> Fab, is a reboot required or is it possible to defeat the
> reboot by some .inf driver setting?
>
> IPoIB enable/disable does not require a reboot.
>
> > Uninstall the device and re-install it using the .inf require
> > reboot as well.
> > Did you have the same phenomenon ? (It happens even right after
> > clean install)
>
> I would expect a device uninstall to request a reboot.
> In the bigger picture, customers not so often enable/disable
> an HCA device. For you and I during development, we do; a
> minor although irritating problem.
>
> > 2. Attached DevTree images after clean install on a machine
> with one
> > HCA (mt25204) which has one port.
> > From the images it seems that ibbus reports on the same
> port twice
> > and mthca also report for this port.
> > (When tested on machine with 2 HCA with 2 port each, 8 child
> > objects were reported by ibbus and 4 by mlx4_hca)
> > I think that mthca report is happen since get_relation
> function is
> > still in p_ci_interface and mthca replies
> > to PnP messages using this function (which goes to ibbus
> > get_relation). I don't have a clue about ibbus reports.
>
> Interesting, there does seem to be duplication in reporting relations.
> As I remember, mthca uses the p_ci_interface->get_relations
> call only when mthca receives a QUERY_REMOVE_DEVICE; removal
> relations reporting. Since the bus driver is correctly
> reporting bus relations and there exists an implicit relation
> between the bus driver and mthca driver (same device stack,
> mthca cannot unload until it's instance of ibbus unloads).
> Possibly, the mthca driver should not be reporting relations
> like it does; one step closer to simple? Do you know where
> in mthca relations are reported?
>
> > 3. Are Port/IPoIB devices related only to ibbus (and the
> HCA driver is
> > unaware of them) ?
>
> The mthca driver registers with the bus driver via the CI
> interface. The bus driver has registered for IBAL PNP events,
> which PORT_ADD/REMOVE and IOU_ADD/REMOVE are explicitly
> handled by ibbus.
> The HCA driver is unaware of IPoIB and/or IOU devices and
> aware of port devices.
> The CI->get_relations call from the HCA driver informs the
> HCA about existing bus relations and the implied dependence
> on an HCA port.
>
> > Did you change HCA driver ? (Ignore PnP messages, change HCA
> > registration to ibbus to ibbus query for HCA driver interface)
>
> Mthca driver was not modified, so far, for any of the bus filter work.
>
> > Could you describe what are the changes that you have
> done in the
> > bus driver ?
> > (In which sections the ibbus changed ?)
>
> The big change for ibbus is the recognition and support for
> multiple HCAs; support for multiple calls to
> bus_add_device(). A Bus Filter Instance (BFI) is allocated
> for each HCA. This BFI instance exists as a bus_filter_t* in
> a vector of bus_filters; yes there is a max(16) number of
> HCAs support per system. The max is an implementation
> artifact, a linked list would remove the max although systems
> tend to not have many HCAs so the list felt like overkill at
> this time; a possible stepwise refinement once larger issues
> are resolved.
> The routine 'bus_add_device()' is called for each HCA
> discovered via PNP. Add_device() allocates a BFI slot for the
> new HCA device; HCA will register with IBAL via the CI
> interface. When the 1st PORT/IOU ADD PNP event occurs, a
> port/iou manager is created for the specific HCA; just like
> the current ibbus, only real difference is ibbus is aware of
> multiple HCAs and managers.
> The BFI enables the IBAL PNP callback mechanism to match the
> PNP event to an HCA and locate the port and/or iou manger for
> the HCA in order to handle the PNP event.
> The PNP record 'context' is now a pointer to a
> port/iou_context block which contains a BFI pointer and
> current port/iou object pointer as it does in the current ibbus.
>
> The other big change is the bus driver does not report
> removal relations and now reports bus relations; this may be
> part of the double reporting problem.
>
> Major mods to bus_port_mgr.c, bus_iou_mgr.c and bus_pnp.c;
> see .patches file in branches\winverbs\core\bus\kernel.
>
> > 4. What is the difference of having ibbus as a class filter driver
> > instead of regular filter driver ?
> > How this will integrate with WinVerbs class filter driver ?
>
> An HCA driver is a class driver (InfiniBandHca, although Svr
> 2008 already pre-defines the InfiniBandController class).
> Ibbus is an upper class filter driver and expects HCAs to be
> of the same class, hence the Bus Filter Instance concept.
> Bottom line is ibbus removes the IbInstaller.dll co-installer
> use and gets ibbus/ibal and the HCA all in the same device
> stack thus stepping towards a less complex (no co-installer)
> IB stack. Longer term simpler could be defined as migrating
> driver PNP handling out of IBAL and back into Windows where
> it belongs, thus making IBBUS/IBAL much simpler in the long
> run (think kmdf).
> Additionally, ibbus as a filter driver becomes much more 2008
> installer friendly as ibbus/ibal/complib/hca-driver collapse
> into a single IBCORE .inf file with IOU concerns partitioned
> into a separate .inf file (ib_iou.inf).
>
> Good questions.
>
> Thanks,
>
> Stan.
>
>
> >
> > Thanks, Reuven.
> >
> > -----Original Message-----
> > From: Smith, Stan [mailto:stan.smith at intel.com]
> > Sent: Saturday, August 02, 2008 4:45 AM
> > To: Leonid Keller; Tzachi Dar; Fab Tillier; Alex Estrin;
> James Yang;
> > Reuven Amitai; Ishai Rabinovitz
> > Cc: Woodruff, Robert J
> > Subject: Ibbus as a filter driver for mthca.
> >
> > Gentlemen,
> > The ibbus driver as a upper filter driver is showing
> signs of life.
> > As a filter driver, no IB coinstaller is used making it
> more Svr 2008
> > install friendly.
> > The big change is supporting multiple HCAs, hence multiple
> > bus_add_device() calls along with separate port and iou
> managers per
> > HCA.
> >
> > For mthca devices (single and multiple HCAs per system) the ibbus
> > filter driver is functioning correctly for the following areas:
> >
> > WinOF installer load/unload via devcon.exe commands; need to try
> > dpinst.exe ASAP.
> >
> > Found New Hardware wizard install via a modified mthca.inf.
> >
> > IPoIB enable/disable working correctly with multiple HCAs.
> >
> > Disable with following uninstall.
> >
> > Clean IB stack disable and uninstall.
> >
> > Clean system boot and shutdown - no lingering object reference
> > against the HCA.
> >
> > The reason for this note is to solicit help in debugging IOU
> > functionality as I have no IOUs to test; additionally a wider debug
> > exposure is highly desirable.
> >
> > The source, with moderate debug enabled in a checked build, is
> > available from \gen1\branches\winverbs\core\bus\kernel. The kernel
> > folder is a direct replacement for trunk\core\bus\kernel.
> > You must use the modified mthca.inf file to load as it's a blend of
> > the current mthca.inf plus portions of ib_bus.inf. Only
> mthca.inf is
> > required to load the core IB stack. The modified mthca is in
> > gen1\branches\winverbs\core\bus\kernel\etc for now.
> >
> > I have been testing using mthca devices on svn.1433, will
> be testing
> > with the head-of-svn + Leonid's email patch come Monday;
> Sean H. tells
> > me the head + Leonid's patch works fine for now.
> >
> > ConnectX has not been tested yet. Will be starting ConnectX
> soon using
> > the mlx4_hca2.inf file which Leonid kindly sent me.
> >
> > If some of you could kindly check build and test this filter driver
> > with your IOUs I would be most thankful and most willing to
> assist in
> > any way I can. Code review is most welcome as I'm sure I
> have missed
> > issues along the way.
> >
> > Thank you all in advance!
> >
> > Stan.
>
>
More information about the ofw
mailing list