From b6ed679a19e8b2b9bdd5117eee22bc964aa2899a Mon Sep 17 00:00:00 2001 From: tzachid Date: Tue, 22 Jul 2008 06:30:21 +0000 Subject: [PATCH] [mlx4] Use t-first interrupts by default. (mlnx: 2836) git-svn-id: svn://openib.tc.cornell.edu/gen1@1429 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- trunk/hw/mlx4/kernel/bus/drv/drv.c | 28 +++++++++++++++-------- trunk/hw/mlx4/kernel/bus/drv/mlx4_bus.inf | 5 ++-- trunk/hw/mlx4/kernel/bus/net/fw.c | 6 +++++ trunk/hw/mlx4/kernel/bus/net/mlx4.h | 3 ++- 4 files changed, 30 insertions(+), 12 deletions(-) diff --git a/trunk/hw/mlx4/kernel/bus/drv/drv.c b/trunk/hw/mlx4/kernel/bus/drv/drv.c index 456ef259..5e8c80c8 100644 --- a/trunk/hw/mlx4/kernel/bus/drv/drv.c +++ b/trunk/hw/mlx4/kernel/bus/drv/drv.c @@ -873,9 +873,6 @@ __read_registry(WDFDRIVER *hDriver) // "log maximum number of memory translation table segments per HCA" DECLARE_CONST_UNICODE_STRING(numMtt, L"LogNumMtt"); - // "Enable Quality of Service support in the HCA if > 0, (default 1)" - DECLARE_CONST_UNICODE_STRING(enableQoS, L"EnableQoS"); - // "Maximum number of MACs per ETH port (1-127, default 1" DECLARE_CONST_UNICODE_STRING(numMac, L"NumMac"); @@ -885,9 +882,15 @@ __read_registry(WDFDRIVER *hDriver) // "Enable steering by VLAN priority on ETH ports (0/1, default 0)" DECLARE_CONST_UNICODE_STRING(usePrio, L"UsePrio"); + // "Enable Quality of Service support in the HCA if > 0, (default 1)" + DECLARE_CONST_UNICODE_STRING(enableQoS, L"EnableQoS"); + // "Block multicast loopback packets if > 0 (default 1)" DECLARE_CONST_UNICODE_STRING(BlockMcastLB, L"BlockMcastLoopBack"); + // "Measure the interrupt from the first packet (default 1)" + DECLARE_CONST_UNICODE_STRING(InterruptFromFirstPacket, L"InterruptFromFirstPacket"); + // "Ports L2 type (ib/eth/auto, entry per port, comma seperated, default ib for all)" DECLARE_CONST_UNICODE_STRING(PortType, L"PortType"); @@ -944,12 +947,6 @@ __read_registry(WDFDRIVER *hDriver) if (NT_SUCCESS (status)) g.mod_num_mtt = value; - status = WdfRegistryQueryULong(hKey, &enableQoS, &value); - if (NT_SUCCESS (status)) - g.mod_enable_qos = value; - else - g.mod_enable_qos = 1; - status = WdfRegistryQueryULong(hKey, &numMac, &value); if (NT_SUCCESS (status)) g.mod_num_mac = value; @@ -968,12 +965,25 @@ __read_registry(WDFDRIVER *hDriver) else g.mod_use_prio = 0; + status = WdfRegistryQueryULong(hKey, &enableQoS, &value); + if (NT_SUCCESS (status)) + g.mod_enable_qos = value; + else + g.mod_enable_qos = 1; + + status = WdfRegistryQueryULong(hKey, &BlockMcastLB, &value); if (NT_SUCCESS (status)) g.mod_mlx4_blck_lb = value; else g.mod_mlx4_blck_lb = 1; + status = WdfRegistryQueryULong(hKey, &InterruptFromFirstPacket, &value); + if (NT_SUCCESS (status)) + g.mod_interrupt_from_first = value; + else + g.mod_interrupt_from_first = 1; + uvalue.Buffer = uvalue_data; uvalue.MaximumLength = MAX_UVALUE; uvalue.Length = 0; diff --git a/trunk/hw/mlx4/kernel/bus/drv/mlx4_bus.inf b/trunk/hw/mlx4/kernel/bus/drv/mlx4_bus.inf index 1dd32ed5..be5495d5 100644 --- a/trunk/hw/mlx4/kernel/bus/drv/mlx4_bus.inf +++ b/trunk/hw/mlx4/kernel/bus/drv/mlx4_bus.inf @@ -150,14 +150,15 @@ HKR,"Parameters","LogNumMcg",%REG_DWORD%,0x0000000D HKR,"Parameters","LogNumMpt",%REG_DWORD%,0x00000012 HKR,"Parameters","LogNumMtt",%REG_DWORD%,0x00000014 HKR,"Parameters","EnableQoS",%REG_DWORD%,0x00000001 +HKR,"Parameters","BlockMcastLoopBack",%REG_DWORD%,0x00000000 +HKR,"Parameters","InterruptFromFirstPacket",%REG_DWORD%,0x00000001 + HKR,"Parameters","NumMac",%REG_DWORD%,0x00000001 HKR,"Parameters","NumVlan",%REG_DWORD%,0x00000000 HKR,"Parameters","UsePrio",%REG_DWORD%,0x00000000 HKR,"Parameters","PortType",%REG_SZ%,"ib,ib" -HKR,"Parameters","BlockMcastLoopBack",%REG_DWORD%,0x00000000 - HKLM,"System\CurrentControlSet\Control\WMI\GlobalLogger\E51BB6E2-914A-4e21-93C0-192F4801BBFF","Flags",%REG_DWORD%,0xffff HKLM,"System\CurrentControlSet\Control\WMI\GlobalLogger\E51BB6E2-914A-4e21-93C0-192F4801BBFF","Level",%REG_DWORD%,0x3 diff --git a/trunk/hw/mlx4/kernel/bus/net/fw.c b/trunk/hw/mlx4/kernel/bus/net/fw.c index daad1541..b18c9b72 100644 --- a/trunk/hw/mlx4/kernel/bus/net/fw.c +++ b/trunk/hw/mlx4/kernel/bus/net/fw.c @@ -712,6 +712,12 @@ int mlx4_INIT_HCA(struct mlx4_dev *dev, struct mlx4_init_hca_param *param) #else #error Host endianness not defined #endif + + if (g.mod_interrupt_from_first) { + // Bit 30,31 tell the moderation method, 0 default, 1 from first packet + *(inbox + INIT_HCA_FLAGS_OFFSET / 4) |= cpu_to_be32(1 << 30); + } + /* Check port for UD address vector: */ *(inbox + INIT_HCA_FLAGS_OFFSET / 4) |= cpu_to_be32(1); diff --git a/trunk/hw/mlx4/kernel/bus/net/mlx4.h b/trunk/hw/mlx4/kernel/bus/net/mlx4.h index 76af035f..9ece1bf9 100644 --- a/trunk/hw/mlx4/kernel/bus/net/mlx4.h +++ b/trunk/hw/mlx4/kernel/bus/net/mlx4.h @@ -88,7 +88,8 @@ typedef struct _GLOBALS { int mod_enable_qos; int mod_mlx4_blck_lb; enum mlx4_port_type mod_port_type[MLX4_MAX_PORTS]; - + int mod_interrupt_from_first; + } GLOBALS; #pragma warning(default:4201) // nameless struct/union -- 2.41.0