* Re: [PATCH] atp: remove set_rx_mode_8012()
From: David Miller @ 2012-11-03 19:43 UTC (permalink / raw)
To: pebolle; +Cc: netdev, linux-kernel
In-Reply-To: <1351936395.1434.2.camel@x61.thuisdomein>
From: Paul Bolle <pebolle@tiscali.nl>
Date: Sat, 03 Nov 2012 10:53:15 +0100
> Building atp.o triggers this GCC warning:
> drivers/net/ethernet/realtek/atp.c: In function ‘set_rx_mode’:
> drivers/net/ethernet/realtek/atp.c:871:26: warning: ‘mc_filter[0]’ may be used uninitialized in this function [-Wuninitialized]
>
> GCC is correct. In promiscuous mode 'mc_filter' will be used
> uninitialized in set_rx_mode_8012(), which is apparently inlined into
> set_rx_mode().
>
> But it turns out set_rx_mode_8012() will never be called, since
> net_local.chip_type will always be RTL8002. So we can just remove
> set_rx_mode_8012() and do some related cleanups.
>
> Signed-off-by: Paul Bolle <pebolle@tiscali.nl>
Applied.
^ permalink raw reply
* [PATCH 8/8] drivers/net/wireless/ath/ath6kl/hif.c: drop if around WARN_ON
From: Julia Lawall @ 2012-11-03 20:30 UTC (permalink / raw)
To: Kalle Valo
Cc: kernel-janitors, John W. Linville, linux-wireless, netdev,
linux-kernel
In-Reply-To: <1351974625-10282-1-git-send-email-Julia.Lawall@lip6.fr>
From: Julia Lawall <Julia.Lawall@lip6.fr>
Just use WARN_ON rather than an if containing only WARN_ON(1).
A simplified version of the semantic patch that makes this transformation
is as follows: (http://coccinelle.lip6.fr/)
// <smpl>
@@
expression e;
@@
- if (e) WARN_ON(1);
+ WARN_ON(e);
// </smpl>
Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr>
---
drivers/net/wireless/ath/ath6kl/hif.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/net/wireless/ath/ath6kl/hif.c b/drivers/net/wireless/ath/ath6kl/hif.c
index 68ed6c2..9e47c4a 100644
--- a/drivers/net/wireless/ath/ath6kl/hif.c
+++ b/drivers/net/wireless/ath/ath6kl/hif.c
@@ -338,8 +338,7 @@ static int ath6kl_hif_proc_err_intr(struct ath6kl_device *dev)
status = hif_read_write_sync(dev->ar, ERROR_INT_STATUS_ADDRESS,
reg_buf, 4, HIF_WR_SYNC_BYTE_FIX);
- if (status)
- WARN_ON(1);
+ WARN_ON(status);
return status;
}
@@ -383,8 +382,7 @@ static int ath6kl_hif_proc_cpu_intr(struct ath6kl_device *dev)
status = hif_read_write_sync(dev->ar, CPU_INT_STATUS_ADDRESS,
reg_buf, 4, HIF_WR_SYNC_BYTE_FIX);
- if (status)
- WARN_ON(1);
+ WARN_ON(status);
return status;
}
^ permalink raw reply related
* [net-next:master 181/190] net/sched/sch_htb.c:921:26: warning: integer overflow in expression
From: kbuild test robot @ 2012-11-03 21:48 UTC (permalink / raw)
To: Vimalkumar; +Cc: netdev
tree: git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git master
head: f7c3f96a41f16865e6422bfb919312a716b16552
commit: 56b765b79e9a78dc7d3f8850ba5e5567205a3ecd [181/190] htb: improved accuracy at high rates
config: make ARCH=mips allmodconfig
All warnings:
net/sched/sch_htb.c: In function 'htb_dequeue':
net/sched/sch_htb.c:921:26: warning: integer overflow in expression [-Woverflow]
vim +921 net/sched/sch_htb.c
^1da177e Linus Torvalds 2005-04-16 905
^1da177e Linus Torvalds 2005-04-16 906 /* try to dequeue direct packets as high prio (!) to minimize cpu work */
87990467 Stephen Hemminger 2006-08-10 907 skb = __skb_dequeue(&q->direct_queue);
87990467 Stephen Hemminger 2006-08-10 908 if (skb != NULL) {
9190b3b3 Eric Dumazet 2011-01-20 909 ok:
9190b3b3 Eric Dumazet 2011-01-20 910 qdisc_bstats_update(sch, skb);
fd245a4a Eric Dumazet 2011-01-20 911 qdisc_unthrottled(sch);
^1da177e Linus Torvalds 2005-04-16 912 sch->q.qlen--;
^1da177e Linus Torvalds 2005-04-16 913 return skb;
^1da177e Linus Torvalds 2005-04-16 914 }
^1da177e Linus Torvalds 2005-04-16 915
87990467 Stephen Hemminger 2006-08-10 916 if (!sch->q.qlen)
87990467 Stephen Hemminger 2006-08-10 917 goto fin;
56b765b7 Vimalkumar 2012-10-31 918 q->now = ktime_to_ns(ktime_get());
a73be040 Jarek Poplawski 2009-01-12 919 start_at = jiffies;
^1da177e Linus Torvalds 2005-04-16 920
56b765b7 Vimalkumar 2012-10-31 @921 next_event = q->now + 5 * NSEC_PER_SEC;
633fe66e Jarek Poplawski 2008-12-03 922
^1da177e Linus Torvalds 2005-04-16 923 for (level = 0; level < TC_HTB_MAXDEPTH; level++) {
^1da177e Linus Torvalds 2005-04-16 924 /* common case optimization - skip event handler quickly */
^1da177e Linus Torvalds 2005-04-16 925 int m;
fb983d45 Patrick McHardy 2007-03-16 926 psched_time_t event;
fb983d45 Patrick McHardy 2007-03-16 927
fb983d45 Patrick McHardy 2007-03-16 928 if (q->now >= q->near_ev_cache[level]) {
a73be040 Jarek Poplawski 2009-01-12 929 event = htb_do_events(q, level, start_at);
---
0-DAY kernel build testing backend Open Source Technology Center
Fengguang Wu, Yuanhan Liu Intel Corporation
^ permalink raw reply
* [PATCH 8/9] isdn: Remove unused variable causing a compile build warning
From: Lee Jones @ 2012-11-03 22:02 UTC (permalink / raw)
To: linux-kernel; +Cc: Lee Jones, Karsten Keil, netdev
In-Reply-To: <1351980150-24145-1-git-send-email-lee.jones@linaro.org>
This patch fixes:
drivers/isdn/i4l/isdn_common.c: In function ‘isdn_ioctl’:
drivers/isdn/i4l/isdn_common.c:1278:8: warning: unused variable ‘s’ [-Wunused-variable]
Cc: Karsten Keil <isdn@linux-pingi.de>
Cc: netdev@vger.kernel.org
Signed-off-by: Lee Jones <lee.jones@linaro.org>
---
drivers/isdn/i4l/isdn_common.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/isdn/i4l/isdn_common.c b/drivers/isdn/i4l/isdn_common.c
index 8c610fa..fb90d40 100644
--- a/drivers/isdn/i4l/isdn_common.c
+++ b/drivers/isdn/i4l/isdn_common.c
@@ -1275,7 +1275,6 @@ isdn_ioctl(struct file *file, uint cmd, ulong arg)
int ret;
int i;
char __user *p;
- char *s;
union iocpar {
char name[10];
char bname[22];
--
1.7.9.5
^ permalink raw reply related
* [PATCH 9/9] Avoid 'statement with no effect' compiler warnings
From: Lee Jones @ 2012-11-03 22:02 UTC (permalink / raw)
To: linux-kernel; +Cc: Lee Jones, Stephen Hemminger, bridge, netdev
In-Reply-To: <1351980150-24145-1-git-send-email-lee.jones@linaro.org>
Instead of issuing (0) statements when !CONFIG_SYSFS which will cause
'warning: ', we'll use inline statements instead. This will effectively
do the same thing, but suppress any unnecessary warnings.
Cc: Stephen Hemminger <shemminger@vyatta.com>
Cc: bridge@lists.linux-foundation.org
Cc: netdev@vger.kernel.org
Signed-off-by: Lee Jones <lee.jones@linaro.org>
---
net/bridge/br_private.h | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
index 9b278c4..af5f584 100644
--- a/net/bridge/br_private.h
+++ b/net/bridge/br_private.h
@@ -566,10 +566,10 @@ extern void br_sysfs_delbr(struct net_device *dev);
#else
-#define br_sysfs_addif(p) (0)
-#define br_sysfs_renameif(p) (0)
-#define br_sysfs_addbr(dev) (0)
-#define br_sysfs_delbr(dev) do { } while(0)
+static inline int br_sysfs_addif(struct net_bridge_port *p) { return 0; }
+static inline int br_sysfs_renameif(struct net_bridge_port *p) { return 0; }
+static inline int br_sysfs_addbr(struct net_device *dev) { return 0; }
+static inline void br_sysfs_delbr(struct net_device *dev) { return; }
#endif /* CONFIG_SYSFS */
#endif
--
1.7.9.5
^ permalink raw reply related
* Re: [PATCH v2 9/9] net: batman-adv: use per_cpu_add helper
From: Sven Eckelmann @ 2012-11-03 22:39 UTC (permalink / raw)
To: Shan Wei
Cc: NetDev, b.a.t.m.a.n-ZwoEplunGu2X36UT3dwllkB+6BGkLq7r,
Kernel-Maillist, siwu-MaAgPAbsBIVS8oHt8HbXEIQuADTiUCJX,
Christoph Lameter, lindner_marek-LWAfsSFWpa4, David Miller
In-Reply-To: <5094A485.4060409-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 792 bytes --]
On Saturday 03 November 2012 12:58:45 Shan Wei wrote:
> Sven Eckelmann said, at 2012/11/3 1:55:
> > On Saturday 03 November 2012 00:02:06 Shan Wei wrote:
> >> From: Shan Wei <davidshan-1Nz4purKYjRBDgjK7y7TUQ@public.gmane.org>
> >>
> >> As Christoph Lameter said:
> >>> In addition, following usage of per_cpu_ptr can be replaced by
> >>> this_cpu_read.
> >>>
> >>> cpu=get_cpu()
> >>> ....
> >>> *per_cpu_ptr(p,cpu)
> >>> ....
> >>> ....
> >>> put_cpu()
> >>
> >> Right.
> >>
> >> Signed-off-by: Shan Wei <davidshan-1Nz4purKYjRBDgjK7y7TUQ@public.gmane.org>
> >> ---
> >
> > Is this really supposed to be the commit message?
>
> Maybe it's ok when Linus said this. :-)
>
> Christoph is the maintainer of per-cpu.
> So........
Hm? This wasn't my question, but ok...
Kind regards,
Sven
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply
* Re: [PATCH 8/9] isdn: Remove unused variable causing a compile build warning
From: Paul Bolle @ 2012-11-03 22:40 UTC (permalink / raw)
To: Lee Jones; +Cc: linux-kernel, Karsten Keil, netdev
In-Reply-To: <1351980150-24145-9-git-send-email-lee.jones@linaro.org>
On Sat, 2012-11-03 at 23:02 +0100, Lee Jones wrote:
> This patch fixes:
> drivers/isdn/i4l/isdn_common.c: In function ‘isdn_ioctl’:
> drivers/isdn/i4l/isdn_common.c:1278:8: warning: unused variable ‘s’ [-Wunused-variable]
Did you have CONFIG_NETDEVICES not set in this build?
Paul Bolle
^ permalink raw reply
* Re: [PATCH 8/9] isdn: Remove unused variable causing a compile build warning
From: Lee Jones @ 2012-11-03 22:48 UTC (permalink / raw)
To: Paul Bolle; +Cc: linux-kernel, Karsten Keil, netdev
In-Reply-To: <1351982441.1434.5.camel@x61.thuisdomein>
On Sat, 03 Nov 2012, Paul Bolle wrote:
> On Sat, 2012-11-03 at 23:02 +0100, Lee Jones wrote:
> > This patch fixes:
> > drivers/isdn/i4l/isdn_common.c: In function ‘isdn_ioctl’:
> > drivers/isdn/i4l/isdn_common.c:1278:8: warning: unused variable ‘s’ [-Wunused-variable]
>
> Did you have CONFIG_NETDEVICES not set in this build?
Ah yes, I see it. The function went down further than I thought
it did. So the real fix is to ensure 's' is defined inside of
some ifdef CONFIG_NETDEVICES guards.
I'll fix up and resend. Will likely be tomorrow now, as it's
fast approaching midnight here.
--
Lee Jones
Linaro ST-Ericsson Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
^ permalink raw reply
* Re: Disable tcp MSS option in three way handshake?
From: Jan Engelhardt @ 2012-11-04 0:25 UTC (permalink / raw)
To: Eric Dumazet; +Cc: Vincent Li, netdev@vger.kernel.org
In-Reply-To: <1351204948.6537.263.camel@edumazet-glaptop>
On Friday 2012-10-26 00:42, Eric Dumazet wrote:
>On Thu, 2012-10-25 at 15:27 -0700, Vincent Li wrote:
>>
>> this sounds crazy, we have a weird situation that an unknown tcp
>> implementation not putting tcp MSS option in the SYN/ACK which caused
>> us some issue. I am tasked to mimic the unknown tcp immplementation on
>> not sending MSS in tcp SYN/ACK, I am wondering if I can achieve that
>> by modifying linux kernel tcp code, there is socket option
>> TCP_MAXSEG, but that seems only affecting the size of MSS, not
>> removing the MSS option. do you have any pointer on how to do that in
>> kernel tcp code?
>
>You'll have to patch the code.
>
>Or else, you could add a new feature to net/netfilter/xt_TCPMSS.c
Or you could just use -j TCPOPTSTRIP.
^ permalink raw reply
* [net-next:master 182/190] drivers/net/ethernet/adi/bfin_mac.c:694:2: error: implicit declaration of function 'bfin_read_EMAC_PTP_CTL'
From: Fengguang Wu @ 2012-11-04 0:55 UTC (permalink / raw)
To: Richard Cochran; +Cc: netdev
In-Reply-To: <509593bb.gIzsCzaNw8m7sNor%yuanhan.liu@linux.intel.com>
Hi Richard,
FYI, kernel build failed on
tree: git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git master
head: f7c3f96a41f16865e6422bfb919312a716b16552
commit: 70ac618c07b6ef959ff79a276b8d6c6626554dfd [182/190] ptp: fixup Kconfig for two PHC drivers.
config: make ARCH=blackfin BF526-EZBRD_defconfig
All error/warnings:
drivers/net/ethernet/adi/bfin_mac.c: In function 'bfin_mac_hwtstamp_ioctl':
drivers/net/ethernet/adi/bfin_mac.c:694:2: error: implicit declaration of function 'bfin_read_EMAC_PTP_CTL' [-Werror=implicit-function-declaration]
drivers/net/ethernet/adi/bfin_mac.c:702:3: error: implicit declaration of function 'bfin_write_EMAC_PTP_FV3' [-Werror=implicit-function-declaration]
drivers/net/ethernet/adi/bfin_mac.c:712:3: error: implicit declaration of function 'bfin_write_EMAC_PTP_CTL' [-Werror=implicit-function-declaration]
drivers/net/ethernet/adi/bfin_mac.c:717:3: error: implicit declaration of function 'bfin_write_EMAC_PTP_FOFF' [-Werror=implicit-function-declaration]
drivers/net/ethernet/adi/bfin_mac.c:723:3: error: implicit declaration of function 'bfin_write_EMAC_PTP_FV1' [-Werror=implicit-function-declaration]
drivers/net/ethernet/adi/bfin_mac.c:725:3: error: implicit declaration of function 'bfin_write_EMAC_PTP_FV2' [-Werror=implicit-function-declaration]
drivers/net/ethernet/adi/bfin_mac.c:804:14: error: 'PTP_EN' undeclared (first use in this function)
drivers/net/ethernet/adi/bfin_mac.c:804:14: note: each undeclared identifier is reported only once for each function it appears in
drivers/net/ethernet/adi/bfin_mac.c:815:3: error: implicit declaration of function 'bfin_read_EMAC_PTP_RXSNAPLO' [-Werror=implicit-function-declaration]
drivers/net/ethernet/adi/bfin_mac.c:816:3: error: implicit declaration of function 'bfin_read_EMAC_PTP_RXSNAPHI' [-Werror=implicit-function-declaration]
drivers/net/ethernet/adi/bfin_mac.c:818:3: error: implicit declaration of function 'bfin_read_EMAC_PTP_TXSNAPLO' [-Werror=implicit-function-declaration]
drivers/net/ethernet/adi/bfin_mac.c:819:3: error: implicit declaration of function 'bfin_read_EMAC_PTP_TXSNAPHI' [-Werror=implicit-function-declaration]
drivers/net/ethernet/adi/bfin_mac.c: In function 'bfin_tx_hwtstamp':
drivers/net/ethernet/adi/bfin_mac.c:847:3: error: implicit declaration of function 'bfin_read_EMAC_PTP_ISTAT' [-Werror=implicit-function-declaration]
drivers/net/ethernet/adi/bfin_mac.c:847:42: error: 'TXTL' undeclared (first use in this function)
drivers/net/ethernet/adi/bfin_mac.c: In function 'bfin_rx_hwtstamp':
drivers/net/ethernet/adi/bfin_mac.c:876:39: error: 'RXEL' undeclared (first use in this function)
drivers/net/ethernet/adi/bfin_mac.c: In function 'bfin_mac_hwtstamp_init':
drivers/net/ethernet/adi/bfin_mac.c:900:2: error: implicit declaration of function 'bfin_write_EMAC_PTP_ADDEND' [-Werror=implicit-function-declaration]
drivers/net/ethernet/adi/bfin_mac.c: In function 'bfin_ptp_time_read':
drivers/net/ethernet/adi/bfin_mac.c:917:2: error: implicit declaration of function 'bfin_read_EMAC_PTP_TIMELO' [-Werror=implicit-function-declaration]
drivers/net/ethernet/adi/bfin_mac.c:918:2: error: implicit declaration of function 'bfin_read_EMAC_PTP_TIMEHI' [-Werror=implicit-function-declaration]
drivers/net/ethernet/adi/bfin_mac.c: In function 'bfin_ptp_time_write':
drivers/net/ethernet/adi/bfin_mac.c:935:2: error: implicit declaration of function 'bfin_write_EMAC_PTP_TIMELO' [-Werror=implicit-function-declaration]
drivers/net/ethernet/adi/bfin_mac.c:936:2: error: implicit declaration of function 'bfin_write_EMAC_PTP_TIMEHI' [-Werror=implicit-function-declaration]
cc1: some warnings being treated as errors
vim +694 +/bfin_read_EMAC_PTP_CTL drivers/net/ethernet/adi/bfin_mac.c
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 688 return -EINVAL;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 689
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 690 if ((config.tx_type != HWTSTAMP_TX_OFF) &&
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 691 (config.tx_type != HWTSTAMP_TX_ON))
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 692 return -ERANGE;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 693
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 @694 ptpctl = bfin_read_EMAC_PTP_CTL();
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 695
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 696 switch (config.rx_filter) {
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 697 case HWTSTAMP_FILTER_NONE:
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 698 /*
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 699 * Dont allow any timestamping
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 700 */
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 701 ptpfv3 = 0xFFFFFFFF;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 @702 bfin_write_EMAC_PTP_FV3(ptpfv3);
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 703 break;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 704 case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 705 case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 706 case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 707 /*
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 708 * Clear the five comparison mask bits (bits[12:8]) in EMAC_PTP_CTL)
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 709 * to enable all the field matches.
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 710 */
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 711 ptpctl &= ~0x1F00;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 @712 bfin_write_EMAC_PTP_CTL(ptpctl);
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 713 /*
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 714 * Keep the default values of the EMAC_PTP_FOFF register.
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 715 */
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 716 ptpfoff = 0x4A24170C;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 @717 bfin_write_EMAC_PTP_FOFF(ptpfoff);
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 718 /*
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 719 * Keep the default values of the EMAC_PTP_FV1 and EMAC_PTP_FV2
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 720 * registers.
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 721 */
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 722 ptpfv1 = 0x11040800;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 @723 bfin_write_EMAC_PTP_FV1(ptpfv1);
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 724 ptpfv2 = 0x0140013F;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 @725 bfin_write_EMAC_PTP_FV2(ptpfv2);
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 726 /*
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 727 * The default value (0xFFFC) allows the timestamping of both
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 728 * received Sync messages and Delay_Req messages.
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 729 */
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 730 ptpfv3 = 0xFFFFFFFC;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 731 bfin_write_EMAC_PTP_FV3(ptpfv3);
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 732
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 733 config.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 734 break;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 735 case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 736 case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 737 case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 738 /* Clear all five comparison mask bits (bits[12:8]) in the
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 739 * EMAC_PTP_CTL register to enable all the field matches.
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 740 */
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 741 ptpctl &= ~0x1F00;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 742 bfin_write_EMAC_PTP_CTL(ptpctl);
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 743 /*
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 744 * Keep the default values of the EMAC_PTP_FOFF register, except set
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 745 * the PTPCOF field to 0x2A.
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 746 */
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 747 ptpfoff = 0x2A24170C;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 748 bfin_write_EMAC_PTP_FOFF(ptpfoff);
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 749 /*
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 750 * Keep the default values of the EMAC_PTP_FV1 and EMAC_PTP_FV2
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 751 * registers.
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 752 */
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 753 ptpfv1 = 0x11040800;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 754 bfin_write_EMAC_PTP_FV1(ptpfv1);
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 755 ptpfv2 = 0x0140013F;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 756 bfin_write_EMAC_PTP_FV2(ptpfv2);
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 757 /*
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 758 * To allow the timestamping of Pdelay_Req and Pdelay_Resp, set
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 759 * the value to 0xFFF0.
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 760 */
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 761 ptpfv3 = 0xFFFFFFF0;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 762 bfin_write_EMAC_PTP_FV3(ptpfv3);
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 763
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 764 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 765 break;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 766 case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 767 case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 768 case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 769 /*
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 770 * Clear bits 8 and 12 of the EMAC_PTP_CTL register to enable only the
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 771 * EFTM and PTPCM field comparison.
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 772 */
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 773 ptpctl &= ~0x1100;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 774 bfin_write_EMAC_PTP_CTL(ptpctl);
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 775 /*
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 776 * Keep the default values of all the fields of the EMAC_PTP_FOFF
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 777 * register, except set the PTPCOF field to 0x0E.
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 778 */
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 779 ptpfoff = 0x0E24170C;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 780 bfin_write_EMAC_PTP_FOFF(ptpfoff);
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 781 /*
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 782 * Program bits [15:0] of the EMAC_PTP_FV1 register to 0x88F7, which
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 783 * corresponds to PTP messages on the MAC layer.
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 784 */
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 785 ptpfv1 = 0x110488F7;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 786 bfin_write_EMAC_PTP_FV1(ptpfv1);
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 787 ptpfv2 = 0x0140013F;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 788 bfin_write_EMAC_PTP_FV2(ptpfv2);
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 789 /*
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 790 * To allow the timestamping of Pdelay_Req and Pdelay_Resp
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 791 * messages, set the value to 0xFFF0.
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 792 */
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 793 ptpfv3 = 0xFFFFFFF0;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 794 bfin_write_EMAC_PTP_FV3(ptpfv3);
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 795
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 796 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_EVENT;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 797 break;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 798 default:
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 799 return -ERANGE;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 800 }
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 801
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 802 if (config.tx_type == HWTSTAMP_TX_OFF &&
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 803 bfin_mac_hwtstamp_is_none(config.rx_filter)) {
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 @804 ptpctl &= ~PTP_EN;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 805 bfin_write_EMAC_PTP_CTL(ptpctl);
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 806
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 807 SSYNC();
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 808 } else {
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 809 ptpctl |= PTP_EN;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 810 bfin_write_EMAC_PTP_CTL(ptpctl);
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 811
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 812 /*
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 813 * clear any existing timestamp
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 814 */
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 @815 bfin_read_EMAC_PTP_RXSNAPLO();
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 @816 bfin_read_EMAC_PTP_RXSNAPHI();
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 817
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 @818 bfin_read_EMAC_PTP_TXSNAPLO();
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 @819 bfin_read_EMAC_PTP_TXSNAPHI();
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 820
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 821 SSYNC();
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 822 }
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 823
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 824 lp->stamp_cfg = config;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 825 return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ?
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 826 -EFAULT : 0;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 827 }
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 828
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 829 static void bfin_tx_hwtstamp(struct net_device *netdev, struct sk_buff *skb)
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 830 {
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 831 struct bfin_mac_local *lp = netdev_priv(netdev);
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 832
2244d07b drivers/net/bfin_mac.c Oliver Hartkopp 2010-08-17 833 if (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) {
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 834 int timeout_cnt = MAX_TIMEOUT_CNT;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 835
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 836 /* When doing time stamping, keep the connection to the socket
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 837 * a while longer
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 838 */
2244d07b drivers/net/bfin_mac.c Oliver Hartkopp 2010-08-17 839 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 840
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 841 /*
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 842 * The timestamping is done at the EMAC module's MII/RMII interface
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 843 * when the module sees the Start of Frame of an event message packet. This
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 844 * interface is the closest possible place to the physical Ethernet transmission
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 845 * medium, providing the best timing accuracy.
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 846 */
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 @847 while ((!(bfin_read_EMAC_PTP_ISTAT() & TXTL)) && (--timeout_cnt))
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 848 udelay(1);
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 849 if (timeout_cnt == 0)
c6dd5098 drivers/net/bfin_mac.c Mike Frysinger 2011-01-10 850 netdev_err(netdev, "timestamp the TX packet failed\n");
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 851 else {
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 852 struct skb_shared_hwtstamps shhwtstamps;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 853 u64 ns;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 854 u64 regval;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 855
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 856 regval = bfin_read_EMAC_PTP_TXSNAPLO();
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 857 regval |= (u64)bfin_read_EMAC_PTP_TXSNAPHI() << 32;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 858 memset(&shhwtstamps, 0, sizeof(shhwtstamps));
bc3c5f63 drivers/net/ethernet/adi/bfin_mac.c Richard Cochran 2012-10-31 859 ns = regval << lp->shift;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 860 shhwtstamps.hwtstamp = ns_to_ktime(ns);
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 861 skb_tstamp_tx(skb, &shhwtstamps);
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 862 }
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 863 }
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 864 }
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 865
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 866 static void bfin_rx_hwtstamp(struct net_device *netdev, struct sk_buff *skb)
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 867 {
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 868 struct bfin_mac_local *lp = netdev_priv(netdev);
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 869 u32 valid;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 870 u64 regval, ns;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 871 struct skb_shared_hwtstamps *shhwtstamps;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 872
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 873 if (bfin_mac_hwtstamp_is_none(lp->stamp_cfg.rx_filter))
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 874 return;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 875
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 @876 valid = bfin_read_EMAC_PTP_ISTAT() & RXEL;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 877 if (!valid)
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 878 return;
fe92afed drivers/net/bfin_mac.c Barry Song 2010-05-17 879
---
0-DAY kernel build testing backend Open Source Technology Center
Fengguang Wu, Yuanhan Liu Intel Corporation
^ permalink raw reply
* Some nodes have higher frame values in ifconfig
From: hiroyuki @ 2012-11-04 1:04 UTC (permalink / raw)
To: netdev
Hello,
I am running a cluster consisting of 22 nodes.
(22 nodes under the same 1Gbps switch.)
I noticed some nodes in the cluster has higher frame value
in ifconfig like the following.
some nodes (higher frame):
eth0 Link encap:Ethernet HWaddr 90:B1:1C:09:D2:F8
inet addr:192.168.121.20 Bcast:192.168.121.255 Mask:255.255.255.0
inet6 addr: fe80::92b1:1cff:fe09:d2f8/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:643150667 errors:0 dropped:790 overruns:0 frame:280072
TX packets:908361364 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:377424658828 (351.5 GiB) TX bytes:864099883266 (804.7 GiB)
Interrupt:170 Memory:d91a0000-d91b0000
other nodes (lower frame):
eth0 Link encap:Ethernet HWaddr 24:B6:FD:F6:DF:34
inet addr:192.168.121.3 Bcast:192.168.121.255 Mask:255.255.255.0
inet6 addr: fe80::26b6:fdff:fef6:df34/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1126524649 errors:0 dropped:118 overruns:0 frame:43775
TX packets:847071691 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:992080311726 (923.9 GiB) TX bytes:385366462299 (358.9 GiB)
Interrupt:170 Memory:d91a0000-d91b0000
What might be wrong with it ?
I also ran ethtool and
"rxbds_empty" value is the same value as frame in ifconfig.
whta is rxbds_empty ?
I have investigated rxbds_empty, but there is almost no information about it.
The weird thing is newly added 6 nodes have that higher value.
Also, I noticed some program runs slower than before we added those 6 nodes.
What the program is doing is that
every node requests huge amount of short messages
to other random nodes in parallel.
Ideally, every node has the some completion time with the program,
but the added 6 nodes run slower than others.
Could anyone give me any advice ?
^ permalink raw reply
* [PATCH v1 3/5] usbnet: smsc95xx: fix memory leak in smsc95xx_suspend
From: Ming Lei @ 2012-11-04 1:29 UTC (permalink / raw)
To: David S. Miller, Greg Kroah-Hartman
Cc: Oliver Neukum, netdev-u79uwXL29TY76Z2rM5mHXA,
linux-usb-u79uwXL29TY76Z2rM5mHXA, Ming Lei, Steve Glendinning
In-Reply-To: <1351992594-12818-1-git-send-email-ming.lei-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org>
This patch fixes memory leak in smsc95xx_suspend.
Also, it isn't necessary to bother mm to allocate 8bytes/16byte,
and we can use stack variable safely.
Cc: Steve Glendinning <steve.glendinning-nksJyM/082jR7s880joybQ@public.gmane.org>
Signed-off-by: Ming Lei <ming.lei-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org>
---
drivers/net/usb/smsc95xx.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
index 46cd784..f1f473f 100644
--- a/drivers/net/usb/smsc95xx.c
+++ b/drivers/net/usb/smsc95xx.c
@@ -1070,11 +1070,15 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message)
if (pdata->wolopts & (WAKE_BCAST | WAKE_MCAST | WAKE_ARP | WAKE_UCAST)) {
u32 *filter_mask = kzalloc(32, GFP_KERNEL);
- u32 *command = kzalloc(2, GFP_KERNEL);
- u32 *offset = kzalloc(2, GFP_KERNEL);
- u32 *crc = kzalloc(4, GFP_KERNEL);
+ u32 command[2];
+ u32 offset[2];
+ u32 crc[4];
int i, filter = 0;
+ memset(command, 0, sizeof(command));
+ memset(offset, 0, sizeof(offset));
+ memset(crc, 0, sizeof(crc));
+
if (pdata->wolopts & WAKE_BCAST) {
const u8 bcast[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
netdev_info(dev->net, "enabling broadcast detection");
@@ -1131,6 +1135,8 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message)
check_warn_return(ret, "Error writing WUFF");
}
+ kfree(filter_mask);
+
for (i = 0; i < (pdata->wuff_filter_count / 4); i++) {
ret = smsc95xx_write_reg(dev, WUFF, command[i]);
check_warn_return(ret, "Error writing WUFF");
--
1.7.9.5
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" 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 related
* [PATCH v1 4/5] usbnet: smsc95xx: apply the introduced usbnet_read[write]_cmd_nopm
From: Ming Lei @ 2012-11-04 1:29 UTC (permalink / raw)
To: David S. Miller, Greg Kroah-Hartman
Cc: Oliver Neukum, netdev-u79uwXL29TY76Z2rM5mHXA,
linux-usb-u79uwXL29TY76Z2rM5mHXA, Ming Lei, Steve Glendinning
In-Reply-To: <1351992594-12818-1-git-send-email-ming.lei-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org>
This patch applies the introduced usbnet_read_cmd_nopm() and
usbnet_write_cmd_nopm() in the callback of resume and suspend
to avoid deadlock if USB runtime PM is considered into
usbnet_read_cmd() and usbnet_write_cmd().
Cc: Steve Glendinning <steve.glendinning-nksJyM/082jR7s880joybQ@public.gmane.org>
Signed-off-by: Ming Lei <ming.lei-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org>
---
drivers/net/usb/smsc95xx.c | 134 ++++++++++++++++++++++++++++----------------
1 file changed, 85 insertions(+), 49 deletions(-)
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
index f1f473f..0241db4 100644
--- a/drivers/net/usb/smsc95xx.c
+++ b/drivers/net/usb/smsc95xx.c
@@ -73,20 +73,26 @@ static bool turbo_mode = true;
module_param(turbo_mode, bool, 0644);
MODULE_PARM_DESC(turbo_mode, "Enable multiple frames per Rx transaction");
-static int __must_check smsc95xx_read_reg(struct usbnet *dev, u32 index,
- u32 *data)
+static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index,
+ u32 *data, int in_pm)
{
u32 buf;
int ret;
+ int (*fn)(struct usbnet *, u8, u8, u16, u16, void *, u16);
BUG_ON(!dev);
- ret = usbnet_read_cmd(dev, USB_VENDOR_REQUEST_READ_REGISTER,
- USB_DIR_IN | USB_TYPE_VENDOR |
- USB_RECIP_DEVICE,
- 0, index, &buf, 4);
+ if (!in_pm)
+ fn = usbnet_read_cmd;
+ else
+ fn = usbnet_read_cmd_nopm;
+
+ ret = fn(dev, USB_VENDOR_REQUEST_READ_REGISTER, USB_DIR_IN
+ | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
+ 0, index, &buf, 4);
if (unlikely(ret < 0))
- netdev_warn(dev->net, "Failed to read register index 0x%08x\n", index);
+ netdev_warn(dev->net,
+ "Failed to read reg index 0x%08x: %d", index, ret);
le32_to_cpus(&buf);
*data = buf;
@@ -94,35 +100,64 @@ static int __must_check smsc95xx_read_reg(struct usbnet *dev, u32 index,
return ret;
}
-static int __must_check smsc95xx_write_reg(struct usbnet *dev, u32 index,
- u32 data)
+static int __must_check __smsc95xx_write_reg(struct usbnet *dev, u32 index,
+ u32 data, int in_pm)
{
u32 buf;
int ret;
+ int (*fn)(struct usbnet *, u8, u8, u16, u16, const void *, u16);
BUG_ON(!dev);
+ if (!in_pm)
+ fn = usbnet_write_cmd;
+ else
+ fn = usbnet_write_cmd_nopm;
+
buf = data;
cpu_to_le32s(&buf);
-
- ret = usbnet_write_cmd(dev, USB_VENDOR_REQUEST_WRITE_REGISTER,
- USB_DIR_OUT | USB_TYPE_VENDOR |
- USB_RECIP_DEVICE,
- 0, index, &buf, 4);
+ ret = fn(dev, USB_VENDOR_REQUEST_WRITE_REGISTER, USB_DIR_OUT
+ | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
+ 0, index, &buf, 4);
if (unlikely(ret < 0))
- netdev_warn(dev->net, "Failed to write register index 0x%08x\n", index);
+ netdev_warn(dev->net,
+ "Failed to write reg index 0x%08x: %d", index, ret);
return ret;
}
+static int __must_check smsc95xx_read_reg_nopm(struct usbnet *dev, u32 index,
+ u32 *data)
+{
+ return __smsc95xx_read_reg(dev, index, data, 1);
+}
+
+static int __must_check smsc95xx_write_reg_nopm(struct usbnet *dev, u32 index,
+ u32 data)
+{
+ return __smsc95xx_write_reg(dev, index, data, 1);
+}
+
+static int __must_check smsc95xx_read_reg(struct usbnet *dev, u32 index,
+ u32 *data)
+{
+ return __smsc95xx_read_reg(dev, index, data, 0);
+}
+
+static int __must_check smsc95xx_write_reg(struct usbnet *dev, u32 index,
+ u32 data)
+{
+ return __smsc95xx_write_reg(dev, index, data, 0);
+}
static int smsc95xx_set_feature(struct usbnet *dev, u32 feature)
{
if (WARN_ON_ONCE(!dev))
return -EINVAL;
- return usbnet_write_cmd(dev, USB_REQ_SET_FEATURE,
- USB_RECIP_DEVICE, feature, 0, NULL, 0);
+ return usbnet_write_cmd_nopm(dev, USB_REQ_SET_FEATURE,
+ USB_RECIP_DEVICE, feature, 0,
+ NULL, 0);
}
static int smsc95xx_clear_feature(struct usbnet *dev, u32 feature)
@@ -130,8 +165,9 @@ static int smsc95xx_clear_feature(struct usbnet *dev, u32 feature)
if (WARN_ON_ONCE(!dev))
return -EINVAL;
- return usbnet_write_cmd(dev, USB_REQ_CLEAR_FEATURE,
- USB_RECIP_DEVICE, feature, 0, NULL, 0);
+ return usbnet_write_cmd_nopm(dev, USB_REQ_CLEAR_FEATURE,
+ USB_RECIP_DEVICE, feature,
+ 0, NULL, 0);
}
/* Loop until the read is completed with timeout
@@ -708,7 +744,7 @@ static int smsc95xx_start_tx_path(struct usbnet *dev)
}
/* Starts the Receive path */
-static int smsc95xx_start_rx_path(struct usbnet *dev)
+static int smsc95xx_start_rx_path(struct usbnet *dev, int in_pm)
{
struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
unsigned long flags;
@@ -718,7 +754,7 @@ static int smsc95xx_start_rx_path(struct usbnet *dev)
pdata->mac_cr |= MAC_CR_RXEN_;
spin_unlock_irqrestore(&pdata->mac_cr_lock, flags);
- ret = smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr);
+ ret = __smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr, in_pm);
check_warn_return(ret, "Failed to write MAC_CR: %d\n", ret);
return 0;
@@ -937,7 +973,7 @@ static int smsc95xx_reset(struct usbnet *dev)
ret = smsc95xx_start_tx_path(dev);
check_warn_return(ret, "Failed to start TX path");
- ret = smsc95xx_start_rx_path(dev);
+ ret = smsc95xx_start_rx_path(dev, 0);
check_warn_return(ret, "Failed to start RX path");
netif_dbg(dev, ifup, dev->net, "smsc95xx_reset, return 0\n");
@@ -1039,30 +1075,30 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message)
netdev_info(dev->net, "entering SUSPEND2 mode");
/* disable energy detect (link up) & wake up events */
- ret = smsc95xx_read_reg(dev, WUCSR, &val);
+ ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val);
check_warn_return(ret, "Error reading WUCSR");
val &= ~(WUCSR_MPEN_ | WUCSR_WAKE_EN_);
- ret = smsc95xx_write_reg(dev, WUCSR, val);
+ ret = smsc95xx_write_reg_nopm(dev, WUCSR, val);
check_warn_return(ret, "Error writing WUCSR");
- ret = smsc95xx_read_reg(dev, PM_CTRL, &val);
+ ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
check_warn_return(ret, "Error reading PM_CTRL");
val &= ~(PM_CTL_ED_EN_ | PM_CTL_WOL_EN_);
- ret = smsc95xx_write_reg(dev, PM_CTRL, val);
+ ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
check_warn_return(ret, "Error writing PM_CTRL");
/* enter suspend2 mode */
- ret = smsc95xx_read_reg(dev, PM_CTRL, &val);
+ ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
check_warn_return(ret, "Error reading PM_CTRL");
val &= ~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_);
val |= PM_CTL_SUS_MODE_2;
- ret = smsc95xx_write_reg(dev, PM_CTRL, val);
+ ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
check_warn_return(ret, "Error writing PM_CTRL");
return 0;
@@ -1131,50 +1167,50 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message)
}
for (i = 0; i < (pdata->wuff_filter_count * 4); i++) {
- ret = smsc95xx_write_reg(dev, WUFF, filter_mask[i]);
+ ret = smsc95xx_write_reg_nopm(dev, WUFF, filter_mask[i]);
check_warn_return(ret, "Error writing WUFF");
}
kfree(filter_mask);
for (i = 0; i < (pdata->wuff_filter_count / 4); i++) {
- ret = smsc95xx_write_reg(dev, WUFF, command[i]);
+ ret = smsc95xx_write_reg_nopm(dev, WUFF, command[i]);
check_warn_return(ret, "Error writing WUFF");
}
for (i = 0; i < (pdata->wuff_filter_count / 4); i++) {
- ret = smsc95xx_write_reg(dev, WUFF, offset[i]);
+ ret = smsc95xx_write_reg_nopm(dev, WUFF, offset[i]);
check_warn_return(ret, "Error writing WUFF");
}
for (i = 0; i < (pdata->wuff_filter_count / 2); i++) {
- ret = smsc95xx_write_reg(dev, WUFF, crc[i]);
+ ret = smsc95xx_write_reg_nopm(dev, WUFF, crc[i]);
check_warn_return(ret, "Error writing WUFF");
}
/* clear any pending pattern match packet status */
- ret = smsc95xx_read_reg(dev, WUCSR, &val);
+ ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val);
check_warn_return(ret, "Error reading WUCSR");
val |= WUCSR_WUFR_;
- ret = smsc95xx_write_reg(dev, WUCSR, val);
+ ret = smsc95xx_write_reg_nopm(dev, WUCSR, val);
check_warn_return(ret, "Error writing WUCSR");
}
if (pdata->wolopts & WAKE_MAGIC) {
/* clear any pending magic packet status */
- ret = smsc95xx_read_reg(dev, WUCSR, &val);
+ ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val);
check_warn_return(ret, "Error reading WUCSR");
val |= WUCSR_MPR_;
- ret = smsc95xx_write_reg(dev, WUCSR, val);
+ ret = smsc95xx_write_reg_nopm(dev, WUCSR, val);
check_warn_return(ret, "Error writing WUCSR");
}
/* enable/disable wakeup sources */
- ret = smsc95xx_read_reg(dev, WUCSR, &val);
+ ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val);
check_warn_return(ret, "Error reading WUCSR");
if (pdata->wolopts & (WAKE_BCAST | WAKE_MCAST | WAKE_ARP | WAKE_UCAST)) {
@@ -1193,41 +1229,41 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message)
val &= ~WUCSR_MPEN_;
}
- ret = smsc95xx_write_reg(dev, WUCSR, val);
+ ret = smsc95xx_write_reg_nopm(dev, WUCSR, val);
check_warn_return(ret, "Error writing WUCSR");
/* enable wol wakeup source */
- ret = smsc95xx_read_reg(dev, PM_CTRL, &val);
+ ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
check_warn_return(ret, "Error reading PM_CTRL");
val |= PM_CTL_WOL_EN_;
- ret = smsc95xx_write_reg(dev, PM_CTRL, val);
+ ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
check_warn_return(ret, "Error writing PM_CTRL");
/* enable receiver to enable frame reception */
- smsc95xx_start_rx_path(dev);
+ smsc95xx_start_rx_path(dev, 1);
/* some wol options are enabled, so enter SUSPEND0 */
netdev_info(dev->net, "entering SUSPEND0 mode");
- ret = smsc95xx_read_reg(dev, PM_CTRL, &val);
+ ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
check_warn_return(ret, "Error reading PM_CTRL");
val &= (~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_));
val |= PM_CTL_SUS_MODE_0;
- ret = smsc95xx_write_reg(dev, PM_CTRL, val);
+ ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
check_warn_return(ret, "Error writing PM_CTRL");
/* clear wol status */
val &= ~PM_CTL_WUPS_;
val |= PM_CTL_WUPS_WOL_;
- ret = smsc95xx_write_reg(dev, PM_CTRL, val);
+ ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
check_warn_return(ret, "Error writing PM_CTRL");
/* read back PM_CTRL */
- ret = smsc95xx_read_reg(dev, PM_CTRL, &val);
+ ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
check_warn_return(ret, "Error reading PM_CTRL");
smsc95xx_set_feature(dev, USB_DEVICE_REMOTE_WAKEUP);
@@ -1248,22 +1284,22 @@ static int smsc95xx_resume(struct usb_interface *intf)
smsc95xx_clear_feature(dev, USB_DEVICE_REMOTE_WAKEUP);
/* clear wake-up sources */
- ret = smsc95xx_read_reg(dev, WUCSR, &val);
+ ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val);
check_warn_return(ret, "Error reading WUCSR");
val &= ~(WUCSR_WAKE_EN_ | WUCSR_MPEN_);
- ret = smsc95xx_write_reg(dev, WUCSR, val);
+ ret = smsc95xx_write_reg_nopm(dev, WUCSR, val);
check_warn_return(ret, "Error writing WUCSR");
/* clear wake-up status */
- ret = smsc95xx_read_reg(dev, PM_CTRL, &val);
+ ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
check_warn_return(ret, "Error reading PM_CTRL");
val &= ~PM_CTL_WOL_EN_;
val |= PM_CTL_WUPS_;
- ret = smsc95xx_write_reg(dev, PM_CTRL, val);
+ ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
check_warn_return(ret, "Error writing PM_CTRL");
}
--
1.7.9.5
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" 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 related
* [PATCH v1 5/5] usbnet: make device out of suspend before calling usbnet_read[write]_cmd
From: Ming Lei @ 2012-11-04 1:29 UTC (permalink / raw)
To: David S. Miller, Greg Kroah-Hartman
Cc: Oliver Neukum, netdev-u79uwXL29TY76Z2rM5mHXA,
linux-usb-u79uwXL29TY76Z2rM5mHXA, Ming Lei
In-Reply-To: <1351992594-12818-1-git-send-email-ming.lei-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org>
This patche gets the runtime PM reference count before calling
usbnet_read[write]_cmd, and puts it after completion of the
usbnet_read[write]_cmd, so that the usb control message can always
be sent to one active device in the non-PM context.
Signed-off-by: Ming Lei <ming.lei-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org>
---
drivers/net/usb/usbnet.c | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
index a7fb074..74caa67 100644
--- a/drivers/net/usb/usbnet.c
+++ b/drivers/net/usb/usbnet.c
@@ -1673,8 +1673,13 @@ out:
int usbnet_read_cmd(struct usbnet *dev, u8 cmd, u8 reqtype,
u16 value, u16 index, void *data, u16 size)
{
- return __usbnet_read_cmd(dev, cmd, reqtype, value, index,
- data, size);
+ int ret;
+ if (usb_autopm_get_interface(dev->intf) < 0)
+ return -ENODEV;
+ ret = __usbnet_read_cmd(dev, cmd, reqtype, value, index,
+ data, size);
+ usb_autopm_put_interface(dev->intf);
+ return ret;
}
EXPORT_SYMBOL_GPL(usbnet_read_cmd);
@@ -1685,8 +1690,13 @@ EXPORT_SYMBOL_GPL(usbnet_read_cmd);
int usbnet_write_cmd(struct usbnet *dev, u8 cmd, u8 reqtype,
u16 value, u16 index, const void *data, u16 size)
{
- return __usbnet_write_cmd(dev, cmd, reqtype, value, index,
- data, size);
+ int ret;
+ if (usb_autopm_get_interface(dev->intf) < 0)
+ return -ENODEV;
+ ret = __usbnet_write_cmd(dev, cmd, reqtype, value, index,
+ data, size);
+ usb_autopm_put_interface(dev->intf);
+ return ret;
}
EXPORT_SYMBOL_GPL(usbnet_write_cmd);
--
1.7.9.5
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" 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 related
* [PATCH v1 0/5] usbnet: avoiding access auto-suspended device
From: Ming Lei @ 2012-11-04 1:29 UTC (permalink / raw)
To: David S. Miller, Greg Kroah-Hartman; +Cc: Oliver Neukum, netdev, linux-usb
Thip patchset avoids accessing auto-suspended device in ioctl path,
which is generally triggered by some network utility(ethtool, ifconfig,
...)
Most of network devices have the problem, but as discussed in the
thread:
http://marc.info/?t=135054860600003&r=1&w=2
the problem should be solved inside driver.
Considered that only smsc75xx and smsc95xx calls usbnet_read_cmd()
and usbnet_write_cmd() inside its resume and suspend callback, the
patcheset introduce the nopm version of the two functions which
should be called only in the resume and suspend callback. So we
can solve the problem by runtime resuming device before doing
control message things.
The patchset is against 3.7.0-rc3-next-20121102, and has been tested
OK on smsc95xx usbnet device.
Change logs:
V1:
- rebased on 3.7.0-rc3-next-20121102, only patch 4/5 changed
- fix one memory leak during smsc95xx_suspend, patch 3/5 added
drivers/net/usb/smsc75xx.c | 133 +++++++++++++++++++++++++---------------
drivers/net/usb/smsc95xx.c | 146 ++++++++++++++++++++++++++++----------------
drivers/net/usb/usbnet.c | 72 ++++++++++++++++++++--
include/linux/usb/usbnet.h | 4 ++
4 files changed, 248 insertions(+), 107 deletions(-)
Thanks,
--
Ming Lei
^ permalink raw reply
* [PATCH v1 1/5] usbnet: introduce usbnet_read[write]_cmd_nopm
From: Ming Lei @ 2012-11-04 1:29 UTC (permalink / raw)
To: David S. Miller, Greg Kroah-Hartman
Cc: Oliver Neukum, netdev, linux-usb, Ming Lei
In-Reply-To: <1351992594-12818-1-git-send-email-ming.lei@canonical.com>
This patch introduces the below two helpers to prepare for solving
the usbnet runtime PM problem, which may cause some network utilities
(ifconfig, ethtool,...) touch a suspended device.
usbnet_read_cmd_nopm()
usbnet_write_cmd_nopm()
The above two helpers should be called by usbnet resume/suspend
callback to avoid deadlock.
Signed-off-by: Ming Lei <ming.lei@canonical.com>
---
drivers/net/usb/usbnet.c | 62 ++++++++++++++++++++++++++++++++++++++++----
include/linux/usb/usbnet.h | 4 +++
2 files changed, 61 insertions(+), 5 deletions(-)
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
index 09ea47a..a7fb074 100644
--- a/drivers/net/usb/usbnet.c
+++ b/drivers/net/usb/usbnet.c
@@ -1614,8 +1614,8 @@ void usbnet_device_suggests_idle(struct usbnet *dev)
EXPORT_SYMBOL(usbnet_device_suggests_idle);
/*-------------------------------------------------------------------------*/
-int usbnet_read_cmd(struct usbnet *dev, u8 cmd, u8 reqtype,
- u16 value, u16 index, void *data, u16 size)
+static int __usbnet_read_cmd(struct usbnet *dev, u8 cmd, u8 reqtype,
+ u16 value, u16 index, void *data, u16 size)
{
void *buf = NULL;
int err = -ENOMEM;
@@ -1639,10 +1639,10 @@ int usbnet_read_cmd(struct usbnet *dev, u8 cmd, u8 reqtype,
out:
return err;
}
-EXPORT_SYMBOL_GPL(usbnet_read_cmd);
-int usbnet_write_cmd(struct usbnet *dev, u8 cmd, u8 reqtype,
- u16 value, u16 index, const void *data, u16 size)
+static int __usbnet_write_cmd(struct usbnet *dev, u8 cmd, u8 reqtype,
+ u16 value, u16 index, const void *data,
+ u16 size)
{
void *buf = NULL;
int err = -ENOMEM;
@@ -1665,8 +1665,56 @@ int usbnet_write_cmd(struct usbnet *dev, u8 cmd, u8 reqtype,
out:
return err;
}
+
+/*
+ * The function can't be called inside suspend/resume callback,
+ * otherwise deadlock will be caused.
+ */
+int usbnet_read_cmd(struct usbnet *dev, u8 cmd, u8 reqtype,
+ u16 value, u16 index, void *data, u16 size)
+{
+ return __usbnet_read_cmd(dev, cmd, reqtype, value, index,
+ data, size);
+}
+EXPORT_SYMBOL_GPL(usbnet_read_cmd);
+
+/*
+ * The function can't be called inside suspend/resume callback,
+ * otherwise deadlock will be caused.
+ */
+int usbnet_write_cmd(struct usbnet *dev, u8 cmd, u8 reqtype,
+ u16 value, u16 index, const void *data, u16 size)
+{
+ return __usbnet_write_cmd(dev, cmd, reqtype, value, index,
+ data, size);
+}
EXPORT_SYMBOL_GPL(usbnet_write_cmd);
+/*
+ * The function can be called inside suspend/resume callback safely
+ * and should only be called by suspend/resume callback generally.
+ */
+int usbnet_read_cmd_nopm(struct usbnet *dev, u8 cmd, u8 reqtype,
+ u16 value, u16 index, void *data, u16 size)
+{
+ return __usbnet_read_cmd(dev, cmd, reqtype, value, index,
+ data, size);
+}
+EXPORT_SYMBOL_GPL(usbnet_read_cmd_nopm);
+
+/*
+ * The function can be called inside suspend/resume callback safely
+ * and should only be called by suspend/resume callback generally.
+ */
+int usbnet_write_cmd_nopm(struct usbnet *dev, u8 cmd, u8 reqtype,
+ u16 value, u16 index, const void *data,
+ u16 size)
+{
+ return __usbnet_write_cmd(dev, cmd, reqtype, value, index,
+ data, size);
+}
+EXPORT_SYMBOL_GPL(usbnet_write_cmd_nopm);
+
static void usbnet_async_cmd_cb(struct urb *urb)
{
struct usb_ctrlrequest *req = (struct usb_ctrlrequest *)urb->context;
@@ -1680,6 +1728,10 @@ static void usbnet_async_cmd_cb(struct urb *urb)
usb_free_urb(urb);
}
+/*
+ * The caller must make sure that device can't be put into suspend
+ * state until the control URB completes.
+ */
int usbnet_write_cmd_async(struct usbnet *dev, u8 cmd, u8 reqtype,
u16 value, u16 index, const void *data, u16 size)
{
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h
index 4410e416..9bbeabf 100644
--- a/include/linux/usb/usbnet.h
+++ b/include/linux/usb/usbnet.h
@@ -167,6 +167,10 @@ extern int usbnet_read_cmd(struct usbnet *dev, u8 cmd, u8 reqtype,
u16 value, u16 index, void *data, u16 size);
extern int usbnet_write_cmd(struct usbnet *dev, u8 cmd, u8 reqtype,
u16 value, u16 index, const void *data, u16 size);
+extern int usbnet_read_cmd_nopm(struct usbnet *dev, u8 cmd, u8 reqtype,
+ u16 value, u16 index, void *data, u16 size);
+extern int usbnet_write_cmd_nopm(struct usbnet *dev, u8 cmd, u8 reqtype,
+ u16 value, u16 index, const void *data, u16 size);
extern int usbnet_write_cmd_async(struct usbnet *dev, u8 cmd, u8 reqtype,
u16 value, u16 index, const void *data, u16 size);
--
1.7.9.5
^ permalink raw reply related
* [PATCH v1 2/5] usbnet: smsc75xx: apply the introduced usbnet_read[write]_cmd_nopm
From: Ming Lei @ 2012-11-04 1:29 UTC (permalink / raw)
To: David S. Miller, Greg Kroah-Hartman
Cc: Oliver Neukum, netdev, linux-usb, Ming Lei, Steve Glendinning
In-Reply-To: <1351992594-12818-1-git-send-email-ming.lei@canonical.com>
This patch applies the introduced usbnet_read_cmd_nopm() and
usbnet_write_cmd_nopm() in the callback of resume and suspend
to avoid deadlock if USB runtime PM is considered into
usbnet_read_cmd() and usbnet_write_cmd().
Cc: Steve Glendinning <steve.glendinning@shawell.net>
Signed-off-by: Ming Lei <ming.lei@canonical.com>
---
drivers/net/usb/smsc75xx.c | 133 +++++++++++++++++++++++++++-----------------
1 file changed, 83 insertions(+), 50 deletions(-)
diff --git a/drivers/net/usb/smsc75xx.c b/drivers/net/usb/smsc75xx.c
index 1baa53a..d4d6d31 100644
--- a/drivers/net/usb/smsc75xx.c
+++ b/drivers/net/usb/smsc75xx.c
@@ -82,18 +82,23 @@ static bool turbo_mode = true;
module_param(turbo_mode, bool, 0644);
MODULE_PARM_DESC(turbo_mode, "Enable multiple frames per Rx transaction");
-static int __must_check smsc75xx_read_reg(struct usbnet *dev, u32 index,
- u32 *data)
+static int __must_check __smsc75xx_read_reg(struct usbnet *dev, u32 index,
+ u32 *data, int in_pm)
{
u32 buf;
int ret;
+ int (*fn)(struct usbnet *, u8, u8, u16, u16, void *, u16);
BUG_ON(!dev);
- ret = usbnet_read_cmd(dev, USB_VENDOR_REQUEST_READ_REGISTER,
- USB_DIR_IN | USB_TYPE_VENDOR |
- USB_RECIP_DEVICE,
- 0, index, &buf, 4);
+ if (!in_pm)
+ fn = usbnet_read_cmd;
+ else
+ fn = usbnet_read_cmd_nopm;
+
+ ret = fn(dev, USB_VENDOR_REQUEST_READ_REGISTER, USB_DIR_IN
+ | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
+ 0, index, &buf, 4);
if (unlikely(ret < 0))
netdev_warn(dev->net,
"Failed to read reg index 0x%08x: %d", index, ret);
@@ -104,21 +109,26 @@ static int __must_check smsc75xx_read_reg(struct usbnet *dev, u32 index,
return ret;
}
-static int __must_check smsc75xx_write_reg(struct usbnet *dev, u32 index,
- u32 data)
+static int __must_check __smsc75xx_write_reg(struct usbnet *dev, u32 index,
+ u32 data, int in_pm)
{
u32 buf;
int ret;
+ int (*fn)(struct usbnet *, u8, u8, u16, u16, const void *, u16);
BUG_ON(!dev);
+ if (!in_pm)
+ fn = usbnet_write_cmd;
+ else
+ fn = usbnet_write_cmd_nopm;
+
buf = data;
cpu_to_le32s(&buf);
- ret = usbnet_write_cmd(dev, USB_VENDOR_REQUEST_WRITE_REGISTER,
- USB_DIR_OUT | USB_TYPE_VENDOR |
- USB_RECIP_DEVICE,
- 0, index, &buf, 4);
+ ret = fn(dev, USB_VENDOR_REQUEST_WRITE_REGISTER, USB_DIR_OUT
+ | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
+ 0, index, &buf, 4);
if (unlikely(ret < 0))
netdev_warn(dev->net,
"Failed to write reg index 0x%08x: %d", index, ret);
@@ -126,16 +136,38 @@ static int __must_check smsc75xx_write_reg(struct usbnet *dev, u32 index,
return ret;
}
+static int __must_check smsc75xx_read_reg_nopm(struct usbnet *dev, u32 index,
+ u32 *data)
+{
+ return __smsc75xx_read_reg(dev, index, data, 1);
+}
+
+static int __must_check smsc75xx_write_reg_nopm(struct usbnet *dev, u32 index,
+ u32 data)
+{
+ return __smsc75xx_write_reg(dev, index, data, 1);
+}
+
+static int __must_check smsc75xx_read_reg(struct usbnet *dev, u32 index,
+ u32 *data)
+{
+ return __smsc75xx_read_reg(dev, index, data, 0);
+}
+
+static int __must_check smsc75xx_write_reg(struct usbnet *dev, u32 index,
+ u32 data)
+{
+ return __smsc75xx_write_reg(dev, index, data, 0);
+}
+
static int smsc75xx_set_feature(struct usbnet *dev, u32 feature)
{
if (WARN_ON_ONCE(!dev))
return -EINVAL;
- cpu_to_le32s(&feature);
-
- return usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0),
- USB_REQ_SET_FEATURE, USB_RECIP_DEVICE, feature, 0, NULL, 0,
- USB_CTRL_SET_TIMEOUT);
+ return usbnet_write_cmd_nopm(dev, USB_REQ_SET_FEATURE,
+ USB_DIR_OUT | USB_RECIP_DEVICE,
+ feature, 0, NULL, 0);
}
static int smsc75xx_clear_feature(struct usbnet *dev, u32 feature)
@@ -143,11 +175,9 @@ static int smsc75xx_clear_feature(struct usbnet *dev, u32 feature)
if (WARN_ON_ONCE(!dev))
return -EINVAL;
- cpu_to_le32s(&feature);
-
- return usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0),
- USB_REQ_CLEAR_FEATURE, USB_RECIP_DEVICE, feature, 0, NULL, 0,
- USB_CTRL_SET_TIMEOUT);
+ return usbnet_write_cmd_nopm(dev, USB_REQ_CLEAR_FEATURE,
+ USB_DIR_OUT | USB_RECIP_DEVICE,
+ feature, 0, NULL, 0);
}
/* Loop until the read is completed with timeout
@@ -793,13 +823,16 @@ static int smsc75xx_set_features(struct net_device *netdev,
return 0;
}
-static int smsc75xx_wait_ready(struct usbnet *dev)
+static int smsc75xx_wait_ready(struct usbnet *dev, int in_pm)
{
int timeout = 0;
do {
u32 buf;
- int ret = smsc75xx_read_reg(dev, PMT_CTL, &buf);
+ int ret;
+
+ ret = __smsc75xx_read_reg(dev, PMT_CTL, &buf, in_pm);
+
check_warn_return(ret, "Failed to read PMT_CTL: %d", ret);
if (buf & PMT_CTL_DEV_RDY)
@@ -821,7 +854,7 @@ static int smsc75xx_reset(struct usbnet *dev)
netif_dbg(dev, ifup, dev->net, "entering smsc75xx_reset");
- ret = smsc75xx_wait_ready(dev);
+ ret = smsc75xx_wait_ready(dev, 0);
check_warn_return(ret, "device not ready in smsc75xx_reset");
ret = smsc75xx_read_reg(dev, HW_CFG, &buf);
@@ -1158,30 +1191,30 @@ static int smsc75xx_suspend(struct usb_interface *intf, pm_message_t message)
netdev_info(dev->net, "entering SUSPEND2 mode");
/* disable energy detect (link up) & wake up events */
- ret = smsc75xx_read_reg(dev, WUCSR, &val);
+ ret = smsc75xx_read_reg_nopm(dev, WUCSR, &val);
check_warn_return(ret, "Error reading WUCSR");
val &= ~(WUCSR_MPEN | WUCSR_WUEN);
- ret = smsc75xx_write_reg(dev, WUCSR, val);
+ ret = smsc75xx_write_reg_nopm(dev, WUCSR, val);
check_warn_return(ret, "Error writing WUCSR");
- ret = smsc75xx_read_reg(dev, PMT_CTL, &val);
+ ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val);
check_warn_return(ret, "Error reading PMT_CTL");
val &= ~(PMT_CTL_ED_EN | PMT_CTL_WOL_EN);
- ret = smsc75xx_write_reg(dev, PMT_CTL, val);
+ ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val);
check_warn_return(ret, "Error writing PMT_CTL");
/* enter suspend2 mode */
- ret = smsc75xx_read_reg(dev, PMT_CTL, &val);
+ ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val);
check_warn_return(ret, "Error reading PMT_CTL");
val &= ~(PMT_CTL_SUS_MODE | PMT_CTL_WUPS | PMT_CTL_PHY_RST);
val |= PMT_CTL_SUS_MODE_2;
- ret = smsc75xx_write_reg(dev, PMT_CTL, val);
+ ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val);
check_warn_return(ret, "Error writing PMT_CTL");
return 0;
@@ -1189,17 +1222,17 @@ static int smsc75xx_suspend(struct usb_interface *intf, pm_message_t message)
if (pdata->wolopts & WAKE_MAGIC) {
/* clear any pending magic packet status */
- ret = smsc75xx_read_reg(dev, WUCSR, &val);
+ ret = smsc75xx_read_reg_nopm(dev, WUCSR, &val);
check_warn_return(ret, "Error reading WUCSR");
val |= WUCSR_MPR;
- ret = smsc75xx_write_reg(dev, WUCSR, val);
+ ret = smsc75xx_write_reg_nopm(dev, WUCSR, val);
check_warn_return(ret, "Error writing WUCSR");
}
/* enable/disable magic packup wake */
- ret = smsc75xx_read_reg(dev, WUCSR, &val);
+ ret = smsc75xx_read_reg_nopm(dev, WUCSR, &val);
check_warn_return(ret, "Error reading WUCSR");
if (pdata->wolopts & WAKE_MAGIC) {
@@ -1210,47 +1243,47 @@ static int smsc75xx_suspend(struct usb_interface *intf, pm_message_t message)
val &= ~WUCSR_MPEN;
}
- ret = smsc75xx_write_reg(dev, WUCSR, val);
+ ret = smsc75xx_write_reg_nopm(dev, WUCSR, val);
check_warn_return(ret, "Error writing WUCSR");
/* enable wol wakeup source */
- ret = smsc75xx_read_reg(dev, PMT_CTL, &val);
+ ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val);
check_warn_return(ret, "Error reading PMT_CTL");
val |= PMT_CTL_WOL_EN;
- ret = smsc75xx_write_reg(dev, PMT_CTL, val);
+ ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val);
check_warn_return(ret, "Error writing PMT_CTL");
/* enable receiver */
- ret = smsc75xx_read_reg(dev, MAC_RX, &val);
+ ret = smsc75xx_read_reg_nopm(dev, MAC_RX, &val);
check_warn_return(ret, "Failed to read MAC_RX: %d", ret);
val |= MAC_RX_RXEN;
- ret = smsc75xx_write_reg(dev, MAC_RX, val);
+ ret = smsc75xx_write_reg_nopm(dev, MAC_RX, val);
check_warn_return(ret, "Failed to write MAC_RX: %d", ret);
/* some wol options are enabled, so enter SUSPEND0 */
netdev_info(dev->net, "entering SUSPEND0 mode");
- ret = smsc75xx_read_reg(dev, PMT_CTL, &val);
+ ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val);
check_warn_return(ret, "Error reading PMT_CTL");
val &= (~(PMT_CTL_SUS_MODE | PMT_CTL_WUPS | PMT_CTL_PHY_RST));
val |= PMT_CTL_SUS_MODE_0;
- ret = smsc75xx_write_reg(dev, PMT_CTL, val);
+ ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val);
check_warn_return(ret, "Error writing PMT_CTL");
/* clear wol status */
val &= ~PMT_CTL_WUPS;
val |= PMT_CTL_WUPS_WOL;
- ret = smsc75xx_write_reg(dev, PMT_CTL, val);
+ ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val);
check_warn_return(ret, "Error writing PMT_CTL");
/* read back PMT_CTL */
- ret = smsc75xx_read_reg(dev, PMT_CTL, &val);
+ ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val);
check_warn_return(ret, "Error reading PMT_CTL");
smsc75xx_set_feature(dev, USB_DEVICE_REMOTE_WAKEUP);
@@ -1271,36 +1304,36 @@ static int smsc75xx_resume(struct usb_interface *intf)
smsc75xx_clear_feature(dev, USB_DEVICE_REMOTE_WAKEUP);
/* Disable magic packup wake */
- ret = smsc75xx_read_reg(dev, WUCSR, &val);
+ ret = smsc75xx_read_reg_nopm(dev, WUCSR, &val);
check_warn_return(ret, "Error reading WUCSR");
val &= ~WUCSR_MPEN;
- ret = smsc75xx_write_reg(dev, WUCSR, val);
+ ret = smsc75xx_write_reg_nopm(dev, WUCSR, val);
check_warn_return(ret, "Error writing WUCSR");
/* clear wake-up status */
- ret = smsc75xx_read_reg(dev, PMT_CTL, &val);
+ ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val);
check_warn_return(ret, "Error reading PMT_CTL");
val &= ~PMT_CTL_WOL_EN;
val |= PMT_CTL_WUPS;
- ret = smsc75xx_write_reg(dev, PMT_CTL, val);
+ ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val);
check_warn_return(ret, "Error writing PMT_CTL");
} else {
netdev_info(dev->net, "resuming from SUSPEND2");
- ret = smsc75xx_read_reg(dev, PMT_CTL, &val);
+ ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val);
check_warn_return(ret, "Error reading PMT_CTL");
val |= PMT_CTL_PHY_PWRUP;
- ret = smsc75xx_write_reg(dev, PMT_CTL, val);
+ ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val);
check_warn_return(ret, "Error writing PMT_CTL");
}
- ret = smsc75xx_wait_ready(dev);
+ ret = smsc75xx_wait_ready(dev, 1);
check_warn_return(ret, "device not ready in smsc75xx_resume");
return usbnet_resume(intf);
--
1.7.9.5
^ permalink raw reply related
* Re: [PATCH] net: inet_diag -- Return error code if protocol handler is missed
From: Pavel Emelyanov @ 2012-11-04 1:39 UTC (permalink / raw)
To: Cyrill Gorcunov; +Cc: NETDEV, David Miller, Eric Dumazet
In-Reply-To: <20121103193034.GF6055@moon>
On 11/03/2012 11:30 PM, Cyrill Gorcunov wrote:
> We've observed that in case if UDP diag module is not
> supported in kernel the netlink returns NLMSG_DONE without
> notifying a caller that handler is missed.
>
> This patch makes __inet_diag_dump to return error code instead.
>
> So as example it become possible to detect such situation
> and handle it gracefully on userspace level.
>
> Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
> CC: David Miller <davem@davemloft.net>
> CC: Eric Dumazet <eric.dumazet@gmail.com>
> CC: Pavel Emelyanov <xemul@parallels.com>
Acked-by: Pavel Emelyanov <xemul@parallels.com>
^ permalink raw reply
* [PATCH] wireless: iwlwifi - add dma_mapping_error() checks to avoid warnings
From: Shuah Khan @ 2012-11-04 1:40 UTC (permalink / raw)
To: johannes.berg-ral2JQCrhuEAvxtiuMwx3w,
wey-yi.w.guy-ral2JQCrhuEAvxtiuMwx3w,
linville-2XuSBdqkA4R54TAoqtyWWQ, ilw-VuQAYsv1563Yd54FQh9/CA,
emmanuel.grumbach-ral2JQCrhuEAvxtiuMwx3w,
donald.h.fry-ral2JQCrhuEAvxtiuMwx3w
Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA,
netdev-u79uwXL29TY76Z2rM5mHXA, LKML,
shuahkhan-Re5JQEeQqe8AvxtiuMwx3w
Add missing dma_mapping_error() checks to validate dma addresses returned by
dma_map_page() calls to avoid the following warning:
[ 28.475686] WARNING: at lib/dma-debug.c:933 check_unmap+0x459/0x8a0()
[ 28.475688] Hardware name: HP EliteBook 6930p
[ 28.475690] iwlwifi 0000:03:00.0: DMA-API: device driver failed to check map error[device address=0x00000000ffffa000] [size=8192 bytes] [mapped as page]
[ 28.475691] Modules linked in: arc4 bnep rfcomm iwldvm mac80211 snd_hda_codec_analog radeon snd_hda_intel snd_hda_codec coretemp kvm_intel snd_hwdep snd_pcm iwlwifi kvm btusb bluetooth snd_seq_midi snd_rawmidi ttm cfg80211 snd_seq_midi_event drm_kms_helper pata_pcmcia drm snd_seq binfmt_misc pcmcia snd_timer snd_seq_device tpm_infineon snd dm_multipath yenta_socket joydev pcmcia_rsrc pcmcia_core hp_wmi psmouse hp_accel microcode soundcore i2c_algo_bit sparse_keymap wmi ppdev lpc_ich lis3lv02d snd_page_alloc video tpm_tis serio_raw parport_pc input_polldev mac_hid lp parport firewire_ohci firewire_core crc_itu_t sdhci_pci sdhci e1000e
[ 28.475727] Pid: 0, comm: swapper/1 Not tainted 3.7.0-rc2-next-20121026+ #2
[ 28.475728] Call Trace:
[ 28.475729] <IRQ> [<ffffffff8105832f>] warn_slowpath_common+0x7f/0xc0
[ 28.475736] [<ffffffff81058426>] warn_slowpath_fmt+0x46/0x50
[ 28.475738] [<ffffffff81347599>] check_unmap+0x459/0x8a0
[ 28.475741] [<ffffffff81347b7c>] debug_dma_unmap_page+0x5c/0x60
[ 28.475751] [<ffffffffa041e2dd>] iwl_irq_tasklet+0x4dd/0x1040 [iwlwifi]
[ 28.475755] [<ffffffffa041d50a>] ? iwl_read32+0x2a/0xa0 [iwlwifi]
[ 28.475759] [<ffffffff81410131>] ? add_interrupt_randomness+0x41/0x190
[ 28.475763] [<ffffffff813b6e53>] ? arch_local_irq_enable+0x8/0xd
[ 28.475766] [<ffffffff81060f54>] tasklet_action+0x64/0xe0
[ 28.475768] [<ffffffff81060a90>] __do_softirq+0xc0/0x240
[ 28.475772] [<ffffffff816950ae>] ? _raw_spin_lock+0xe/0x20
[ 28.475774] [<ffffffff8169ed1c>] call_softirq+0x1c/0x30
[ 28.475778] [<ffffffff810162e5>] do_softirq+0x65/0xa0
[ 28.475780] [<ffffffff81060d6e>] irq_exit+0x8e/0xb0
[ 28.475782] [<ffffffff8169f5a3>] do_IRQ+0x63/0xe0
[ 28.475785] [<ffffffff816956ad>] common_interrupt+0x6d/0x6d
[ 28.475786] <EOI> [<ffffffff813b6e53>] ? arch_local_irq_enable+0x8/0xd
[ 28.475790] [<ffffffff813b79e9>] acpi_idle_enter_c1+0x94/0xb9
[ 28.475793] [<ffffffff815404f9>] cpuidle_enter+0x19/0x20
[ 28.475795] [<ffffffff81540b8c>] cpuidle_idle_call+0xac/0x2b0
[ 28.475798] [<ffffffff8101d56f>] cpu_idle+0xcf/0x120
[ 28.475801] [<ffffffff8168050e>] start_secondary+0x1ec/0x1f3
[ 28.475802] ---[ end trace 4c30cc65c19b6dc1 ]---
[ 28.475803] Mapped at:
[ 28.475804] [<ffffffff813465f9>] debug_dma_map_page+0xb9/0x160
[ 28.475806] [<ffffffffa041d704>] iwl_rx_allocate+0x94/0x2b0 [iwlwifi]
[ 28.475811] [<ffffffffa041ddad>] iwl_rx_replenish+0x2d/0x60 [iwlwifi]
[ 28.475815] [<ffffffffa0424c1b>] iwl_trans_pcie_start_fw+0x1fb/0x1450 [iwlwifi]
[ 28.475819] [<ffffffffa05ba57e>] iwl_load_ucode_wait_alive+0xbe/0x540 [iwldvm]
Signed-off-by: Shuah Khan <shuah.khan-VXdhtT5mjnY@public.gmane.org>
---
drivers/net/wireless/iwlwifi/pcie/rx.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/net/wireless/iwlwifi/pcie/rx.c b/drivers/net/wireless/iwlwifi/pcie/rx.c
index 137af4c..3731442 100644
--- a/drivers/net/wireless/iwlwifi/pcie/rx.c
+++ b/drivers/net/wireless/iwlwifi/pcie/rx.c
@@ -321,6 +321,8 @@ static void iwl_rx_allocate(struct iwl_trans *trans, gfp_t priority)
dma_map_page(trans->dev, page, 0,
PAGE_SIZE << trans_pcie->rx_page_order,
DMA_FROM_DEVICE);
+ if (dma_mapping_error(trans->dev, rxb->page_dma))
+ BUG();
/* dma address must be no more than 36 bits */
BUG_ON(rxb->page_dma & ~DMA_BIT_MASK(36));
/* and also 256 byte aligned! */
@@ -489,6 +491,8 @@ static void iwl_rx_handle_rxbuf(struct iwl_trans *trans,
dma_map_page(trans->dev, rxb->page, 0,
PAGE_SIZE << trans_pcie->rx_page_order,
DMA_FROM_DEVICE);
+ if (dma_mapping_error(trans->dev, rxb->page_dma))
+ BUG();
list_add_tail(&rxb->list, &rxq->rx_free);
rxq->free_count++;
} else
--
1.7.9.5
--
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 related
* Re: [4/4] arm: mvebu: enable Ethernet controllers on Armada 370/XP eval boards
From: Jason Gunthorpe @ 2012-11-04 2:03 UTC (permalink / raw)
To: Thomas Petazzoni
Cc: Lior Amsalem, Andrew Lunn, Jason Cooper, netdev, Maen Suleiman,
Gregory Clement, linux-arm-kernel, Ian Molton
In-Reply-To: <1351245804-31478-5-git-send-email-thomas.petazzoni@free-electrons.com>
+ ethernet@d0070000 {
+ clock-frequency = <200000000>;
+ status = "okay";
+ phy-mode = "rgmii-id";
+ phy-addr = <0>;
+ };
We've been using the patches from Ian Molton for the mv643xx driver
that make it use the more standard, separately described MDIO
bus..
Please consider not copying the unsual 'phy-addr' binding
for the new driver.
What we are used to seeing for ethernet+mdio is more like:
smi0: mdio@72000 {
device_type = "mdio";
compatible = "marvell,mdio-mv643xx";
reg = <0x72000 0x4000>;
interrupts = <46>;
tx_csum_limit = <1600>;
#address-cells = <1>;
#size-cells = <0>;
PHY1: ethernet-phy@1 {
reg = <1>;
device_type = "ethernet-phy";
phy-id = <0x01410e90>;
};
};
egiga0 {
device_type = "network";
compatible = "marvell,mv643xx-eth";
reg = <0x72000 0x4000>;
mdio = <&smi0>;
port_number = <0>;
phy-handle = <&PHY1>;
interrupts = <11>;
};
};
Where the MDIO bus is explicit, the PHY, its address and parameters
are explicit - the PHY has an of_node pointer - and phy-handle is used
to connect them.
I'm not sure having the MDIO bus as a distinct top level item is
great, considering how the registers overlap.. It might be better
to put it under the egiga0 block? But that is a minor nit :)
Regards,
Jason
^ permalink raw reply
* Re: [PATCH] net: inet_diag -- Return error code if protocol handler is missed
From: David Miller @ 2012-11-04 5:57 UTC (permalink / raw)
To: xemul; +Cc: gorcunov, netdev, eric.dumazet
In-Reply-To: <5095C747.7090805@parallels.com>
From: Pavel Emelyanov <xemul@parallels.com>
Date: Sun, 04 Nov 2012 05:39:19 +0400
> On 11/03/2012 11:30 PM, Cyrill Gorcunov wrote:
>> We've observed that in case if UDP diag module is not
>> supported in kernel the netlink returns NLMSG_DONE without
>> notifying a caller that handler is missed.
>>
>> This patch makes __inet_diag_dump to return error code instead.
>>
>> So as example it become possible to detect such situation
>> and handle it gracefully on userspace level.
>>
>> Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
>> CC: David Miller <davem@davemloft.net>
>> CC: Eric Dumazet <eric.dumazet@gmail.com>
>> CC: Pavel Emelyanov <xemul@parallels.com>
>
> Acked-by: Pavel Emelyanov <xemul@parallels.com>
Applied, thanks.
^ permalink raw reply
* Re: [PATCH v1 2/5] usbnet: smsc75xx: apply the introduced usbnet_read[write]_cmd_nopm
From: David Miller @ 2012-11-04 5:58 UTC (permalink / raw)
To: ming.lei; +Cc: gregkh, oneukum, netdev, linux-usb, steve.glendinning
In-Reply-To: <1351992594-12818-3-git-send-email-ming.lei@canonical.com>
From: Ming Lei <ming.lei@canonical.com>
Date: Sun, 4 Nov 2012 09:29:51 +0800
> This patch applies the introduced usbnet_read_cmd_nopm() and
> usbnet_write_cmd_nopm() in the callback of resume and suspend
> to avoid deadlock if USB runtime PM is considered into
> usbnet_read_cmd() and usbnet_write_cmd().
>
> Cc: Steve Glendinning <steve.glendinning@shawell.net>
> Signed-off-by: Ming Lei <ming.lei@canonical.com>
This gets rejects, you didn't have your net-next tree uptodate
enough.
^ permalink raw reply
* Re: [PATCH 9/9] Avoid 'statement with no effect' compiler warnings
From: David Miller @ 2012-11-04 6:00 UTC (permalink / raw)
To: lee.jones; +Cc: linux-kernel, shemminger, bridge, netdev
In-Reply-To: <1351980150-24145-10-git-send-email-lee.jones@linaro.org>
From: Lee Jones <lee.jones@linaro.org>
Date: Sat, 3 Nov 2012 23:02:30 +0100
> Instead of issuing (0) statements when !CONFIG_SYSFS which will cause
> 'warning: ', we'll use inline statements instead. This will effectively
> do the same thing, but suppress any unnecessary warnings.
>
> Cc: Stephen Hemminger <shemminger@vyatta.com>
> Cc: bridge@lists.linux-foundation.org
> Cc: netdev@vger.kernel.org
> Signed-off-by: Lee Jones <lee.jones@linaro.org>
Applied, but please use more informative subject lines.
You should prefix your subject line after [PATCH ...] with
the name of the subsystem you are touching, a ": " then
the headline description.
So here you would have used "bridge: " and that's what I added when I
commited this patch.
^ permalink raw reply
* Re: [PATCH v2 net-next] r8169: enable internal ASPM and clock request settings
From: David Miller @ 2012-11-04 6:01 UTC (permalink / raw)
To: hayeswang; +Cc: romieu, netdev, linux-kernel, agnescheng
In-Reply-To: <1351824388-1225-1-git-send-email-hayeswang@realtek.com>
From: Hayes Wang <hayeswang@realtek.com>
Date: Fri, 2 Nov 2012 10:46:28 +0800
> The following chips need to enable internal settings to let ASPM
> and clock request work.
>
> RTL8111E-VL, RTL8111F, RTL8411, RTL8111G
> RTL8105, RTL8402, RTL8106
>
> Signed-off-by: Hayes Wang <hayeswang@realtek.com>
Francois?
^ permalink raw reply
* some nodes in a cluster has higher frame value in ifconfig
From: Hiroyuki Yamada @ 2012-11-04 7:37 UTC (permalink / raw)
To: netdev
I am running a cluster consisting of 22 nodes.
(22 nodes under the same 1Gbps switch.)
I noticed some nodes in the cluster has higher "frame" value in
ifconfig like the following.
some nodes (higher frame):
eth0 Link encap:Ethernet HWaddr 90:B1:1C:09:D2:F8
inet addr:192.168.121.20 Bcast:192.168.121.255 Mask:255.255.255.0
inet6 addr: fe80::92b1:1cff:fe09:d2f8/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:643150667 errors:0 dropped:790 overruns:0 frame:280072
TX packets:908361364 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:377424658828 (351.5 GiB) TX bytes:864099883266 (804.7 GiB)
Interrupt:170 Memory:d91a0000-d91b0000
other nodes (lower frame):
eth0 Link encap:Ethernet HWaddr 24:B6:FD:F6:DF:34
inet addr:192.168.121.3 Bcast:192.168.121.255 Mask:255.255.255.0
inet6 addr: fe80::26b6:fdff:fef6:df34/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1126524649 errors:0 dropped:118 overruns:0 frame:43775
TX packets:847071691 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:992080311726 (923.9 GiB) TX bytes:385366462299 (358.9 GiB)
Interrupt:170 Memory:d91a0000-d91b0000
What might be wrong with it ?
I also ran ethtool and
"rxbds_empty" value is the same value as frame in ifconfig.
whta is rxbds_empty ?
I have investigated rxbds_empty, but there is almost no information about it.
The weird thing is newly added 6 nodes have that higher value.
Also, I noticed some program runs slower than before we added those 6 nodes.
What the program is doing is that
every node requests huge amount of short messages
to other random nodes in parallel.
Ideally, every node has the some completion time with the program,
but the added 6 nodes run slower than others.
Could anyone give me any advice ?
^ 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