PERFORCE change 195152 for review
John Baldwin
jhb at FreeBSD.org
Wed Jun 22 16:26:29 UTC 2011
http://p4web.freebsd.org/@@195152?ac=10
Change 195152 by jhb at jhb_jhbbsd on 2011/06/22 16:25:39
IFC @195151
Affected files ...
.. //depot/projects/pci/sys/amd64/pci/pci_bus.c#8 integrate
.. //depot/projects/pci/sys/dev/acpica/acpi_pcib_acpi.c#25 integrate
.. //depot/projects/pci/sys/dev/acpica/acpi_resource.c#7 integrate
.. //depot/projects/pci/sys/dev/acpica/acpivar.h#4 integrate
.. //depot/projects/pci/sys/dev/atkbdc/atkbd.c#3 integrate
.. //depot/projects/pci/sys/dev/cardbus/cardbus_cis.c#5 integrate
.. //depot/projects/pci/sys/dev/dc/if_dc.c#3 integrate
.. //depot/projects/pci/sys/dev/e1000/if_igb.c#5 integrate
.. //depot/projects/pci/sys/dev/e1000/if_igb.h#5 integrate
.. //depot/projects/pci/sys/dev/firewire/fwohci.c#3 integrate
.. //depot/projects/pci/sys/dev/pccbb/pccbb_pci.c#2 integrate
.. //depot/projects/pci/sys/dev/pci/pci.c#22 integrate
.. //depot/projects/pci/sys/dev/vr/if_vr.c#4 integrate
.. //depot/projects/pci/sys/dev/vr/if_vrreg.h#2 integrate
.. //depot/projects/pci/sys/dev/xl/if_xl.c#4 integrate
.. //depot/projects/pci/sys/fs/nfsserver/nfs_nfsdserv.c#3 integrate
.. //depot/projects/pci/sys/fs/nfsserver/nfs_nfsdsocket.c#3 integrate
.. //depot/projects/pci/sys/geom/part/g_part_bsd.c#3 integrate
.. //depot/projects/pci/sys/i386/pci/pci_bus.c#8 integrate
.. //depot/projects/pci/sys/ia64/conf/NOTES#2 integrate
.. //depot/projects/pci/sys/net/route.c#3 integrate
.. //depot/projects/pci/sys/net/route.h#3 integrate
.. //depot/projects/pci/sys/net80211/ieee80211_ht.c#4 integrate
.. //depot/projects/pci/sys/net80211/ieee80211_var.h#4 integrate
.. //depot/projects/pci/sys/netinet/ipfw/ip_dn_io.c#3 integrate
.. //depot/projects/pci/sys/netinet/ipfw/ip_fw_pfil.c#2 integrate
.. //depot/projects/pci/sys/netinet/libalias/libalias.3#2 integrate
.. //depot/projects/pci/sys/netinet/tcp_output.c#5 integrate
.. //depot/projects/pci/sys/powerpc/ps3/if_glc.c#2 integrate
.. //depot/projects/pci/sys/powerpc/ps3/ps3bus.c#4 integrate
.. //depot/projects/pci/sys/powerpc/ps3/ps3disk.c#2 integrate
.. //depot/projects/pci/sys/sparc64/include/tsb.h#2 integrate
.. //depot/projects/pci/sys/sparc64/include/vmparam.h#4 integrate
.. //depot/projects/pci/sys/sparc64/sparc64/mp_machdep.c#3 integrate
.. //depot/projects/pci/sys/sparc64/sparc64/pmap.c#5 integrate
.. //depot/projects/pci/sys/sparc64/sparc64/tlb.c#3 integrate
.. //depot/projects/pci/sys/ufs/ffs/ffs_alloc.c#5 integrate
.. //depot/projects/pci/sys/ufs/ffs/ffs_extern.h#5 integrate
.. //depot/projects/pci/sys/ufs/ffs/ffs_softdep.c#5 integrate
Differences ...
==== //depot/projects/pci/sys/amd64/pci/pci_bus.c#8 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/pci/pci_bus.c,v 1.126 2011/05/03 17:37:24 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/pci/pci_bus.c,v 1.127 2011/06/22 16:15:15 jhb Exp $");
#include "opt_cpu.h"
@@ -42,7 +42,6 @@
#include <dev/pci/pcireg.h>
#include <dev/pci/pcib_private.h>
#include <isa/isavar.h>
-#include <machine/bus.h>
#include <machine/legacyvar.h>
#include <machine/pci_cfgreg.h>
#include <machine/resource.h>
@@ -303,6 +302,39 @@
return ENOENT;
}
+/*
+ * Helper routine for x86 Host-PCI bridge driver resource allocation.
+ * This is used to adjust the start address of wildcard allocation
+ * requests to avoid low addresses that are known to be problematic.
+ *
+ * If no memory preference is given, use upper 32MB slot most BIOSes
+ * use for their memory window. This is typically only used on older
+ * laptops that don't have PCI busses behind a PCI bridge, so assuming
+ * > 32MB is likely OK.
+ *
+ * However, this can cause problems for other chipsets, so we make
+ * this tunable by hw.pci.host_mem_start.
+ */
+SYSCTL_DECL(_hw_pci);
+
+static unsigned long host_mem_start = 0x80000000;
+TUNABLE_ULONG("hw.pci.host_mem_start", &host_mem_start);
+SYSCTL_ULONG(_hw_pci, OID_AUTO, host_mem_start, CTLFLAG_RDTUN, &host_mem_start,
+ 0, "Limit the host bridge memory to being above this address.");
+
+u_long
+hostb_alloc_start(int type, u_long start, u_long end, u_long count)
+{
+
+ if (start + count - 1 != end) {
+ if (type == SYS_RES_MEMORY && start < host_mem_start)
+ start = host_mem_start;
+ if (type == SYS_RES_IOPORT && start < 0x1000)
+ start = 0x1000;
+ }
+ return (start);
+}
+
struct resource *
legacy_pcib_alloc_resource(device_t dev, device_t child, int type, int *rid,
u_long start, u_long end, u_long count, u_int flags)
==== //depot/projects/pci/sys/dev/acpica/acpi_pcib_acpi.c#25 (text+ko) ====
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_pcib_acpi.c,v 1.65 2011/05/03 17:37:24 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_pcib_acpi.c,v 1.66 2011/06/22 16:15:15 jhb Exp $");
#include "opt_acpi.h"
#include <sys/param.h>
==== //depot/projects/pci/sys/dev/acpica/acpi_resource.c#7 (text+ko) ====
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_resource.c,v 1.43 2011/02/14 20:05:37 jkim Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_resource.c,v 1.45 2011/06/21 21:30:20 jhb Exp $");
#include "opt_acpi.h"
#include <sys/param.h>
@@ -343,22 +343,23 @@
if (res->Data.Address.MinAddressFixed == ACPI_ADDRESS_FIXED &&
res->Data.Address.MaxAddressFixed == ACPI_ADDRESS_FIXED) {
if (res->Data.Address.ResourceType == ACPI_MEMORY_RANGE) {
- ACPI_DEBUG_PRINT((ACPI_DB_RESOURCES, "%s/Memory 0x%x/%d\n",
- name, min, length));
+ ACPI_DEBUG_PRINT((ACPI_DB_RESOURCES, "%s/Memory 0x%jx/%ju\n",
+ name, (uintmax_t)min, (uintmax_t)length));
set->set_memory(dev, arc->context, min, length);
} else {
- ACPI_DEBUG_PRINT((ACPI_DB_RESOURCES, "%s/IO 0x%x/%d\n", name,
- min, length));
+ ACPI_DEBUG_PRINT((ACPI_DB_RESOURCES, "%s/IO 0x%jx/%ju\n", name,
+ (uintmax_t)min, (uintmax_t)length));
set->set_ioport(dev, arc->context, min, length);
}
} else {
if (res->Data.Address32.ResourceType == ACPI_MEMORY_RANGE) {
- ACPI_DEBUG_PRINT((ACPI_DB_RESOURCES, "%s/Memory 0x%x-0x%x/%d\n",
- name, min, max, length));
+ ACPI_DEBUG_PRINT((ACPI_DB_RESOURCES,
+ "%s/Memory 0x%jx-0x%jx/%ju\n", name, (uintmax_t)min,
+ (uintmax_t)max, (uintmax_t)length));
set->set_memoryrange(dev, arc->context, min, max, length, gran);
} else {
- ACPI_DEBUG_PRINT((ACPI_DB_RESOURCES, "%s/IO 0x%x-0x%x/%d\n",
- name, min, max, length));
+ ACPI_DEBUG_PRINT((ACPI_DB_RESOURCES, "%s/IO 0x%jx-0x%jx/%ju\n",
+ name, (uintmax_t)min, (uintmax_t)max, (uintmax_t)length));
set->set_iorange(dev, arc->context, min, max, length, gran);
}
}
==== //depot/projects/pci/sys/dev/acpica/acpivar.h#4 (text+ko) ====
@@ -25,7 +25,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/dev/acpica/acpivar.h,v 1.124 2011/04/04 18:39:04 jkim Exp $
+ * $FreeBSD: src/sys/dev/acpica/acpivar.h,v 1.125 2011/06/21 19:29:27 jhb Exp $
*/
#ifndef _ACPIVAR_H_
==== //depot/projects/pci/sys/dev/atkbdc/atkbd.c#3 (text+ko) ====
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/atkbdc/atkbd.c,v 1.65 2011/06/11 01:19:19 delphij Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/atkbdc/atkbd.c,v 1.66 2011/06/20 16:42:20 delphij Exp $");
#include "opt_compat.h"
#include "opt_kbd.h"
@@ -1100,7 +1100,7 @@
/*
* Traditional entry points of int 0x15 and 0x16 are fixed
* and later BIOSes follow them. (U)EFI CSM specification
- * also mandate these fixed entry points.
+ * also mandates these fixed entry points.
*
* Validate the entry points here before we proceed further.
* It's known that some recent laptops does not have the
==== //depot/projects/pci/sys/dev/cardbus/cardbus_cis.c#5 (text+ko) ====
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/cardbus/cardbus_cis.c,v 1.71 2011/06/06 13:21:11 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/cardbus/cardbus_cis.c,v 1.72 2011/06/21 22:45:31 imp Exp $");
/*
* CIS Handling for the Cardbus Bus
@@ -369,6 +369,14 @@
* Functions to read the a tuple from the card
*/
+/*
+ * Read CIS bytes out of the config space. We have to read it 4 bytes at a
+ * time and do the usual mask and shift to return the bytes. The standard
+ * defines the byte order to be little endian. pci_read_config converts it to
+ * host byte order. This is why we have no endian conversion functions: the
+ * shifts wind up being endian neutral. This is also why we avoid the obvious
+ * memcpy optimization.
+ */
static int
cardbus_read_tuple_conf(device_t cbdev, device_t child, uint32_t start,
uint32_t *off, int *tupleid, int *len, uint8_t *tupledata)
@@ -379,12 +387,11 @@
loc = start + *off;
- e = pci_read_config(child, loc - loc % 4, 4);
- for (j = loc % 4; j > 0; j--)
- e >>= 8;
+ e = pci_read_config(child, loc & ~0x3, 4);
+ e >>= 8 * (loc & 0x3);
*len = 0;
for (i = loc, j = -2; j < *len; j++, i++) {
- if (i % 4 == 0)
+ if ((i & 0x3) == 0)
e = pci_read_config(child, i, 4);
if (j == -2)
*tupleid = 0xff & e;
@@ -398,6 +405,10 @@
return (0);
}
+/*
+ * Read the CIS data out of memroy. We indirect through the bus space
+ * routines to ensure proper byte ordering conversions when necessary.
+ */
static int
cardbus_read_tuple_mem(device_t cbdev, struct resource *res, uint32_t start,
uint32_t *off, int *tupleid, int *len, uint8_t *tupledata)
@@ -580,7 +591,7 @@
expect_linktarget = TRUE;
if ((start = pci_read_config(child, PCIR_CIS, 4)) == 0) {
DEVPRINTF((cbdev, "Warning: CIS pointer is 0: (no CIS)\n"));
- return (ENXIO);
+ return (0);
}
DEVPRINTF((cbdev, "CIS pointer is %#x\n", start));
off = 0;
==== //depot/projects/pci/sys/dev/dc/if_dc.c#3 (text+ko) ====
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/dc/if_dc.c,v 1.224 2011/03/28 19:08:53 yongari Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/dc/if_dc.c,v 1.225 2011/06/21 20:52:55 imp Exp $");
/*
* DEC "tulip" clone ethernet driver. Supports the DEC/Intel 21143
@@ -1385,7 +1385,7 @@
break;
DELAY(10);
}
- if (i == DC_TIMEOUT) {
+ if (i == DC_TIMEOUT && bus_child_present(sc->dc_dev)) {
if (!(isr & DC_ISR_TX_IDLE) && !DC_IS_ASIX(sc))
device_printf(sc->dc_dev,
"%s: failed to force tx to idle state\n", __func__);
==== //depot/projects/pci/sys/dev/e1000/if_igb.c#5 (text+ko) ====
@@ -30,12 +30,13 @@
POSSIBILITY OF SUCH DAMAGE.
******************************************************************************/
-/*$FreeBSD: src/sys/dev/e1000/if_igb.c,v 1.69 2011/06/17 20:06:52 jhb Exp $*/
+/*$FreeBSD: src/sys/dev/e1000/if_igb.c,v 1.70 2011/06/20 22:59:29 jfv Exp $*/
#ifdef HAVE_KERNEL_OPTION_HEADERS
#include "opt_device_polling.h"
#include "opt_inet.h"
+#include "opt_inet6.h"
#include "opt_altq.h"
#endif
@@ -99,7 +100,7 @@
/*********************************************************************
* Driver version:
*********************************************************************/
-char igb_driver_version[] = "version - 2.2.3";
+char igb_driver_version[] = "version - 2.2.5";
/*********************************************************************
@@ -265,6 +266,7 @@
static void igb_set_sysctl_value(struct adapter *, const char *,
const char *, int *, int);
static int igb_set_flowcntl(SYSCTL_HANDLER_ARGS);
+static int igb_sysctl_dmac(SYSCTL_HANDLER_ARGS);
#ifdef DEVICE_POLLING
static poll_handler_t igb_poll;
@@ -344,25 +346,6 @@
static int igb_num_queues = 0;
TUNABLE_INT("hw.igb.num_queues", &igb_num_queues);
-/* How many packets rxeof tries to clean at a time */
-static int igb_rx_process_limit = 100;
-TUNABLE_INT("hw.igb.rx_process_limit", &igb_rx_process_limit);
-
-/* Flow control setting - default to FULL */
-static int igb_fc_setting = e1000_fc_full;
-TUNABLE_INT("hw.igb.fc_setting", &igb_fc_setting);
-
-/* Energy Efficient Ethernet - default to off */
-static int igb_eee_disabled = TRUE;
-TUNABLE_INT("hw.igb.eee_disabled", &igb_eee_disabled);
-
-/*
-** DMA Coalescing, only for i350 - default to off,
-** this feature is for power savings
-*/
-static int igb_dma_coalesce = FALSE;
-TUNABLE_INT("hw.igb.dma_coalesce", &igb_dma_coalesce);
-
/*********************************************************************
* Device identification routine
*
@@ -433,6 +416,11 @@
INIT_DEBUGOUT("igb_attach: begin");
+ if (resource_disabled("igb", device_get_unit(dev))) {
+ device_printf(dev, "Disabled by device hint\n");
+ return (ENXIO);
+ }
+
adapter = device_get_softc(dev);
adapter->dev = adapter->osdep.dev = dev;
IGB_CORE_LOCK_INIT(adapter, device_get_nameunit(dev));
@@ -450,7 +438,7 @@
SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
- OID_AUTO, "flow_control", CTLTYPE_INT|CTLFLAG_RW,
+ OID_AUTO, "fc", CTLTYPE_INT|CTLFLAG_RW,
adapter, 0, igb_set_flowcntl, "I", "Flow Control");
callout_init_mtx(&adapter->timer, &adapter->core_mtx, 0);
@@ -476,8 +464,8 @@
/* Sysctl for limiting the amount of work done in the taskqueue */
igb_set_sysctl_value(adapter, "rx_processing_limit",
- "max number of rx packets to process", &adapter->rx_process_limit,
- igb_rx_process_limit);
+ "max number of rx packets to process",
+ &adapter->rx_process_limit, 100);
/*
* Validate number of transmit and receive descriptors. It
@@ -552,13 +540,14 @@
/* Some adapter-specific advanced features */
if (adapter->hw.mac.type >= e1000_i350) {
- igb_set_sysctl_value(adapter, "dma_coalesce",
- "configure dma coalesce",
- &adapter->dma_coalesce, igb_dma_coalesce);
+ SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
+ SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
+ OID_AUTO, "dmac", CTLTYPE_INT|CTLFLAG_RW,
+ adapter, 0, igb_sysctl_dmac, "I", "DMA Coalesce");
igb_set_sysctl_value(adapter, "eee_disabled",
"enable Energy Efficient Ethernet",
&adapter->hw.dev_spec._82575.eee_disable,
- igb_eee_disabled);
+ TRUE);
e1000_set_eee_i350(&adapter->hw);
}
@@ -658,6 +647,7 @@
return (0);
err_late:
+ igb_detach(dev);
igb_free_transmit_structures(adapter);
igb_free_receive_structures(adapter);
igb_release_hw_control(adapter);
@@ -736,7 +726,8 @@
igb_free_transmit_structures(adapter);
igb_free_receive_structures(adapter);
- free(adapter->mta, M_DEVBUF);
+ if (adapter->mta != NULL)
+ free(adapter->mta, M_DEVBUF);
IGB_CORE_LOCK_DESTROY(adapter);
@@ -1025,11 +1016,12 @@
igb_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
{
struct adapter *adapter = ifp->if_softc;
- struct ifreq *ifr = (struct ifreq *)data;
-#ifdef INET
- struct ifaddr *ifa = (struct ifaddr *)data;
+ struct ifreq *ifr = (struct ifreq *)data;
+#if defined(INET) || defined(INET6)
+ struct ifaddr *ifa = (struct ifaddr *)data;
+ bool avoid_reset = FALSE;
#endif
- int error = 0;
+ int error = 0;
if (adapter->in_detach)
return (error);
@@ -1037,20 +1029,22 @@
switch (command) {
case SIOCSIFADDR:
#ifdef INET
- if (ifa->ifa_addr->sa_family == AF_INET) {
- /*
- * XXX
- * Since resetting hardware takes a very long time
- * and results in link renegotiation we only
- * initialize the hardware only when it is absolutely
- * required.
- */
+ if (ifa->ifa_addr->sa_family == AF_INET)
+ avoid_reset = TRUE;
+#endif
+#ifdef INET6
+ if (ifa->ifa_addr->sa_family == AF_INET6)
+ avoid_reset = TRUE;
+#endif
+#if defined(INET) || defined(INET6)
+ /*
+ ** Calling init results in link renegotiation,
+ ** so we avoid doing it when possible.
+ */
+ if (avoid_reset) {
ifp->if_flags |= IFF_UP;
- if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
- IGB_CORE_LOCK(adapter);
- igb_init_locked(adapter);
- IGB_CORE_UNLOCK(adapter);
- }
+ if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
+ igb_init(adapter);
if (!(ifp->if_flags & IFF_NOARP))
arp_ifinit(ifp, ifa);
} else
@@ -1175,6 +1169,10 @@
ifp->if_capenable ^= IFCAP_VLAN_HWFILTER;
reinit = 1;
}
+ if (mask & IFCAP_VLAN_HWTSO) {
+ ifp->if_capenable ^= IFCAP_VLAN_HWTSO;
+ reinit = 1;
+ }
if (mask & IFCAP_LRO) {
ifp->if_capenable ^= IFCAP_LRO;
reinit = 1;
@@ -2721,6 +2719,12 @@
fc->pause_time = IGB_FC_PAUSE_TIME;
fc->send_xon = TRUE;
+ if (fc->requested_mode)
+ fc->current_mode = fc->requested_mode;
+ else
+ fc->current_mode = e1000_fc_full;
+
+ adapter->fc = fc->current_mode;
/* Issue a global reset */
e1000_reset_hw(hw);
@@ -2730,9 +2734,13 @@
device_printf(dev, "Hardware Initialization Failed\n");
/* Setup DMA Coalescing */
- if ((hw->mac.type == e1000_i350) &&
- (adapter->dma_coalesce == TRUE)) {
- u32 reg;
+ if (hw->mac.type == e1000_i350) {
+ u32 reg = ~E1000_DMACR_DMAC_EN;
+
+ if (adapter->dmac == 0) { /* Disabling it */
+ E1000_WRITE_REG(hw, E1000_DMACR, reg);
+ goto reset_out;
+ }
hwm = (pba - 4) << 10;
reg = (((pba-6) << E1000_DMACR_DMACTHR_SHIFT)
@@ -2741,8 +2749,8 @@
/* transition to L0x or L1 if available..*/
reg |= (E1000_DMACR_DMAC_EN | E1000_DMACR_DMAC_LX_MASK);
- /* timer = +-1000 usec in 32usec intervals */
- reg |= (1000 >> 5);
+ /* timer = value in adapter->dmac in 32usec intervals */
+ reg |= (adapter->dmac >> 5);
E1000_WRITE_REG(hw, E1000_DMACR, reg);
/* No lower threshold */
@@ -2767,6 +2775,7 @@
device_printf(dev, "DMA Coalescing enabled\n");
}
+reset_out:
E1000_WRITE_REG(&adapter->hw, E1000_VET, ETHERTYPE_VLAN);
e1000_get_phy_info(hw);
e1000_check_for_link(hw);
@@ -2827,15 +2836,19 @@
* support full VLAN capability.
*/
ifp->if_data.ifi_hdrlen = sizeof(struct ether_vlan_header);
- ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU;
- ifp->if_capenable |= IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU;
+ ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING
+ | IFCAP_VLAN_HWTSO
+ | IFCAP_VLAN_MTU;
+ ifp->if_capenable |= IFCAP_VLAN_HWTAGGING
+ | IFCAP_VLAN_HWTSO
+ | IFCAP_VLAN_MTU;
/*
- ** Dont turn this on by default, if vlans are
+ ** Don't turn this on by default, if vlans are
** created on another pseudo device (eg. lagg)
** then vlan events are not passed thru, breaking
** operation, but with HW FILTER off it works. If
- ** using vlans directly on the em driver you can
+ ** using vlans directly on the igb driver you can
** enable this and get full hardware tag filtering.
*/
ifp->if_capabilities |= IFCAP_VLAN_HWFILTER;
@@ -5595,19 +5608,18 @@
igb_set_flowcntl(SYSCTL_HANDLER_ARGS)
{
int error;
- struct adapter *adapter;
+ struct adapter *adapter = (struct adapter *) arg1;
- error = sysctl_handle_int(oidp, &igb_fc_setting, 0, req);
+ error = sysctl_handle_int(oidp, &adapter->fc, 0, req);
- if (error)
+ if ((error) || (req->newptr == NULL))
return (error);
- adapter = (struct adapter *) arg1;
- switch (igb_fc_setting) {
+ switch (adapter->fc) {
case e1000_fc_rx_pause:
case e1000_fc_tx_pause:
case e1000_fc_full:
- adapter->hw.fc.requested_mode = igb_fc_setting;
+ adapter->hw.fc.requested_mode = adapter->fc;
break;
case e1000_fc_none:
default:
@@ -5616,5 +5628,54 @@
adapter->hw.fc.current_mode = adapter->hw.fc.requested_mode;
e1000_force_mac_fc(&adapter->hw);
- return error;
+ return (error);
+}
+
+/*
+** Manage DMA Coalesce:
+** Control values:
+** 0/1 - off/on
+** Legal timer values are:
+** 250,500,1000-10000 in thousands
+*/
+static int
+igb_sysctl_dmac(SYSCTL_HANDLER_ARGS)
+{
+ struct adapter *adapter = (struct adapter *) arg1;
+ int error;
+
+ error = sysctl_handle_int(oidp, &adapter->dmac, 0, req);
+
+ if ((error) || (req->newptr == NULL))
+ return (error);
+
+ switch (adapter->dmac) {
+ case 0:
+ /*Disabling */
+ break;
+ case 1: /* Just enable and use default */
+ adapter->dmac = 1000;
+ break;
+ case 250:
+ case 500:
+ case 1000:
+ case 2000:
+ case 3000:
+ case 4000:
+ case 5000:
+ case 6000:
+ case 7000:
+ case 8000:
+ case 9000:
+ case 10000:
+ /* Legal values - allow */
+ break;
+ default:
+ /* Do nothing, illegal value */
+ adapter->dmac = 0;
+ return (error);
+ }
+ /* Reinit the interface */
+ igb_init(adapter);
+ return (error);
}
==== //depot/projects/pci/sys/dev/e1000/if_igb.h#5 (text+ko) ====
@@ -30,7 +30,7 @@
POSSIBILITY OF SUCH DAMAGE.
******************************************************************************/
-/*$FreeBSD: src/sys/dev/e1000/if_igb.h,v 1.22 2011/06/17 20:06:52 jhb Exp $*/
+/*$FreeBSD: src/sys/dev/e1000/if_igb.h,v 1.23 2011/06/20 22:59:29 jfv Exp $*/
#ifndef _IGB_H_DEFINED_
#define _IGB_H_DEFINED_
@@ -396,11 +396,12 @@
u32 shadow_vfta[IGB_VFTA_SIZE];
/* Info about the interface */
- u8 link_active;
+ u16 link_active;
+ u16 fc;
u16 link_speed;
u16 link_duplex;
u32 smartspeed;
- u32 dma_coalesce;
+ u32 dmac;
/* Interface queues */
struct igb_queue *queues;
==== //depot/projects/pci/sys/dev/firewire/fwohci.c#3 (text+ko) ====
@@ -31,7 +31,7 @@
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: src/sys/dev/firewire/fwohci.c,v 1.100 2011/03/11 22:19:49 marius Exp $
+ * $FreeBSD: src/sys/dev/firewire/fwohci.c,v 1.101 2011/06/21 03:07:59 imp Exp $
*
*/
@@ -2072,8 +2072,9 @@
FW_GLOCK_ASSERT(&sc->fc);
stat = OREAD(sc, FWOHCI_INTSTAT);
if (stat == 0xffffffff) {
- device_printf(sc->fc.dev,
- "device physically ejected?\n");
+ if (!bus_child_present(sc->fc.dev))
+ return (FILTER_HANDLED);
+ device_printf(sc->fc.dev, "device physically ejected?\n");
return (FILTER_STRAY);
}
if (stat)
==== //depot/projects/pci/sys/dev/pccbb/pccbb_pci.c#2 (text+ko) ====
@@ -72,7 +72,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/pccbb/pccbb_pci.c,v 1.36 2009/04/10 04:08:34 thompsa Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/pccbb/pccbb_pci.c,v 1.37 2011/06/21 03:05:17 imp Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -658,6 +658,12 @@
struct cbb_softc *sc = (struct cbb_softc *)device_get_softc(brdev);
/*
+ * We're about to pull the rug out from the card, so mark it as
+ * gone to prevent harm.
+ */
+ sc->cardok = 0;
+
+ /*
* Place the cards in reset, turn off the interrupts and power
* down the socket.
*/
==== //depot/projects/pci/sys/dev/pci/pci.c#22 (text+ko) ====
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/pci/pci.c,v 1.421 2011/06/06 13:21:11 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/pci/pci.c,v 1.422 2011/06/21 19:31:31 jhb Exp $");
#include "opt_bus.h"
==== //depot/projects/pci/sys/dev/vr/if_vr.c#4 (text+ko) ====
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/vr/if_vr.c,v 1.141 2011/05/03 19:51:29 marius Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/vr/if_vr.c,v 1.142 2011/06/22 02:18:45 yongari Exp $");
/*
* VIA Rhine fast ethernet PCI NIC driver
@@ -185,7 +185,6 @@
static int vr_miibus_writereg(device_t, int, int, int);
static void vr_miibus_statchg(device_t);
-static void vr_link_task(void *, int);
static void vr_cam_mask(struct vr_softc *, uint32_t, int);
static int vr_cam_data(struct vr_softc *, int, int, uint8_t *);
static void vr_set_filter(struct vr_softc *);
@@ -226,7 +225,6 @@
DEVMETHOD(miibus_readreg, vr_miibus_readreg),
DEVMETHOD(miibus_writereg, vr_miibus_writereg),
DEVMETHOD(miibus_statchg, vr_miibus_statchg),
- DEVMETHOD(miibus_linkchg, vr_miibus_statchg),
{ NULL, NULL }
};
@@ -290,22 +288,13 @@
return (0);
}
-static void
-vr_miibus_statchg(device_t dev)
-{
- struct vr_softc *sc;
-
- sc = device_get_softc(dev);
- taskqueue_enqueue(taskqueue_swi, &sc->vr_link_task);
-}
-
/*
* In order to fiddle with the
* 'full-duplex' and '100Mbps' bits in the netconfig register, we
* first have to put the transmit and/or receive logic in the idle state.
*/
static void
-vr_link_task(void *arg, int pending)
+vr_miibus_statchg(device_t dev)
{
struct vr_softc *sc;
struct mii_data *mii;
@@ -313,22 +302,25 @@
int lfdx, mfdx;
uint8_t cr0, cr1, fc;
- sc = (struct vr_softc *)arg;
-
- VR_LOCK(sc);
+ sc = device_get_softc(dev);
mii = device_get_softc(sc->vr_miibus);
ifp = sc->vr_ifp;
if (mii == NULL || ifp == NULL ||
- (ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
- VR_UNLOCK(sc);
+ (ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
return;
- }
- if (mii->mii_media_status & IFM_ACTIVE) {
- if (IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE)
+ sc->vr_link = 0;
+ if ((mii->mii_media_status & (IFM_ACTIVE | IFM_AVALID)) ==
+ (IFM_ACTIVE | IFM_AVALID)) {
+ switch (IFM_SUBTYPE(mii->mii_media_active)) {
+ case IFM_10_T:
+ case IFM_100_TX:
sc->vr_link = 1;
- } else
- sc->vr_link = 0;
+ break;
+ default:
+ break;
+ }
+ }
if (sc->vr_link != 0) {
cr0 = CSR_READ_1(sc, VR_CR0);
@@ -384,11 +376,8 @@
"%s: Tx/Rx shutdown error -- resetting\n",
__func__);
sc->vr_flags |= VR_F_RESTART;
- VR_UNLOCK(sc);
- return;
}
}
- VR_UNLOCK(sc);
}
@@ -621,7 +610,6 @@
mtx_init(&sc->vr_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK,
MTX_DEF);
callout_init_mtx(&sc->vr_stat_callout, &sc->vr_mtx, 0);
- TASK_INIT(&sc->vr_link_task, 0, vr_link_task, sc);
SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
OID_AUTO, "stats", CTLTYPE_INT | CTLFLAG_RW, sc, 0,
@@ -841,7 +829,6 @@
vr_stop(sc);
VR_UNLOCK(sc);
callout_drain(&sc->vr_stat_callout);
- taskqueue_drain(taskqueue_swi, &sc->vr_link_task);
ether_ifdetach(ifp);
}
if (sc->vr_miibus)
@@ -1559,6 +1546,8 @@
mii = device_get_softc(sc->vr_miibus);
mii_tick(mii);
+ if (sc->vr_link == 0)
+ vr_miibus_statchg(sc->vr_dev);
vr_watchdog(sc);
callout_reset(&sc->vr_stat_callout, hz, vr_tick, sc);
}
@@ -2161,6 +2150,10 @@
sc = ifp->if_softc;
mii = device_get_softc(sc->vr_miibus);
VR_LOCK(sc);
+ if ((ifp->if_flags & IFF_UP) == 0) {
+ VR_UNLOCK(sc);
+ return;
+ }
mii_pollstat(mii);
VR_UNLOCK(sc);
ifmr->ifm_active = mii->mii_media_active;
==== //depot/projects/pci/sys/dev/vr/if_vrreg.h#2 (text+ko) ====
@@ -29,7 +29,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: src/sys/dev/vr/if_vrreg.h,v 1.39 2010/10/15 14:52:11 marius Exp $
+ * $FreeBSD: src/sys/dev/vr/if_vrreg.h,v 1.40 2011/06/22 02:18:45 yongari Exp $
*/
/*
@@ -723,7 +723,6 @@
uint8_t vr_flags; /* See VR_F_* below */
#define VR_F_RESTART 0x01 /* Restart unit on next tick */
int vr_if_flags;
- struct task vr_link_task;
struct vr_chain_data vr_cdata;
struct vr_ring_data vr_rdata;
struct vr_statistics vr_stat;
==== //depot/projects/pci/sys/dev/xl/if_xl.c#4 (text+ko) ====
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/xl/if_xl.c,v 1.31 2011/05/07 04:40:44 yongari Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/xl/if_xl.c,v 1.34 2011/06/21 22:17:28 imp Exp $");
/*
* 3Com 3c90x Etherlink XL PCI NIC driver
@@ -334,7 +334,7 @@
* only a finite amount of time to avoid getting caught in an
* infinite loop. Normally this delay routine would be a macro,
* but it isn't called during normal operation so we can afford
- * to make it a function.
+ * to make it a function. Suppress warning when card gone.
*/
static void
xl_wait(struct xl_softc *sc)
@@ -346,7 +346,7 @@
break;
}
- if (i == XL_TIMEOUT)
+ if (i == XL_TIMEOUT && bus_child_present(sc->xl_dev))
device_printf(sc->xl_dev, "command never completed!\n");
}
==== //depot/projects/pci/sys/fs/nfsserver/nfs_nfsdserv.c#3 (text+ko) ====
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/fs/nfsserver/nfs_nfsdserv.c,v 1.17 2011/04/14 23:46:15 rmacklem Exp $");
+__FBSDID("$FreeBSD: src/sys/fs/nfsserver/nfs_nfsdserv.c,v 1.19 2011/06/21 19:58:29 rmacklem Exp $");
/*
* nfs version 2, 3 and 4 server calls to vnode ops
@@ -172,11 +172,12 @@
fhandle_t fh;
int at_root = 0, error = 0, supports_nfsv4acls;
struct nfsreferral *refp;
- nfsattrbit_t attrbits;
+ nfsattrbit_t attrbits, tmpbits;
struct mount *mp;
struct vnode *tvp = NULL;
struct vattr va;
uint64_t mounted_on_fileno = 0;
+ accmode_t accmode;
if (nd->nd_repstat)
return (0);
@@ -197,11 +198,20 @@
vput(vp);
return (0);
}
- if (!nd->nd_repstat)
- nd->nd_repstat = nfsvno_accchk(vp,
- VREAD_ATTRIBUTES,
- nd->nd_cred, exp, p, NFSACCCHK_NOOVERRIDE,
- NFSACCCHK_VPISLOCKED, NULL);
+ if (nd->nd_repstat == 0) {
+ accmode = 0;
+ NFSSET_ATTRBIT(&tmpbits, &attrbits);
+ if (NFSISSET_ATTRBIT(&tmpbits, NFSATTRBIT_ACL)) {
+ NFSCLRBIT_ATTRBIT(&tmpbits, NFSATTRBIT_ACL);
+ accmode |= VREAD_ACL;
+ }
+ if (NFSNONZERO_ATTRBIT(&tmpbits))
+ accmode |= VREAD_ATTRIBUTES;
+ if (accmode != 0)
+ nd->nd_repstat = nfsvno_accchk(vp, accmode,
+ nd->nd_cred, exp, p, NFSACCCHK_NOOVERRIDE,
+ NFSACCCHK_VPISLOCKED, NULL);
+ }
}
if (!nd->nd_repstat)
nd->nd_repstat = nfsvno_getattr(vp, &nva, nd->nd_cred, p, 1);
@@ -454,7 +464,7 @@
APPLESTATIC int
nfsrvd_lookup(struct nfsrv_descript *nd, __unused int isdgram,
vnode_t dp, vnode_t *vpp, fhandle_t *fhp, NFSPROC_T *p,
- __unused struct nfsexstuff *exp)
+ struct nfsexstuff *exp)
{
struct nameidata named;
vnode_t vp, dirp = NULL;
@@ -508,7 +518,15 @@
vrele(named.ni_startdir);
nfsvno_relpathbuf(&named);
vp = named.ni_vp;
- nd->nd_repstat = nfsvno_getfh(vp, fhp, p);
+ if ((nd->nd_flag & ND_NFSV4) != 0 && !NFSVNO_EXPORTED(exp) &&
+ vp->v_type != VDIR && vp->v_type != VLNK)
+ /*
+ * Only allow lookup of VDIR and VLNK for traversal of
+ * non-exported volumes during NFSv4 mounting.
+ */
+ nd->nd_repstat = ENOENT;
+ if (nd->nd_repstat == 0)
+ nd->nd_repstat = nfsvno_getfh(vp, fhp, p);
if (!(nd->nd_flag & ND_NFSV4) && !nd->nd_repstat)
nd->nd_repstat = nfsvno_getattr(vp, &nva, nd->nd_cred, p, 1);
if (vpp != NULL && nd->nd_repstat == 0)
==== //depot/projects/pci/sys/fs/nfsserver/nfs_nfsdsocket.c#3 (text+ko) ====
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/fs/nfsserver/nfs_nfsdsocket.c,v 1.13 2011/05/27 22:05:10 rmacklem Exp $");
+__FBSDID("$FreeBSD: src/sys/fs/nfsserver/nfs_nfsdsocket.c,v 1.14 2011/06/20 21:57:26 rmacklem Exp $");
/*
* Socket operations for use by the nfs server.
@@ -786,6 +786,8 @@
op != NFSV4OP_LOOKUP &&
op != NFSV4OP_GETATTR &&
op != NFSV4OP_GETFH &&
+ op != NFSV4OP_ACCESS &&
+ op != NFSV4OP_READLINK &&
op != NFSV4OP_SECINFO)
nd->nd_repstat = NFSERR_NOFILEHANDLE;
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list