summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryongari <yongari@FreeBSD.org>2012-01-17 22:15:33 +0000
committeryongari <yongari@FreeBSD.org>2012-01-17 22:15:33 +0000
commita4e977ace50f32ed979c640952e474741d7e8b17 (patch)
tree7f72569ae15b1440a4ef8ec4feba375dbf2d7249
parent4175ee1d5f6550260fc7590f36ddda22ae626387 (diff)
downloadFreeBSD-src-a4e977ace50f32ed979c640952e474741d7e8b17.zip
FreeBSD-src-a4e977ace50f32ed979c640952e474741d7e8b17.tar.gz
Introduce a tunable that disables use of MSI.
Non-zero value will use INTx.
-rw-r--r--sys/dev/bge/if_bge.c9
-rw-r--r--sys/dev/bge/if_bgereg.h1
2 files changed, 10 insertions, 0 deletions
diff --git a/sys/dev/bge/if_bge.c b/sys/dev/bge/if_bge.c
index ea477fd..bb4c7a7 100644
--- a/sys/dev/bge/if_bge.c
+++ b/sys/dev/bge/if_bge.c
@@ -2745,6 +2745,9 @@ bge_can_use_msi(struct bge_softc *sc)
{
int can_use_msi = 0;
+ if (sc->bge_msi_disable != 0)
+ return (0);
+
/* Disable MSI for polling(4). */
#ifdef DEVICE_POLLING
return (0);
@@ -5627,6 +5630,12 @@ bge_add_sysctls(struct bge_softc *sc)
"Number of fragmented TX buffers of a frame allowed before "
"forced collapsing");
+ sc->bge_msi_disable = 0;
+ snprintf(tn, sizeof(tn), "dev.bge.%d.msi_disable", unit);
+ TUNABLE_INT_FETCH(tn, &sc->bge_msi_disable);
+ SYSCTL_ADD_INT(ctx, children, OID_AUTO, "msi_disable",
+ CTLFLAG_RD, &sc->bge_msi_disable, 0, "Disable MSI");
+
/*
* It seems all Broadcom controllers have a bug that can generate UDP
* datagrams with checksum value 0 when TX UDP checksum offloading is
diff --git a/sys/dev/bge/if_bgereg.h b/sys/dev/bge/if_bgereg.h
index ccb2c6d..de06b2b 100644
--- a/sys/dev/bge/if_bgereg.h
+++ b/sys/dev/bge/if_bgereg.h
@@ -2864,6 +2864,7 @@ struct bge_softc {
int bge_timer;
int bge_forced_collapse;
int bge_forced_udpcsum;
+ int bge_msi_disable;
int bge_csum_features;
struct callout bge_stat_ch;
uint32_t bge_rx_discards;
OpenPOWER on IntegriCloud