* Re: [PATCH] act_nat: fix wild pointer
From: Herbert Xu @ 2010-07-30 7:18 UTC (permalink / raw)
To: Changli Gao; +Cc: Jamal Hadi Salim, David S. Miller, netdev
In-Reply-To: <1280446906-29032-1-git-send-email-xiaosuo@gmail.com>
On Fri, Jul 30, 2010 at 07:41:46AM +0800, Changli Gao wrote:
> pskb_may_pull() may change skb pointers, so adjust icmph after pskb_may_pull().
>
> Signed-off-by: Changli Gao <xiaosuo@gmail.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Thanks,
--
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply
* [PATCH] act_nat: fix wild pointer
From: Changli Gao @ 2010-07-29 23:41 UTC (permalink / raw)
To: Herbert Xu; +Cc: Jamal Hadi Salim, David S. Miller, netdev, Changli Gao
pskb_may_pull() may change skb pointers, so adjust icmph after pskb_may_pull().
Signed-off-by: Changli Gao <xiaosuo@gmail.com>
----
net/sched/act_nat.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/net/sched/act_nat.c b/net/sched/act_nat.c
index 24e614c..b6d7c6f 100644
--- a/net/sched/act_nat.c
+++ b/net/sched/act_nat.c
@@ -218,6 +218,7 @@ static int tcf_nat(struct sk_buff *skb, struct tc_action *a,
if (!pskb_may_pull(skb, ihl + sizeof(*icmph) + sizeof(*iph)))
goto drop;
+ icmph = (void *)(skb_network_header(skb) + ihl);
iph = (void *)(icmph + 1);
if (egress)
addr = iph->daddr;
^ permalink raw reply related
* Re: [RFC PATCH v8 00/16] Provide a zero-copy method on KVM virtio-net.
From: Avi Kivity @ 2010-07-30 5:02 UTC (permalink / raw)
To: Shirley Ma
Cc: xiaohui.xin, netdev, kvm, linux-kernel, mst, mingo, davem,
herbert, jdike
In-Reply-To: <1280442682.9058.15.camel@localhost.localdomain>
On 07/30/2010 01:31 AM, Shirley Ma wrote:
>
>> Our goal is to improve the bandwidth and reduce the CPU usage.
>> Exact performance data will be provided later.
> I did some vhost performance measurement over 10Gb ixgbe, and found that
> in order to get consistent BW results, netperf/netserver, qemu, vhost
> threads smp affinities are required.
>
> Looking forward to these results for small message size comparison. For
> large message size 10Gb ixgbe BW already reached by doing vhost smp
> affinity w/i offloading support, we will see how much CPU utilization it
> can be reduced.
>
> Please provide latency results as well. I did some experimental on
> macvtap zero copy sendmsg, what I have found that get_user_pages latency
> pretty high.
>
get_user_pages() is indeed slow. But what about get_user_pages_fast()?
Note that when the page is first touched, get_user_pages_fast() falls
back to get_user_pages(), so the latency needs to be measured after
quite a bit of warm-up.
--
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.
^ permalink raw reply
* Re: [PATCH] act_nat: get the position info from skb->tc_verd
From: Changli Gao @ 2010-07-30 2:57 UTC (permalink / raw)
To: Herbert Xu; +Cc: David S. Miller, Jamal Hadi Salim, netdev
In-Reply-To: <20100730023649.GA5798@gondor.apana.org.au>
On Fri, Jul 30, 2010 at 10:36 AM, Herbert Xu
<herbert@gondor.apana.org.au> wrote:
> On Fri, Jul 30, 2010 at 02:42:32AM +0800, Changli Gao wrote:
>> act_nat uses its flags field to determine where it acts. It isn't reliable,
>> and can't prevent users from doing wrong settings, and act_nat should get the
>> position info from skb->tc_verd as act_mirred does.
>>
>> Signed-off-by: Changli Gao <xiaosuo@gmail.com>
>
> Nack, the direction controls whether we NAT saddr or daddr. It's
> perfectly OK for someone to NAT daddr on the way out.
>
Thanks for your explanation. However, ingress and egress aren't as
comprehensive as DNAT and SNAT. BTW I am planning to add stateless
PAT(Port Address Translation) support into act_nat. Any comment?
--
Regards,
Changli Gao(xiaosuo@gmail.com)
^ permalink raw reply
* Re: [PATCH] act_nat: get the position info from skb->tc_verd
From: Herbert Xu @ 2010-07-30 2:36 UTC (permalink / raw)
To: Changli Gao; +Cc: David S. Miller, Jamal Hadi Salim, netdev
In-Reply-To: <1280428952-14151-1-git-send-email-xiaosuo@gmail.com>
On Fri, Jul 30, 2010 at 02:42:32AM +0800, Changli Gao wrote:
> act_nat uses its flags field to determine where it acts. It isn't reliable,
> and can't prevent users from doing wrong settings, and act_nat should get the
> position info from skb->tc_verd as act_mirred does.
>
> Signed-off-by: Changli Gao <xiaosuo@gmail.com>
Nack, the direction controls whether we NAT saddr or daddr. It's
perfectly OK for someone to NAT daddr on the way out.
Cheers,
--
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply
* [PATCH] act_nat: get the position info from skb->tc_verd
From: Changli Gao @ 2010-07-29 18:42 UTC (permalink / raw)
To: David S. Miller; +Cc: Herbert Xu, Jamal Hadi Salim, netdev, Changli Gao
act_nat uses its flags field to determine where it acts. It isn't reliable,
and can't prevent users from doing wrong settings, and act_nat should get the
position info from skb->tc_verd as act_mirred does.
Signed-off-by: Changli Gao <xiaosuo@gmail.com>
----
include/net/tc_act/tc_nat.h | 2 +-
net/sched/act_nat.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/net/tc_act/tc_nat.h b/include/net/tc_act/tc_nat.h
index 4a691f3..343376a 100644
--- a/include/net/tc_act/tc_nat.h
+++ b/include/net/tc_act/tc_nat.h
@@ -10,7 +10,7 @@ struct tcf_nat {
__be32 old_addr;
__be32 new_addr;
__be32 mask;
- u32 flags;
+ u32 flags; /* unused */
};
static inline struct tcf_nat *to_tcf_nat(struct tcf_common *pc)
diff --git a/net/sched/act_nat.c b/net/sched/act_nat.c
index 24e614c..144e118 100644
--- a/net/sched/act_nat.c
+++ b/net/sched/act_nat.c
@@ -121,7 +121,7 @@ static int tcf_nat(struct sk_buff *skb, struct tc_action *a,
old_addr = p->old_addr;
new_addr = p->new_addr;
mask = p->mask;
- egress = p->flags & TCA_NAT_FLAG_EGRESS;
+ egress = G_TC_AT(skb->tc_verd) & AT_EGRESS;
action = p->tcf_action;
p->tcf_bstats.bytes += qdisc_pkt_len(skb);
^ permalink raw reply related
* [PATCH V2 net-next 3/3] drivers/net/bfin_mac.c: Misc function cleanups, neatening
From: Joe Perches @ 2010-07-30 1:47 UTC (permalink / raw)
To: Mike Frysinger
Cc: Michael Hennerich, uclinux-dist-devel, netdev, linux-kernel
In-Reply-To: <AANLkTikYn+qpDxxLeJ4eu5SsEs=7n_wAu5RzM5pZhVwU@mail.gmail.com>
Use new bfin_alloc_skb to centralize skb allocations
Add and use get_mac_addr function
Neaten bfin_mac_init
Neaten bfin_mac_hard_start_xmit
Signed-off-by: Joe Perches <joe@perches.com>
---
drivers/net/bfin_mac.c | 93 ++++++++++++++++++++++++++---------------------
1 files changed, 51 insertions(+), 42 deletions(-)
diff --git a/drivers/net/bfin_mac.c b/drivers/net/bfin_mac.c
index 7543b07..6c23a91 100644
--- a/drivers/net/bfin_mac.c
+++ b/drivers/net/bfin_mac.c
@@ -83,6 +83,26 @@ static u16 pin_req[] = P_RMII0;
static u16 pin_req[] = P_MII0;
#endif
+static struct sk_buff *bfin_alloc_skb(void)
+{
+ /* allocate a new skb */
+ struct sk_buff *new_skb = dev_alloc_skb(PKT_BUF_SZ + NET_IP_ALIGN);
+
+ if (!new_skb)
+ return NULL;
+
+ skb_reserve(new_skb, NET_IP_ALIGN);
+ /*
+ * Invalidate the data cache of skb->data range
+ * when it is write back cache to prevent overwriting
+ * the new data from DMA.
+ */
+ blackfin_dcache_invalidate_range((unsigned long)new_skb->head,
+ (unsigned long)new_skb->end);
+
+ return new_skb;
+}
+
static void desc_list_free(void)
{
struct net_dma_desc_rx *r;
@@ -195,18 +215,12 @@ static int desc_list_init(void)
struct dma_descriptor *b = &(r->desc_b);
/* allocate a new skb for next time receive */
- new_skb = dev_alloc_skb(PKT_BUF_SZ + NET_IP_ALIGN);
+ new_skb = bfin_alloc_skb();
if (!new_skb) {
pr_notice("init: low on mem - packet dropped\n");
goto init_error;
}
- skb_reserve(new_skb, NET_IP_ALIGN);
- /* Invalidate the data cache of skb->data range when it is
- * write back cache.
- * It will prevent overwriting the new data from DMA
- */
- blackfin_dcache_invalidate_range((unsigned long)new_skb->head,
- (unsigned long)new_skb->end);
+
r->skb = new_skb;
/*
@@ -600,6 +614,16 @@ void setup_system_regs(struct net_device *dev)
bfin_write_DMA1_Y_MODIFY(0);
}
+/* Grab the MAC address in the MAC */
+static void get_mac_addr(u8 *mac_addr)
+{
+ __le32 addr_low = cpu_to_le32(bfin_read_EMAC_ADDRLO());
+ __le16 addr_hi = cpu_to_le16((u16)bfin_read_EMAC_ADDRHI());
+
+ memcpy(mac_addr, &addr_low, 4);
+ memcpy(mac_addr + 4, &addr_hi, 2);
+}
+
static void setup_mac_addr(u8 *mac_addr)
{
u32 addr_low = le32_to_cpu(*(__le32 *)&mac_addr[0]);
@@ -998,15 +1022,17 @@ static void tx_reclaim_skb_timeout(unsigned long lp)
static int bfin_mac_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
{
struct bfin_mac_local *lp = netdev_priv(dev);
- u16 *data;
u32 data_align = (unsigned long)(skb->data) & 0x3;
+ unsigned long buf_start;
+ unsigned long buf_len;
union skb_shared_tx *shtx = skb_tx(skb);
current_tx_ptr->skb = skb;
if (data_align == 0x2) {
/* move skb->data to current_tx_ptr payload */
- data = (u16 *)(skb->data) - 1;
+ u16 *data = (u16 *)(skb->data) - 1;
+
*data = (u16)(skb->len);
/*
* When transmitting an Ethernet packet, the PTP_TSYNC module
@@ -1018,23 +1044,21 @@ static int bfin_mac_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
if (shtx->hardware)
*data |= 0x1000;
- current_tx_ptr->desc_a.start_addr = (u32)data;
- /* this is important! */
- blackfin_dcache_flush_range((u32)data,
- (u32)((u8 *)data + skb->len + 4));
+ buf_start = (unsigned long)data;
+ buf_len = skb->len + 4;
} else {
*((u16 *)(current_tx_ptr->packet)) = (u16)(skb->len);
/* enable timestamping for the sent packet */
if (shtx->hardware)
*((u16 *)(current_tx_ptr->packet)) |= 0x1000;
- memcpy((u8 *)(current_tx_ptr->packet + 2), skb->data,
- skb->len);
- current_tx_ptr->desc_a.start_addr =
- (u32)current_tx_ptr->packet;
- blackfin_dcache_flush_range(
- (u32)current_tx_ptr->packet,
- (u32)(current_tx_ptr->packet + skb->len + 2));
+ memcpy(current_tx_ptr->packet + 2, skb->data, skb->len);
+
+ buf_start = (unsigned long)current_tx_ptr->packet;
+ buf_len = skb->len + 2;
}
+ current_tx_ptr->desc_a.start_addr = buf_start;
+ /* this is important! */
+ blackfin_dcache_flush_range(buf_start, buf_start + buf_len);
/*
* Make sure the internal data buffers in the core are drained
@@ -1099,20 +1123,12 @@ static void bfin_mac_rx(struct net_device *dev)
/* allocate a new skb for next time receive */
skb = current_rx_ptr->skb;
- new_skb = dev_alloc_skb(PKT_BUF_SZ + NET_IP_ALIGN);
+ new_skb = bfin_alloc_skb();
if (!new_skb) {
netdev_notice(dev, "rx: low on mem - packet dropped\n");
dev->stats.rx_dropped++;
goto out;
}
- /* reserve 2 bytes for RXDWA padding */
- skb_reserve(new_skb, NET_IP_ALIGN);
- /*
- * Invalidate the data cache of skb->data range when it is write back
- * cache. It will prevent overwriting the new data from DMA
- */
- blackfin_dcache_invalidate_range((unsigned long)new_skb->head,
- (unsigned long)new_skb->end);
current_rx_ptr->skb = new_skb;
current_rx_ptr->desc_a.start_addr = (unsigned long)new_skb->data - 2;
@@ -1479,14 +1495,10 @@ static int __devinit bfin_mac_probe(struct platform_device *pdev)
lp = netdev_priv(ndev);
lp->ndev = ndev;
- /* Grab the MAC address in the MAC */
- *(__le32 *)(&(ndev->dev_addr[0])) =
- cpu_to_le32(bfin_read_EMAC_ADDRLO());
- *(__le16 *)(&(ndev->dev_addr[4])) =
- cpu_to_le16((u16)bfin_read_EMAC_ADDRHI());
+ get_mac_addr(ndev->dev_addr);
/* probe mac */
- /*todo: how to proble? which is revision_register */
+ /* todo: how to probe? which is revision_register */
bfin_write_EMAC_ADDRLO(0x12345678);
if (bfin_read_EMAC_ADDRLO() != 0x12345678) {
dev_err(&pdev->dev, "Cannot detect Blackfin on-chip ethernet MAC controller!\n");
@@ -1722,12 +1734,9 @@ static struct platform_driver bfin_mac_driver = {
static int __init bfin_mac_init(void)
{
- int ret;
-
- ret = platform_driver_register(&bfin_mii_bus_driver);
- if (!ret)
- return platform_driver_register(&bfin_mac_driver);
- return -ENODEV;
+ if (platform_driver_register(&bfin_mii_bus_driver))
+ return -ENODEV;
+ return platform_driver_register(&bfin_mac_driver);
}
module_init(bfin_mac_init);
--
1.7.2.19.g9a302
^ permalink raw reply related
* Re: [PATCH net-next 3/3] drivers/net/bfin_mac.c: Misc function cleanups, neatening
From: Joe Perches @ 2010-07-30 1:45 UTC (permalink / raw)
To: Mike Frysinger
Cc: Michael Hennerich, uclinux-dist-devel, netdev, linux-kernel
In-Reply-To: <AANLkTikYn+qpDxxLeJ4eu5SsEs=7n_wAu5RzM5pZhVwU@mail.gmail.com>
On Thu, 2010-07-29 at 20:18 -0400, Mike Frysinger wrote:
> i'll ack the idea, but i think it better i pull these patches into the
> Blackfin repo to get some real hardware testing before i forward them
> back to David/netdev ...
>
> that OK with you ?
Fine by me. These are trivial patches.
I don't have the hardware.
^ permalink raw reply
* [PATCH V2 net-next 2/3] drivers/net/bfin_mac.c: Use pr_<level>, netdev_<level>
From: Joe Perches @ 2010-07-30 1:44 UTC (permalink / raw)
To: Mike Frysinger
Cc: Michael Hennerich, uclinux-dist-devel, netdev, linux-kernel
In-Reply-To: <AANLkTi=jTj7g7STZCTYYBsw5zmij3jmEedBoEnZE4TgW@mail.gmail.com>
Add and use pr_fmt, pr_<level> and netdev_<level>
Signed-off-by: Joe Perches <joe@perches.com>
---
drivers/net/bfin_mac.c | 64 +++++++++++++++++++++++------------------------
1 files changed, 31 insertions(+), 33 deletions(-)
diff --git a/drivers/net/bfin_mac.c b/drivers/net/bfin_mac.c
index 0b032a5..7543b07 100644
--- a/drivers/net/bfin_mac.c
+++ b/drivers/net/bfin_mac.c
@@ -8,6 +8,8 @@
* Licensed under the GPL-2 or later.
*/
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
@@ -195,8 +197,7 @@ static int desc_list_init(void)
/* allocate a new skb for next time receive */
new_skb = dev_alloc_skb(PKT_BUF_SZ + NET_IP_ALIGN);
if (!new_skb) {
- printk(KERN_NOTICE DRV_NAME
- ": init: low on mem - packet dropped\n");
+ pr_notice("init: low on mem - packet dropped\n");
goto init_error;
}
skb_reserve(new_skb, NET_IP_ALIGN);
@@ -247,7 +248,7 @@ static int desc_list_init(void)
init_error:
desc_list_free();
- printk(KERN_ERR DRV_NAME ": kmalloc failed\n");
+ pr_err("kmalloc failed\n");
return -ENOMEM;
}
@@ -264,12 +265,11 @@ static int bfin_mdio_poll(void)
/* poll the STABUSY bit */
while ((bfin_read_EMAC_STAADD()) & STABUSY) {
- udelay(1);
if (timeout_cnt-- < 0) {
- printk(KERN_ERR DRV_NAME
- ": wait MDC/MDIO transaction to complete timeout\n");
+ pr_err("wait MDC/MDIO transaction to complete timeout\n");
return -ETIMEDOUT;
}
+ udelay(1);
}
return 0;
@@ -357,9 +357,9 @@ static void bfin_mac_adjust_link(struct net_device *dev)
opmode &= ~(RMII_10);
break;
default:
- printk(KERN_WARNING
- "%s: Ack! Speed (%d) is not 10/100!\n",
- DRV_NAME, phydev->speed);
+ netdev_warn(dev,
+ "Ack! Speed (%d) is not 10/100!\n",
+ phydev->speed);
break;
}
bfin_write_EMAC_OPMODE(opmode);
@@ -383,7 +383,7 @@ static void bfin_mac_adjust_link(struct net_device *dev)
if (new_state) {
u32 opmode = bfin_read_EMAC_OPMODE();
phy_print_status(phydev);
- pr_debug("EMAC_OPMODE = 0x%08x\n", opmode);
+ netdev_dbg(dev, "EMAC_OPMODE = 0x%08x\n", opmode);
}
spin_unlock_irqrestore(&lp->lock, flags);
@@ -424,8 +424,7 @@ static int mii_probe(struct net_device *dev)
/* now we are supposed to have a proper phydev to attach to... */
if (!phydev) {
- printk(KERN_INFO "%s: Don't found any phy device at all\n",
- dev->name);
+ netdev_info(dev, "No PHY device found\n");
return -ENODEV;
}
@@ -438,7 +437,7 @@ static int mii_probe(struct net_device *dev)
#endif
if (IS_ERR(phydev)) {
- printk(KERN_ERR "%s: Could not attach to PHY\n", dev->name);
+ netdev_err(dev, "Could not attach to PHY\n");
return PTR_ERR(phydev);
}
@@ -460,11 +459,11 @@ static int mii_probe(struct net_device *dev)
lp->old_duplex = -1;
lp->phydev = phydev;
- printk(KERN_INFO "%s: attached PHY driver [%s] "
- "(mii_bus:phy_addr=%s, irq=%d, mdc_clk=%dHz(mdc_div=%d)"
- "@sclk=%dMHz)\n",
- DRV_NAME, phydev->drv->name, dev_name(&phydev->dev), phydev->irq,
- MDC_CLK, mdc_div, sclk/1000000);
+ netdev_info(dev, "attached PHY driver [%s] "
+ "(mii_bus:phy_addr=%s, irq=%d, mdc_clk=%dHz(mdc_div=%d)"
+ "@sclk=%dMHz)\n",
+ phydev->drv->name, dev_name(&phydev->dev), phydev->irq,
+ MDC_CLK, mdc_div, sclk/1000000);
return 0;
}
@@ -636,8 +635,9 @@ static int bfin_mac_hwtstamp_ioctl(struct net_device *netdev,
if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
return -EFAULT;
- pr_debug("%s config flag:0x%x, tx_type:0x%x, rx_filter:0x%x\n",
- __func__, config.flags, config.tx_type, config.rx_filter);
+ netdev_dbg(netdev,
+ "%s config flag:0x%x, tx_type:0x%x, rx_filter:0x%x\n",
+ __func__, config.flags, config.tx_type, config.rx_filter);
/* reserved for future extensions */
if (config.flags)
@@ -833,8 +833,8 @@ static void bfin_tx_hwtstamp(struct net_device *netdev, struct sk_buff *skb)
(--timeout_cnt))
udelay(1);
if (timeout_cnt == 0)
- printk(KERN_ERR DRV_NAME
- ": fails to timestamp the TX packet\n");
+ netdev_err(netdev,
+ "failed to timestamp the TX packet\n");
else {
struct skb_shared_hwtstamps shhwtstamps;
u64 ns;
@@ -1091,8 +1091,7 @@ static void bfin_mac_rx(struct net_device *dev)
* we which case we simply drop the packet
*/
if (current_rx_ptr->status.status_word & RX_ERROR_MASK) {
- printk(KERN_NOTICE DRV_NAME
- ": rx: receive error - packet dropped\n");
+ netdev_notice(dev, "rx: receive error - packet dropped\n");
dev->stats.rx_dropped++;
goto out;
}
@@ -1102,8 +1101,7 @@ static void bfin_mac_rx(struct net_device *dev)
new_skb = dev_alloc_skb(PKT_BUF_SZ + NET_IP_ALIGN);
if (!new_skb) {
- printk(KERN_NOTICE DRV_NAME
- ": rx: low on mem - packet dropped\n");
+ netdev_notice(dev, "rx: low on mem - packet dropped\n");
dev->stats.rx_dropped++;
goto out;
}
@@ -1226,7 +1224,7 @@ static int bfin_mac_enable(void)
int ret;
u32 opmode;
- pr_debug("%s: %s\n", DRV_NAME, __func__);
+ pr_debug("%s\n", __func__);
/* Set RX DMA */
bfin_write_DMA1_NEXT_DESC_PTR(&(rx_list_head->desc_a));
@@ -1268,7 +1266,7 @@ static void bfin_mac_timeout(struct net_device *dev)
{
struct bfin_mac_local *lp = netdev_priv(dev);
- pr_debug("%s: %s\n", dev->name, __func__);
+ netdev_dbg(dev, "%s\n", __func__);
bfin_mac_disable();
@@ -1335,7 +1333,7 @@ static void bfin_mac_set_multicast_list(struct net_device *dev)
u32 sysctl;
if (dev->flags & IFF_PROMISC) {
- printk(KERN_INFO "%s: set to promisc mode\n", dev->name);
+ netdev_info(dev, "set to promisc mode\n");
sysctl = bfin_read_EMAC_OPMODE();
sysctl |= PR;
bfin_write_EMAC_OPMODE(sysctl);
@@ -1389,7 +1387,7 @@ static int bfin_mac_open(struct net_device *dev)
{
struct bfin_mac_local *lp = netdev_priv(dev);
int ret;
- pr_debug("%s: %s\n", dev->name, __func__);
+ netdev_dbg(dev, "%s\n", __func__);
/*
* Check that the address is valid. If its not, refuse
@@ -1397,7 +1395,7 @@ static int bfin_mac_open(struct net_device *dev)
* address using ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx
*/
if (!is_valid_ether_addr(dev->dev_addr)) {
- printk(KERN_WARNING DRV_NAME ": no valid ethernet hw addr\n");
+ netdev_warn(dev, "no valid ethernet hw addr\n");
return -EINVAL;
}
@@ -1415,7 +1413,7 @@ static int bfin_mac_open(struct net_device *dev)
ret = bfin_mac_enable();
if (ret)
return ret;
- pr_debug("hardware init finished\n");
+ netdev_dbg(dev, "hardware init finished\n");
netif_start_queue(dev);
netif_carrier_on(dev);
@@ -1431,7 +1429,7 @@ static int bfin_mac_open(struct net_device *dev)
static int bfin_mac_close(struct net_device *dev)
{
struct bfin_mac_local *lp = netdev_priv(dev);
- pr_debug("%s: %s\n", dev->name, __func__);
+ netdev_dbg(dev, "%s\n", __func__);
netif_stop_queue(dev);
netif_carrier_off(dev);
--
1.7.2.19.g9a302
^ permalink raw reply related
* Is it a possible bug in dev_gro_receive()?
From: Xin Xiaohui @ 2010-07-30 1:54 UTC (permalink / raw)
To: netdev, herbert, davem; +Cc: Xin Xiaohui
I looked into the code dev_gro_receive(), found the code here:
if the frags[0] is pulled to 0, then the page will be released,
and memmove() frags left.
Is that right? I'm not sure if memmove do right or not, but
frags[0].size is never set after memove at least. what I think
a simple way is not to do anything if we found frags[0].size == 0.
The patch is as followed.
Or am I missing something here?
---
net/core/dev.c | 7 -------
1 files changed, 0 insertions(+), 7 deletions(-)
diff --git a/net/core/dev.c b/net/core/dev.c
index 264137f..28cdbbf 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2730,13 +2730,6 @@ pull:
skb_shinfo(skb)->frags[0].page_offset += grow;
skb_shinfo(skb)->frags[0].size -= grow;
-
- if (unlikely(!skb_shinfo(skb)->frags[0].size)) {
- put_page(skb_shinfo(skb)->frags[0].page);
- memmove(skb_shinfo(skb)->frags,
- skb_shinfo(skb)->frags + 1,
- --skb_shinfo(skb)->nr_frags);
- }
}
ok:
--
1.5.4.4
^ permalink raw reply related
* Re: [PATCH net-next 3/3] drivers/net/bfin_mac.c: Misc function cleanups, neatening
From: Mike Frysinger @ 2010-07-30 0:18 UTC (permalink / raw)
To: Joe Perches; +Cc: Michael Hennerich, uclinux-dist-devel, netdev, linux-kernel
In-Reply-To: <e90ce59d7dcbbdb24e1882a4e99b0c3db2bd116a.1280447281.git.joe@perches.com>
On Thu, Jul 29, 2010 at 19:58, Joe Perches wrote:
> Use new bfin_alloc_skb to centralize skb allocations
> Add and use get_mac_addr function
> Neaten bfin_mac_init
> Neaten bfin_mac_hard_start_xmit
i'll ack the idea, but i think it better i pull these patches into the
Blackfin repo to get some real hardware testing before i forward them
back to David/netdev ...
that OK with you ?
-mike
^ permalink raw reply
* Re: [PATCH net-next 2/3] drivers/net/bfin_mac.c: Use pr_<level>, netdev_<level>
From: Mike Frysinger @ 2010-07-30 0:17 UTC (permalink / raw)
To: Joe Perches; +Cc: Michael Hennerich, uclinux-dist-devel, netdev, linux-kernel
In-Reply-To: <61ca890fdbff3397e15328685ba6d86eaabf8fec.1280447281.git.joe@perches.com>
On Thu, Jul 29, 2010 at 19:58, Joe Perches wrote:
> Add and use pr_fmt, pr_<level> and netdev_<level>
your changelog says add pr_fmt, but i dont see it in the patch ...
> @@ -833,8 +830,7 @@ static void bfin_tx_hwtstamp(struct net_device *netdev, struct sk_buff *skb)
> (--timeout_cnt))
> udelay(1);
> if (timeout_cnt == 0)
> - printk(KERN_ERR DRV_NAME
> - ": fails to timestamp the TX packet\n");
> + pr_err("failed to timestamp the TX packet\n");
this func has a net_device, so cant you use netdev_err here ?
> @@ -1102,8 +1097,7 @@ static void bfin_mac_rx(struct net_device *dev)
>
> new_skb = dev_alloc_skb(PKT_BUF_SZ + NET_IP_ALIGN);
> if (!new_skb) {
> - printk(KERN_NOTICE DRV_NAME
> - ": rx: low on mem - packet dropped\n");
> + pr_notice("rx: low on mem - packet dropped\n");
same here
otherwise this patch looks good
-mike
^ permalink raw reply
* [PATCH] act_nat: the checksum of ICMP doesn't have pseudo header
From: Changli Gao @ 2010-07-30 0:04 UTC (permalink / raw)
To: Herbert Xu
Cc: Jamal Hadi Salim, David S. Miller, netdev, linux-kernel,
Changli Gao
after updating the value of the ICMP payload, inet_proto_csum_replace4() should
be called with zero pseudohdr.
Signed-off-by: Changli Gao <xiaosuo@gmail.com>
----
net/sched/act_nat.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/sched/act_nat.c b/net/sched/act_nat.c
index 24e614c..59f05ee 100644
--- a/net/sched/act_nat.c
+++ b/net/sched/act_nat.c
@@ -246,7 +246,7 @@ static int tcf_nat(struct sk_buff *skb, struct tc_action *a,
iph->saddr = new_addr;
inet_proto_csum_replace4(&icmph->checksum, skb, addr, new_addr,
- 1);
+ 0);
break;
}
default:
^ permalink raw reply related
* [PATCH net-next 1/3] drivers/net/bfin_mac.c: Neatening
From: Joe Perches @ 2010-07-29 23:58 UTC (permalink / raw)
To: Michael Hennerich
Cc: Mike Frysinger, uclinux-dist-devel, netdev, linux-kernel
In-Reply-To: <cover.1280447281.git.joe@perches.com>
80 column fixes
Spelling/typo corrections
Argument alignment
checkpatch clean
Signed-off-by: Joe Perches <joe@perches.com>
---
drivers/net/bfin_mac.c | 204 ++++++++++++++++++++++++++----------------------
1 files changed, 112 insertions(+), 92 deletions(-)
diff --git a/drivers/net/bfin_mac.c b/drivers/net/bfin_mac.c
index 012613f..0b032a5 100644
--- a/drivers/net/bfin_mac.c
+++ b/drivers/net/bfin_mac.c
@@ -132,14 +132,14 @@ static int desc_list_init(void)
#endif
tx_desc = bfin_mac_alloc(&dma_handle,
- sizeof(struct net_dma_desc_tx) *
- CONFIG_BFIN_TX_DESC_NUM);
+ sizeof(struct net_dma_desc_tx) *
+ CONFIG_BFIN_TX_DESC_NUM);
if (tx_desc == NULL)
goto init_error;
rx_desc = bfin_mac_alloc(&dma_handle,
- sizeof(struct net_dma_desc_rx) *
- CONFIG_BFIN_RX_DESC_NUM);
+ sizeof(struct net_dma_desc_rx) *
+ CONFIG_BFIN_RX_DESC_NUM);
if (rx_desc == NULL)
goto init_error;
@@ -200,8 +200,9 @@ static int desc_list_init(void)
goto init_error;
}
skb_reserve(new_skb, NET_IP_ALIGN);
- /* Invidate the data cache of skb->data range when it is write back
- * cache. It will prevent overwritting the new data from DMA
+ /* Invalidate the data cache of skb->data range when it is
+ * write back cache.
+ * It will prevent overwriting the new data from DMA
*/
blackfin_dcache_invalidate_range((unsigned long)new_skb->head,
(unsigned long)new_skb->end);
@@ -229,8 +230,8 @@ static int desc_list_init(void)
* 6 half words is desc size
* large desc flow
*/
- b->config = DMAEN | WNR | WDSIZE_32 | DI_EN |
- NDSIZE_6 | DMAFLOW_LARGE;
+ b->config = (DMAEN | WNR | WDSIZE_32 | DI_EN |
+ NDSIZE_6 | DMAFLOW_LARGE);
b->start_addr = (unsigned long)(&(r->status));
b->x_count = 0;
@@ -284,15 +285,15 @@ static int bfin_mdiobus_read(struct mii_bus *bus, int phy_addr, int regnum)
return ret;
/* read mode */
- bfin_write_EMAC_STAADD(SET_PHYAD((u16) phy_addr) |
- SET_REGAD((u16) regnum) |
- STABUSY);
+ bfin_write_EMAC_STAADD((SET_PHYAD((u16)phy_addr) |
+ SET_REGAD((u16)regnum) |
+ STABUSY));
ret = bfin_mdio_poll();
if (ret)
return ret;
- return (int) bfin_read_EMAC_STADAT();
+ return (int)bfin_read_EMAC_STADAT();
}
/* Write an off-chip register in a PHY through the MDC/MDIO port */
@@ -308,10 +309,10 @@ static int bfin_mdiobus_write(struct mii_bus *bus, int phy_addr, int regnum,
bfin_write_EMAC_STADAT((u32) value);
/* write mode */
- bfin_write_EMAC_STAADD(SET_PHYAD((u16) phy_addr) |
- SET_REGAD((u16) regnum) |
+ bfin_write_EMAC_STAADD((SET_PHYAD((u16)phy_addr) |
+ SET_REGAD((u16)regnum) |
STAOP |
- STABUSY);
+ STABUSY));
return bfin_mdio_poll();
}
@@ -421,7 +422,7 @@ static int mii_probe(struct net_device *dev)
break; /* found it */
}
- /* now we are supposed to have a proper phydev, to attach to... */
+ /* now we are supposed to have a proper phydev to attach to... */
if (!phydev) {
printk(KERN_INFO "%s: Don't found any phy device at all\n",
dev->name);
@@ -430,10 +431,10 @@ static int mii_probe(struct net_device *dev)
#if defined(CONFIG_BFIN_MAC_RMII)
phydev = phy_connect(dev, dev_name(&phydev->dev), &bfin_mac_adjust_link,
- 0, PHY_INTERFACE_MODE_RMII);
+ 0, PHY_INTERFACE_MODE_RMII);
#else
phydev = phy_connect(dev, dev_name(&phydev->dev), &bfin_mac_adjust_link,
- 0, PHY_INTERFACE_MODE_MII);
+ 0, PHY_INTERFACE_MODE_MII);
#endif
if (IS_ERR(phydev)) {
@@ -442,14 +443,15 @@ static int mii_probe(struct net_device *dev)
}
/* mask with MAC supported features */
- phydev->supported &= (SUPPORTED_10baseT_Half
- | SUPPORTED_10baseT_Full
- | SUPPORTED_100baseT_Half
- | SUPPORTED_100baseT_Full
- | SUPPORTED_Autoneg
- | SUPPORTED_Pause | SUPPORTED_Asym_Pause
- | SUPPORTED_MII
- | SUPPORTED_TP);
+ phydev->supported &= (SUPPORTED_10baseT_Half |
+ SUPPORTED_10baseT_Full |
+ SUPPORTED_100baseT_Half |
+ SUPPORTED_100baseT_Full |
+ SUPPORTED_Autoneg |
+ SUPPORTED_Pause |
+ SUPPORTED_Asym_Pause |
+ SUPPORTED_MII |
+ SUPPORTED_TP);
phydev->advertising = phydev->supported;
@@ -514,7 +516,7 @@ static void bfin_mac_ethtool_getdrvinfo(struct net_device *dev,
}
static void bfin_mac_ethtool_getwol(struct net_device *dev,
- struct ethtool_wolinfo *wolinfo)
+ struct ethtool_wolinfo *wolinfo)
{
struct bfin_mac_local *lp = netdev_priv(dev);
@@ -523,7 +525,7 @@ static void bfin_mac_ethtool_getwol(struct net_device *dev,
}
static int bfin_mac_ethtool_setwol(struct net_device *dev,
- struct ethtool_wolinfo *wolinfo)
+ struct ethtool_wolinfo *wolinfo)
{
struct bfin_mac_local *lp = netdev_priv(dev);
int rc;
@@ -601,8 +603,8 @@ void setup_system_regs(struct net_device *dev)
static void setup_mac_addr(u8 *mac_addr)
{
- u32 addr_low = le32_to_cpu(*(__le32 *) & mac_addr[0]);
- u16 addr_hi = le16_to_cpu(*(__le16 *) & mac_addr[4]);
+ u32 addr_low = le32_to_cpu(*(__le32 *)&mac_addr[0]);
+ u16 addr_hi = le16_to_cpu(*(__le16 *)&mac_addr[4]);
/* this depends on a little-endian machine */
bfin_write_EMAC_ADDRLO(addr_low);
@@ -612,6 +614,7 @@ static void setup_mac_addr(u8 *mac_addr)
static int bfin_mac_set_mac_address(struct net_device *dev, void *p)
{
struct sockaddr *addr = p;
+
if (netif_running(dev))
return -EBUSY;
memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
@@ -623,7 +626,7 @@ static int bfin_mac_set_mac_address(struct net_device *dev, void *p)
#define bfin_mac_hwtstamp_is_none(cfg) ((cfg) == HWTSTAMP_FILTER_NONE)
static int bfin_mac_hwtstamp_ioctl(struct net_device *netdev,
- struct ifreq *ifr, int cmd)
+ struct ifreq *ifr, int cmd)
{
struct hwtstamp_config config;
struct bfin_mac_local *lp = netdev_priv(netdev);
@@ -634,14 +637,14 @@ static int bfin_mac_hwtstamp_ioctl(struct net_device *netdev,
return -EFAULT;
pr_debug("%s config flag:0x%x, tx_type:0x%x, rx_filter:0x%x\n",
- __func__, config.flags, config.tx_type, config.rx_filter);
+ __func__, config.flags, config.tx_type, config.rx_filter);
/* reserved for future extensions */
if (config.flags)
return -EINVAL;
if ((config.tx_type != HWTSTAMP_TX_OFF) &&
- (config.tx_type != HWTSTAMP_TX_ON))
+ (config.tx_type != HWTSTAMP_TX_ON))
return -ERANGE;
ptpctl = bfin_read_EMAC_PTP_CTL();
@@ -658,7 +661,8 @@ static int bfin_mac_hwtstamp_ioctl(struct net_device *netdev,
case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
/*
- * Clear the five comparison mask bits (bits[12:8]) in EMAC_PTP_CTL)
+ * Clear the five comparison mask bits
+ * (bits[12:8] in EMAC_PTP_CTL)
* to enable all the field matches.
*/
ptpctl &= ~0x1F00;
@@ -694,8 +698,8 @@ static int bfin_mac_hwtstamp_ioctl(struct net_device *netdev,
ptpctl &= ~0x1F00;
bfin_write_EMAC_PTP_CTL(ptpctl);
/*
- * Keep the default values of the EMAC_PTP_FOFF register, except set
- * the PTPCOF field to 0x2A.
+ * Keep the default values of the EMAC_PTP_FOFF register,
+ * except set the PTPCOF field to 0x2A.
*/
ptpfoff = 0x2A24170C;
bfin_write_EMAC_PTP_FOFF(ptpfoff);
@@ -720,20 +724,20 @@ static int bfin_mac_hwtstamp_ioctl(struct net_device *netdev,
case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
/*
- * Clear bits 8 and 12 of the EMAC_PTP_CTL register to enable only the
- * EFTM and PTPCM field comparison.
+ * Clear bits 8 and 12 of the EMAC_PTP_CTL register to enable
+ * only the EFTM and PTPCM field comparison.
*/
ptpctl &= ~0x1100;
bfin_write_EMAC_PTP_CTL(ptpctl);
/*
- * Keep the default values of all the fields of the EMAC_PTP_FOFF
- * register, except set the PTPCOF field to 0x0E.
+ * Keep the default values of all the fields of the
+ * EMAC_PTP_FOFF register, except set the PTPCOF field to 0x0E.
*/
ptpfoff = 0x0E24170C;
bfin_write_EMAC_PTP_FOFF(ptpfoff);
/*
- * Program bits [15:0] of the EMAC_PTP_FV1 register to 0x88F7, which
- * corresponds to PTP messages on the MAC layer.
+ * Program bits [15:0] of the EMAC_PTP_FV1 register to 0x88F7,
+ * which corresponds to PTP messages on the MAC layer.
*/
ptpfv1 = 0x110488F7;
bfin_write_EMAC_PTP_FV1(ptpfv1);
@@ -780,24 +784,29 @@ static int bfin_mac_hwtstamp_ioctl(struct net_device *netdev,
SSYNC();
lp->compare.last_update = 0;
- timecounter_init(&lp->clock,
- &lp->cycles,
- ktime_to_ns(ktime_get_real()));
+ timecounter_init(&lp->clock, &lp->cycles,
+ ktime_to_ns(ktime_get_real()));
timecompare_update(&lp->compare, 0);
}
lp->stamp_cfg = config;
- return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ?
- -EFAULT : 0;
+ if (copy_to_user(ifr->ifr_data, &config, sizeof(config)))
+ return -EFAULT;
+
+ return 0;
}
-static void bfin_dump_hwtamp(char *s, ktime_t *hw, ktime_t *ts, struct timecompare *cmp)
+static void bfin_dump_hwtamp(char *s, ktime_t *hw, ktime_t *ts,
+ struct timecompare *cmp)
{
ktime_t sys = ktime_get_real();
pr_debug("%s %s hardware:%d,%d transform system:%d,%d system:%d,%d, cmp:%lld, %lld\n",
- __func__, s, hw->tv.sec, hw->tv.nsec, ts->tv.sec, ts->tv.nsec, sys.tv.sec,
- sys.tv.nsec, cmp->offset, cmp->skew);
+ __func__, s,
+ hw->tv.sec, hw->tv.nsec,
+ ts->tv.sec, ts->tv.nsec,
+ sys.tv.sec, sys.tv.nsec,
+ cmp->offset, cmp->skew);
}
static void bfin_tx_hwtstamp(struct net_device *netdev, struct sk_buff *skb)
@@ -814,12 +823,14 @@ static void bfin_tx_hwtstamp(struct net_device *netdev, struct sk_buff *skb)
shtx->in_progress = 1;
/*
- * The timestamping is done at the EMAC module's MII/RMII interface
- * when the module sees the Start of Frame of an event message packet. This
- * interface is the closest possible place to the physical Ethernet transmission
+ * The timestamping is done at the EMAC module's MII/RMII
+ * interface when the module sees the Start of Frame of an
+ * event message packet. This interface is the closest
+ * possible place to the physical Ethernet transmission
* medium, providing the best timing accuracy.
*/
- while ((!(bfin_read_EMAC_PTP_ISTAT() & TXTL)) && (--timeout_cnt))
+ while ((!(bfin_read_EMAC_PTP_ISTAT() & TXTL)) &&
+ (--timeout_cnt))
udelay(1);
if (timeout_cnt == 0)
printk(KERN_ERR DRV_NAME
@@ -832,15 +843,15 @@ static void bfin_tx_hwtstamp(struct net_device *netdev, struct sk_buff *skb)
regval = bfin_read_EMAC_PTP_TXSNAPLO();
regval |= (u64)bfin_read_EMAC_PTP_TXSNAPHI() << 32;
memset(&shhwtstamps, 0, sizeof(shhwtstamps));
- ns = timecounter_cyc2time(&lp->clock,
- regval);
+ ns = timecounter_cyc2time(&lp->clock, regval);
timecompare_update(&lp->compare, ns);
shhwtstamps.hwtstamp = ns_to_ktime(ns);
shhwtstamps.syststamp =
timecompare_transform(&lp->compare, ns);
skb_tstamp_tx(skb, &shhwtstamps);
- bfin_dump_hwtamp("TX", &shhwtstamps.hwtstamp, &shhwtstamps.syststamp, &lp->compare);
+ bfin_dump_hwtamp("TX", &shhwtstamps.hwtstamp,
+ &shhwtstamps.syststamp, &lp->compare);
}
}
}
@@ -869,7 +880,8 @@ static void bfin_rx_hwtstamp(struct net_device *netdev, struct sk_buff *skb)
shhwtstamps->hwtstamp = ns_to_ktime(ns);
shhwtstamps->syststamp = timecompare_transform(&lp->compare, ns);
- bfin_dump_hwtamp("RX", &shhwtstamps->hwtstamp, &shhwtstamps->syststamp, &lp->compare);
+ bfin_dump_hwtamp("RX", &shhwtstamps->hwtstamp,
+ &shhwtstamps->syststamp, &lp->compare);
}
/*
@@ -879,8 +891,8 @@ static cycle_t bfin_read_clock(const struct cyclecounter *tc)
{
u64 stamp;
- stamp = bfin_read_EMAC_PTP_TIMELO();
- stamp |= (u64)bfin_read_EMAC_PTP_TIMEHI() << 32ULL;
+ stamp = bfin_read_EMAC_PTP_TIMELO();
+ stamp |= ((u64)bfin_read_EMAC_PTP_TIMEHI()) << 32;
return stamp;
}
@@ -961,7 +973,7 @@ static void tx_reclaim_skb(struct bfin_mac_local *lp)
}
if (current_tx_ptr->next != tx_list_head &&
- netif_queue_stopped(lp->ndev))
+ netif_queue_stopped(lp->ndev))
netif_wake_queue(lp->ndev);
if (tx_list_head != current_tx_ptr) {
@@ -974,10 +986,8 @@ static void tx_reclaim_skb(struct bfin_mac_local *lp)
jiffies + TX_RECLAIM_JIFFIES;
mod_timer(&lp->tx_reclaim_timer,
- lp->tx_reclaim_timer.expires);
+ lp->tx_reclaim_timer.expires);
}
-
- return;
}
static void tx_reclaim_skb_timeout(unsigned long lp)
@@ -985,8 +995,7 @@ static void tx_reclaim_skb_timeout(unsigned long lp)
tx_reclaim_skb((struct bfin_mac_local *)lp);
}
-static int bfin_mac_hard_start_xmit(struct sk_buff *skb,
- struct net_device *dev)
+static int bfin_mac_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
{
struct bfin_mac_local *lp = netdev_priv(dev);
u16 *data;
@@ -1000,10 +1009,11 @@ static int bfin_mac_hard_start_xmit(struct sk_buff *skb,
data = (u16 *)(skb->data) - 1;
*data = (u16)(skb->len);
/*
- * When transmitting an Ethernet packet, the PTP_TSYNC module requires
- * a DMA_Length_Word field associated with the packet. The lower 12 bits
- * of this field are the length of the packet payload in bytes and the higher
- * 4 bits are the timestamping enable field.
+ * When transmitting an Ethernet packet, the PTP_TSYNC module
+ * requires a DMA_Length_Word field associated with the packet.
+ * The lower 12 bits of this field are the length of the packet
+ * payload in bytes and the higher 4 bits are the timestamping
+ * enable field.
*/
if (shtx->hardware)
*data |= 0x1000;
@@ -1011,7 +1021,7 @@ static int bfin_mac_hard_start_xmit(struct sk_buff *skb,
current_tx_ptr->desc_a.start_addr = (u32)data;
/* this is important! */
blackfin_dcache_flush_range((u32)data,
- (u32)((u8 *)data + skb->len + 4));
+ (u32)((u8 *)data + skb->len + 4));
} else {
*((u16 *)(current_tx_ptr->packet)) = (u16)(skb->len);
/* enable timestamping for the sent packet */
@@ -1026,7 +1036,8 @@ static int bfin_mac_hard_start_xmit(struct sk_buff *skb,
(u32)(current_tx_ptr->packet + skb->len + 2));
}
- /* make sure the internal data buffers in the core are drained
+ /*
+ * Make sure the internal data buffers in the core are drained
* so that the DMA descriptors are completely written when the
* DMA engine goes to fetch them below
*/
@@ -1063,7 +1074,8 @@ out:
#define IP_HEADER_OFF 0
#define RX_ERROR_MASK (RX_LONG | RX_ALIGN | RX_CRC | RX_LEN | \
- RX_FRAG | RX_ADDR | RX_DMAO | RX_PHY | RX_LATE | RX_RANGE)
+ RX_FRAG | RX_ADDR | RX_DMAO | RX_PHY | \
+ RX_LATE | RX_RANGE)
static void bfin_mac_rx(struct net_device *dev)
{
@@ -1097,8 +1109,9 @@ static void bfin_mac_rx(struct net_device *dev)
}
/* reserve 2 bytes for RXDWA padding */
skb_reserve(new_skb, NET_IP_ALIGN);
- /* Invidate the data cache of skb->data range when it is write back
- * cache. It will prevent overwritting the new data from DMA
+ /*
+ * Invalidate the data cache of skb->data range when it is write back
+ * cache. It will prevent overwriting the new data from DMA
*/
blackfin_dcache_invalidate_range((unsigned long)new_skb->head,
(unsigned long)new_skb->end);
@@ -1116,25 +1129,29 @@ static void bfin_mac_rx(struct net_device *dev)
bfin_rx_hwtstamp(dev, skb);
#if defined(BFIN_MAC_CSUM_OFFLOAD)
- /* Checksum offloading only works for IPv4 packets with the standard IP header
- * length of 20 bytes, because the blackfin MAC checksum calculation is
- * based on that assumption. We must NOT use the calculated checksum if our
- * IP version or header break that assumption.
+ /*
+ * Checksum offloading only works for IPv4 packets with the standard
+ * IP header length of 20 bytes, because the blackfin MAC checksum
+ * calculation is based on that assumption. We must NOT use the
+ * calculated checksum if our IP version or header break that
+ * assumption.
*/
if (skb->data[IP_HEADER_OFF] == 0x45) {
skb->csum = current_rx_ptr->status.ip_payload_csum;
/*
- * Deduce Ethernet FCS from hardware generated IP payload checksum.
- * IP checksum is based on 16-bit one's complement algorithm.
- * To deduce a value from checksum is equal to add its inversion.
- * If the IP payload len is odd, the inversed FCS should also
- * begin from odd address and leave first byte zero.
+ * Deduce Ethernet FCS from hardware generated IP payload
+ * checksum. IP checksum is based on 16-bit one's complement
+ * algorithm. To deduce a value from checksum is equal to
+ * add its inversion. If the IP payload len is odd, the
+ * inversed FCS should also begin from odd address and leave
+ * first byte zero.
*/
if (skb->len % 2) {
fcs[0] = 0;
for (i = 0; i < ETH_FCS_LEN; i++)
fcs[i + 1] = ~skb->data[skb->len + i];
- skb->csum = csum_partial(fcs, ETH_FCS_LEN + 1, skb->csum);
+ skb->csum = csum_partial(fcs, ETH_FCS_LEN + 1,
+ skb->csum);
} else {
for (i = 0; i < ETH_FCS_LEN; i++)
fcs[i] = ~skb->data[skb->len + i];
@@ -1465,8 +1482,10 @@ static int __devinit bfin_mac_probe(struct platform_device *pdev)
lp->ndev = ndev;
/* Grab the MAC address in the MAC */
- *(__le32 *) (&(ndev->dev_addr[0])) = cpu_to_le32(bfin_read_EMAC_ADDRLO());
- *(__le16 *) (&(ndev->dev_addr[4])) = cpu_to_le16((u16) bfin_read_EMAC_ADDRHI());
+ *(__le32 *)(&(ndev->dev_addr[0])) =
+ cpu_to_le32(bfin_read_EMAC_ADDRLO());
+ *(__le16 *)(&(ndev->dev_addr[4])) =
+ cpu_to_le16((u16)bfin_read_EMAC_ADDRHI());
/* probe mac */
/*todo: how to proble? which is revision_register */
@@ -1526,8 +1545,8 @@ static int __devinit bfin_mac_probe(struct platform_device *pdev)
/* now, enable interrupts */
/* register irq handler */
- rc = request_irq(IRQ_MAC_RX, bfin_mac_interrupt,
- IRQF_DISABLED, "EMAC_RX", ndev);
+ rc = request_irq(IRQ_MAC_RX, bfin_mac_interrupt, IRQF_DISABLED,
+ "EMAC_RX", ndev);
if (rc) {
dev_err(&pdev->dev, "Cannot request Blackfin MAC RX IRQ!\n");
rc = -EBUSY;
@@ -1647,7 +1666,7 @@ static int __devinit bfin_mii_bus_probe(struct platform_device *pdev)
miibus->parent = &pdev->dev;
miibus->name = "bfin_mii_bus";
snprintf(miibus->id, MII_BUS_ID_SIZE, "0");
- miibus->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
+ miibus->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL);
if (miibus->irq == NULL)
goto out_err_alloc;
for (i = 0; i < PHY_MAX_ADDR; ++i)
@@ -1674,6 +1693,7 @@ out_err_alloc:
static int __devexit bfin_mii_bus_remove(struct platform_device *pdev)
{
struct mii_bus *miibus = platform_get_drvdata(pdev);
+
platform_set_drvdata(pdev, NULL);
mdiobus_unregister(miibus);
kfree(miibus->irq);
@@ -1698,13 +1718,14 @@ static struct platform_driver bfin_mac_driver = {
.suspend = bfin_mac_suspend,
.driver = {
.name = DRV_NAME,
- .owner = THIS_MODULE,
+ .owner = THIS_MODULE,
},
};
static int __init bfin_mac_init(void)
{
int ret;
+
ret = platform_driver_register(&bfin_mii_bus_driver);
if (!ret)
return platform_driver_register(&bfin_mac_driver);
@@ -1720,4 +1741,3 @@ static void __exit bfin_mac_cleanup(void)
}
module_exit(bfin_mac_cleanup);
-
--
1.7.2.19.g9a302
^ permalink raw reply related
* [PATCH net-next 3/3] drivers/net/bfin_mac.c: Misc function cleanups, neatening
From: Joe Perches @ 2010-07-29 23:58 UTC (permalink / raw)
To: Michael Hennerich
Cc: uclinux-dist-devel, linux-kernel-u79uwXL29TY76Z2rM5mHXA,
netdev-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <cover.1280447281.git.joe-6d6DIl74uiNBDgjK7y7TUQ@public.gmane.org>
Use new bfin_alloc_skb to centralize skb allocations
Add and use get_mac_addr function
Neaten bfin_mac_init
Neaten bfin_mac_hard_start_xmit
Signed-off-by: Joe Perches <joe-6d6DIl74uiNBDgjK7y7TUQ@public.gmane.org>
---
drivers/net/bfin_mac.c | 93 ++++++++++++++++++++++++++---------------------
1 files changed, 51 insertions(+), 42 deletions(-)
diff --git a/drivers/net/bfin_mac.c b/drivers/net/bfin_mac.c
index a1d8119..68afb2a 100644
--- a/drivers/net/bfin_mac.c
+++ b/drivers/net/bfin_mac.c
@@ -81,6 +81,26 @@ static u16 pin_req[] = P_RMII0;
static u16 pin_req[] = P_MII0;
#endif
+static struct sk_buff *bfin_alloc_skb(void)
+{
+ /* allocate a new skb */
+ struct sk_buff *new_skb = dev_alloc_skb(PKT_BUF_SZ + NET_IP_ALIGN);
+
+ if (!new_skb)
+ return NULL;
+
+ skb_reserve(new_skb, NET_IP_ALIGN);
+ /*
+ * Invalidate the data cache of skb->data range
+ * when it is write back cache to prevent overwriting
+ * the new data from DMA.
+ */
+ blackfin_dcache_invalidate_range((unsigned long)new_skb->head,
+ (unsigned long)new_skb->end);
+
+ return new_skb;
+}
+
static void desc_list_free(void)
{
struct net_dma_desc_rx *r;
@@ -193,18 +213,12 @@ static int desc_list_init(void)
struct dma_descriptor *b = &(r->desc_b);
/* allocate a new skb for next time receive */
- new_skb = dev_alloc_skb(PKT_BUF_SZ + NET_IP_ALIGN);
+ new_skb = bfin_alloc_skb();
if (!new_skb) {
pr_notice("init: low on mem - packet dropped\n");
goto init_error;
}
- skb_reserve(new_skb, NET_IP_ALIGN);
- /* Invalidate the data cache of skb->data range when it is
- * write back cache.
- * It will prevent overwriting the new data from DMA
- */
- blackfin_dcache_invalidate_range((unsigned long)new_skb->head,
- (unsigned long)new_skb->end);
+
r->skb = new_skb;
/*
@@ -598,6 +612,16 @@ void setup_system_regs(struct net_device *dev)
bfin_write_DMA1_Y_MODIFY(0);
}
+/* Grab the MAC address in the MAC */
+static void get_mac_addr(u8 *mac_addr)
+{
+ __le32 addr_low = cpu_to_le32(bfin_read_EMAC_ADDRLO());
+ __le16 addr_hi = cpu_to_le16((u16)bfin_read_EMAC_ADDRHI());
+
+ memcpy(mac_addr, &addr_low, 4);
+ memcpy(mac_addr + 4, &addr_hi, 2);
+}
+
static void setup_mac_addr(u8 *mac_addr)
{
u32 addr_low = le32_to_cpu(*(__le32 *)&mac_addr[0]);
@@ -994,15 +1018,17 @@ static void tx_reclaim_skb_timeout(unsigned long lp)
static int bfin_mac_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
{
struct bfin_mac_local *lp = netdev_priv(dev);
- u16 *data;
u32 data_align = (unsigned long)(skb->data) & 0x3;
+ unsigned long buf_start;
+ unsigned long buf_len;
union skb_shared_tx *shtx = skb_tx(skb);
current_tx_ptr->skb = skb;
if (data_align == 0x2) {
/* move skb->data to current_tx_ptr payload */
- data = (u16 *)(skb->data) - 1;
+ u16 *data = (u16 *)(skb->data) - 1;
+
*data = (u16)(skb->len);
/*
* When transmitting an Ethernet packet, the PTP_TSYNC module
@@ -1014,23 +1040,21 @@ static int bfin_mac_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
if (shtx->hardware)
*data |= 0x1000;
- current_tx_ptr->desc_a.start_addr = (u32)data;
- /* this is important! */
- blackfin_dcache_flush_range((u32)data,
- (u32)((u8 *)data + skb->len + 4));
+ buf_start = (unsigned long)data;
+ buf_len = skb->len + 4;
} else {
*((u16 *)(current_tx_ptr->packet)) = (u16)(skb->len);
/* enable timestamping for the sent packet */
if (shtx->hardware)
*((u16 *)(current_tx_ptr->packet)) |= 0x1000;
- memcpy((u8 *)(current_tx_ptr->packet + 2), skb->data,
- skb->len);
- current_tx_ptr->desc_a.start_addr =
- (u32)current_tx_ptr->packet;
- blackfin_dcache_flush_range(
- (u32)current_tx_ptr->packet,
- (u32)(current_tx_ptr->packet + skb->len + 2));
+ memcpy(current_tx_ptr->packet + 2, skb->data, skb->len);
+
+ buf_start = (unsigned long)current_tx_ptr->packet;
+ buf_len = skb->len + 2;
}
+ current_tx_ptr->desc_a.start_addr = buf_start;
+ /* this is important! */
+ blackfin_dcache_flush_range(buf_start, buf_start + buf_len);
/*
* Make sure the internal data buffers in the core are drained
@@ -1095,20 +1119,12 @@ static void bfin_mac_rx(struct net_device *dev)
/* allocate a new skb for next time receive */
skb = current_rx_ptr->skb;
- new_skb = dev_alloc_skb(PKT_BUF_SZ + NET_IP_ALIGN);
+ new_skb = bfin_alloc_skb();
if (!new_skb) {
pr_notice("rx: low on mem - packet dropped\n");
dev->stats.rx_dropped++;
goto out;
}
- /* reserve 2 bytes for RXDWA padding */
- skb_reserve(new_skb, NET_IP_ALIGN);
- /*
- * Invalidate the data cache of skb->data range when it is write back
- * cache. It will prevent overwriting the new data from DMA
- */
- blackfin_dcache_invalidate_range((unsigned long)new_skb->head,
- (unsigned long)new_skb->end);
current_rx_ptr->skb = new_skb;
current_rx_ptr->desc_a.start_addr = (unsigned long)new_skb->data - 2;
@@ -1475,14 +1491,10 @@ static int __devinit bfin_mac_probe(struct platform_device *pdev)
lp = netdev_priv(ndev);
lp->ndev = ndev;
- /* Grab the MAC address in the MAC */
- *(__le32 *)(&(ndev->dev_addr[0])) =
- cpu_to_le32(bfin_read_EMAC_ADDRLO());
- *(__le16 *)(&(ndev->dev_addr[4])) =
- cpu_to_le16((u16)bfin_read_EMAC_ADDRHI());
+ get_mac_addr(ndev->dev_addr);
/* probe mac */
- /*todo: how to proble? which is revision_register */
+ /* todo: how to probe? which is revision_register */
bfin_write_EMAC_ADDRLO(0x12345678);
if (bfin_read_EMAC_ADDRLO() != 0x12345678) {
dev_err(&pdev->dev, "Cannot detect Blackfin on-chip ethernet MAC controller!\n");
@@ -1718,12 +1730,9 @@ static struct platform_driver bfin_mac_driver = {
static int __init bfin_mac_init(void)
{
- int ret;
-
- ret = platform_driver_register(&bfin_mii_bus_driver);
- if (!ret)
- return platform_driver_register(&bfin_mac_driver);
- return -ENODEV;
+ if (platform_driver_register(&bfin_mii_bus_driver))
+ return -ENODEV;
+ return platform_driver_register(&bfin_mac_driver);
}
module_init(bfin_mac_init);
--
1.7.2.19.g9a302
^ permalink raw reply related
* [PATCH net-next 2/3] drivers/net/bfin_mac.c: Use pr_<level>, netdev_<level>
From: Joe Perches @ 2010-07-29 23:58 UTC (permalink / raw)
To: Michael Hennerich
Cc: uclinux-dist-devel, linux-kernel-u79uwXL29TY76Z2rM5mHXA,
netdev-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <cover.1280447281.git.joe-6d6DIl74uiNBDgjK7y7TUQ@public.gmane.org>
Add and use pr_fmt, pr_<level> and netdev_<level>
Signed-off-by: Joe Perches <joe-6d6DIl74uiNBDgjK7y7TUQ@public.gmane.org>
---
drivers/net/bfin_mac.c | 56 +++++++++++++++++++++--------------------------
1 files changed, 25 insertions(+), 31 deletions(-)
diff --git a/drivers/net/bfin_mac.c b/drivers/net/bfin_mac.c
index 0b032a5..a1d8119 100644
--- a/drivers/net/bfin_mac.c
+++ b/drivers/net/bfin_mac.c
@@ -195,8 +195,7 @@ static int desc_list_init(void)
/* allocate a new skb for next time receive */
new_skb = dev_alloc_skb(PKT_BUF_SZ + NET_IP_ALIGN);
if (!new_skb) {
- printk(KERN_NOTICE DRV_NAME
- ": init: low on mem - packet dropped\n");
+ pr_notice("init: low on mem - packet dropped\n");
goto init_error;
}
skb_reserve(new_skb, NET_IP_ALIGN);
@@ -247,7 +246,7 @@ static int desc_list_init(void)
init_error:
desc_list_free();
- printk(KERN_ERR DRV_NAME ": kmalloc failed\n");
+ pr_err("kmalloc failed\n");
return -ENOMEM;
}
@@ -264,12 +263,11 @@ static int bfin_mdio_poll(void)
/* poll the STABUSY bit */
while ((bfin_read_EMAC_STAADD()) & STABUSY) {
- udelay(1);
if (timeout_cnt-- < 0) {
- printk(KERN_ERR DRV_NAME
- ": wait MDC/MDIO transaction to complete timeout\n");
+ pr_err("wait MDC/MDIO transaction to complete timeout\n");
return -ETIMEDOUT;
}
+ udelay(1);
}
return 0;
@@ -357,9 +355,9 @@ static void bfin_mac_adjust_link(struct net_device *dev)
opmode &= ~(RMII_10);
break;
default:
- printk(KERN_WARNING
- "%s: Ack! Speed (%d) is not 10/100!\n",
- DRV_NAME, phydev->speed);
+ netdev_warn(dev,
+ "Ack! Speed (%d) is not 10/100!\n",
+ phydev->speed);
break;
}
bfin_write_EMAC_OPMODE(opmode);
@@ -383,7 +381,7 @@ static void bfin_mac_adjust_link(struct net_device *dev)
if (new_state) {
u32 opmode = bfin_read_EMAC_OPMODE();
phy_print_status(phydev);
- pr_debug("EMAC_OPMODE = 0x%08x\n", opmode);
+ netdev_dbg(dev, "EMAC_OPMODE = 0x%08x\n", opmode);
}
spin_unlock_irqrestore(&lp->lock, flags);
@@ -424,8 +422,7 @@ static int mii_probe(struct net_device *dev)
/* now we are supposed to have a proper phydev to attach to... */
if (!phydev) {
- printk(KERN_INFO "%s: Don't found any phy device at all\n",
- dev->name);
+ netdev_info(dev, "No PHY device found\n");
return -ENODEV;
}
@@ -438,7 +435,7 @@ static int mii_probe(struct net_device *dev)
#endif
if (IS_ERR(phydev)) {
- printk(KERN_ERR "%s: Could not attach to PHY\n", dev->name);
+ netdev_err(dev, "Could not attach to PHY\n");
return PTR_ERR(phydev);
}
@@ -460,11 +457,11 @@ static int mii_probe(struct net_device *dev)
lp->old_duplex = -1;
lp->phydev = phydev;
- printk(KERN_INFO "%s: attached PHY driver [%s] "
- "(mii_bus:phy_addr=%s, irq=%d, mdc_clk=%dHz(mdc_div=%d)"
- "@sclk=%dMHz)\n",
- DRV_NAME, phydev->drv->name, dev_name(&phydev->dev), phydev->irq,
- MDC_CLK, mdc_div, sclk/1000000);
+ netdev_info(dev, "attached PHY driver [%s] "
+ "(mii_bus:phy_addr=%s, irq=%d, mdc_clk=%dHz(mdc_div=%d)"
+ "@sclk=%dMHz)\n",
+ phydev->drv->name, dev_name(&phydev->dev), phydev->irq,
+ MDC_CLK, mdc_div, sclk/1000000);
return 0;
}
@@ -833,8 +830,7 @@ static void bfin_tx_hwtstamp(struct net_device *netdev, struct sk_buff *skb)
(--timeout_cnt))
udelay(1);
if (timeout_cnt == 0)
- printk(KERN_ERR DRV_NAME
- ": fails to timestamp the TX packet\n");
+ pr_err("failed to timestamp the TX packet\n");
else {
struct skb_shared_hwtstamps shhwtstamps;
u64 ns;
@@ -1091,8 +1087,7 @@ static void bfin_mac_rx(struct net_device *dev)
* we which case we simply drop the packet
*/
if (current_rx_ptr->status.status_word & RX_ERROR_MASK) {
- printk(KERN_NOTICE DRV_NAME
- ": rx: receive error - packet dropped\n");
+ netdev_notice(dev, "rx: receive error - packet dropped\n");
dev->stats.rx_dropped++;
goto out;
}
@@ -1102,8 +1097,7 @@ static void bfin_mac_rx(struct net_device *dev)
new_skb = dev_alloc_skb(PKT_BUF_SZ + NET_IP_ALIGN);
if (!new_skb) {
- printk(KERN_NOTICE DRV_NAME
- ": rx: low on mem - packet dropped\n");
+ pr_notice("rx: low on mem - packet dropped\n");
dev->stats.rx_dropped++;
goto out;
}
@@ -1226,7 +1220,7 @@ static int bfin_mac_enable(void)
int ret;
u32 opmode;
- pr_debug("%s: %s\n", DRV_NAME, __func__);
+ pr_debug("%s\n", __func__);
/* Set RX DMA */
bfin_write_DMA1_NEXT_DESC_PTR(&(rx_list_head->desc_a));
@@ -1268,7 +1262,7 @@ static void bfin_mac_timeout(struct net_device *dev)
{
struct bfin_mac_local *lp = netdev_priv(dev);
- pr_debug("%s: %s\n", dev->name, __func__);
+ netdev_dbg(dev, "%s\n", __func__);
bfin_mac_disable();
@@ -1335,7 +1329,7 @@ static void bfin_mac_set_multicast_list(struct net_device *dev)
u32 sysctl;
if (dev->flags & IFF_PROMISC) {
- printk(KERN_INFO "%s: set to promisc mode\n", dev->name);
+ netdev_info(dev, "set to promisc mode\n");
sysctl = bfin_read_EMAC_OPMODE();
sysctl |= PR;
bfin_write_EMAC_OPMODE(sysctl);
@@ -1389,7 +1383,7 @@ static int bfin_mac_open(struct net_device *dev)
{
struct bfin_mac_local *lp = netdev_priv(dev);
int ret;
- pr_debug("%s: %s\n", dev->name, __func__);
+ netdev_dbg(dev, "%s\n", __func__);
/*
* Check that the address is valid. If its not, refuse
@@ -1397,7 +1391,7 @@ static int bfin_mac_open(struct net_device *dev)
* address using ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx
*/
if (!is_valid_ether_addr(dev->dev_addr)) {
- printk(KERN_WARNING DRV_NAME ": no valid ethernet hw addr\n");
+ netdev_warn(dev, "no valid ethernet hw addr\n");
return -EINVAL;
}
@@ -1415,7 +1409,7 @@ static int bfin_mac_open(struct net_device *dev)
ret = bfin_mac_enable();
if (ret)
return ret;
- pr_debug("hardware init finished\n");
+ netdev_dbg(dev, "hardware init finished\n");
netif_start_queue(dev);
netif_carrier_on(dev);
@@ -1431,7 +1425,7 @@ static int bfin_mac_open(struct net_device *dev)
static int bfin_mac_close(struct net_device *dev)
{
struct bfin_mac_local *lp = netdev_priv(dev);
- pr_debug("%s: %s\n", dev->name, __func__);
+ netdev_dbg(dev, "%s\n", __func__);
netif_stop_queue(dev);
netif_carrier_off(dev);
--
1.7.2.19.g9a302
^ permalink raw reply related
* [PATCH net-next 0/3] drivers/net/bfin_mac.c: Neatening
From: Joe Perches @ 2010-07-29 23:58 UTC (permalink / raw)
To: Michael Hennerich
Cc: Mike Frysinger, uclinux-dist-devel, netdev, linux-kernel
Ho-hum, broken up into pieces just for Mike Frysinger.
Still uncompiled, untested
Joe Perches (3):
drivers/net/bfin_mac.c: Neatening
drivers/net/bfin_mac.c: Use pr_<level>, netdev_<level>
drivers/net/bfin_mac.c: Misc function cleanups, neatening
drivers/net/bfin_mac.c | 329 ++++++++++++++++++++++++++----------------------
1 files changed, 176 insertions(+), 153 deletions(-)
--
1.7.2.19.g9a302
^ permalink raw reply
* Re: [RFC PATCH v8 00/16] Provide a zero-copy method on KVM virtio-net.
From: Shirley Ma @ 2010-07-29 22:31 UTC (permalink / raw)
To: xiaohui.xin; +Cc: netdev, kvm, linux-kernel, mst, mingo, davem, herbert, jdike
In-Reply-To: <1280402088-5849-1-git-send-email-xiaohui.xin@intel.com>
Hello Xiaohui,
On Thu, 2010-07-29 at 19:14 +0800, xiaohui.xin@intel.com wrote:
> The idea is simple, just to pin the guest VM user space and then
> let host NIC driver has the chance to directly DMA to it.
> The patches are based on vhost-net backend driver. We add a device
> which provides proto_ops as sendmsg/recvmsg to vhost-net to
> send/recv directly to/from the NIC driver. KVM guest who use the
> vhost-net backend may bind any ethX interface in the host side to
> get copyless data transfer thru guest virtio-net frontend.
Since vhost-net already supports macvtap/tun backends, do you think
whether it's better to implement zero copy in macvtap/tun than inducing
a new media passthrough device here?
> Our goal is to improve the bandwidth and reduce the CPU usage.
> Exact performance data will be provided later.
I did some vhost performance measurement over 10Gb ixgbe, and found that
in order to get consistent BW results, netperf/netserver, qemu, vhost
threads smp affinities are required.
Looking forward to these results for small message size comparison. For
large message size 10Gb ixgbe BW already reached by doing vhost smp
affinity w/i offloading support, we will see how much CPU utilization it
can be reduced.
Please provide latency results as well. I did some experimental on
macvtap zero copy sendmsg, what I have found that get_user_pages latency
pretty high.
Thanks
Shirley
^ permalink raw reply
* pull request: wireless-next-2.6 2010-07-29
From: John W. Linville @ 2010-07-29 19:12 UTC (permalink / raw)
To: davem-fT/PcQaiUtIeIZ0/mPfg9Q
Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA,
netdev-u79uwXL29TY76Z2rM5mHXA
Dave,
Yet another slew of changes intended for 2.6.36...
For the first time, this pull request includes a batch of bluetooth
stuff by way of Marcel. Some upcoming developments are likely to
require more extensive integration between 802.11 and Bluetooth bits, so
Marcel's tree will be feeding wireless-next-2.6 for a while.
The rest is the usual stuff from the usual suspects -- mostly driver
updates with the usual strong showings from ath9k and iwlwifi, this time
joined by libertas in particular.
This is a "for-davem" branch, so hopefully there will be no pain for you
to pull this time. :-)
Please let me know if there are problems!
John
---
The following changes since commit 7f3e01fee41a322747db2d7574516d9fbd3785c0:
net: bnx2x_cmn.c needs net/ip6_checksum.h for csum_ipv6_magic (2010-07-28 22:20:34 -0700)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6.git for-davem
Amitkumar Karwar (1):
Bluetooth: Process interrupt in main thread of btmrvl driver as well
Christian Lamparter (1):
cfg80211: fix dev <-> wiphy typo
Cyril Lacoux (1):
Bluetooth: Added support for controller shipped with iMac i5
Dan Carpenter (6):
ath9k: snprintf() returns largish values
ath5k: snprintf() returns largish values
mac80211: freeing the wrong variable
wireless: remove unneeded variable from regulatory_hint_11d()
libertas: precedence bug
Bluetooth: Fix kfree() => kfree_skb() in hci_ath.c
Dan Williams (16):
libertas: clean up MONITOR_MODE command
libertas: clean up RSSI command
libertas: convert 11D_DOMAIN_INFO to a direct command
libertas: remove unused indirect TPC_CFG command leftovers
libertas: remove unused Automatic Frequency Control command
libertas: remove Beacon Control
libertas: convert LED_GPIO_CTRL to a direct command
libertas: convert register access to direct commands
libertas: convert Mesh Blinding Table access to a direct command
libertas: convert CMD_FWT_ACCESS to a direct command
libertas: remove unused indirect command response handler
libertas: convert PS_MODE to a direct command
libertas: convert DEEP_SLEEP timer to a direct command
libertas: kill unused lbs_prepare_and_send_command()
libertas: rename lbs_get_cmd_ctrl_node() to lbs_get_free_cmd_node()
libertas: remove unused cmd_pending waitq
Felix Fietkau (5):
ath9k: fix yet another buffer leak in the tx aggregation code
ath9k_hw: fix invalid extension channel noisefloor readings in HT20
ath9k_hw: fix a small typo in the noisefloor calibration debug code
ath9k_hw: simplify noisefloor calibration chainmask calculation
mac80211: inform drivers about the off-channel status on channel changes
Gustavo F. Padovan (44):
Bluetooth: Remove max_tx and tx_window module paramenters from L2CAP
Bluetooth: Remove L2CAP Extended Features from Kconfig
Bluetooth: Fix drop of packets with invalid req_seq/tx_seq
Bluetooth: Fix bug with ERTM vars increment
Bluetooth: Only check SAR bits if frame is an I-frame
Bluetooth: Fix bug in l2cap_ertm_send() behavior
Bluetooth: Proper shutdown ERTM when closing the channel
Bluetooth: Fix L2CAP control bit field corruption
Bluetooth: Stop ack_timer if ERTM enters in Local Busy or SREJ_SENT
Bluetooth: Update buffer_seq before retransmit frames
Bluetooth: Fix handle of received P-bit
Bluetooth: Check the tx_window size on setsockopt
Bluetooth: Check packet FCS earlier
Bluetooth: Fix missing retransmission action with RR(P=1)
Bluetooth: Fix ERTM error reporting to the userspace
Bluetooth: Add debug output to ERTM code
Bluetooth: Tweaks to l2cap_send_i_or_rr_or_rnr() flow
Bluetooth: Change the way we set ERTM mode as mandatory
Bluetooth: Disconnect the channel if we don't want the proposed mode
Bluetooth: Prefer Basic Mode on receipt of ConfigReq
Bluetooth: Actively send request for Basic Mode
Bluetooth: Refuse ConfigRsp with different mode
Bluetooth: Remove check for supported mode
Bluetooth: Disconnect early if mode is not supported
Bluetooth: Don't accept ConfigReq if we aren't in the BT_CONFIG state
Bluetooth: Remove the send_lock spinlock from ERTM
Bluetooth: Add backlog queue to ERTM code
Bluetooth: Improve ERTM local busy handling
Bluetooth: Send ConfigReq after send a ConnectionRsp
Bluetooth: Fix bug in kzalloc allocation size
Bluetooth: Keep code under column 80
Bluetooth: Add Copyright notice to L2CAP
Bluetooth: Update L2CAP version information
Bluetooth: Add Google's copyright to L2CAP
Bluetooth: Move bit-field variable in USB driver to data->flags
Bluetooth: Fix typo in hci_event.c
Bluetooth: Enable L2CAP Extended features by default
Bluetooth: Use __packed annotation
Bluetooth: Use __packed annotation for drivers
Bluetooth: Fix permission of hci_ath.c
Bluetooth: Test 'count' value before enter the loop
Bluetooth: Use hci_recv_stream_fragment() in UART driver
Bluetooth: Add __init and __exit marks to UART drivers
Bluetooth: Add __init and __exit marks to RFCOMM
Ivo van Doorn (1):
rt2x00: Fix regression for rt2500pci
Joe Perches (5):
Bluetooth: Remove unnecessary casts of private_data in drivers
include/net/cfg80211.h: Add wiphy_<level> printk equivalents
drivers/net/wireless: Use wiphy_<level>
drivers/net/wireless/at76c50x-usb.c: Neaten macros
wireless: Convert wiphy_debug macro to function
Johan Hedberg (4):
Bluetooth: Add blacklist support for incoming connections
Bluetooth: Add debugfs support for showing the blacklist
Bluetooth: Add missing HCIUARTGETDEVICE ioctl to compat_ioctl.c
Bluetooth: Add HCIUARTSETFLAGS and HCIUARTGETFLAGS ioctls
Johannes Berg (8):
iwlagn: fix firmware loading TLV error path
iwlwifi: make iwl_mac_beacon_update static
iwlwifi: reduce beacon fill conditions
iwlwifi: remove spurious semicolons
mac80211: remove bogus rcu_read_lock()
cfg80211: fix IBSS default management key
mac80211: fix sta assignment
mac80211: allow drivers to request DTIM period
John W. Linville (24):
iwlagn: use __packed on new structure definitions
wl1251: fix sparse-generated warnings
rtl8180: improve signal reporting for actual rtl8180 hardware
rtl8180: silence "dubious: x | !y" sparse warning
MAINTAINERS: mark prism54 obsolete
MAINTAINERS: orphan the raylink wireless driver
MAINTAINERS: orphan the zd1201 wireless driver
MAINTAINERS: remove entry for wavelan
iwlwifi: assume vif is NULL for internal scans and non-NULL otherwise
minstrel_ht: remove unnecessary NULL check in minstrel_ht_update_caps
minstrel: don't complain about feedback for unrequested rates
lib80211: remove unused host_build_iv option
Merge branch 'master' of git://git.kernel.org/.../holtmann/bluetooth-next-2.6
p54: Added get_survey callback in order to get channel noise
Merge branch 'master' of git://git.kernel.org/.../holtmann/bluetooth-next-2.6
ath9k: enable serialize_regmode for non-PCIE AR9160
mwl8k: add get_survey callback in order to get channel noise
ar9170: add get_survey callback in order to get channel noise
wl1251: add get_survey callback in order to get channel noise
libertas_tf: add get_survey callback in order to get channel noise
wl1271: add get_survey callback in order to get channel noise
wl1251: update hw/fw version info in wiphy struct
wl1271: update hw/fw version info in wiphy struct
Merge branch 'master' of git://git.kernel.org/.../linville/wireless-next-2.6 into for-davem
Jouni Malinen (1):
mac80211: Fix key freeing to handle unlinked keys
João Paulo Rechi Vita (8):
Bluetooth: Fix SREJ_QUEUE corruption in L2CAP
Bluetooth: Fix l2cap_sock_connect error return.
Bluetooth: Make l2cap_streaming_send() void.
Bluetooth: Fix error return value on sendmsg.
Bluetooth: Fix error return value on sendmsg.
Bluetooth: Fix error return for l2cap_connect_rsp().
Bluetooth: Fix error value for wrong FCS.
Bluetooth: Fix error return on L2CAP-HCI interface.
Julia Lawall (3):
Bluetooth: Use kmemdup for drivers
Bluetooth: Use kzalloc for drivers
drivers/net/wireless/wl12xx: Use kmemdup
Justin P. Mattock (1):
Bluetooth: Fix warning: variable 'tty' set but not used
Kulikov Vasiliy (1):
Bluetooth: Silence warning in btmrvl SDIO driver
Lennert Buytenhek (1):
mwl8k: change maintenance status
Luis R. Rodriguez (2):
ath9k: remove the two wiphys scanning at the same time message
Revert "mac80211: fix sw scan bracketing"
Marcel Holtmann (1):
Bluetooth: Defer SCO setup if mode change is pending
Nathan Holstein (1):
Bluetooth: Fix bug with ERTM minimum packet length
Ron Shaffer (2):
Bluetooth: Remove extraneous white space
Bluetooth: Reassigned copyright to Code Aurora Forum
Senthil Balasubramanian (4):
ath9k: Introduce bit masks for valid and valid_single_stream.
ath9k: Add three stream rate control support for AR938X.
ath9k: Fix incorrect user ratekbs of MCS15 ShortGI
ath9k: remove unused base_index from rate table.
Stanislaw Gruszka (4):
rt2500usb: write keys to proper registers
rt2500usb: truly disable encryption when initialize
rt2500usb: disallow to set WEP key with non zero index
iwlwifi: fix scan abort
Sujith (1):
mac80211: Don't set per-BSS QoS for monitor interfaces
Suraj Sumangala (5):
Bluetooth: Add one more buffer for HCI stream reassembly
Bluetooth: Implement hci_reassembly helper to reassemble RX packets
Bluetooth: Modified hci_recv_fragment() to use hci_reassembly helper
Bluetooth: Implemented HCI frame reassembly for RX from stream
Bluetooth: Support for Atheros AR300x serial chip
Vasanthakumar Thiagarajan (1):
ath9k: Fix inconsistency between txq->stopped and the actual queue state
Wey-Yi Guy (6):
iwlagn: add statistic notification structure for WiFi/BT devices
iwlagn: add .cfg flag to idenfity the need for bt statistics
iwlagn: Add support for bluetooth statistics notification
iwlagn: add bluetooth stats to debugfs
iwlwifi: add TLV to specify the size of phy calibration table
iwlwifi: read multiple MAC addresses
Yuri Ershov (3):
mac80211: Put some code under MESH macro
nl80211: Fix memory leaks
cfg80211: Update of regulatory request initiator handling
MAINTAINERS | 20 +-
drivers/bluetooth/Kconfig | 12 +
drivers/bluetooth/Makefile | 1 +
drivers/bluetooth/bcm203x.c | 3 +-
drivers/bluetooth/bpa10x.c | 2 +-
drivers/bluetooth/btmrvl_debugfs.c | 2 +-
drivers/bluetooth/btmrvl_drv.h | 5 +-
drivers/bluetooth/btmrvl_main.c | 5 +-
drivers/bluetooth/btmrvl_sdio.c | 111 ++--
drivers/bluetooth/btusb.c | 13 +-
drivers/bluetooth/dtl1_cs.c | 2 +-
drivers/bluetooth/hci_ath.c | 235 ++++++++
drivers/bluetooth/hci_bcsp.c | 4 +-
drivers/bluetooth/hci_h4.c | 107 +----
drivers/bluetooth/hci_ldisc.c | 20 +-
drivers/bluetooth/hci_ll.c | 6 +-
drivers/bluetooth/hci_uart.h | 15 +-
drivers/net/wireless/adm8211.c | 53 +-
drivers/net/wireless/at76c50x-usb.c | 168 +++---
drivers/net/wireless/ath/ar9170/cmd.c | 7 +-
drivers/net/wireless/ath/ar9170/led.c | 4 +-
drivers/net/wireless/ath/ar9170/main.c | 191 ++++---
drivers/net/wireless/ath/ar9170/phy.c | 8 +-
drivers/net/wireless/ath/ath5k/debug.c | 18 +
drivers/net/wireless/ath/ath9k/ahb.c | 7 +-
drivers/net/wireless/ath/ath9k/ar5008_phy.c | 3 +
drivers/net/wireless/ath/ath9k/ar9002_phy.c | 6 +-
drivers/net/wireless/ath/ath9k/ar9003_phy.c | 3 +
drivers/net/wireless/ath/ath9k/ath9k.h | 2 +-
drivers/net/wireless/ath/ath9k/calib.c | 21 +-
drivers/net/wireless/ath/ath9k/htc_drv_main.c | 9 +
drivers/net/wireless/ath/ath9k/hw.c | 3 +-
drivers/net/wireless/ath/ath9k/main.c | 13 +-
drivers/net/wireless/ath/ath9k/pci.c | 7 +-
drivers/net/wireless/ath/ath9k/rc.c | 601 ++++++++++++--------
drivers/net/wireless/ath/ath9k/rc.h | 89 +++-
drivers/net/wireless/ath/ath9k/virtual.c | 6 +-
drivers/net/wireless/ath/ath9k/xmit.c | 20 +-
drivers/net/wireless/ipw2x00/libipw.h | 1 -
drivers/net/wireless/ipw2x00/libipw_tx.c | 16 +-
drivers/net/wireless/ipw2x00/libipw_wx.c | 2 +-
drivers/net/wireless/iwlwifi/iwl-1000.c | 1 +
drivers/net/wireless/iwlwifi/iwl-4965.c | 5 +-
drivers/net/wireless/iwlwifi/iwl-5000.c | 3 +-
drivers/net/wireless/iwlwifi/iwl-6000.c | 7 +
drivers/net/wireless/iwlwifi/iwl-agn-calib.c | 64 ++-
drivers/net/wireless/iwlwifi/iwl-agn-debugfs.c | 225 ++++++--
drivers/net/wireless/iwlwifi/iwl-agn-debugfs.h | 7 +
drivers/net/wireless/iwlwifi/iwl-agn-hcmd.c | 4 +-
drivers/net/wireless/iwlwifi/iwl-agn-lib.c | 7 +-
drivers/net/wireless/iwlwifi/iwl-agn-rx.c | 167 ++++--
drivers/net/wireless/iwlwifi/iwl-agn.c | 141 +++--
drivers/net/wireless/iwlwifi/iwl-calib.h | 6 +-
drivers/net/wireless/iwlwifi/iwl-commands.h | 55 ++-
drivers/net/wireless/iwlwifi/iwl-core.c | 65 +--
drivers/net/wireless/iwlwifi/iwl-core.h | 4 +-
drivers/net/wireless/iwlwifi/iwl-debugfs.c | 13 +
drivers/net/wireless/iwlwifi/iwl-dev.h | 16 +
drivers/net/wireless/iwlwifi/iwl-eeprom.h | 1 +
drivers/net/wireless/iwlwifi/iwl-scan.c | 18 +-
drivers/net/wireless/iwlwifi/iwl3945-base.c | 22 +-
drivers/net/wireless/libertas/cfg.c | 197 +------
drivers/net/wireless/libertas/cfg.h | 6 -
drivers/net/wireless/libertas/cmd.c | 718 ++++++++++--------------
drivers/net/wireless/libertas/cmd.h | 25 +-
drivers/net/wireless/libertas/cmdresp.c | 179 +------
drivers/net/wireless/libertas/debugfs.c | 67 +--
drivers/net/wireless/libertas/decl.h | 5 -
drivers/net/wireless/libertas/defs.h | 18 -
drivers/net/wireless/libertas/dev.h | 6 -
drivers/net/wireless/libertas/host.h | 142 ++---
drivers/net/wireless/libertas/if_usb.c | 4 +-
drivers/net/wireless/libertas/main.c | 35 +-
drivers/net/wireless/libertas/mesh.c | 216 ++++++--
drivers/net/wireless/libertas/mesh.h | 14 +-
drivers/net/wireless/libertas/tx.c | 2 +-
drivers/net/wireless/libertas_tf/libertas_tf.h | 3 +
drivers/net/wireless/libertas_tf/main.c | 18 +
drivers/net/wireless/mac80211_hwsim.c | 99 ++--
drivers/net/wireless/mwl8k.c | 154 +++---
drivers/net/wireless/orinoco/cfg.c | 5 +-
drivers/net/wireless/p54/eeprom.c | 76 ++--
drivers/net/wireless/p54/fwio.c | 53 +-
drivers/net/wireless/p54/led.c | 8 +-
drivers/net/wireless/p54/main.c | 17 +
drivers/net/wireless/p54/p54pci.c | 3 +-
drivers/net/wireless/p54/txrx.c | 36 +-
drivers/net/wireless/rt2x00/rt2500usb.c | 11 +-
drivers/net/wireless/rt2x00/rt2x00mac.c | 19 +-
drivers/net/wireless/rtl818x/rtl8180_dev.c | 35 +-
drivers/net/wireless/rtl818x/rtl8180_grf5101.c | 12 +-
drivers/net/wireless/rtl818x/rtl8180_max2820.c | 19 +-
drivers/net/wireless/rtl818x/rtl8180_rtl8225.c | 5 +-
drivers/net/wireless/rtl818x/rtl8180_sa2400.c | 28 +-
drivers/net/wireless/rtl818x/rtl8187_dev.c | 11 +-
drivers/net/wireless/rtl818x/rtl8187_rtl8225.c | 8 +-
drivers/net/wireless/rtl818x/rtl818x.h | 1 +
drivers/net/wireless/wl12xx/wl1251.h | 3 +
drivers/net/wireless/wl12xx/wl1251_boot.c | 8 +-
drivers/net/wireless/wl12xx/wl1251_cmd.h | 12 +-
drivers/net/wireless/wl12xx/wl1251_main.c | 22 +
drivers/net/wireless/wl12xx/wl1251_rx.c | 6 +
drivers/net/wireless/wl12xx/wl1251_tx.c | 10 +-
drivers/net/wireless/wl12xx/wl1251_tx.h | 8 +-
drivers/net/wireless/wl12xx/wl1271.h | 3 +
drivers/net/wireless/wl12xx/wl1271_main.c | 32 +-
drivers/net/wireless/wl12xx/wl1271_rx.c | 7 +
fs/compat_ioctl.c | 9 +-
include/net/bluetooth/bluetooth.h | 3 +-
include/net/bluetooth/hci.h | 187 ++++---
include/net/bluetooth/hci_core.h | 30 +-
include/net/bluetooth/l2cap.h | 34 +-
include/net/bluetooth/rfcomm.h | 14 +-
include/net/cfg80211.h | 65 +++-
include/net/lib80211.h | 3 -
include/net/mac80211.h | 12 +-
net/bluetooth/Kconfig | 13 -
net/bluetooth/hci_conn.c | 34 +-
net/bluetooth/hci_core.c | 204 +++++--
net/bluetooth/hci_event.c | 39 +-
net/bluetooth/hci_sock.c | 90 +++
net/bluetooth/hci_sysfs.c | 38 ++
net/bluetooth/l2cap.c | 669 ++++++++++++++---------
net/bluetooth/rfcomm/sock.c | 2 +-
net/bluetooth/rfcomm/tty.c | 4 +-
net/mac80211/cfg.c | 13 +-
net/mac80211/ieee80211_i.h | 1 +
net/mac80211/key.c | 13 +-
net/mac80211/key.h | 3 +-
net/mac80211/main.c | 3 +
net/mac80211/mlme.c | 32 +-
net/mac80211/rc80211_minstrel.c | 1 -
net/mac80211/rc80211_minstrel_ht.c | 4 +-
net/mac80211/scan.c | 8 +-
net/mac80211/sta_info.c | 2 +-
net/mac80211/tx.c | 19 +-
net/mac80211/util.c | 8 +-
net/mac80211/work.c | 43 ++
net/wireless/core.c | 49 ++
net/wireless/ibss.c | 4 +-
net/wireless/lib80211_crypt_ccmp.c | 1 -
net/wireless/lib80211_crypt_tkip.c | 1 -
net/wireless/lib80211_crypt_wep.c | 1 -
net/wireless/nl80211.c | 2 +
net/wireless/reg.c | 8 +-
145 files changed, 3858 insertions(+), 2826 deletions(-)
create mode 100644 drivers/bluetooth/hci_ath.c
Omnibus patch is available here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-next-2.6-2010-07-29.patch.bz2
--
John W. Linville Someday the world will need a hero, and you
linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org might be all we have. Be ready.
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* RE: [PATCH V4] Export SMBIOS provided firmware instance and label to sysfs
From: Narendra_K @ 2010-07-29 18:58 UTC (permalink / raw)
To: netdev, linux-hotplug, linux-pci
Cc: Matt_Domsch, Charles_Rose, Jordan_Hargrave, Vijay_Nijhawan,
jbarnes
In-Reply-To: <20100726105650.GA19738@auslistsprd01.us.dell.com>
> -----Original Message-----
> From: netdev-owner@vger.kernel.org [mailto:netdev-
> owner@vger.kernel.org] On Behalf Of Narendra K
> Sent: Monday, July 26, 2010 4:27 PM
> To: netdev@vger.kernel.org; linux-hotplug@vger.kernel.org; linux-
> pci@vger.kernel.org
> Cc: Domsch, Matt; Rose, Charles; Hargrave, Jordan; Nijhawan, Vijay
> Subject: [PATCH V4] Export SMBIOS provided firmware instance and label
> to sysfs
>
> Hello,
>
> V3 -> V4:
>
> Updated the contact field in Documentation/ABI directory.
>
> Please consider for inclusion -
>
> From: Narendra K <narendra_k@dell.com>
> Subject: [PATCH] Export SMBIOS provided firmware instance and label to
> sysfs
>
> This patch exports SMBIOS provided firmware instance and label
> of onboard pci devices to sysfs
>
> Signed-off-by: Jordan Hargrave <jordan_hargrave@dell.com>
> Signed-off-by: Narendra K <narendra_k@dell.com>
Jesse,
Please let us know if there are any concerns with this patch. If the
patch is acceptable,
please consider it for inclusion.
With regards,
Narendra K
^ permalink raw reply
* Re: [Uclinux-dist-devel] [PATCH 1/2] net: dsa: introduce STPID switch tagging handling code
From: Mike Frysinger @ 2010-07-29 17:50 UTC (permalink / raw)
To: Lennert Buytenhek
Cc: Karl Beldan, netdev, uclinux-dist-devel, David S. Miller
In-Reply-To: <AANLkTinPtd2xXzq0MpR517OsbZWUZjdp25x8FndhQ2CP@mail.gmail.com>
On Wed, Jul 21, 2010 at 12:08, Mike Frysinger wrote:
> On Wed, Jul 21, 2010 at 11:35, Lennert Buytenhek wrote:
>> On Wed, Jul 21, 2010 at 11:29:30AM -0400, Mike Frysinger wrote:
>>> >> + source_port = dsa_header[1] & 0x03;
>>> >> + if (source_port >= DSA_MAX_PORTS || ds->ports[source_port] == NULL)
>>> >> + goto out_drop;
>>> >> +
>>> >> + if (((dsa_header[0] & ETH_P_8021QH) == ETH_P_8021QH) &&
>>> >
>>> > This is bogus -- what it does is:
>>> >
>>> > if ((dsa_header[0] & 0x81) == 0x81)
>>> >
>>> > It doesn't look like you need to mask here at all.
>>>
>>> where does it say dsa_header[0] will always have 0x81 set ?
>>
>> Eh?
>>
>> This code is checking whether the packet has a STPID tag on it or not.
>> A STPID tag exists if the first 12 nibbles are 0x810.
>>
>> You are checking whether the first 8 nibbles of this are equal to 0x81
>> by doing:
>>
>> if ((byte & 0x81) == 0x81)
>>
>> What if the first byte is 0x93? Or 0xc5?
>
> that was my point. should it be masking or doing a raw compare ?
and the answer is ... ? so i can send an updated patch ;)
-mike
^ permalink raw reply
* Re: [PATCH net-next] bonding: take rtnl in bond_loadbalance_arp_mon
From: Jay Vosburgh @ 2010-07-29 17:49 UTC (permalink / raw)
To: Andy Gospodarek; +Cc: netdev
In-Reply-To: <20100729011355.GV7497@gospo.rdu.redhat.com>
Andy Gospodarek <andy@greyhouse.net> wrote:
>On Wed, Jul 28, 2010 at 02:39:49PM -0700, Jay Vosburgh wrote:
>> Andy Gospodarek <andy@greyhouse.net> wrote:
>>
>> >With the latest code in net-next-2.6 the following (and similar) are
>> >spewed when using arp monitoring and balance-alb.
>>
>> Does the ARP monitor function correctly for balance-alb? My
>> recollection is that the ARP monitor probes interfere with the tailored
>> ARP messages that balance-alb sends.
>
>It seems to work fine here on a few tries (I only use sysfs for
>configuration anymore), but it might be blind luck that the addresses
>chosen are hashing out correctly to make arp monitoring work.
I haven't tried it in a long time, but I think the problem for
balance-alb also had to do with snooping switches updating the MAC table
from the arp monitor traffic instead of (or in addition to) the
"authentic" ARPs. I don't remember if it caused actual communication
breaks, or just messed up the traffic balance.
>> The bond_check_params function
>> disallows setting arp_interval (it forces miimon on). I suspect this
>> nuance was missed when setting up the sysfs code, but if it does work,
>> then perhaps it is too strict.
>
>You are correct, it does. It is clear that some checks should be added
>to the sysfs code and it also seems like some work should be done to
>more clearly define what modes support which form of link monitoring (it
>doesn't seem to me like balance-rr should support can monitoring in it's
>current implementation, but there is no explicit code to check for it in
>the sysfs-layer or bond_check_params).
Presumably you mean "balance-rr should support ARP monitoring,"
and you're right, the whole "loadbalance" ARP monitor is pretty dodgy in
general (for balance-rr and balance-xor specifically). Since both of
those modes are intended to interface with etherchannel, the validity of
the ARP monitor's decisions are entirely dependent upon how the switch
balances incoming traffic. If the switch does a good job and hits all
of the ports, then it'll "work." There's a comment to this effect in
bond_loadbalance_arp_mon:
/* note: if switch is in round-robin mode, all links
* must tx arp to ensure all links rx an arp - otherwise
* links may oscillate or not come up at all; if switch is
* in something like xor mode, there is nothing we can
* do - all replies will be rx'ed on same link causing slaves
* to be unstable during low/no traffic periods
As an added tidbit, I'm not aware of any switch that has a
round-robin balance policy for its etherchannel implementation. That
comment predates my involvement in bonding, so maybe back then there
were some 10 Mb/sec switches that did round robin.
This also might have been useful for one switch configuration
that was used at the time, with multiple switches not running
etherchannel were connected up such that each bonding slave was
connected to a discrete switch. The switches were not interconnected,
so the only etherchannel was on the bonding hosts, which ran balance-rr.
This is discussed a bit in the bonding.txt, 12.2, complete with ASCII
art. It was pretty snazzy in the "one packet per interrupt" days, but
badly reorders traffic with modern hardware (anything with packet
coalescing; NAPI probably breaks it, too, now that I think about it).
>> As I recall, I had deliberately left acquiring rtnl out of the
>> loadbalance_arp_mon function, since none of the modes that used it
>> required rtnl for failover.
>
>Understood.
>
>Based on your comments, at least something like the following should
>probably be done.
I agree.
>[PATCH net-next] bonding: prevent sysfs from allowing arp monitoring with alb/tlb
>
>When using module options arp monitoring and balance-alb/balance-tlb
>are mutually exclusive options. Anytime balance-alb/balance-tlb are
>enabled mii monitoring is forced to 100ms if not set. When configuring
>via sysfs no checking is currently done.
>
>Handling these cases with sysfs has to be done a bit differently because
>we do not have all configuration information available at once. This
>patch will not allow a mode change to balance-alb/balance-tlb if
>arp_interval is already non-zero. It will also not allow the user to
>set a non-zero arp_interval value if the mode is already set to
>balance-alb/balance-tlb. They are still mutually exclusive on a
>first-come, first serve basis.
>
>Tested with initscripts on Fedora and manual setting via sysfs.
>
>Signed-off-by: Andy Gospodarek <gospo@redhat.com>
Signed-off-by: Jay Vosburgh <fubar@us.ibm.com>
>---
> drivers/net/bonding/bond_sysfs.c | 37 +++++++++++++++++++++++++------------
> 1 files changed, 25 insertions(+), 12 deletions(-)
>
>diff --git a/drivers/net/bonding/bond_sysfs.c b/drivers/net/bonding/bond_sysfs.c
>index 1a99764..c311aed 100644
>--- a/drivers/net/bonding/bond_sysfs.c
>+++ b/drivers/net/bonding/bond_sysfs.c
>@@ -313,19 +313,26 @@ static ssize_t bonding_store_mode(struct device *d,
> bond->dev->name, (int)strlen(buf) - 1, buf);
> ret = -EINVAL;
> goto out;
>- } else {
>- if (bond->params.mode == BOND_MODE_8023AD)
>- bond_unset_master_3ad_flags(bond);
>+ }
>+ if ((new_value == BOND_MODE_ALB ||
>+ new_value == BOND_MODE_TLB) &&
>+ bond->params.arp_interval) {
>+ pr_err("%s: %s mode is incompatible with arp monitoring.\n",
>+ bond->dev->name, bond_mode_tbl[new_value].modename);
>+ ret = -EINVAL;
>+ goto out;
>+ }
>+ if (bond->params.mode == BOND_MODE_8023AD)
>+ bond_unset_master_3ad_flags(bond);
>
>- if (bond->params.mode == BOND_MODE_ALB)
>- bond_unset_master_alb_flags(bond);
>+ if (bond->params.mode == BOND_MODE_ALB)
>+ bond_unset_master_alb_flags(bond);
>
>- bond->params.mode = new_value;
>- bond_set_mode_ops(bond, bond->params.mode);
>- pr_info("%s: setting mode to %s (%d).\n",
>- bond->dev->name, bond_mode_tbl[new_value].modename,
>- new_value);
>- }
>+ bond->params.mode = new_value;
>+ bond_set_mode_ops(bond, bond->params.mode);
>+ pr_info("%s: setting mode to %s (%d).\n",
>+ bond->dev->name, bond_mode_tbl[new_value].modename,
>+ new_value);
> out:
> return ret;
> }
>@@ -510,7 +517,13 @@ static ssize_t bonding_store_arp_interval(struct device *d,
> ret = -EINVAL;
> goto out;
> }
>-
>+ if (bond->params.mode == BOND_MODE_ALB ||
>+ bond->params.mode == BOND_MODE_TLB) {
>+ pr_info("%s: ARP monitoring cannot be used with ALB/TLB. Only MII monitoring is supported on %s.\n",
>+ bond->dev->name, bond->dev->name);
>+ ret = -EINVAL;
>+ goto out;
>+ }
> pr_info("%s: Setting ARP monitoring interval to %d.\n",
> bond->dev->name, new_value);
> bond->params.arp_interval = new_value;
>--
>1.7.0.1
>
^ permalink raw reply
* Re: [PATCH] sky2: Code style fixes
From: Stephen Hemminger @ 2010-07-29 17:27 UTC (permalink / raw)
To: Mike McCormack, David Miller; +Cc: netdev
In-Reply-To: <4C51837C.4020505@ring3k.org>
On Thu, 29 Jul 2010 22:34:52 +0900
Mike McCormack <mikem@ring3k.org> wrote:
> Fix selected style problems reported by checkpatch.
>
> Signed-off-by: Mike McCormack <mikem@ring3k.org>
Acked-by: Stephen Hemminger <shemminger@vyatta.com>
--
^ permalink raw reply
* [PATCH -next] net: ks8842 depends on DMA_ENGINE
From: Randy Dunlap @ 2010-07-29 17:14 UTC (permalink / raw)
To: Stephen Rothwell, davem; +Cc: linux-next, LKML, netdev
In-Reply-To: <20100729143211.9e7edaed.sfr@canb.auug.org.au>
From: Randy Dunlap <randy.dunlap@oracle.com>
ks8842 uses dma channel functions, so it should depend on DMA_ENGINE.
ERROR: "__dma_request_channel" [drivers/net/ks8842.ko] undefined!
ERROR: "dma_release_channel" [drivers/net/ks8842.ko] undefined!
Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com>
---
drivers/net/Kconfig | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- linux-next-20100729.orig/drivers/net/Kconfig
+++ linux-next-20100729/drivers/net/Kconfig
@@ -1751,7 +1751,7 @@ config TLAN
config KS8842
tristate "Micrel KSZ8841/42 with generic bus interface"
- depends on HAS_IOMEM
+ depends on HAS_IOMEM && DMA_ENGINE
help
This platform driver is for KSZ8841(1-port) / KS8842(2-port)
ethernet switch chip (managed, VLAN, QoS) from Micrel or
^ permalink raw reply
* Re: [Uclinux-dist-devel] [PATCH net-next] drivers/net/bfin_mac.c: Use pr_fmt, netdev_<level>
From: Mike Frysinger @ 2010-07-29 16:24 UTC (permalink / raw)
To: Joe Perches; +Cc: Michael Hennerich, uclinux-dist-devel, LKML, netdev
In-Reply-To: <AANLkTimHYS8BRBbomxwyqwayu8eyp+k6TurtsniNTMfs@mail.gmail.com>
On Wed, Jul 28, 2010 at 11:36, Mike Frysinger wrote:
> On Wed, Jul 28, 2010 at 06:00, Joe Perches wrote:
>> On Wed, 2010-07-28 at 03:50 -0400, Mike Frysinger wrote:
>>> On Tue, Jul 27, 2010 at 15:22, Joe Perches wrote:
>>> > $ ./scripts/checkpatch.pl -f drivers/net/bfin_mac.c | grep "^total:"
>>> > total: 2 errors, 25 warnings, 1723 lines checked
>>> > $ ./scripts/checkpatch.pl -f drivers/net/bfin_mac.c | grep "^total:"
>>> > total: 0 errors, 0 warnings, 1743 lines checked
>>> i dislike the mixing of whitespace and useful changes
>>> if they were split, and they worked, then i wouldnt have a problem with them
>>
>> Is that a nak or a dislike?
>
> if you arent going to bother fixing things, then i guess it's a NAK ;)
to be clear, i dont have a problem with the direction you're going
with things, just the steps to get there. i dont like throwing up
"NAK" at postings because that often sounds like a "f-you!" in my
head. i'd rather suggest changes and then ACK the updated patch(es).
-mike
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox