* [patch 2/2] qeth: fix qeth_wait_for_threads() deadlock for OSN devices
From: frank.blaschka @ 2013-04-08 8:19 UTC (permalink / raw)
To: davem; +Cc: netdev, linux-s390, Stefan Raspl
In-Reply-To: <20130408081925.995757091@de.ibm.com>
[-- Attachment #1: 602-qeth-thread-deadlock.diff --]
[-- Type: text/plain, Size: 3942 bytes --]
From: Stefan Raspl <raspl@linux.vnet.ibm.com>
Any recovery thread will deadlock when calling qeth_wait_for_threads(), most
notably when triggering a recovery on an OSN device.
This patch will store the recovery thread's task pointer on recovery
invocation and check in qeth_wait_for_threads() respectively to avoid
deadlocks.
Signed-off-by: Stefan Raspl <raspl@linux.vnet.ibm.com>
Signed-off-by: Frank Blaschka <blaschka@linux.vnet.ibm.com>
Reviewed-by: Ursula Braun <ursula.braun@de.ibm.com>
---
drivers/s390/net/qeth_core.h | 3 +++
drivers/s390/net/qeth_core_main.c | 19 +++++++++++++++++++
drivers/s390/net/qeth_l2_main.c | 2 ++
drivers/s390/net/qeth_l3_main.c | 2 ++
4 files changed, 26 insertions(+)
--- a/drivers/s390/net/qeth_core.h
+++ b/drivers/s390/net/qeth_core.h
@@ -769,6 +769,7 @@ struct qeth_card {
unsigned long thread_start_mask;
unsigned long thread_allowed_mask;
unsigned long thread_running_mask;
+ struct task_struct *recovery_task;
spinlock_t ip_lock;
struct list_head ip_list;
struct list_head *ip_tbd_list;
@@ -862,6 +863,8 @@ extern struct qeth_card_list_struct qeth
extern struct kmem_cache *qeth_core_header_cache;
extern struct qeth_dbf_info qeth_dbf[QETH_DBF_INFOS];
+void qeth_set_recovery_task(struct qeth_card *);
+void qeth_clear_recovery_task(struct qeth_card *);
void qeth_set_allowed_threads(struct qeth_card *, unsigned long , int);
int qeth_threads_running(struct qeth_card *, unsigned long);
int qeth_wait_for_threads(struct qeth_card *, unsigned long);
--- a/drivers/s390/net/qeth_core_main.c
+++ b/drivers/s390/net/qeth_core_main.c
@@ -177,6 +177,23 @@ const char *qeth_get_cardname_short(stru
return "n/a";
}
+void qeth_set_recovery_task(struct qeth_card *card)
+{
+ card->recovery_task = current;
+}
+EXPORT_SYMBOL_GPL(qeth_set_recovery_task);
+
+void qeth_clear_recovery_task(struct qeth_card *card)
+{
+ card->recovery_task = NULL;
+}
+EXPORT_SYMBOL_GPL(qeth_clear_recovery_task);
+
+static bool qeth_is_recovery_task(const struct qeth_card *card)
+{
+ return card->recovery_task == current;
+}
+
void qeth_set_allowed_threads(struct qeth_card *card, unsigned long threads,
int clear_start_mask)
{
@@ -205,6 +222,8 @@ EXPORT_SYMBOL_GPL(qeth_threads_running);
int qeth_wait_for_threads(struct qeth_card *card, unsigned long threads)
{
+ if (qeth_is_recovery_task(card))
+ return 0;
return wait_event_interruptible(card->wait_q,
qeth_threads_running(card, threads) == 0);
}
--- a/drivers/s390/net/qeth_l2_main.c
+++ b/drivers/s390/net/qeth_l2_main.c
@@ -1143,6 +1143,7 @@ static int qeth_l2_recover(void *ptr)
QETH_CARD_TEXT(card, 2, "recover2");
dev_warn(&card->gdev->dev,
"A recovery process has been started for the device\n");
+ qeth_set_recovery_task(card);
__qeth_l2_set_offline(card->gdev, 1);
rc = __qeth_l2_set_online(card->gdev, 1);
if (!rc)
@@ -1153,6 +1154,7 @@ static int qeth_l2_recover(void *ptr)
dev_warn(&card->gdev->dev, "The qeth device driver "
"failed to recover an error on the device\n");
}
+ qeth_clear_recovery_task(card);
qeth_clear_thread_start_bit(card, QETH_RECOVER_THREAD);
qeth_clear_thread_running_bit(card, QETH_RECOVER_THREAD);
return 0;
--- a/drivers/s390/net/qeth_l3_main.c
+++ b/drivers/s390/net/qeth_l3_main.c
@@ -3515,6 +3515,7 @@ static int qeth_l3_recover(void *ptr)
QETH_CARD_TEXT(card, 2, "recover2");
dev_warn(&card->gdev->dev,
"A recovery process has been started for the device\n");
+ qeth_set_recovery_task(card);
__qeth_l3_set_offline(card->gdev, 1);
rc = __qeth_l3_set_online(card->gdev, 1);
if (!rc)
@@ -3525,6 +3526,7 @@ static int qeth_l3_recover(void *ptr)
dev_warn(&card->gdev->dev, "The qeth device driver "
"failed to recover an error on the device\n");
}
+ qeth_clear_recovery_task(card);
qeth_clear_thread_start_bit(card, QETH_RECOVER_THREAD);
qeth_clear_thread_running_bit(card, QETH_RECOVER_THREAD);
return 0;
^ permalink raw reply
* [patch 0/2] s390: network bug fixes for net [v2]
From: frank.blaschka @ 2013-04-08 8:19 UTC (permalink / raw)
To: davem; +Cc: netdev, linux-s390
Hi Dave,
here are the fixes for net again, including
feedback from Eric (Thx!)
shortlog:
Ursula Braun (1)
af_iucv: fix recvmsg by replacing skb_pull() function
Stefan Raspl (1)
qeth: fix qeth_wait_for_threads() deadlock for OSN devices
Thanks,
Frank
^ permalink raw reply
* [patch 1/2] af_iucv: fix recvmsg by replacing skb_pull() function
From: frank.blaschka @ 2013-04-08 8:19 UTC (permalink / raw)
To: davem; +Cc: netdev, linux-s390, Ursula Braun
In-Reply-To: <20130408081925.995757091@de.ibm.com>
[-- Attachment #1: 601-af-iucv-skb-pull.diff --]
[-- Type: text/plain, Size: 5822 bytes --]
From: Ursula Braun <ursula.braun@de.ibm.com>
When receiving data messages, the "BUG_ON(skb->len < skb->data_len)" in
the skb_pull() function triggers a kernel panic.
Replace the skb_pull logic by a per skb offset as advised by
Eric Dumazet.
Signed-off-by: Ursula Braun <ursula.braun@de.ibm.com>
Signed-off-by: Frank Blaschka <blaschka@linux.vnet.ibm.com>
Reviewed-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
---
include/net/iucv/af_iucv.h | 8 ++++++++
net/iucv/af_iucv.c | 34 ++++++++++++++++------------------
2 files changed, 24 insertions(+), 18 deletions(-)
--- a/include/net/iucv/af_iucv.h
+++ b/include/net/iucv/af_iucv.h
@@ -130,6 +130,14 @@ struct iucv_sock {
enum iucv_tx_notify n);
};
+struct iucv_skb_cb {
+ u32 class; /* target class of message */
+ u32 tag; /* tag associated with message */
+ u32 offset; /* offset for skb receival */
+};
+
+#define IUCV_SKB_CB(__skb) ((struct iucv_skb_cb *)&((__skb)->cb[0]))
+
/* iucv socket options (SOL_IUCV) */
#define SO_IPRMDATA_MSG 0x0080 /* send/recv IPRM_DATA msgs */
#define SO_MSGLIMIT 0x1000 /* get/set IUCV MSGLIMIT */
--- a/net/iucv/af_iucv.c
+++ b/net/iucv/af_iucv.c
@@ -49,12 +49,6 @@ static const u8 iprm_shutdown[8] =
#define TRGCLS_SIZE (sizeof(((struct iucv_message *)0)->class))
-/* macros to set/get socket control buffer at correct offset */
-#define CB_TAG(skb) ((skb)->cb) /* iucv message tag */
-#define CB_TAG_LEN (sizeof(((struct iucv_message *) 0)->tag))
-#define CB_TRGCLS(skb) ((skb)->cb + CB_TAG_LEN) /* iucv msg target class */
-#define CB_TRGCLS_LEN (TRGCLS_SIZE)
-
#define __iucv_sock_wait(sk, condition, timeo, ret) \
do { \
DEFINE_WAIT(__wait); \
@@ -1141,7 +1135,7 @@ static int iucv_sock_sendmsg(struct kioc
/* increment and save iucv message tag for msg_completion cbk */
txmsg.tag = iucv->send_tag++;
- memcpy(CB_TAG(skb), &txmsg.tag, CB_TAG_LEN);
+ IUCV_SKB_CB(skb)->tag = txmsg.tag;
if (iucv->transport == AF_IUCV_TRANS_HIPER) {
atomic_inc(&iucv->msg_sent);
@@ -1224,7 +1218,7 @@ static int iucv_fragment_skb(struct sock
return -ENOMEM;
/* copy target class to control buffer of new skb */
- memcpy(CB_TRGCLS(nskb), CB_TRGCLS(skb), CB_TRGCLS_LEN);
+ IUCV_SKB_CB(nskb)->class = IUCV_SKB_CB(skb)->class;
/* copy data fragment */
memcpy(nskb->data, skb->data + copied, size);
@@ -1256,7 +1250,7 @@ static void iucv_process_message(struct
/* store msg target class in the second 4 bytes of skb ctrl buffer */
/* Note: the first 4 bytes are reserved for msg tag */
- memcpy(CB_TRGCLS(skb), &msg->class, CB_TRGCLS_LEN);
+ IUCV_SKB_CB(skb)->class = msg->class;
/* check for special IPRM messages (e.g. iucv_sock_shutdown) */
if ((msg->flags & IUCV_IPRMDATA) && len > 7) {
@@ -1292,6 +1286,7 @@ static void iucv_process_message(struct
}
}
+ IUCV_SKB_CB(skb)->offset = 0;
if (sock_queue_rcv_skb(sk, skb))
skb_queue_head(&iucv_sk(sk)->backlog_skb_q, skb);
}
@@ -1327,6 +1322,7 @@ static int iucv_sock_recvmsg(struct kioc
unsigned int copied, rlen;
struct sk_buff *skb, *rskb, *cskb;
int err = 0;
+ u32 offset;
msg->msg_namelen = 0;
@@ -1348,13 +1344,14 @@ static int iucv_sock_recvmsg(struct kioc
return err;
}
- rlen = skb->len; /* real length of skb */
+ offset = IUCV_SKB_CB(skb)->offset;
+ rlen = skb->len - offset; /* real length of skb */
copied = min_t(unsigned int, rlen, len);
if (!rlen)
sk->sk_shutdown = sk->sk_shutdown | RCV_SHUTDOWN;
cskb = skb;
- if (skb_copy_datagram_iovec(cskb, 0, msg->msg_iov, copied)) {
+ if (skb_copy_datagram_iovec(cskb, offset, msg->msg_iov, copied)) {
if (!(flags & MSG_PEEK))
skb_queue_head(&sk->sk_receive_queue, skb);
return -EFAULT;
@@ -1372,7 +1369,8 @@ static int iucv_sock_recvmsg(struct kioc
* get the trgcls from the control buffer of the skb due to
* fragmentation of original iucv message. */
err = put_cmsg(msg, SOL_IUCV, SCM_IUCV_TRGCLS,
- CB_TRGCLS_LEN, CB_TRGCLS(skb));
+ sizeof(IUCV_SKB_CB(skb)->class),
+ (void *)&IUCV_SKB_CB(skb)->class);
if (err) {
if (!(flags & MSG_PEEK))
skb_queue_head(&sk->sk_receive_queue, skb);
@@ -1384,9 +1382,8 @@ static int iucv_sock_recvmsg(struct kioc
/* SOCK_STREAM: re-queue skb if it contains unreceived data */
if (sk->sk_type == SOCK_STREAM) {
- skb_pull(skb, copied);
- if (skb->len) {
- skb_queue_head(&sk->sk_receive_queue, skb);
+ if (copied < rlen) {
+ IUCV_SKB_CB(skb)->offset = offset + copied;
goto done;
}
}
@@ -1405,6 +1402,7 @@ static int iucv_sock_recvmsg(struct kioc
spin_lock_bh(&iucv->message_q.lock);
rskb = skb_dequeue(&iucv->backlog_skb_q);
while (rskb) {
+ IUCV_SKB_CB(rskb)->offset = 0;
if (sock_queue_rcv_skb(sk, rskb)) {
skb_queue_head(&iucv->backlog_skb_q,
rskb);
@@ -1832,7 +1830,7 @@ static void iucv_callback_txdone(struct
spin_lock_irqsave(&list->lock, flags);
while (list_skb != (struct sk_buff *)list) {
- if (!memcmp(&msg->tag, CB_TAG(list_skb), CB_TAG_LEN)) {
+ if (msg->tag != IUCV_SKB_CB(list_skb)->tag) {
this = list_skb;
break;
}
@@ -2093,6 +2091,7 @@ static int afiucv_hs_callback_rx(struct
skb_pull(skb, sizeof(struct af_iucv_trans_hdr));
skb_reset_transport_header(skb);
skb_reset_network_header(skb);
+ IUCV_SKB_CB(skb)->offset = 0;
spin_lock(&iucv->message_q.lock);
if (skb_queue_empty(&iucv->backlog_skb_q)) {
if (sock_queue_rcv_skb(sk, skb)) {
@@ -2197,8 +2196,7 @@ static int afiucv_hs_rcv(struct sk_buff
/* fall through and receive zero length data */
case 0:
/* plain data frame */
- memcpy(CB_TRGCLS(skb), &trans_hdr->iucv_hdr.class,
- CB_TRGCLS_LEN);
+ IUCV_SKB_CB(skb)->class = trans_hdr->iucv_hdr.class;
err = afiucv_hs_callback_rx(sk, skb);
break;
default:
^ permalink raw reply
* Re: [PATCH 1/2] crypto: add CMAC support to CryptoAPI
From: Steffen Klassert @ 2013-04-08 8:24 UTC (permalink / raw)
To: Jussi Kivilinna
Cc: linux-crypto, netdev, Tom St Denis, Herbert Xu, David S. Miller
In-Reply-To: <20130408074844.6866.90093.stgit@localhost6.localdomain6>
On Mon, Apr 08, 2013 at 10:48:44AM +0300, Jussi Kivilinna wrote:
> Patch adds support for NIST recommended block cipher mode CMAC to CryptoAPI.
>
> This work is based on Tom St Denis' earlier patch,
> http://marc.info/?l=linux-crypto-vger&m=135877306305466&w=2
>
> Cc: Tom St Denis <tstdenis@elliptictech.com>
> Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
This patch does not apply clean to the ipsec-next tree
because of some crypto changes I don't have in ipsec-next.
The IPsec part should apply to the cryptodev tree,
so it's probaply the best if we route this patchset
through the cryptodev tree.
Herbert,
are you going to take these patches?
^ permalink raw reply
* Re: [PATCH 2/2] bonding: fix bonding_masters race condition in bond unloading
From: Veaceslav Falico @ 2013-04-08 8:30 UTC (permalink / raw)
To: Nikolay Aleksandrov; +Cc: netdev, andy, fubar, davem
In-Reply-To: <20130406135020.GA18246@redhat.com>
On Sat, Apr 06, 2013 at 03:50:20PM +0200, Veaceslav Falico wrote:
>On Sat, Apr 06, 2013 at 12:54:38PM +0200, Nikolay Aleksandrov wrote:
>>While the bonding module is unloading, it is considered that after
>>rtnl_link_unregister all bond devices are destroyed but since no
>>synchronization mechanism exists, a new bond device can be created
>>via bonding_masters before unregister_pernet_subsys which would
>>lead to multiple problems (e.g. NULL pointer dereference, wrong RIP,
>>list corruption).
>>
>>This patch fixes the issue by removing any bond devices left in the
>>netns after bonding_masters is removed from sysfs.
>>
>>Signed-off-by: Nikolay Aleksandrov <nikolay@redhat.com>
>>---
>>drivers/net/bonding/bond_main.c | 9 +++++++++
>>1 file changed, 9 insertions(+)
>>
>
>I'm still thinking that's it's not the best way of fixing it
>(remove_devices(); remove_sysfs(); remove_devices()) - but given that I
>can't come up with anything better and my first fix didn't actually work -
>I'm ok with your patch.
I think I've found a proper way to do it. Even with your approach we still
might end up in some kind of race condition with procfs (check
bond_net_exit() -> proc removal, it's made without rtnl_lock()). So the
best way would be to lock both functions (__rtnl_link_unregister() and
unregister_pernet_subsys()) with rtnl_lock(). It wasn't possible because of
a possible race with sysfs (we start removing the bonding, lock rtnl(),
someone accesses sysfs(), and our sysfs removal code blocks because of this
access - deadlock).
However, if we use the rtnl_trylock() mechanism, we will be able to let
sysfs go and finish the removal.
What do you think about this approach? A quick-n-dirty patch is below, I'm
running rmmod/insmod for an hour already and it seems to work, however
there still might be bugs, and the patch definitely needs some
cleaning/comments.
From 3a7858ec5d8ef3261dd52fcd35048cb737aec780 Mon Sep 17 00:00:00 2001
From: Veaceslav Falico <vfalico@redhat.com>
Date: Mon, 8 Apr 2013 10:29:46 +0200
Subject: [PATCH] bonding: properly protect bonding_exit()
We might race with sysfs/procfs on exit, so protect them with rtnl_lock.
Also, convert all sysfs code to rtnl_trylock()/restart_syscall(), so that
we don't end up in deadlock.
Signed-off-by: Veaceslav Falico <vfalico@redhat.com>
---
drivers/net/bonding/bond_main.c | 13 ++++++-------
drivers/net/bonding/bond_sysfs.c | 11 ++++++++---
2 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 2aac890..6671f89 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -4797,22 +4797,17 @@ static struct rtnl_link_ops bond_link_ops __read_mostly = {
/* Create a new bond based on the specified name and bonding parameters.
* If name is NULL, obtain a suitable "bond%d" name for us.
- * Caller must NOT hold rtnl_lock; we need to release it here before we
- * set up our sysfs entries.
*/
int bond_create(struct net *net, const char *name)
{
struct net_device *bond_dev;
int res;
- rtnl_lock();
-
bond_dev = alloc_netdev_mq(sizeof(struct bonding),
name ? name : "bond%d",
bond_setup, tx_queues);
if (!bond_dev) {
pr_err("%s: eek! can't alloc netdev!\n", name);
- rtnl_unlock();
return -ENOMEM;
}
@@ -4823,9 +4818,9 @@ int bond_create(struct net *net, const char *name)
netif_carrier_off(bond_dev);
- rtnl_unlock();
if (res < 0)
bond_destructor(bond_dev);
+
return res;
}
@@ -4879,7 +4874,9 @@ static int __init bonding_init(void)
bond_create_debugfs();
for (i = 0; i < max_bonds; i++) {
+ rtnl_lock();
res = bond_create(&init_net, NULL);
+ rtnl_unlock();
if (res)
goto err;
}
@@ -4901,8 +4898,10 @@ static void __exit bonding_exit(void)
bond_destroy_debugfs();
+ rtnl_lock();
+ __rtnl_link_unregister(&bond_link_ops);
unregister_pernet_subsys(&bond_net_ops);
- rtnl_link_unregister(&bond_link_ops);
+ rtnl_unlock();
#ifdef CONFIG_NET_POLL_CONTROLLER
/*
diff --git a/drivers/net/bonding/bond_sysfs.c b/drivers/net/bonding/bond_sysfs.c
index ea7a388..cd1d60f 100644
--- a/drivers/net/bonding/bond_sysfs.c
+++ b/drivers/net/bonding/bond_sysfs.c
@@ -59,7 +59,8 @@ static ssize_t bonding_show_bonds(struct class *cls,
int res = 0;
struct bonding *bond;
- rtnl_lock();
+ if (!rtnl_trylock())
+ return restart_syscall();
list_for_each_entry(bond, &bn->dev_list, bond_list) {
if (res > (PAGE_SIZE - IFNAMSIZ)) {
@@ -107,6 +108,9 @@ static ssize_t bonding_store_bonds(struct class *cls,
char *ifname;
int rv, res = count;
+ if (!rtnl_trylock())
+ return restart_syscall();
+
sscanf(buffer, "%16s", command); /* IFNAMSIZ*/
ifname = command + 1;
if ((strlen(command) <= 1) ||
@@ -126,7 +130,6 @@ static ssize_t bonding_store_bonds(struct class *cls,
} else if (command[0] == '-') {
struct net_device *bond_dev;
- rtnl_lock();
bond_dev = bond_get_by_name(bn, ifname);
if (bond_dev) {
pr_info("%s is being deleted...\n", ifname);
@@ -135,10 +138,11 @@ static ssize_t bonding_store_bonds(struct class *cls,
pr_err("unable to delete non-existent %s\n", ifname);
res = -ENODEV;
}
- rtnl_unlock();
} else
goto err_no_cmd;
+ rtnl_unlock();
+
/* Always return either count or an error. If you return 0, you'll
* get called forever, which is bad.
*/
@@ -146,6 +150,7 @@ static ssize_t bonding_store_bonds(struct class *cls,
err_no_cmd:
pr_err("no command found in bonding_masters. Use +ifname or -ifname.\n");
+ rtnl_unlock();
return -EPERM;
}
--
1.7.1
^ permalink raw reply related
* Re: [PATCH 2/2] sh_eth: add R-Car support for real
From: Simon Horman @ 2013-04-08 9:04 UTC (permalink / raw)
To: Sergei Shtylyov; +Cc: netdev, nobuhiro.iwamatsu.yj, linux-sh, phil.edworthy
In-Reply-To: <20130408023936.GA1643@verge.net.au>
On Mon, Apr 08, 2013 at 11:39:37AM +0900, Simon Horman wrote:
> On Fri, Mar 29, 2013 at 12:51:31AM +0300, Sergei Shtylyov wrote:
> > Commit d0418bb7123f44b23d69ac349eec7daf9103472f (net: sh_eth: Add eth support
> > for R8A7779 device) was a failed attempt to add support for one of members of
> > the R-Car SoC family. That's for three reasons: it treated R8A7779 the same
> > as SH7724 except including quite dirty hack adding ECMR_ELB bit to the mask
> > in sh_eth_set_rate() while not removing ECMR_RTM bit (despite it's reserved in
> > R-Car Ether), and it didn't add a new register offset array despite the closest
> > SH_ETH_REG_FAST_SH4 mapping differs by 0x200 to the offsets all the R-Car Ether
> > registers have, and also some of the registers in this old mapping don't exist
> > on R-Car Ether (due to this, SH7724's 'sh_eth_my_cpu_data' structure is not
> > adequeate for R-Car too). Fix all these shortcomings, restoring the SH7724
> > related section to its pristine state...
> >
> > Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
>
> Hi Sergei,
>
> thanks for this and sorry for not noticing it earlier.
> I will try exercising it on the r8a7790 lager.
I am having a little trouble getting bringing up a link on the
r8a7790 lager. I wonder if:
* You know of any sh_eth side changes that need to be made,
other than adding r8a7790 obvious ones relating to adding
ARCH_R8A7790 wherever ARCH_R8A7779 is found.
* You have any sample board code for the marzen/r8a7779 or
bockw/r8a7778 handy.
>
> IIRC you previously mentioned that you were doing work on unravelling
> the #define mess in sh_eth. I am wondering if you have made any progress
> in that area. In particular, other than sh_eth it looks like
> the r8a7740 and r8a7790 could use a common .config. So it would
> be nice if sh_eth could support at least those two in the same build.
>
> > ---
> > The patch is against the David Miller's 'net-next.git' repo.
> >
> > Support for the other members of R-Car family such as R8A7778 and R8A7790 should
> > probably be added when they hit mainline (support for the former is already in
> > the 'next' branch of Simon Horman's 'renesas.git' repo).
> >
> > drivers/net/ethernet/renesas/sh_eth.c | 107 +++++++++++++++++++++++++++++++---
> > include/linux/sh_eth.h | 1
> > 2 files changed, 100 insertions(+), 8 deletions(-)
> >
> > Index: net-next/drivers/net/ethernet/renesas/sh_eth.c
> > ===================================================================
> > --- net-next.orig/drivers/net/ethernet/renesas/sh_eth.c
> > +++ net-next/drivers/net/ethernet/renesas/sh_eth.c
> > @@ -2,7 +2,8 @@
> > * SuperH Ethernet device driver
> > *
> > * Copyright (C) 2006-2012 Nobuhiro Iwamatsu
> > - * Copyright (C) 2008-2012 Renesas Solutions Corp.
> > + * Copyright (C) 2008-2013 Renesas Solutions Corp.
> > + * Copyright (C) 2013 Cogent Embedded, Inc.
> > *
> > * This program is free software; you can redistribute it and/or modify it
> > * under the terms and conditions of the GNU General Public License,
> > @@ -147,6 +148,51 @@ static const u16 sh_eth_offset_gigabit[S
> > [FWALCR1] = 0x00b4,
> > };
> >
> > +static const u16 sh_eth_offset_fast_rcar[SH_ETH_MAX_REGISTER_OFFSET] = {
> > + [ECMR] = 0x0300,
> > + [RFLR] = 0x0308,
> > + [ECSR] = 0x0310,
> > + [ECSIPR] = 0x0318,
> > + [PIR] = 0x0320,
> > + [PSR] = 0x0328,
> > + [RDMLR] = 0x0340,
> > + [IPGR] = 0x0350,
> > + [APR] = 0x0354,
> > + [MPR] = 0x0358,
> > + [RFCF] = 0x0360,
> > + [TPAUSER] = 0x0364,
> > + [TPAUSECR] = 0x0368,
> > + [MAHR] = 0x03c0,
> > + [MALR] = 0x03c8,
> > + [TROCR] = 0x03d0,
> > + [CDCR] = 0x03d4,
> > + [LCCR] = 0x03d8,
> > + [CNDCR] = 0x03dc,
> > + [CEFCR] = 0x03e4,
> > + [FRECR] = 0x03e8,
> > + [TSFRCR] = 0x03ec,
> > + [TLFRCR] = 0x03f0,
> > + [RFCR] = 0x03f4,
> > + [MAFCR] = 0x03f8,
> > +
> > + [EDMR] = 0x0200,
> > + [EDTRR] = 0x0208,
> > + [EDRRR] = 0x0210,
> > + [TDLAR] = 0x0218,
> > + [RDLAR] = 0x0220,
> > + [EESR] = 0x0228,
> > + [EESIPR] = 0x0230,
> > + [TRSCER] = 0x0238,
> > + [RMFCR] = 0x0240,
> > + [TFTR] = 0x0248,
> > + [FDR] = 0x0250,
> > + [RMCR] = 0x0258,
> > + [TFUCR] = 0x0264,
> > + [RFOCR] = 0x0268,
> > + [FCFTR] = 0x0270,
> > + [TRIMD] = 0x027c,
> > +};
> > +
> > static const u16 sh_eth_offset_fast_sh4[SH_ETH_MAX_REGISTER_OFFSET] = {
> > [ECMR] = 0x0100,
> > [RFLR] = 0x0108,
> > @@ -296,7 +342,7 @@ static void sh_eth_select_mii(struct net
> > #endif
> >
> > /* There is CPU dependent code */
> > -#if defined(CONFIG_CPU_SUBTYPE_SH7724) || defined(CONFIG_ARCH_R8A7779)
> > +#if defined(CONFIG_ARCH_R8A7779)
> > #define SH_ETH_RESET_DEFAULT 1
> > static void sh_eth_set_duplex(struct net_device *ndev)
> > {
> > @@ -311,18 +357,60 @@ static void sh_eth_set_duplex(struct net
> > static void sh_eth_set_rate(struct net_device *ndev)
> > {
> > struct sh_eth_private *mdp = netdev_priv(ndev);
> > - unsigned int bits = ECMR_RTM;
> >
> > -#if defined(CONFIG_ARCH_R8A7779)
> > - bits |= ECMR_ELB;
> > -#endif
> > + switch (mdp->speed) {
> > + case 10: /* 10BASE */
> > + sh_eth_write(ndev, sh_eth_read(ndev, ECMR) & ~ECMR_ELB, ECMR);
> > + break;
> > + case 100:/* 100BASE */
> > + sh_eth_write(ndev, sh_eth_read(ndev, ECMR) | ECMR_ELB, ECMR);
> > + break;
> > + default:
> > + break;
> > + }
> > +}
> > +
> > +/* R8A7779 */
> > +static struct sh_eth_cpu_data sh_eth_my_cpu_data = {
> > + .set_duplex = sh_eth_set_duplex,
> > + .set_rate = sh_eth_set_rate,
> > +
> > + .ecsr_value = ECSR_PSRTO | ECSR_LCHNG | ECSR_ICD,
> > + .ecsipr_value = ECSIPR_PSRTOIP | ECSIPR_LCHNGIP | ECSIPR_ICDIP,
> > + .eesipr_value = 0x01ff009f,
> > +
> > + .tx_check = EESR_FTC | EESR_CND | EESR_DLC | EESR_CD | EESR_RTO,
> > + .eesr_err_check = EESR_TWB | EESR_TABT | EESR_RABT | EESR_RDE |
> > + EESR_RFRMER | EESR_TFE | EESR_TDE | EESR_ECI,
> > + .tx_error_check = EESR_TWB | EESR_TABT | EESR_TDE | EESR_TFE,
> > +
> > + .apr = 1,
> > + .mpr = 1,
> > + .tpauser = 1,
> > + .hw_swap = 1,
> > +};
> > +#elif defined(CONFIG_CPU_SUBTYPE_SH7724)
> > +#define SH_ETH_RESET_DEFAULT 1
> > +static void sh_eth_set_duplex(struct net_device *ndev)
> > +{
> > + struct sh_eth_private *mdp = netdev_priv(ndev);
> > +
> > + if (mdp->duplex) /* Full */
> > + sh_eth_write(ndev, sh_eth_read(ndev, ECMR) | ECMR_DM, ECMR);
> > + else /* Half */
> > + sh_eth_write(ndev, sh_eth_read(ndev, ECMR) & ~ECMR_DM, ECMR);
> > +}
> > +
> > +static void sh_eth_set_rate(struct net_device *ndev)
> > +{
> > + struct sh_eth_private *mdp = netdev_priv(ndev);
> >
> > switch (mdp->speed) {
> > case 10: /* 10BASE */
> > - sh_eth_write(ndev, sh_eth_read(ndev, ECMR) & ~bits, ECMR);
> > + sh_eth_write(ndev, sh_eth_read(ndev, ECMR) & ~ECMR_RTM, ECMR);
> > break;
> > case 100:/* 100BASE */
> > - sh_eth_write(ndev, sh_eth_read(ndev, ECMR) | bits, ECMR);
> > + sh_eth_write(ndev, sh_eth_read(ndev, ECMR) | ECMR_RTM, ECMR);
> > break;
> > default:
> > break;
> > @@ -2521,6 +2609,9 @@ static const u16 *sh_eth_get_register_of
> > case SH_ETH_REG_GIGABIT:
> > reg_offset = sh_eth_offset_gigabit;
> > break;
> > + case SH_ETH_REG_FAST_RCAR:
> > + reg_offset = sh_eth_offset_fast_rcar;
> > + break;
> > case SH_ETH_REG_FAST_SH4:
> > reg_offset = sh_eth_offset_fast_sh4;
> > break;
> > Index: net-next/include/linux/sh_eth.h
> > ===================================================================
> > --- net-next.orig/include/linux/sh_eth.h
> > +++ net-next/include/linux/sh_eth.h
> > @@ -6,6 +6,7 @@
> > enum {EDMAC_LITTLE_ENDIAN, EDMAC_BIG_ENDIAN};
> > enum {
> > SH_ETH_REG_GIGABIT,
> > + SH_ETH_REG_FAST_RCAR,
> > SH_ETH_REG_FAST_SH4,
> > SH_ETH_REG_FAST_SH3_SH2
> > };
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-sh" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
> >
^ permalink raw reply
* [PATCH] mac80211_hwsim: Register and bind to driver
From: Martin Pitt @ 2013-04-08 9:06 UTC (permalink / raw)
To: John W. Linville, linux-wireless-u79uwXL29TY76Z2rM5mHXA
Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
linux-kernel-u79uwXL29TY76Z2rM5mHXA, Johannes Berg, Dan Williams
Properly register our mac80211_hwsim_driver, attach it to the platform bus.
Bind newly created hwsim devices to that driver, so that our wlan devices get
a proper "driver" sysfs attribute.
This makes mac80211_hwsim interfaces work with NetworkManager.
Signed-off-by: Martin Pitt <martin.pitt-GeWIH/nMZzLQT0dZR+AlfA@public.gmane.org>
---
drivers/net/wireless/mac80211_hwsim.c | 17 ++++++++++++++++-
1 files changed, 16 insertions(+), 1 deletions(-)
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index 0064d38..50a8b52 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -25,6 +25,7 @@
#include <linux/if_arp.h>
#include <linux/rtnetlink.h>
#include <linux/etherdevice.h>
+#include <linux/platform_device.h>
#include <linux/debugfs.h>
#include <linux/module.h>
#include <linux/ktime.h>
@@ -1675,6 +1676,7 @@ static void mac80211_hwsim_free(void)
debugfs_remove(data->debugfs_ps);
debugfs_remove(data->debugfs);
ieee80211_unregister_hw(data->hw);
+ device_release_driver(data->dev);
device_unregister(data->dev);
ieee80211_free_hw(data->hw);
}
@@ -1683,7 +1685,9 @@ static void mac80211_hwsim_free(void)
static struct device_driver mac80211_hwsim_driver = {
- .name = "mac80211_hwsim"
+ .name = "mac80211_hwsim",
+ .bus = &platform_bus_type,
+ .owner = THIS_MODULE,
};
static const struct net_device_ops hwsim_netdev_ops = {
@@ -2179,6 +2183,8 @@ static int __init init_mac80211_hwsim(void)
if (IS_ERR(hwsim_class))
return PTR_ERR(hwsim_class);
+ driver_register(&mac80211_hwsim_driver);
+
memset(addr, 0, ETH_ALEN);
addr[0] = 0x02;
@@ -2205,6 +2211,14 @@ static int __init init_mac80211_hwsim(void)
goto failed_drvdata;
}
data->dev->driver = &mac80211_hwsim_driver;
+ err = device_bind_driver(data->dev);
+ if (err != 0) {
+ printk(KERN_DEBUG
+ "mac80211_hwsim: device_bind_driver "
+ "failed (%d)\n", err);
+ goto failed_hw;
+ }
+
skb_queue_head_init(&data->pending);
SET_IEEE80211_DEV(hw, data->dev);
@@ -2518,5 +2532,6 @@ static void __exit exit_mac80211_hwsim(void)
mac80211_hwsim_free();
unregister_netdev(hwsim_mon);
+ driver_unregister(&mac80211_hwsim_driver);
}
module_exit(exit_mac80211_hwsim);
--
1.7.2.5
--
Martin Pitt | http://www.piware.de
Ubuntu Developer (www.ubuntu.com) | Debian Developer (www.debian.org)
--
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
* v3.8.5: "TCP: snd_cwnd is nul, please report this bug."
From: Bjørn Mork @ 2013-04-08 9:06 UTC (permalink / raw)
To: Eric Dumazet; +Cc: netdev
Hello,
I just got this message running a Debian experimental
linux-image-3.8-trunk-amd64 kernel, currently based on v3.8.5.
Peeked briefly through the commit adding the message, but I couldn't
figure out what other info you'd need so please ask if there is anything
I can dig up.
I suspect the warning could be related to problems with the iwlwifi
driver and/or access point. The message was immediately followed by a
few messges from iwlwifi:
Apr 8 10:58:09 nemi kernel: [152701.980799] TCP: snd_cwnd is nul, please report this bug.
Apr 8 10:58:33 nemi kernel: [152725.176151] iwlwifi 0000:03:00.0: fail to flush all tx fifo queues
Apr 8 10:58:33 nemi kernel: [152725.185713] wlan0: authenticate with 00:22:90:f9:23:a0
Apr 8 10:58:33 nemi kernel: [152725.185738] wlan0: capabilities/regulatory prevented using AP HT/VHT configuration, downgraded
Apr 8 10:58:33 nemi kernel: [152725.190150] wlan0: send auth to 00:22:90:f9:23:a0 (try 1/3)
Apr 8 10:58:33 nemi kernel: [152725.199812] wlan0: authenticated
Apr 8 10:58:33 nemi kernel: [152725.200020] iwlwifi 0000:03:00.0 wlan0: disabling HT as WMM/QoS is not supported by the AP
Apr 8 10:58:33 nemi kernel: [152725.200027] iwlwifi 0000:03:00.0 wlan0: disabling VHT as WMM/QoS is not supported by the AP
Apr 8 10:58:33 nemi kernel: [152725.204033] wlan0: associate with 00:22:90:f9:23:a0 (try 1/3)
Apr 8 10:58:33 nemi kernel: [152725.207317] wlan0: RX AssocResp from 00:22:90:f9:23:a0 (capab=0x421 status=0 aid=12)
Apr 8 10:58:33 nemi kernel: [152725.210745] wlan0: associated
Bjørn
^ permalink raw reply
* Re: [PATCH] mac80211_hwsim: Register and bind to driver
From: Johannes Berg @ 2013-04-08 9:12 UTC (permalink / raw)
To: Martin Pitt
Cc: John W. Linville, linux-wireless, netdev, linux-kernel,
Dan Williams
In-Reply-To: <20130408090633.GB2818@piware.de>
Looks fine, but ...
> @@ -2179,6 +2183,8 @@ static int __init init_mac80211_hwsim(void)
> if (IS_ERR(hwsim_class))
> return PTR_ERR(hwsim_class);
>
> + driver_register(&mac80211_hwsim_driver);
> +
> memset(addr, 0, ETH_ALEN);
> addr[0] = 0x02;
I think you forgot to update the error path to unregister the driver.
johannes
^ permalink raw reply
* Re: [PATCH 2/2] bonding: fix bonding_masters race condition in bond unloading
From: Nikolay Aleksandrov @ 2013-04-08 9:15 UTC (permalink / raw)
To: Veaceslav Falico; +Cc: netdev, andy, fubar, davem
In-Reply-To: <20130408083044.GA1757@redhat.com>
> Signed-off-by: Veaceslav Falico <vfalico@redhat.com>
> ---
> drivers/net/bonding/bond_main.c | 13 ++++++-------
> drivers/net/bonding/bond_sysfs.c | 11 ++++++++---
> 2 files changed, 14 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/net/bonding/bond_main.c
> b/drivers/net/bonding/bond_main.c
> index 2aac890..6671f89 100644
> --- a/drivers/net/bonding/bond_main.c
> +++ b/drivers/net/bonding/bond_main.c
> @@ -4797,22 +4797,17 @@ static struct rtnl_link_ops bond_link_ops
> __read_mostly = {
>
> /* Create a new bond based on the specified name and bonding parameters.
> * If name is NULL, obtain a suitable "bond%d" name for us.
> - * Caller must NOT hold rtnl_lock; we need to release it here before we
> - * set up our sysfs entries.
> */
> int bond_create(struct net *net, const char *name)
> {
> struct net_device *bond_dev;
> int res;
>
> - rtnl_lock();
> -
> bond_dev = alloc_netdev_mq(sizeof(struct bonding),
> name ? name : "bond%d",
> bond_setup, tx_queues);
> if (!bond_dev) {
> pr_err("%s: eek! can't alloc netdev!\n", name);
> - rtnl_unlock();
> return -ENOMEM;
> }
>
> @@ -4823,9 +4818,9 @@ int bond_create(struct net *net, const char *name)
>
> netif_carrier_off(bond_dev);
>
> - rtnl_unlock();
> if (res < 0)
> bond_destructor(bond_dev);
> +
> return res;
> }
>
bond_destructor calls free_netdev, which is usually called without rtnl
after unregister_netdevice is called under rtnl.
(net/core/dev.c - free_netdev comments)
> @@ -4879,7 +4874,9 @@ static int __init bonding_init(void)
> bond_create_debugfs();
>
> for (i = 0; i < max_bonds; i++) {
> + rtnl_lock();
> res = bond_create(&init_net, NULL);
> + rtnl_unlock();
> if (res)
> goto err;
> }
> @@ -4901,8 +4898,10 @@ static void __exit bonding_exit(void)
>
> bond_destroy_debugfs();
>
> + rtnl_lock();
> + __rtnl_link_unregister(&bond_link_ops);
> unregister_pernet_subsys(&bond_net_ops);
> - rtnl_link_unregister(&bond_link_ops);
> + rtnl_unlock();
>
The usual way is to obtain net_mutex and then rtnl,
this reverses it.
> #ifdef CONFIG_NET_POLL_CONTROLLER
> /*
> diff --git a/drivers/net/bonding/bond_sysfs.c
> b/drivers/net/bonding/bond_sysfs.c
> index ea7a388..cd1d60f 100644
> --- a/drivers/net/bonding/bond_sysfs.c
> +++ b/drivers/net/bonding/bond_sysfs.c
> @@ -59,7 +59,8 @@ static ssize_t bonding_show_bonds(struct class *cls,
> int res = 0;
> struct bonding *bond;
>
> - rtnl_lock();
> + if (!rtnl_trylock())
> + return restart_syscall();
>
> list_for_each_entry(bond, &bn->dev_list, bond_list) {
> if (res > (PAGE_SIZE - IFNAMSIZ)) {
> @@ -107,6 +108,9 @@ static ssize_t bonding_store_bonds(struct class *cls,
> char *ifname;
> int rv, res = count;
>
> + if (!rtnl_trylock())
> + return restart_syscall();
> +
> sscanf(buffer, "%16s", command); /* IFNAMSIZ*/
> ifname = command + 1;
> if ((strlen(command) <= 1) ||
> @@ -126,7 +130,6 @@ static ssize_t bonding_store_bonds(struct class *cls,
> } else if (command[0] == '-') {
> struct net_device *bond_dev;
>
> - rtnl_lock();
> bond_dev = bond_get_by_name(bn, ifname);
> if (bond_dev) {
> pr_info("%s is being deleted...\n", ifname);
> @@ -135,10 +138,11 @@ static ssize_t bonding_store_bonds(struct class
> *cls,
> pr_err("unable to delete non-existent %s\n", ifname);
> res = -ENODEV;
> }
> - rtnl_unlock();
> } else
> goto err_no_cmd;
>
> + rtnl_unlock();
> +
> /* Always return either count or an error. If you return 0, you'll
> * get called forever, which is bad.
> */
> @@ -146,6 +150,7 @@ static ssize_t bonding_store_bonds(struct class *cls,
>
> err_no_cmd:
> pr_err("no command found in bonding_masters. Use +ifname or
> -ifname.\n");
> + rtnl_unlock();
> return -EPERM;
> }
>
^ permalink raw reply
* RE: [PATCH 3.8-stable] r8169: fix auto speed down issue
From: hayeswang @ 2013-04-08 9:21 UTC (permalink / raw)
To: 'Jonghwan Choi', 'nic_swsd'
Cc: stable, netdev, 'David S. Miller',
'Jonghwan Choi'
In-Reply-To: <1365301070-4788-1-git-send-email-jhbird.choi@samsung.com>
From: Jonghwan Choi [mailto:jhbird.choi@gmail.com]
[...]
> This patch looks like it should be in the 3.8-stable tree,
> should we apply it?
Yes.
Best Regards,
Hayes
^ permalink raw reply
* Re: [PATCH 2/2] bonding: fix bonding_masters race condition in bond unloading
From: Veaceslav Falico @ 2013-04-08 9:24 UTC (permalink / raw)
To: Nikolay Aleksandrov; +Cc: netdev, andy, fubar, davem
In-Reply-To: <1365245678-4455-2-git-send-email-nikolay@redhat.com>
On Sat, Apr 06, 2013 at 12:54:38PM +0200, Nikolay Aleksandrov wrote:
>While the bonding module is unloading, it is considered that after
>rtnl_link_unregister all bond devices are destroyed but since no
>synchronization mechanism exists, a new bond device can be created
>via bonding_masters before unregister_pernet_subsys which would
>lead to multiple problems (e.g. NULL pointer dereference, wrong RIP,
>list corruption).
>
>This patch fixes the issue by removing any bond devices left in the
>netns after bonding_masters is removed from sysfs.
>
>Signed-off-by: Nikolay Aleksandrov <nikolay@redhat.com>
>---
> drivers/net/bonding/bond_main.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
Given that this bug is in net tree and we really need a fix to continue
development, adding a second device removal loop is not a big deal
actually, and this can be addressed correctly later in net-next. It's a
really rare bug anyway, and the second loop most of the time would be a
simple no-op, as Nikolay correctly stated.
Acked-by: Veaceslav Falico <vfalico@redhat.com>
^ permalink raw reply
* Re: [PATCH] mac80211_hwsim: Register and bind to driver
From: Martin Pitt @ 2013-04-08 9:28 UTC (permalink / raw)
To: Johannes Berg
Cc: John W. Linville, linux-wireless-u79uwXL29TY76Z2rM5mHXA,
netdev-u79uwXL29TY76Z2rM5mHXA,
linux-kernel-u79uwXL29TY76Z2rM5mHXA, Dan Williams
In-Reply-To: <1365412374.25475.2.camel-8Nb76shvtaUJvtFkdXX2HixXY32XiHfO@public.gmane.org>
Hello Johannes,
Johannes Berg [2013-04-08 11:12 +0200]:
> I think you forgot to update the error path to unregister the driver.
Oops, thanks for spotting. Sending [PATCH v2].
Martin
--
Martin Pitt | http://www.piware.de
Ubuntu Developer (www.ubuntu.com) | Debian Developer (www.debian.org)
--
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
* [PATCH v2] mac80211_hwsim: Register and bind to driver
From: Martin Pitt @ 2013-04-08 9:30 UTC (permalink / raw)
To: John W. Linville, linux-wireless-u79uwXL29TY76Z2rM5mHXA
Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
linux-kernel-u79uwXL29TY76Z2rM5mHXA, Johannes Berg, Dan Williams
Properly register our mac80211_hwsim_driver, attach it to the platform bus.
Bind newly created hwsim devices to that driver, so that our wlan devices get
a proper "driver" sysfs attribute.
This makes mac80211_hwsim interfaces work with NetworkManager.
Signed-off-by: Martin Pitt <martin.pitt-GeWIH/nMZzLQT0dZR+AlfA@public.gmane.org>
---
drivers/net/wireless/mac80211_hwsim.c | 18 +++++++++++++++++-
1 files changed, 17 insertions(+), 1 deletions(-)
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index 0064d38..0a6fb4a 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -25,6 +25,7 @@
#include <linux/if_arp.h>
#include <linux/rtnetlink.h>
#include <linux/etherdevice.h>
+#include <linux/platform_device.h>
#include <linux/debugfs.h>
#include <linux/module.h>
#include <linux/ktime.h>
@@ -1675,6 +1676,7 @@ static void mac80211_hwsim_free(void)
debugfs_remove(data->debugfs_ps);
debugfs_remove(data->debugfs);
ieee80211_unregister_hw(data->hw);
+ device_release_driver(data->dev);
device_unregister(data->dev);
ieee80211_free_hw(data->hw);
}
@@ -1683,7 +1685,9 @@ static void mac80211_hwsim_free(void)
static struct device_driver mac80211_hwsim_driver = {
- .name = "mac80211_hwsim"
+ .name = "mac80211_hwsim",
+ .bus = &platform_bus_type,
+ .owner = THIS_MODULE,
};
static const struct net_device_ops hwsim_netdev_ops = {
@@ -2179,6 +2183,8 @@ static int __init init_mac80211_hwsim(void)
if (IS_ERR(hwsim_class))
return PTR_ERR(hwsim_class);
+ driver_register(&mac80211_hwsim_driver);
+
memset(addr, 0, ETH_ALEN);
addr[0] = 0x02;
@@ -2205,6 +2211,14 @@ static int __init init_mac80211_hwsim(void)
goto failed_drvdata;
}
data->dev->driver = &mac80211_hwsim_driver;
+ err = device_bind_driver(data->dev);
+ if (err != 0) {
+ printk(KERN_DEBUG
+ "mac80211_hwsim: device_bind_driver "
+ "failed (%d)\n", err);
+ goto failed_hw;
+ }
+
skb_queue_head_init(&data->pending);
SET_IEEE80211_DEV(hw, data->dev);
@@ -2506,6 +2520,7 @@ failed_drvdata:
ieee80211_free_hw(hw);
failed:
mac80211_hwsim_free();
+ driver_unregister(&mac80211_hwsim_driver);
return err;
}
module_init(init_mac80211_hwsim);
@@ -2518,5 +2533,6 @@ static void __exit exit_mac80211_hwsim(void)
mac80211_hwsim_free();
unregister_netdev(hwsim_mon);
+ driver_unregister(&mac80211_hwsim_driver);
}
module_exit(exit_mac80211_hwsim);
--
1.7.2.5
Martin Pitt | http://www.piware.de
Ubuntu Developer (www.ubuntu.com) | Debian Developer (www.debian.org)
--
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: [PATCH 1/2] crypto: add CMAC support to CryptoAPI
From: Jussi Kivilinna @ 2013-04-08 9:31 UTC (permalink / raw)
To: Steffen Klassert
Cc: linux-crypto, netdev, Tom St Denis, Herbert Xu, David S. Miller
In-Reply-To: <20130408082416.GW21448@secunet.com>
On 08.04.2013 11:24, Steffen Klassert wrote:
> On Mon, Apr 08, 2013 at 10:48:44AM +0300, Jussi Kivilinna wrote:
>> Patch adds support for NIST recommended block cipher mode CMAC to CryptoAPI.
>>
>> This work is based on Tom St Denis' earlier patch,
>> http://marc.info/?l=linux-crypto-vger&m=135877306305466&w=2
>>
>> Cc: Tom St Denis <tstdenis@elliptictech.com>
>> Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
>
> This patch does not apply clean to the ipsec-next tree
> because of some crypto changes I don't have in ipsec-next.
> The IPsec part should apply to the cryptodev tree,
> so it's probaply the best if we route this patchset
> through the cryptodev tree.
I should have mentioned that the patchset is on top of cryptodev tree and
previous crypto patches that I send yesterday, likely to cause problems
atleast at tcrypt.c:
http://marc.info/?l=linux-crypto-vger&m=136534223503368&w=2
-Jussi
>
> Herbert,
>
> are you going to take these patches?
>
^ permalink raw reply
* Re: [PATCH] net: mvmdio: get and enable optional clock
From: Florian Fainelli @ 2013-04-08 9:32 UTC (permalink / raw)
To: Sebastian Hesselbarth
Cc: David S. Miller, Thomas Petazzoni, Greg Kroah-Hartman, netdev,
linux-kernel
In-Reply-To: <1365332988-9053-1-git-send-email-sebastian.hesselbarth@gmail.com>
Le 04/07/13 13:09, Sebastian Hesselbarth a écrit :
> Marvell mdio driver uses internal registers that can be clock gated on
> some SoCs. This patch just adds optional clock handling, to allow to pass
> and enable the corresponding clock.
>
> Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Looks good to me:
Acked-by: Florian Fainelli <florian@openwrt.org>
--
Florian
^ permalink raw reply
* Re: [PATCH 1/2] crypto: add CMAC support to CryptoAPI
From: Herbert Xu @ 2013-04-08 9:33 UTC (permalink / raw)
To: Steffen Klassert
Cc: Jussi Kivilinna, linux-crypto, netdev, Tom St Denis,
David S. Miller
In-Reply-To: <20130408082416.GW21448@secunet.com>
On Mon, Apr 08, 2013 at 10:24:16AM +0200, Steffen Klassert wrote:
> On Mon, Apr 08, 2013 at 10:48:44AM +0300, Jussi Kivilinna wrote:
> > Patch adds support for NIST recommended block cipher mode CMAC to CryptoAPI.
> >
> > This work is based on Tom St Denis' earlier patch,
> > http://marc.info/?l=linux-crypto-vger&m=135877306305466&w=2
> >
> > Cc: Tom St Denis <tstdenis@elliptictech.com>
> > Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
>
> This patch does not apply clean to the ipsec-next tree
> because of some crypto changes I don't have in ipsec-next.
> The IPsec part should apply to the cryptodev tree,
> so it's probaply the best if we route this patchset
> through the cryptodev tree.
>
> Herbert,
>
> are you going to take these patches?
Sure I can do that.
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] net: add checks if dev->netdev_ops is NULL in register_netdevice()
From: dingtianhong @ 2013-04-08 9:43 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Alexander Duyck, Netdev, Li Zefan,
Xinwei Hu
In some cases netdev->netdev_ops could be NULL in the register_netdevice(),
thus a NULL point deference happens and lead to oops:
[ 8260.836400] BUG: unable to handle kernel NULL pointer dereference at (null)
[ 8260.955306] IP: [<ffffffff81388333>] register_netdevice+0x73/0x2d0
[ 8261.054888] PGD 2f4dcd067 PUD 2f4de0067 PMD 0
[ 8261.134244] Oops: 0000 [#1] SMP
[ 8261.198938] CPU 0
[ 8262.605182] RIP: 0010:[<ffffffff81388333>] [<ffffffff81388333>] register_netdevice+0x73/0x2d0
[ 8262.741859] RSP: 0018:ffff8802f489f9f8 EFLAGS: 00010246
[ 8262.839463] RAX: 0000000000000000 RBX: ffff8802f4e73000 RCX: ffff8802f4e73006
[ 8262.959484] RDX: 0000000000000000 RSI: 00000000daa92527 RDI: ffff8802f4e73006
[ 8263.079352] RBP: 0000000000000000 R08: 0000000000000000 R09: ffff880327d898c0
[ 8263.198987] R10: 00000000000000c1 R11: 0000000000000000 R12: ffffffff81fed080
[ 8263.318401] R13: ffffffff81fed080 R14: ffff8802f4e73000 R15: 0000000000000000
[ 8263.438014] FS: 00007f01dfa81700(0000) GS:ffff88033f200000(0000) knlGS:0000000000000000
[ 8263.569778] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 8263.673859] CR2: 0000000000000000 CR3: 000000032893f000 CR4: 00000000000006f0
[ 8263.794922] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[ 8263.915734] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
[ 8264.036251] Process rmcli (pid: 14089, threadinfo ffff8802f489e000, task ffff880324708080)
[ 8264.170961] Stack:
[ 8264.231328] ffff88032a3c0000 0000000000000003 0000000000000003 ffff88032a3c0000
[ 8264.356967] 0000000000000003 ffffffffa039dbcb 000000003ec216c0 0000000000000246
[ 8264.483081] 382e30363238205b 00205d3900000006 ff00305f63696e76 0000000000000003
We should check the point to avoid the oops.
Signed-off-by: Ding Tianhong <dingtianhong@huawei.com>
---
net/core/dev.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/core/dev.c b/net/core/dev.c
index e7d68ed..596a11e 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -5159,7 +5159,7 @@ int register_netdevice(struct net_device *dev)
goto out;
/* Init, if this function is available */
- if (dev->netdev_ops->ndo_init) {
+ if (dev->netdev_ops && dev->netdev_ops->ndo_init) {
ret = dev->netdev_ops->ndo_init(dev);
if (ret) {
if (ret > 0)
-- 1.8.0
^ permalink raw reply related
* Re: PROBLEM: IPv6 TCP-Connections resetting
From: Tetja Rediske @ 2013-04-08 9:56 UTC (permalink / raw)
To: christoph.paasch
Cc: Eric Dumazet, Hannes Frederic Sowa, djduanjiong, netdev,
steffen.klassert, Neal Cardwell, David Miller
In-Reply-To: <2517820.omWyusa00U@cpaasch-mac>
Hi,
> I made a setup to trigger the ICMPv6 Redirect.
> Yes, the bug was added by ec18d9a26 (ipv6: Add redirect support to
> all protocol icmp error handlers.), but prior to 093d04d4 (ipv6:
> Change skb->data before using icmpv6_notify() to propagate redirect)
> the stack did not enter tcp_v6_err upon a redirect message.
>
> This, because inside icmpv6_notify, skb->data did not point to the
> inner IP header. So, when icmpv6_notify looks up the
> protocol-handler, it will not match on tcp_v6_err.
with the goto line I can't see this behaviour anymore.
Thanks!
Tetja
^ permalink raw reply
* Re: [PATCH 2/2] bonding: fix bonding_masters race condition in bond unloading
From: Veaceslav Falico @ 2013-04-08 10:08 UTC (permalink / raw)
To: Nikolay Aleksandrov; +Cc: netdev, andy, fubar, davem
In-Reply-To: <51628AAB.30908@redhat.com>
On Mon, Apr 08, 2013 at 11:15:23AM +0200, Nikolay Aleksandrov wrote:
<snip>
>> @@ -4823,9 +4818,9 @@ int bond_create(struct net *net, const char *name)
>>
>> netif_carrier_off(bond_dev);
>>
>> - rtnl_unlock();
>> if (res < 0)
>> bond_destructor(bond_dev);
>> +
>> return res;
>> }
>>
>bond_destructor calls free_netdev, which is usually called without rtnl
>after unregister_netdevice is called under rtnl.
>(net/core/dev.c - free_netdev comments)
It shouldn't be called under rtnl_lock() mainly because of sysfs(), however
with this patch we've added rtnl_trylock() to it and should be safe.
It's already used under rtnl_lock() in several places already, so I think
it's safe.
>> @@ -4879,7 +4874,9 @@ static int __init bonding_init(void)
>> bond_create_debugfs();
>>
>> for (i = 0; i < max_bonds; i++) {
>> + rtnl_lock();
>> res = bond_create(&init_net, NULL);
>> + rtnl_unlock();
>> if (res)
>> goto err;
>> }
>> @@ -4901,8 +4898,10 @@ static void __exit bonding_exit(void)
>>
>> bond_destroy_debugfs();
>>
>> + rtnl_lock();
>> + __rtnl_link_unregister(&bond_link_ops);
>> unregister_pernet_subsys(&bond_net_ops);
>> - rtnl_link_unregister(&bond_link_ops);
>> + rtnl_unlock();
>>
>The usual way is to obtain net_mutex and then rtnl,
>this reverses it.
Good point, we might easily deadlock here. I'll dig and come back if I'll
find a way to avoid it...
>> #ifdef CONFIG_NET_POLL_CONTROLLER
>> /*
>> diff --git a/drivers/net/bonding/bond_sysfs.c
>> b/drivers/net/bonding/bond_sysfs.c
>> index ea7a388..cd1d60f 100644
>> --- a/drivers/net/bonding/bond_sysfs.c
>> +++ b/drivers/net/bonding/bond_sysfs.c
>> @@ -59,7 +59,8 @@ static ssize_t bonding_show_bonds(struct class *cls,
>> int res = 0;
>> struct bonding *bond;
>>
>> - rtnl_lock();
>> + if (!rtnl_trylock())
>> + return restart_syscall();
>>
>> list_for_each_entry(bond, &bn->dev_list, bond_list) {
>> if (res > (PAGE_SIZE - IFNAMSIZ)) {
>> @@ -107,6 +108,9 @@ static ssize_t bonding_store_bonds(struct class *cls,
>> char *ifname;
>> int rv, res = count;
>>
>> + if (!rtnl_trylock())
>> + return restart_syscall();
>> +
>> sscanf(buffer, "%16s", command); /* IFNAMSIZ*/
>> ifname = command + 1;
>> if ((strlen(command) <= 1) ||
>> @@ -126,7 +130,6 @@ static ssize_t bonding_store_bonds(struct class *cls,
>> } else if (command[0] == '-') {
>> struct net_device *bond_dev;
>>
>> - rtnl_lock();
>> bond_dev = bond_get_by_name(bn, ifname);
>> if (bond_dev) {
>> pr_info("%s is being deleted...\n", ifname);
>> @@ -135,10 +138,11 @@ static ssize_t bonding_store_bonds(struct class
>> *cls,
>> pr_err("unable to delete non-existent %s\n", ifname);
>> res = -ENODEV;
>> }
>> - rtnl_unlock();
>> } else
>> goto err_no_cmd;
>>
>> + rtnl_unlock();
>> +
>> /* Always return either count or an error. If you return 0, you'll
>> * get called forever, which is bad.
>> */
>> @@ -146,6 +150,7 @@ static ssize_t bonding_store_bonds(struct class *cls,
>>
>> err_no_cmd:
>> pr_err("no command found in bonding_masters. Use +ifname or
>> -ifname.\n");
>> + rtnl_unlock();
>> return -EPERM;
>> }
>>
>
^ permalink raw reply
* Re: [PATCH] Make sure GRED backlog does not get screwed up.
From: Jamal Hadi Salim @ 2013-04-08 10:26 UTC (permalink / raw)
To: Magnus Gille; +Cc: netdev
In-Reply-To: <CAD-Y_xtAvq5+mVe-=VDCDntY-NE2Oq+mhv56g6d8Tb2uiHw6bw@mail.gmail.com>
Hi,
please use my proper address (in the From:) for faster response.
On 13-04-02 02:32 PM, Magnus Gille wrote:
> First patch, comments, feedback, suggestions are welcome. Before this patch
> we could end up with a 4GB backlog on certain DPs without any packets. The
> patch is created against net-next.
>
> If a packet is enqueued on a GRED qdisc before the DPs are setup the packet
> will not be accounted for in the DP backlog queue.
In such a case, the packet will end up in the default queue
> When the packet later
> gets
> dequeued from the DP queue it will subtract the length from the DP backlog
> but,
> since the packet was never accounted for we now wrap the backlog around.
> Fixed
> this by making sure we never subtract more than what's present in the
> backlog.
When no DPs set: if the packet was enqueued in a default queue,
at dequeue it will be pulled from the default queue.
What am i missing?
cheers,
jamal
^ permalink raw reply
* Re: [PATCH 08/16] iucv: Fix missing msg_namelen update in iucv_sock_recvmsg()
From: Ursula Braun @ 2013-04-08 11:14 UTC (permalink / raw)
To: Mathias Krause
Cc: David S. Miller, netdev, Allan Stephens, Aloisio Almeida Jr,
Andy King, Arnaldo Carvalho de Melo, Dmitry Torokhov,
George Zhang, Gustavo Padovan, Johan Hedberg, Jon Maloy,
Lauro Ramos Venancio, Marcel Holtmann, Ralf Baechle, Samuel Ortiz,
Samuel Ortiz, Sjur Braendeland, Ursula Braun, Brad Spengler
In-Reply-To: <1365335522-29931-9-git-send-email-minipli@googlemail.com>
On Sun, 2013-04-07 at 13:51 +0200, Mathias Krause wrote:
> The current code does not fill the msg_name member in case it is set.
> It also does not set the msg_namelen member to 0 and therefore makes
> net/socket.c leak the local, uninitialized sockaddr_storage variable
> to userland -- 128 bytes of kernel stack memory.
>
> Fix that by simply setting msg_namelen to 0 as obviously nobody cared
> about iucv_sock_recvmsg() not filling the msg_name in case it was set.
>
> Cc: Ursula Braun <ursula.braun@de.ibm.com>
> Signed-off-by: Mathias Krause <minipli@googlemail.com>
> ---
> Remark: I failed to test that one as I've no access to a S390 system.
>
> net/iucv/af_iucv.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/net/iucv/af_iucv.c b/net/iucv/af_iucv.c
> index a7d11ffe..bf69358 100644
> --- a/net/iucv/af_iucv.c
> +++ b/net/iucv/af_iucv.c
> @@ -1328,6 +1328,8 @@ static int iucv_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
> struct sk_buff *skb, *rskb, *cskb;
> int err = 0;
>
> + msg->msg_namelen = 0;
> +
> if ((sk->sk_state == IUCV_DISCONN) &&
> skb_queue_empty(&iucv->backlog_skb_q) &&
> skb_queue_empty(&sk->sk_receive_queue) &&
Acked-by: Ursula Braun <ursula.braun@de.ibm.com>
^ permalink raw reply
* Re: [RFC PATCH ipsec] xfrm: use the right dev to fill xdst
From: Steffen Klassert @ 2013-04-08 11:42 UTC (permalink / raw)
To: Daniel Baluta; +Cc: Nicolas Dichtel, herbert, davem, netdev
In-Reply-To: <CAEnQRZDUjaL56AggThN50sYJpA8diQdQ85D4xCqpwtv8PbR7mg@mail.gmail.com>
On Fri, Apr 05, 2013 at 03:59:59PM +0300, Daniel Baluta wrote:
> On Fri, Apr 5, 2013 at 12:46 PM, Steffen Klassert
> <steffen.klassert@secunet.com> wrote:
> > On Thu, Apr 04, 2013 at 05:12:42PM +0200, Nicolas Dichtel wrote:
> >> Commit bc8e4b954e46 (xfrm6: ensure to use the same dev when building a bundle)
> >> broke IPsec for IPv4 over IPv6 tunnels (because dev points to an IPv4 only
> >> interface, hence in6_dev_get(dev) returns NULL.
> >
> > Can you give some informations on how to reproduce this? I'm running
> > interfamily tunnels on our testing environment and it seems to
> > work fine.
>
> I can hit this in our setup while using some internal custom simulated
> interfaces.
>
> Anyhow, this should be reproducible with a classic IPv6 IPsec over
> IPv4 test. Please make sure
> that the IPv4 interface doesn't have an IPv6 address set up.
>
> Quoting from commit bc8e4b954e46 (xfrm6: ensure to use the same dev
> when building a bundle):
>
> - xdst->u.rt6.rt6i_idev = in6_dev_get(rt->u.dst.dev);
> + xdst->u.rt6.rt6i_idev = in6_dev_get(dev);
>
> dev points to IPv4 endpoint and if it doesn't have an IPv6 address
> associated then
> in6_dev_get(dev) will return NULL.
I have ipv6 compiled into the kernel. So when I set up a netdevice, a
struct inet6_dev is allocated and associated. Therefore I have always
a valid pointer, even if I disable ipv6 for that device. That's probaply
why I can't reproduce it. I'll change my configuration and try again.
^ permalink raw reply
* [net-next.git 1/5] stmmac: review driver documentation
From: Giuseppe CAVALLARO @ 2013-04-08 12:09 UTC (permalink / raw)
To: netdev; +Cc: eric.dumazet, bhutchings, shiraz.hashim, Giuseppe Cavallaro
In-Reply-To: <1365423003-23959-1-git-send-email-peppe.cavallaro@st.com>
This patch reviews the driver documentation file;
for example, there were some new fields (in the driver
module parameter section) and the ptp files were
not documented.
Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@st.com>
---
Documentation/networking/stmmac.txt | 12 ++++++++----
1 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/Documentation/networking/stmmac.txt b/Documentation/networking/stmmac.txt
index 8efe0b3..654d2e5 100644
--- a/Documentation/networking/stmmac.txt
+++ b/Documentation/networking/stmmac.txt
@@ -1,6 +1,6 @@
STMicroelectronics 10/100/1000 Synopsys Ethernet driver
-Copyright (C) 2007-2010 STMicroelectronics Ltd
+Copyright (C) 2007-2013 STMicroelectronics Ltd
Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>
This is the driver for the MAC 10/100/1000 on-chip Ethernet controllers
@@ -10,7 +10,7 @@ Currently this network device driver is for all STM embedded MAC/GMAC
(i.e. 7xxx/5xxx SoCs), SPEAr (arm), Loongson1B (mips) and XLINX XC2V3000
FF1152AMT0221 D1215994A VIRTEX FPGA board.
-DWC Ether MAC 10/100/1000 Universal version 3.60a (and older) and DWC Ether
+DWC Ether MAC 10/100/1000 Universal version 3.70a (and older) and DWC Ether
MAC 10/100 Universal version 4.0 have been used for developing this driver.
This driver supports both the platform bus and PCI.
@@ -32,6 +32,8 @@ The kernel configuration option is STMMAC_ETH:
watchdog: transmit timeout (in milliseconds);
flow_ctrl: Flow control ability [on/off];
pause: Flow Control Pause Time;
+ eee_timer: tx EEE timer;
+ chain_mode: select chain mode instead of ring.
3) Command line options
Driver parameters can be also passed in command line by using:
@@ -164,12 +166,12 @@ Where:
o bus_setup: perform HW setup of the bus. For example, on some ST platforms
this field is used to configure the AMBA bridge to generate more
efficient STBus traffic.
- o init/exit: callbacks used for calling a custom initialisation;
+ o init/exit: callbacks used for calling a custom initialization;
this is sometime necessary on some platforms (e.g. ST boxes)
where the HW needs to have set some PIO lines or system cfg
registers.
o custom_cfg/custom_data: this is a custom configuration that can be passed
- while initialising the resources.
+ while initializing the resources.
o bsp_priv: another private poiter.
For MDIO bus The we have:
@@ -273,6 +275,8 @@ reset procedure etc).
o norm_desc.c: functions for handling normal descriptors;
o chain_mode.c/ring_mode.c:: functions to manage RING/CHAINED modes;
o mmc_core.c/mmc.h: Management MAC Counters;
+ o stmmac_hwtstamp.c: HW timestamp support for PTP
+ o stmmac_ptp.c: PTP 1588 clock
5) Debug Information
--
1.7.4.4
^ permalink raw reply related
* [net-next.git 0/5] stmmac code tidy-up (v2)
From: Giuseppe CAVALLARO @ 2013-04-08 12:09 UTC (permalink / raw)
To: netdev; +Cc: eric.dumazet, bhutchings, shiraz.hashim, Giuseppe Cavallaro
These patches review and tidy-up the driver to respect the codying-style rules
where there were some problems.
Also now kernel-doc passes w/o any warnings.
These review the stmmac.txt where some new fields have not been
updated after adding new supports.
There is a patch to review the private structure trying to reorganize all the fields
in order to keep adjacent fields for cache effect (this patch is the V2 because
already discussed in the mailing list). I have seen that there are not
regressions when test on UP and SMP systems indeed.
In these patches I have removed two old patches for memory barrier and GRO.
We discussed about these in the mainling list and these had to be discarded.
Giuseppe Cavallaro (5):
stmmac: review driver documentation
stmmac: improve/review and fix kernel-doc
stmmac: code tidy-up
stmmac: review private structure fields
stmmac: prefetch all dma_erx when use extend_desc
Documentation/networking/stmmac.txt | 12 +-
drivers/net/ethernet/stmicro/stmmac/chain_mode.c | 12 +-
drivers/net/ethernet/stmicro/stmmac/common.h | 89 ++--
drivers/net/ethernet/stmicro/stmmac/descs.h | 6 +-
drivers/net/ethernet/stmicro/stmmac/descs_com.h | 3 +-
drivers/net/ethernet/stmicro/stmmac/dwmac1000.h | 69 ++--
.../net/ethernet/stmicro/stmmac/dwmac1000_core.c | 70 ++--
.../net/ethernet/stmicro/stmmac/dwmac1000_dma.c | 23 +-
.../net/ethernet/stmicro/stmmac/dwmac100_core.c | 28 +-
drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c | 26 +-
drivers/net/ethernet/stmicro/stmmac/dwmac_dma.h | 4 +-
drivers/net/ethernet/stmicro/stmmac/mmc.h | 3 +-
drivers/net/ethernet/stmicro/stmmac/norm_desc.c | 4 +-
drivers/net/ethernet/stmicro/stmmac/ring_mode.c | 2 +-
drivers/net/ethernet/stmicro/stmmac/stmmac.h | 72 ++--
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 462 ++++++++++++--------
drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 2 +-
drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c | 2 +-
drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c | 8 +-
19 files changed, 496 insertions(+), 401 deletions(-)
--
1.7.4.4
^ 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