]> git.openfabrics.org - ~shefty/rdma-win.git/commit
[MLX4] added HCA Soft Reset mechanism (used by Ethernet interface so far)
authorleonidk <leonidk@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Mon, 4 Aug 2008 16:18:23 +0000 (16:18 +0000)
committerleonidk <leonidk@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Mon, 4 Aug 2008 16:18:23 +0000 (16:18 +0000)
commit857d7078138c9dd9c87a772813956120f212ea34
tree6caa2a231f286feb818d874bb3491b9df6a2ed91
parentb96446378e086627fb67a0236a8f31b71e458b28
[MLX4] added HCA Soft Reset mechanism (used by Ethernet interface so far)

Soft Reset here is HCA re-initialization without bus driver reloading.
A reset can be initiated by clients (mlx4_eth, mlx4_hca) and/or driver (mlx4_bus).
Driver issues reset upon card fatal error, which prevents the following work with the card.
Clients may request the reset at any moment upon their will.

Clients have to register event callback after getting bus interface.

When a reset event comes, the bus driver will:
   - bar the following work with card, returning –EFAULT to all, but destroy_xx, commands;
   - reset the card to stop incoming traffic (only in case of client-initiated reset);
   - notify all registered clients about pending reset.

Getting this notification clients have to:
   - wait for all issued commands to end;
   - reset its own clients, if any, and bar their work;
   - release all the device resources, they were using till now;
   - send “I’m reset-ready” notification to the bus driver;

The driver starts to perform device reset only after receiving the “I’m reset-ready” notifications from all the registered clients. It re-initializes the device and notifies all the clients.

Having received this notification, clients have to:
   - dereference the old bus interface;
   - get the new interface from bus driver;
   - register new event handler;
   - resume/restart itself;
   - wake up its own clients, if any;

git-svn-id: svn://openib.tc.cornell.edu/gen1@1463 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86
32 files changed:
trunk/hw/mlx4/kernel/bus/core/SOURCES
trunk/hw/mlx4/kernel/bus/core/cache.c
trunk/hw/mlx4/kernel/bus/drv/drv.c
trunk/hw/mlx4/kernel/bus/drv/drv.h
trunk/hw/mlx4/kernel/bus/drv/mlx4_bus.inx
trunk/hw/mlx4/kernel/bus/drv/pdo.c
trunk/hw/mlx4/kernel/bus/ib/ah.c
trunk/hw/mlx4/kernel/bus/ib/cq.c
trunk/hw/mlx4/kernel/bus/ib/mad.c
trunk/hw/mlx4/kernel/bus/ib/main.c
trunk/hw/mlx4/kernel/bus/ib/mr.c
trunk/hw/mlx4/kernel/bus/ib/qp.c
trunk/hw/mlx4/kernel/bus/ib/srq.c
trunk/hw/mlx4/kernel/bus/inc/bus_intf.h
trunk/hw/mlx4/kernel/bus/inc/device.h
trunk/hw/mlx4/kernel/bus/inc/ib_verbs.h
trunk/hw/mlx4/kernel/bus/net/alloc.c
trunk/hw/mlx4/kernel/bus/net/catas.c
trunk/hw/mlx4/kernel/bus/net/cmd.c
trunk/hw/mlx4/kernel/bus/net/cq.c
trunk/hw/mlx4/kernel/bus/net/eq.c
trunk/hw/mlx4/kernel/bus/net/fw.c
trunk/hw/mlx4/kernel/bus/net/main.c
trunk/hw/mlx4/kernel/bus/net/mlx4.h
trunk/hw/mlx4/kernel/bus/net/mr.c
trunk/hw/mlx4/kernel/bus/net/pd.c
trunk/hw/mlx4/kernel/bus/net/port.c
trunk/hw/mlx4/kernel/bus/net/qp.c
trunk/hw/mlx4/kernel/bus/net/srq.c
trunk/hw/mlx4/kernel/hca/data.c
trunk/hw/mlx4/kernel/inc/l2w.h
trunk/hw/mlx4/kernel/inc/vip_dev.h