* [PATCH 00/10] cxgb4vf: a number of bug fixes and minor cleanup
@ 2010-11-11 2:01 Casey Leedom
2010-11-11 2:04 ` [PATCH 01/10] cxgb4vf: minor comment/symbolic name cleanup Casey Leedom
` (10 more replies)
0 siblings, 11 replies; 15+ messages in thread
From: Casey Leedom @ 2010-11-11 2:01 UTC (permalink / raw)
To: netdev; +Cc: David Miller
The following patch set includes a number of bug fixes and some minor cleanup for the cxgb4vf network driver. If there are any problems with formatting, etc. of the patch set please just reject the patch set and kick my butt — I'm still a novice at putting these together!
drivers/net/cxgb4vf/adapter.h | 2 +-
drivers/net/cxgb4vf/cxgb4vf_main.c | 72 +++++++++++++-------
drivers/net/cxgb4vf/sge.c | 131 ++++++++++++++++++++++--------------
drivers/net/cxgb4vf/t4vf_common.h | 29 ++++----
drivers/net/cxgb4vf/t4vf_hw.c | 23 ++++++-
5 files changed, 165 insertions(+), 92 deletions(-)
Casey
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 01/10] cxgb4vf: minor comment/symbolic name cleanup.
2010-11-11 2:01 [PATCH 00/10] cxgb4vf: a number of bug fixes and minor cleanup Casey Leedom
@ 2010-11-11 2:04 ` Casey Leedom
2010-11-11 3:19 ` Joe Perches
2010-11-11 2:04 ` [PATCH 02/10] cxgb4vf: don't implement trivial (and incorrect) ndo_select_queue() Casey Leedom
` (9 subsequent siblings)
10 siblings, 1 reply; 15+ messages in thread
From: Casey Leedom @ 2010-11-11 2:04 UTC (permalink / raw)
To: netdev; +Cc: davem, Casey Leedom
Minor cleanup of comments and symbolic constant names for clarity.
Signed-off-by: Casey Leedom <leedom@chelsio.com>
---
drivers/net/cxgb4vf/adapter.h | 2 +-
drivers/net/cxgb4vf/cxgb4vf_main.c | 9 ++++-----
drivers/net/cxgb4vf/sge.c | 9 ++++++---
drivers/net/cxgb4vf/t4vf_hw.c | 4 ++--
4 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/drivers/net/cxgb4vf/adapter.h b/drivers/net/cxgb4vf/adapter.h
index 8ea0196..4766b41 100644
--- a/drivers/net/cxgb4vf/adapter.h
+++ b/drivers/net/cxgb4vf/adapter.h
@@ -60,7 +60,7 @@ enum {
* MSI-X interrupt index usage.
*/
MSIX_FW = 0, /* MSI-X index for firmware Q */
- MSIX_NIQFLINT = 1, /* MSI-X index base for Ingress Qs */
+ MSIX_IQFLINT = 1, /* MSI-X index base for Ingress Qs */
MSIX_EXTRAS = 1,
MSIX_ENTRIES = MAX_ETH_QSETS + MSIX_EXTRAS,
diff --git a/drivers/net/cxgb4vf/cxgb4vf_main.c b/drivers/net/cxgb4vf/cxgb4vf_main.c
index 6de5e2e..f5259a1 100644
--- a/drivers/net/cxgb4vf/cxgb4vf_main.c
+++ b/drivers/net/cxgb4vf/cxgb4vf_main.c
@@ -280,7 +280,7 @@ static void name_msix_vecs(struct adapter *adapter)
const struct port_info *pi = netdev_priv(dev);
int qs, msi;
- for (qs = 0, msi = MSIX_NIQFLINT;
+ for (qs = 0, msi = MSIX_IQFLINT;
qs < pi->nqsets;
qs++, msi++) {
snprintf(adapter->msix_info[msi].desc, namelen,
@@ -309,7 +309,7 @@ static int request_msix_queue_irqs(struct adapter *adapter)
/*
* Ethernet queues.
*/
- msi = MSIX_NIQFLINT;
+ msi = MSIX_IQFLINT;
for_each_ethrxq(s, rxq) {
err = request_irq(adapter->msix_info[msi].vec,
t4vf_sge_intr_msix, 0,
@@ -337,7 +337,7 @@ static void free_msix_queue_irqs(struct adapter *adapter)
int rxq, msi;
free_irq(adapter->msix_info[MSIX_FW].vec, &s->fw_evtq);
- msi = MSIX_NIQFLINT;
+ msi = MSIX_IQFLINT;
for_each_ethrxq(s, rxq)
free_irq(adapter->msix_info[msi++].vec,
&s->ethrxq[rxq].rspq);
@@ -527,7 +527,7 @@ static int setup_sge_queues(struct adapter *adapter)
* brought up at which point lots of things get nailed down
* permanently ...
*/
- msix = MSIX_NIQFLINT;
+ msix = MSIX_IQFLINT;
for_each_port(adapter, pidx) {
struct net_device *dev = adapter->port[pidx];
struct port_info *pi = netdev_priv(dev);
@@ -2465,7 +2465,6 @@ static int __devinit cxgb4vf_pci_probe(struct pci_dev *pdev,
version_printed = 1;
}
-
/*
* Initialize generic PCI device state.
*/
diff --git a/drivers/net/cxgb4vf/sge.c b/drivers/net/cxgb4vf/sge.c
index f10864d..d791adb 100644
--- a/drivers/net/cxgb4vf/sge.c
+++ b/drivers/net/cxgb4vf/sge.c
@@ -1536,6 +1536,9 @@ int t4vf_ethrx_handler(struct sge_rspq *rspq, const __be64 *rsp,
} else
skb_checksum_none_assert(skb);
+ /*
+ * Deliver the packet to the stack.
+ */
if (unlikely(pkt->vlan_ex)) {
struct vlan_group *grp = pi->vlan_grp;
@@ -2115,7 +2118,7 @@ int t4vf_sge_alloc_rxq(struct adapter *adapter, struct sge_rspq *rspq,
/*
* Calculate the size of the hardware free list ring plus
- * status page (which the SGE will place at the end of the
+ * Status Page (which the SGE will place after the end of the
* free list ring) in Egress Queue Units.
*/
flsz = (fl->size / FL_PER_EQ_UNIT +
@@ -2212,8 +2215,8 @@ int t4vf_sge_alloc_eth_txq(struct adapter *adapter, struct sge_eth_txq *txq,
struct port_info *pi = netdev_priv(dev);
/*
- * Calculate the size of the hardware TX Queue (including the
- * status age on the end) in units of TX Descriptors.
+ * Calculate the size of the hardware TX Queue (including the Status
+ * Page on the end of the TX Queue) in units of TX Descriptors.
*/
nentries = txq->q.size + STAT_LEN / sizeof(struct tx_desc);
diff --git a/drivers/net/cxgb4vf/t4vf_hw.c b/drivers/net/cxgb4vf/t4vf_hw.c
index ea1c123..2180181 100644
--- a/drivers/net/cxgb4vf/t4vf_hw.c
+++ b/drivers/net/cxgb4vf/t4vf_hw.c
@@ -1257,7 +1257,7 @@ int t4vf_eth_eq_free(struct adapter *adapter, unsigned int eqid)
*/
int t4vf_handle_fw_rpl(struct adapter *adapter, const __be64 *rpl)
{
- struct fw_cmd_hdr *cmd_hdr = (struct fw_cmd_hdr *)rpl;
+ const struct fw_cmd_hdr *cmd_hdr = (const struct fw_cmd_hdr *)rpl;
u8 opcode = FW_CMD_OP_GET(be32_to_cpu(cmd_hdr->hi));
switch (opcode) {
@@ -1265,7 +1265,7 @@ int t4vf_handle_fw_rpl(struct adapter *adapter, const __be64 *rpl)
/*
* Link/module state change message.
*/
- const struct fw_port_cmd *port_cmd = (void *)rpl;
+ const struct fw_port_cmd *port_cmd = (const void *)rpl;
u32 word;
int action, port_id, link_ok, speed, fc, pidx;
--
1.7.0.4
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 02/10] cxgb4vf: don't implement trivial (and incorrect) ndo_select_queue()
2010-11-11 2:01 [PATCH 00/10] cxgb4vf: a number of bug fixes and minor cleanup Casey Leedom
2010-11-11 2:04 ` [PATCH 01/10] cxgb4vf: minor comment/symbolic name cleanup Casey Leedom
@ 2010-11-11 2:04 ` Casey Leedom
2010-11-11 2:04 ` [PATCH 03/10] cxgb4vf: fix bug in Generic Receive Offload Casey Leedom
` (8 subsequent siblings)
10 siblings, 0 replies; 15+ messages in thread
From: Casey Leedom @ 2010-11-11 2:04 UTC (permalink / raw)
To: netdev; +Cc: davem, Casey Leedom
Don't implement (struct net_device_ops *)->ndo_select_queue() with simple
call to skb_tx_hash(). This leads to non-persistent TX queue selection in
the Linux dev_pick_tx() routine for TCP connections.
Signed-off-by: Casey Leedom <leedom@chelsio.com>
---
drivers/net/cxgb4vf/cxgb4vf_main.c | 14 --------------
1 files changed, 0 insertions(+), 14 deletions(-)
diff --git a/drivers/net/cxgb4vf/cxgb4vf_main.c b/drivers/net/cxgb4vf/cxgb4vf_main.c
index f5259a1..224b36c 100644
--- a/drivers/net/cxgb4vf/cxgb4vf_main.c
+++ b/drivers/net/cxgb4vf/cxgb4vf_main.c
@@ -1103,18 +1103,6 @@ static int cxgb4vf_set_mac_addr(struct net_device *dev, void *_addr)
return 0;
}
-/*
- * Return a TX Queue on which to send the specified skb.
- */
-static u16 cxgb4vf_select_queue(struct net_device *dev, struct sk_buff *skb)
-{
- /*
- * XXX For now just use the default hash but we probably want to
- * XXX look at other possibilities ...
- */
- return skb_tx_hash(dev, skb);
-}
-
#ifdef CONFIG_NET_POLL_CONTROLLER
/*
* Poll all of our receive queues. This is called outside of normal interrupt
@@ -2417,7 +2405,6 @@ static const struct net_device_ops cxgb4vf_netdev_ops = {
.ndo_get_stats = cxgb4vf_get_stats,
.ndo_set_rx_mode = cxgb4vf_set_rxmode,
.ndo_set_mac_address = cxgb4vf_set_mac_addr,
- .ndo_select_queue = cxgb4vf_select_queue,
.ndo_validate_addr = eth_validate_addr,
.ndo_do_ioctl = cxgb4vf_do_ioctl,
.ndo_change_mtu = cxgb4vf_change_mtu,
@@ -2623,7 +2610,6 @@ static int __devinit cxgb4vf_pci_probe(struct pci_dev *pdev,
netdev->do_ioctl = cxgb4vf_do_ioctl;
netdev->change_mtu = cxgb4vf_change_mtu;
netdev->set_mac_address = cxgb4vf_set_mac_addr;
- netdev->select_queue = cxgb4vf_select_queue;
#ifdef CONFIG_NET_POLL_CONTROLLER
netdev->poll_controller = cxgb4vf_poll_controller;
#endif
--
1.7.0.4
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 03/10] cxgb4vf: fix bug in Generic Receive Offload
2010-11-11 2:01 [PATCH 00/10] cxgb4vf: a number of bug fixes and minor cleanup Casey Leedom
2010-11-11 2:04 ` [PATCH 01/10] cxgb4vf: minor comment/symbolic name cleanup Casey Leedom
2010-11-11 2:04 ` [PATCH 02/10] cxgb4vf: don't implement trivial (and incorrect) ndo_select_queue() Casey Leedom
@ 2010-11-11 2:04 ` Casey Leedom
2010-11-11 2:04 ` [PATCH 04/10] cxgb4vf: fix some errors in Gather List to skb conversion Casey Leedom
` (7 subsequent siblings)
10 siblings, 0 replies; 15+ messages in thread
From: Casey Leedom @ 2010-11-11 2:04 UTC (permalink / raw)
To: netdev; +Cc: davem, Casey Leedom
Fix botch in Generic Receive Offload (the Packet Gather List Total length
field wasn't being initialized). Also add ethtool statistics for GRO.
Signed-off-by: Casey Leedom <leedom@chelsio.com>
---
drivers/net/cxgb4vf/cxgb4vf_main.c | 6 ++++++
drivers/net/cxgb4vf/sge.c | 1 +
2 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/drivers/net/cxgb4vf/cxgb4vf_main.c b/drivers/net/cxgb4vf/cxgb4vf_main.c
index 224b36c..9e9e4f6 100644
--- a/drivers/net/cxgb4vf/cxgb4vf_main.c
+++ b/drivers/net/cxgb4vf/cxgb4vf_main.c
@@ -1346,6 +1346,8 @@ struct queue_port_stats {
u64 rx_csum;
u64 vlan_ex;
u64 vlan_ins;
+ u64 lro_pkts;
+ u64 lro_merged;
};
/*
@@ -1383,6 +1385,8 @@ static const char stats_strings[][ETH_GSTRING_LEN] = {
"RxCsumGood ",
"VLANextractions ",
"VLANinsertions ",
+ "GROPackets ",
+ "GROMerged ",
};
/*
@@ -1432,6 +1436,8 @@ static void collect_sge_port_stats(const struct adapter *adapter,
stats->rx_csum += rxq->stats.rx_cso;
stats->vlan_ex += rxq->stats.vlan_ex;
stats->vlan_ins += txq->vlan_ins;
+ stats->lro_pkts += rxq->stats.lro_pkts;
+ stats->lro_merged += rxq->stats.lro_merged;
}
}
diff --git a/drivers/net/cxgb4vf/sge.c b/drivers/net/cxgb4vf/sge.c
index d791adb..1767bda 100644
--- a/drivers/net/cxgb4vf/sge.c
+++ b/drivers/net/cxgb4vf/sge.c
@@ -1682,6 +1682,7 @@ int process_responses(struct sge_rspq *rspq, int budget)
}
len = RSPD_LEN(len);
}
+ gl.tot_len = len;
/*
* Gather packet fragments.
--
1.7.0.4
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 04/10] cxgb4vf: fix some errors in Gather List to skb conversion
2010-11-11 2:01 [PATCH 00/10] cxgb4vf: a number of bug fixes and minor cleanup Casey Leedom
` (2 preceding siblings ...)
2010-11-11 2:04 ` [PATCH 03/10] cxgb4vf: fix bug in Generic Receive Offload Casey Leedom
@ 2010-11-11 2:04 ` Casey Leedom
2010-11-11 2:04 ` [PATCH 05/10] cxgb4vf: flesh out PCI Device ID Table Casey Leedom
` (6 subsequent siblings)
10 siblings, 0 replies; 15+ messages in thread
From: Casey Leedom @ 2010-11-11 2:04 UTC (permalink / raw)
To: netdev; +Cc: davem, Casey Leedom
There were some errors in the way that internal Gather Lists were being
translated into skb's. This also makes the VF Driver look more like the PF
Driver to facilitate easier comarison.
Signed-off-by: Casey Leedom <leedom@chelsio.com>
---
drivers/net/cxgb4vf/sge.c | 121 +++++++++++++++++++++++++++-----------------
1 files changed, 74 insertions(+), 47 deletions(-)
diff --git a/drivers/net/cxgb4vf/sge.c b/drivers/net/cxgb4vf/sge.c
index 1767bda..e0b3d1b 100644
--- a/drivers/net/cxgb4vf/sge.c
+++ b/drivers/net/cxgb4vf/sge.c
@@ -154,13 +154,14 @@ enum {
*/
RX_COPY_THRES = 256,
RX_PULL_LEN = 128,
-};
-/*
- * Can't define this in the above enum because PKTSHIFT isn't a constant in
- * the VF Driver ...
- */
-#define RX_PKT_PULL_LEN (RX_PULL_LEN + PKTSHIFT)
+ /*
+ * Main body length for sk_buffs used for RX Ethernet packets with
+ * fragments. Should be >= RX_PULL_LEN but possibly bigger to give
+ * pskb_may_pull() some room.
+ */
+ RX_SKB_LEN = 512,
+};
/*
* Software state per TX descriptor.
@@ -1355,6 +1356,67 @@ out_free:
}
/**
+ * t4vf_pktgl_to_skb - build an sk_buff from a packet gather list
+ * @gl: the gather list
+ * @skb_len: size of sk_buff main body if it carries fragments
+ * @pull_len: amount of data to move to the sk_buff's main body
+ *
+ * Builds an sk_buff from the given packet gather list. Returns the
+ * sk_buff or %NULL if sk_buff allocation failed.
+ */
+struct sk_buff *t4vf_pktgl_to_skb(const struct pkt_gl *gl,
+ unsigned int skb_len, unsigned int pull_len)
+{
+ struct sk_buff *skb;
+ struct skb_shared_info *ssi;
+
+ /*
+ * If the ingress packet is small enough, allocate an skb large enough
+ * for all of the data and copy it inline. Otherwise, allocate an skb
+ * with enough room to pull in the header and reference the rest of
+ * the data via the skb fragment list.
+ *
+ * Below we rely on RX_COPY_THRES being less than the smallest Rx
+ * buff! size, which is expected since buffers are at least
+ * PAGE_SIZEd. In this case packets up to RX_COPY_THRES have only one
+ * fragment.
+ */
+ if (gl->tot_len <= RX_COPY_THRES) {
+ /* small packets have only one fragment */
+ skb = alloc_skb(gl->tot_len, GFP_ATOMIC);
+ if (unlikely(!skb))
+ goto out;
+ __skb_put(skb, gl->tot_len);
+ skb_copy_to_linear_data(skb, gl->va, gl->tot_len);
+ } else {
+ skb = alloc_skb(skb_len, GFP_ATOMIC);
+ if (unlikely(!skb))
+ goto out;
+ __skb_put(skb, pull_len);
+ skb_copy_to_linear_data(skb, gl->va, pull_len);
+
+ ssi = skb_shinfo(skb);
+ ssi->frags[0].page = gl->frags[0].page;
+ ssi->frags[0].page_offset = gl->frags[0].page_offset + pull_len;
+ ssi->frags[0].size = gl->frags[0].size - pull_len;
+ if (gl->nfrags > 1)
+ memcpy(&ssi->frags[1], &gl->frags[1],
+ (gl->nfrags-1) * sizeof(skb_frag_t));
+ ssi->nr_frags = gl->nfrags;
+
+ skb->len = gl->tot_len;
+ skb->data_len = skb->len - pull_len;
+ skb->truesize += skb->data_len;
+
+ /* Get a reference for the last page, we don't own it */
+ get_page(gl->frags[gl->nfrags - 1].page);
+ }
+
+out:
+ return skb;
+}
+
+/**
* t4vf_pktgl_free - free a packet gather list
* @gl: the gather list
*
@@ -1463,10 +1525,8 @@ int t4vf_ethrx_handler(struct sge_rspq *rspq, const __be64 *rsp,
{
struct sk_buff *skb;
struct port_info *pi;
- struct skb_shared_info *ssi;
const struct cpl_rx_pkt *pkt = (void *)&rsp[1];
bool csum_ok = pkt->csum_calc && !pkt->err_vec;
- unsigned int len = be16_to_cpu(pkt->len);
struct sge_eth_rxq *rxq = container_of(rspq, struct sge_eth_rxq, rspq);
/*
@@ -1481,42 +1541,14 @@ int t4vf_ethrx_handler(struct sge_rspq *rspq, const __be64 *rsp,
}
/*
- * If the ingress packet is small enough, allocate an skb large enough
- * for all of the data and copy it inline. Otherwise, allocate an skb
- * with enough room to pull in the header and reference the rest of
- * the data via the skb fragment list.
+ * Convert the Packet Gather List into an skb.
*/
- if (len <= RX_COPY_THRES) {
- /* small packets have only one fragment */
- skb = alloc_skb(gl->frags[0].size, GFP_ATOMIC);
- if (!skb)
- goto nomem;
- __skb_put(skb, gl->frags[0].size);
- skb_copy_to_linear_data(skb, gl->va, gl->frags[0].size);
- } else {
- skb = alloc_skb(RX_PKT_PULL_LEN, GFP_ATOMIC);
- if (!skb)
- goto nomem;
- __skb_put(skb, RX_PKT_PULL_LEN);
- skb_copy_to_linear_data(skb, gl->va, RX_PKT_PULL_LEN);
-
- ssi = skb_shinfo(skb);
- ssi->frags[0].page = gl->frags[0].page;
- ssi->frags[0].page_offset = (gl->frags[0].page_offset +
- RX_PKT_PULL_LEN);
- ssi->frags[0].size = gl->frags[0].size - RX_PKT_PULL_LEN;
- if (gl->nfrags > 1)
- memcpy(&ssi->frags[1], &gl->frags[1],
- (gl->nfrags-1) * sizeof(skb_frag_t));
- ssi->nr_frags = gl->nfrags;
- skb->len = len + PKTSHIFT;
- skb->data_len = skb->len - RX_PKT_PULL_LEN;
- skb->truesize += skb->data_len;
-
- /* Get a reference for the last page, we don't own it */
- get_page(gl->frags[gl->nfrags - 1].page);
+ skb = t4vf_pktgl_to_skb(gl, RX_SKB_LEN, RX_PULL_LEN);
+ if (unlikely(!skb)) {
+ t4vf_pktgl_free(gl);
+ rxq->stats.rx_drops++;
+ return 0;
}
-
__skb_pull(skb, PKTSHIFT);
skb->protocol = eth_type_trans(skb, rspq->netdev);
skb_record_rx_queue(skb, rspq->idx);
@@ -1552,11 +1584,6 @@ int t4vf_ethrx_handler(struct sge_rspq *rspq, const __be64 *rsp,
netif_receive_skb(skb);
return 0;
-
-nomem:
- t4vf_pktgl_free(gl);
- rxq->stats.rx_drops++;
- return 0;
}
/**
--
1.7.0.4
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 05/10] cxgb4vf: flesh out PCI Device ID Table ...
2010-11-11 2:01 [PATCH 00/10] cxgb4vf: a number of bug fixes and minor cleanup Casey Leedom
` (3 preceding siblings ...)
2010-11-11 2:04 ` [PATCH 04/10] cxgb4vf: fix some errors in Gather List to skb conversion Casey Leedom
@ 2010-11-11 2:04 ` Casey Leedom
2010-11-11 2:04 ` [PATCH 06/10] cxgb4vf: fix up "Section Mismatch" compiler warning Casey Leedom
` (5 subsequent siblings)
10 siblings, 0 replies; 15+ messages in thread
From: Casey Leedom @ 2010-11-11 2:04 UTC (permalink / raw)
To: netdev; +Cc: davem, Casey Leedom
Add a bunch of T4 Device IDs for the VF Driver.
Signed-off-by: Casey Leedom <leedom@chelsio.com>
---
drivers/net/cxgb4vf/cxgb4vf_main.c | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/drivers/net/cxgb4vf/cxgb4vf_main.c b/drivers/net/cxgb4vf/cxgb4vf_main.c
index 9e9e4f6..75b85ca 100644
--- a/drivers/net/cxgb4vf/cxgb4vf_main.c
+++ b/drivers/net/cxgb4vf/cxgb4vf_main.c
@@ -2834,6 +2834,14 @@ static struct pci_device_id cxgb4vf_pci_tbl[] = {
CH_DEVICE(0x4800, 0), /* T440-dbg */
CH_DEVICE(0x4801, 0), /* T420-cr */
CH_DEVICE(0x4802, 0), /* T422-cr */
+ CH_DEVICE(0x4803, 0), /* T440-cr */
+ CH_DEVICE(0x4804, 0), /* T420-bch */
+ CH_DEVICE(0x4805, 0), /* T440-bch */
+ CH_DEVICE(0x4806, 0), /* T460-ch */
+ CH_DEVICE(0x4807, 0), /* T420-so */
+ CH_DEVICE(0x4808, 0), /* T420-cx */
+ CH_DEVICE(0x4809, 0), /* T420-bt */
+ CH_DEVICE(0x480a, 0), /* T404-bt */
{ 0, }
};
--
1.7.0.4
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 06/10] cxgb4vf: fix up "Section Mismatch" compiler warning.
2010-11-11 2:01 [PATCH 00/10] cxgb4vf: a number of bug fixes and minor cleanup Casey Leedom
` (4 preceding siblings ...)
2010-11-11 2:04 ` [PATCH 05/10] cxgb4vf: flesh out PCI Device ID Table Casey Leedom
@ 2010-11-11 2:04 ` Casey Leedom
2010-11-11 2:04 ` [PATCH 07/10] cxgb4vf: Fail open if link_start() fails Casey Leedom
` (4 subsequent siblings)
10 siblings, 0 replies; 15+ messages in thread
From: Casey Leedom @ 2010-11-11 2:04 UTC (permalink / raw)
To: netdev; +Cc: davem, Casey Leedom
Fix up "Section Mismatch" compiler warning and mark another routine as
__devinit.
Signed-off-by: Casey Leedom <leedom@chelsio.com>
---
drivers/net/cxgb4vf/cxgb4vf_main.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/cxgb4vf/cxgb4vf_main.c b/drivers/net/cxgb4vf/cxgb4vf_main.c
index 75b85ca..b5c0bff 100644
--- a/drivers/net/cxgb4vf/cxgb4vf_main.c
+++ b/drivers/net/cxgb4vf/cxgb4vf_main.c
@@ -2032,7 +2032,7 @@ static int __devinit setup_debugfs(struct adapter *adapter)
* Tear down the /sys/kernel/debug/cxgb4vf sub-nodes created above. We leave
* it to our caller to tear down the directory (debugfs_root).
*/
-static void __devexit cleanup_debugfs(struct adapter *adapter)
+static void cleanup_debugfs(struct adapter *adapter)
{
BUG_ON(adapter->debugfs_root == NULL);
@@ -2050,7 +2050,7 @@ static void __devexit cleanup_debugfs(struct adapter *adapter)
* adapter parameters we're going to be using and initialize basic adapter
* hardware support.
*/
-static int adap_init0(struct adapter *adapter)
+static int __devinit adap_init0(struct adapter *adapter)
{
struct vf_resources *vfres = &adapter->params.vfres;
struct sge_params *sge_params = &adapter->params.sge;
--
1.7.0.4
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 07/10] cxgb4vf: Fail open if link_start() fails.
2010-11-11 2:01 [PATCH 00/10] cxgb4vf: a number of bug fixes and minor cleanup Casey Leedom
` (5 preceding siblings ...)
2010-11-11 2:04 ` [PATCH 06/10] cxgb4vf: fix up "Section Mismatch" compiler warning Casey Leedom
@ 2010-11-11 2:04 ` Casey Leedom
2010-11-11 2:04 ` [PATCH 08/10] cxgb4vf: Advertise NETIF_F_TSO_ECN Casey Leedom
` (3 subsequent siblings)
10 siblings, 0 replies; 15+ messages in thread
From: Casey Leedom @ 2010-11-11 2:04 UTC (permalink / raw)
To: netdev; +Cc: davem, Casey Leedom
Fail open if link_start() fails.
Signed-off-by: Casey Leedom <leedom@chelsio.com>
---
drivers/net/cxgb4vf/cxgb4vf_main.c | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/drivers/net/cxgb4vf/cxgb4vf_main.c b/drivers/net/cxgb4vf/cxgb4vf_main.c
index b5c0bff..2d09e83 100644
--- a/drivers/net/cxgb4vf/cxgb4vf_main.c
+++ b/drivers/net/cxgb4vf/cxgb4vf_main.c
@@ -753,7 +753,9 @@ static int cxgb4vf_open(struct net_device *dev)
if (err)
return err;
set_bit(pi->port_id, &adapter->open_device_map);
- link_start(dev);
+ err = link_start(dev);
+ if (err)
+ return err;
netif_tx_start_all_queues(dev);
return 0;
}
--
1.7.0.4
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 08/10] cxgb4vf: Advertise NETIF_F_TSO_ECN.
2010-11-11 2:01 [PATCH 00/10] cxgb4vf: a number of bug fixes and minor cleanup Casey Leedom
` (6 preceding siblings ...)
2010-11-11 2:04 ` [PATCH 07/10] cxgb4vf: Fail open if link_start() fails Casey Leedom
@ 2010-11-11 2:04 ` Casey Leedom
2010-11-11 2:04 ` [PATCH 09/10] cxgb4vf: Mark "UDP [RSS Hash] Enable" as a 1-bit field Casey Leedom
` (2 subsequent siblings)
10 siblings, 0 replies; 15+ messages in thread
From: Casey Leedom @ 2010-11-11 2:04 UTC (permalink / raw)
To: netdev; +Cc: davem, Casey Leedom
Advertise NETIF_F_TSO_ECN.
Signed-off-by: Casey Leedom <leedom@chelsio.com>
---
drivers/net/cxgb4vf/cxgb4vf_main.c | 11 ++++++++---
1 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/drivers/net/cxgb4vf/cxgb4vf_main.c b/drivers/net/cxgb4vf/cxgb4vf_main.c
index 2d09e83..15b14ef 100644
--- a/drivers/net/cxgb4vf/cxgb4vf_main.c
+++ b/drivers/net/cxgb4vf/cxgb4vf_main.c
@@ -1536,14 +1536,19 @@ static void cxgb4vf_get_wol(struct net_device *dev,
}
/*
+ * TCP Segmentation Offload flags which we support.
+ */
+#define TSO_FLAGS (NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_TSO_ECN)
+
+/*
* Set TCP Segmentation Offloading feature capabilities.
*/
static int cxgb4vf_set_tso(struct net_device *dev, u32 tso)
{
if (tso)
- dev->features |= NETIF_F_TSO | NETIF_F_TSO6;
+ dev->features |= TSO_FLAGS;
else
- dev->features &= ~(NETIF_F_TSO | NETIF_F_TSO6);
+ dev->features &= ~TSO_FLAGS;
return 0;
}
@@ -2596,7 +2601,7 @@ static int __devinit cxgb4vf_pci_probe(struct pci_dev *pdev,
netif_carrier_off(netdev);
netdev->irq = pdev->irq;
- netdev->features = (NETIF_F_SG | NETIF_F_TSO | NETIF_F_TSO6 |
+ netdev->features = (NETIF_F_SG | TSO_FLAGS |
NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX |
NETIF_F_GRO);
--
1.7.0.4
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 09/10] cxgb4vf: Mark "UDP [RSS Hash] Enable" as a 1-bit field.
2010-11-11 2:01 [PATCH 00/10] cxgb4vf: a number of bug fixes and minor cleanup Casey Leedom
` (7 preceding siblings ...)
2010-11-11 2:04 ` [PATCH 08/10] cxgb4vf: Advertise NETIF_F_TSO_ECN Casey Leedom
@ 2010-11-11 2:04 ` Casey Leedom
2010-11-11 2:04 ` [PATCH 10/10] cxgb4vf: add call to Firmware to reset VF State Casey Leedom
2010-11-11 17:33 ` [PATCH 00/10] cxgb4vf: a number of bug fixes and minor cleanup David Miller
10 siblings, 0 replies; 15+ messages in thread
From: Casey Leedom @ 2010-11-11 2:04 UTC (permalink / raw)
To: netdev; +Cc: davem, Casey Leedom
Mark the UDP RSS Hash Enable field as 1-bit in length. Also clean up
formatting from previous changeset which changed the RSS 1-bit fields from
"int" to "unsigned int".
Signed-off-by: Casey Leedom <leedom@chelsio.com>
---
drivers/net/cxgb4vf/t4vf_common.h | 28 ++++++++++++++--------------
1 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/drivers/net/cxgb4vf/t4vf_common.h b/drivers/net/cxgb4vf/t4vf_common.h
index 873cb7d..659616b 100644
--- a/drivers/net/cxgb4vf/t4vf_common.h
+++ b/drivers/net/cxgb4vf/t4vf_common.h
@@ -132,15 +132,15 @@ struct rss_params {
unsigned int mode; /* RSS mode */
union {
struct {
- unsigned int synmapen:1; /* SYN Map Enable */
- unsigned int syn4tupenipv6:1; /* enable hashing 4-tuple IPv6 SYNs */
- unsigned int syn2tupenipv6:1; /* enable hashing 2-tuple IPv6 SYNs */
- unsigned int syn4tupenipv4:1; /* enable hashing 4-tuple IPv4 SYNs */
- unsigned int syn2tupenipv4:1; /* enable hashing 2-tuple IPv4 SYNs */
- unsigned int ofdmapen:1; /* Offload Map Enable */
- unsigned int tnlmapen:1; /* Tunnel Map Enable */
- unsigned int tnlalllookup:1; /* Tunnel All Lookup */
- unsigned int hashtoeplitz:1; /* use Toeplitz hash */
+ uint synmapen:1; /* SYN Map Enable */
+ uint syn4tupenipv6:1; /* enable hashing 4-tuple IPv6 SYNs */
+ uint syn2tupenipv6:1; /* enable hashing 2-tuple IPv6 SYNs */
+ uint syn4tupenipv4:1; /* enable hashing 4-tuple IPv4 SYNs */
+ uint syn2tupenipv4:1; /* enable hashing 2-tuple IPv4 SYNs */
+ uint ofdmapen:1; /* Offload Map Enable */
+ uint tnlmapen:1; /* Tunnel Map Enable */
+ uint tnlalllookup:1; /* Tunnel All Lookup */
+ uint hashtoeplitz:1; /* use Toeplitz hash */
} basicvirtual;
} u;
};
@@ -151,11 +151,11 @@ struct rss_params {
union rss_vi_config {
struct {
u16 defaultq; /* Ingress Queue ID for !tnlalllookup */
- unsigned int ip6fourtupen:1; /* hash 4-tuple IPv6 ingress packets */
- unsigned int ip6twotupen:1; /* hash 2-tuple IPv6 ingress packets */
- unsigned int ip4fourtupen:1; /* hash 4-tuple IPv4 ingress packets */
- unsigned int ip4twotupen:1; /* hash 2-tuple IPv4 ingress packets */
- int udpen; /* hash 4-tuple UDP ingress packets */
+ uint ip6fourtupen:1; /* hash 4-tuple IPv6 ingress packets */
+ uint ip6twotupen:1; /* hash 2-tuple IPv6 ingress packets */
+ uint ip4fourtupen:1; /* hash 4-tuple IPv4 ingress packets */
+ uint ip4twotupen:1; /* hash 2-tuple IPv4 ingress packets */
+ uint udpen:1; /* hash 4-tuple UDP ingress packets */
} basicvirtual;
};
--
1.7.0.4
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 10/10] cxgb4vf: add call to Firmware to reset VF State.
2010-11-11 2:01 [PATCH 00/10] cxgb4vf: a number of bug fixes and minor cleanup Casey Leedom
` (8 preceding siblings ...)
2010-11-11 2:04 ` [PATCH 09/10] cxgb4vf: Mark "UDP [RSS Hash] Enable" as a 1-bit field Casey Leedom
@ 2010-11-11 2:04 ` Casey Leedom
2010-11-11 17:33 ` [PATCH 00/10] cxgb4vf: a number of bug fixes and minor cleanup David Miller
10 siblings, 0 replies; 15+ messages in thread
From: Casey Leedom @ 2010-11-11 2:04 UTC (permalink / raw)
To: netdev; +Cc: davem, Casey Leedom
Add call to Firmware to reset its VF State when we first attach to the VF.
Signed-off-by: Casey Leedom <leedom@chelsio.com>
---
drivers/net/cxgb4vf/cxgb4vf_main.c | 16 ++++++++++++++++
drivers/net/cxgb4vf/t4vf_common.h | 1 +
drivers/net/cxgb4vf/t4vf_hw.c | 19 +++++++++++++++++++
3 files changed, 36 insertions(+), 0 deletions(-)
diff --git a/drivers/net/cxgb4vf/cxgb4vf_main.c b/drivers/net/cxgb4vf/cxgb4vf_main.c
index 15b14ef..3456a9b 100644
--- a/drivers/net/cxgb4vf/cxgb4vf_main.c
+++ b/drivers/net/cxgb4vf/cxgb4vf_main.c
@@ -2076,6 +2076,22 @@ static int __devinit adap_init0(struct adapter *adapter)
}
/*
+ * Some environments do not properly handle PCIE FLRs -- e.g. in Linux
+ * 2.6.31 and later we can't call pci_reset_function() in order to
+ * issue an FLR because of a self- deadlock on the device semaphore.
+ * Meanwhile, the OS infrastructure doesn't issue FLRs in all the
+ * cases where they're needed -- for instance, some versions of KVM
+ * fail to reset "Assigned Devices" when the VM reboots. Therefore we
+ * use the firmware based reset in order to reset any per function
+ * state.
+ */
+ err = t4vf_fw_reset(adapter);
+ if (err < 0) {
+ dev_err(adapter->pdev_dev, "FW reset failed: err=%d\n", err);
+ return err;
+ }
+
+ /*
* Grab basic operational parameters. These will predominantly have
* been set up by the Physical Function Driver or will be hard coded
* into the adapter. We just have to live with them ... Note that
diff --git a/drivers/net/cxgb4vf/t4vf_common.h b/drivers/net/cxgb4vf/t4vf_common.h
index 659616b..7541a60 100644
--- a/drivers/net/cxgb4vf/t4vf_common.h
+++ b/drivers/net/cxgb4vf/t4vf_common.h
@@ -235,6 +235,7 @@ static inline int t4vf_wr_mbox_ns(struct adapter *adapter, const void *cmd,
int __devinit t4vf_wait_dev_ready(struct adapter *);
int __devinit t4vf_port_init(struct adapter *, int);
+int t4vf_fw_reset(struct adapter *);
int t4vf_query_params(struct adapter *, unsigned int, const u32 *, u32 *);
int t4vf_set_params(struct adapter *, unsigned int, const u32 *, const u32 *);
diff --git a/drivers/net/cxgb4vf/t4vf_hw.c b/drivers/net/cxgb4vf/t4vf_hw.c
index 2180181..591f161 100644
--- a/drivers/net/cxgb4vf/t4vf_hw.c
+++ b/drivers/net/cxgb4vf/t4vf_hw.c
@@ -326,6 +326,25 @@ int __devinit t4vf_port_init(struct adapter *adapter, int pidx)
}
/**
+ * t4vf_fw_reset - issue a reset to FW
+ * @adapter: the adapter
+ *
+ * Issues a reset command to FW. For a Physical Function this would
+ * result in the Firmware reseting all of its state. For a Virtual
+ * Function this just resets the state associated with the VF.
+ */
+int t4vf_fw_reset(struct adapter *adapter)
+{
+ struct fw_reset_cmd cmd;
+
+ memset(&cmd, 0, sizeof(cmd));
+ cmd.op_to_write = cpu_to_be32(FW_CMD_OP(FW_RESET_CMD) |
+ FW_CMD_WRITE);
+ cmd.retval_len16 = cpu_to_be32(FW_LEN16(cmd));
+ return t4vf_wr_mbox(adapter, &cmd, sizeof(cmd), NULL);
+}
+
+/**
* t4vf_query_params - query FW or device parameters
* @adapter: the adapter
* @nparams: the number of parameters
--
1.7.0.4
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 01/10] cxgb4vf: minor comment/symbolic name cleanup.
2010-11-11 2:04 ` [PATCH 01/10] cxgb4vf: minor comment/symbolic name cleanup Casey Leedom
@ 2010-11-11 3:19 ` Joe Perches
2010-11-11 17:17 ` Casey Leedom
0 siblings, 1 reply; 15+ messages in thread
From: Joe Perches @ 2010-11-11 3:19 UTC (permalink / raw)
To: Casey Leedom; +Cc: netdev, davem
On Wed, 2010-11-10 at 18:04 -0800, Casey Leedom wrote:
> Minor cleanup of comments and symbolic constant names for clarity.
> diff --git a/drivers/net/cxgb4vf/cxgb4vf_main.c b/drivers/net/cxgb4vf/cxgb4vf_main.c
> index 6de5e2e..f5259a1 100644
> --- a/drivers/net/cxgb4vf/cxgb4vf_main.c
> +++ b/drivers/net/cxgb4vf/cxgb4vf_main.c
> @@ -280,7 +280,7 @@ static void name_msix_vecs(struct adapter *adapter)
> const struct port_info *pi = netdev_priv(dev);
> int qs, msi;
>
> - for (qs = 0, msi = MSIX_NIQFLINT;
> + for (qs = 0, msi = MSIX_IQFLINT;
> qs < pi->nqsets;
> qs++, msi++) {
This for now fits on a single line.
> diff --git a/drivers/net/cxgb4vf/t4vf_hw.c b/drivers/net/cxgb4vf/t4vf_hw.c
> index ea1c123..2180181 100644
> --- a/drivers/net/cxgb4vf/t4vf_hw.c
> +++ b/drivers/net/cxgb4vf/t4vf_hw.c
> @@ -1257,7 +1257,7 @@ int t4vf_eth_eq_free(struct adapter *adapter, unsigned int eqid)
> */
> int t4vf_handle_fw_rpl(struct adapter *adapter, const __be64 *rpl)
> - struct fw_cmd_hdr *cmd_hdr = (struct fw_cmd_hdr *)rpl;
> + const struct fw_cmd_hdr *cmd_hdr = (const struct fw_cmd_hdr *)rpl;
> @@ -1265,7 +1265,7 @@ int t4vf_handle_fw_rpl(struct adapter *adapter, const __be64 *rpl)
> - const struct fw_port_cmd *port_cmd = (void *)rpl;
> + const struct fw_port_cmd *port_cmd = (const void *)rpl;
might be better to have a consistent casting style.
1st uses a direct cast, 2nd an implicit one.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 01/10] cxgb4vf: minor comment/symbolic name cleanup.
2010-11-11 3:19 ` Joe Perches
@ 2010-11-11 17:17 ` Casey Leedom
0 siblings, 0 replies; 15+ messages in thread
From: Casey Leedom @ 2010-11-11 17:17 UTC (permalink / raw)
To: Joe Perches; +Cc: netdev, davem
[[Second attempt: First effort at replying got dropped because of local relay
security insanity ... and would have been dropped in any case because my mailer
was configured for HTML "Rich Text. -- Casey]]
| | From: Joe Perches <joe@perches.com>
| | Date: Wednesday, November 10, 2010 07:19 pm
| |
| | > const struct port_info *pi = netdev_priv(dev);
| | > int qs, msi;
| | >
| | > - for (qs = 0, msi = MSIX_NIQFLINT;
| | > + for (qs = 0, msi = MSIX_IQFLINT;
| | >
| | > qs < pi->nqsets;
| | > qs++, msi++) {
| |
| | This for now fits on a single line.
| |
| | > - struct fw_cmd_hdr *cmd_hdr = (struct fw_cmd_hdr *)rpl;
| | > + const struct fw_cmd_hdr *cmd_hdr = (const struct fw_cmd_hdr *)rpl;
| | > @@ -1265,7 +1265,7 @@ int t4vf_handle_fw_rpl(struct adapter *adapter,
| | > const __be64 *rpl) - const struct fw_port_cmd *port_cmd = (void *)rpl;
| | > + const struct fw_port_cmd *port_cmd = (const void *)rpl;
| |
| | might be better to have a consistent casting style.
| | 1st uses a direct cast, 2nd an implicit one.
|
| Sure. These both look good. May I fix these in a follow up patch or
| should I respin the patches with this last change?
[[To which Joe responded to me because of the aforementioned HTML email botch:]]
| Date: Thu Nov 11 06:55:43 2010
| From: Joe Perches <joe@perches.com>
| To: Casey Leedom <leedom@chelsio.com>
|
| It's just trivial formatting.
| Do what you think appropriate.
|
| fyi: linux-kernel doesn't accept emails with html formatting.
| You'll need to default to text otherwise your emails to
| any kernel related list will be silently rejected.
|
| cheers, Joe
Thanks Joe!
Casey
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 00/10] cxgb4vf: a number of bug fixes and minor cleanup
2010-11-11 2:01 [PATCH 00/10] cxgb4vf: a number of bug fixes and minor cleanup Casey Leedom
` (9 preceding siblings ...)
2010-11-11 2:04 ` [PATCH 10/10] cxgb4vf: add call to Firmware to reset VF State Casey Leedom
@ 2010-11-11 17:33 ` David Miller
2010-11-11 17:40 ` Casey Leedom
10 siblings, 1 reply; 15+ messages in thread
From: David Miller @ 2010-11-11 17:33 UTC (permalink / raw)
To: leedom; +Cc: netdev
From: Casey Leedom <leedom@chelsio.com>
Date: Wed, 10 Nov 2010 18:01:33 -0800
> The following patch set includes a number of bug fixes and some
> minor cleanup for the cxgb4vf network driver. If there are any
> problems with formatting, etc. of the patch set please just reject
> the patch set and kick my butt ― I'm still a novice at putting these
> together!
This is a mix of bug fixes (which would be appropriate for net-2.6)
and also changes like cleanups and minor feature adds which are not
appropriate in net-2.6
Please split them up.
I'd suggest sending out only the real bug fixes so I can quickly get
them into net-2.6, and then later you can submit the cleanups and
feature-adds realtive to the net-2.6 stuff.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 00/10] cxgb4vf: a number of bug fixes and minor cleanup
2010-11-11 17:33 ` [PATCH 00/10] cxgb4vf: a number of bug fixes and minor cleanup David Miller
@ 2010-11-11 17:40 ` Casey Leedom
0 siblings, 0 replies; 15+ messages in thread
From: Casey Leedom @ 2010-11-11 17:40 UTC (permalink / raw)
To: David Miller; +Cc: netdev
| From: David Miller <davem@davemloft.net>
| Date: Thursday, November 11, 2010 09:33 am
|
| From: Casey Leedom <leedom@chelsio.com>
| Date: Wed, 10 Nov 2010 18:01:33 -0800
|
| > The following patch set includes a number of bug fixes and some
| > minor cleanup for the cxgb4vf network driver. If there are any
| > problems with formatting, etc. of the patch set please just reject
| > the patch set and kick my butt ― I'm still a novice at putting these
| > together!
|
| This is a mix of bug fixes (which would be appropriate for net-2.6)
| and also changes like cleanups and minor feature adds which are not
| appropriate in net-2.6
|
| Please split them up.
|
| I'd suggest sending out only the real bug fixes so I can quickly get
| them into net-2.6, and then later you can submit the cleanups and
| feature-adds realtive to the net-2.6 stuff.
Okay, sorry, I didn't know what the policies were. It'll take a bit for me to
wrangle "git send-email" into doing this. Two new patch sets coming before the
end of the day!
Casey
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2010-11-11 17:40 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-11-11 2:01 [PATCH 00/10] cxgb4vf: a number of bug fixes and minor cleanup Casey Leedom
2010-11-11 2:04 ` [PATCH 01/10] cxgb4vf: minor comment/symbolic name cleanup Casey Leedom
2010-11-11 3:19 ` Joe Perches
2010-11-11 17:17 ` Casey Leedom
2010-11-11 2:04 ` [PATCH 02/10] cxgb4vf: don't implement trivial (and incorrect) ndo_select_queue() Casey Leedom
2010-11-11 2:04 ` [PATCH 03/10] cxgb4vf: fix bug in Generic Receive Offload Casey Leedom
2010-11-11 2:04 ` [PATCH 04/10] cxgb4vf: fix some errors in Gather List to skb conversion Casey Leedom
2010-11-11 2:04 ` [PATCH 05/10] cxgb4vf: flesh out PCI Device ID Table Casey Leedom
2010-11-11 2:04 ` [PATCH 06/10] cxgb4vf: fix up "Section Mismatch" compiler warning Casey Leedom
2010-11-11 2:04 ` [PATCH 07/10] cxgb4vf: Fail open if link_start() fails Casey Leedom
2010-11-11 2:04 ` [PATCH 08/10] cxgb4vf: Advertise NETIF_F_TSO_ECN Casey Leedom
2010-11-11 2:04 ` [PATCH 09/10] cxgb4vf: Mark "UDP [RSS Hash] Enable" as a 1-bit field Casey Leedom
2010-11-11 2:04 ` [PATCH 10/10] cxgb4vf: add call to Firmware to reset VF State Casey Leedom
2010-11-11 17:33 ` [PATCH 00/10] cxgb4vf: a number of bug fixes and minor cleanup David Miller
2010-11-11 17:40 ` Casey Leedom
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).