* [patch net-next 0/3] team: remove sychronize_rcu() calls
@ 2013-06-10 15:42 Jiri Pirko
2013-06-10 15:42 ` [patch net-next 1/3] team: remove synchronize_rcu() called during queue override change Jiri Pirko
` (3 more replies)
0 siblings, 4 replies; 10+ messages in thread
From: Jiri Pirko @ 2013-06-10 15:42 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, fbl
Jiri Pirko (3):
team: remove synchronize_rcu() called during queue override change
team: use kfree_rcu instead of synchronize_rcu in team_port_dev
team: remove synchronize_rcu() called during port disable
drivers/net/team/team.c | 84 ++++++++++++++++++++------------
drivers/net/team/team_mode_loadbalance.c | 3 +-
drivers/net/team/team_mode_roundrobin.c | 3 +-
include/linux/if_team.h | 11 +++++
4 files changed, 66 insertions(+), 35 deletions(-)
--
1.8.1.4
^ permalink raw reply [flat|nested] 10+ messages in thread
* [patch net-next 1/3] team: remove synchronize_rcu() called during queue override change
2013-06-10 15:42 [patch net-next 0/3] team: remove sychronize_rcu() calls Jiri Pirko
@ 2013-06-10 15:42 ` Jiri Pirko
2013-06-11 0:48 ` Flavio Leitner
2013-06-10 15:42 ` [patch net-next 2/3] team: use kfree_rcu instead of synchronize_rcu in team_port_dev Jiri Pirko
` (2 subsequent siblings)
3 siblings, 1 reply; 10+ messages in thread
From: Jiri Pirko @ 2013-06-10 15:42 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, fbl
This patch removes synchronize_rcu() from function
__team_queue_override_port_del(). That can be done because it is ok to
do list_del_rcu() and list_add_tail_rcu() on the same list_head member
without calling synchronize_rcu() in between. A bit of refactoring
needed to be done because INIT_LIST_HEAD needed to be removed (to not
kill the forward pointer) as well.
Signed-off-by: Jiri Pirko <jiri@resnulli.us>
---
drivers/net/team/team.c | 63 ++++++++++++++++++++++++++++++++++++-------------
1 file changed, 47 insertions(+), 16 deletions(-)
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
index 4ac10f2..f00446e 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -725,9 +725,9 @@ static bool team_queue_override_transmit(struct team *team, struct sk_buff *skb)
static void __team_queue_override_port_del(struct team *team,
struct team_port *port)
{
+ if (!port->queue_id)
+ return;
list_del_rcu(&port->qom_list);
- synchronize_rcu();
- INIT_LIST_HEAD(&port->qom_list);
}
static bool team_queue_override_port_has_gt_prio_than(struct team_port *port,
@@ -749,9 +749,8 @@ static void __team_queue_override_port_add(struct team *team,
struct list_head *qom_list;
struct list_head *node;
- if (!port->queue_id || !team_port_enabled(port))
+ if (!port->queue_id)
return;
-
qom_list = __team_get_qom_list(team, port->queue_id);
node = qom_list;
list_for_each_entry(cur, qom_list, qom_list) {
@@ -768,7 +767,7 @@ static void __team_queue_override_enabled_check(struct team *team)
bool enabled = false;
list_for_each_entry(port, &team->port_list, list) {
- if (!list_empty(&port->qom_list)) {
+ if (port->queue_id) {
enabled = true;
break;
}
@@ -780,14 +779,44 @@ static void __team_queue_override_enabled_check(struct team *team)
team->queue_override_enabled = enabled;
}
-static void team_queue_override_port_refresh(struct team *team,
- struct team_port *port)
+static void team_queue_override_port_prio_changed(struct team *team,
+ struct team_port *port)
{
+ if (!port->queue_id || team_port_enabled(port))
+ return;
__team_queue_override_port_del(team, port);
__team_queue_override_port_add(team, port);
__team_queue_override_enabled_check(team);
}
+static void team_queue_override_port_change_queue_id(struct team *team,
+ struct team_port *port,
+ u16 new_queue_id)
+{
+ if (team_port_enabled(port)) {
+ __team_queue_override_port_del(team, port);
+ port->queue_id = new_queue_id;
+ __team_queue_override_port_add(team, port);
+ __team_queue_override_enabled_check(team);
+ } else {
+ port->queue_id = new_queue_id;
+ }
+}
+
+static void team_queue_override_port_add(struct team *team,
+ struct team_port *port)
+{
+ __team_queue_override_port_add(team, port);
+ __team_queue_override_enabled_check(team);
+}
+
+static void team_queue_override_port_del(struct team *team,
+ struct team_port *port)
+{
+ __team_queue_override_port_del(team, port);
+ __team_queue_override_enabled_check(team);
+}
+
/****************
* Port handling
@@ -819,7 +848,7 @@ static void team_port_enable(struct team *team,
hlist_add_head_rcu(&port->hlist,
team_port_index_hash(team, port->index));
team_adjust_ops(team);
- team_queue_override_port_refresh(team, port);
+ team_queue_override_port_add(team, port);
if (team->ops.port_enabled)
team->ops.port_enabled(team, port);
}
@@ -848,7 +877,7 @@ static void team_port_disable(struct team *team,
hlist_del_rcu(&port->hlist);
__reconstruct_port_hlist(team, port->index);
port->index = -1;
- team_queue_override_port_refresh(team, port);
+ team_queue_override_port_del(team, port);
__team_adjust_ops(team, team->en_port_count - 1);
/*
* Wait until readers see adjusted ops. This ensures that
@@ -1259,9 +1288,12 @@ static int team_priority_option_set(struct team *team,
struct team_gsetter_ctx *ctx)
{
struct team_port *port = ctx->info->port;
+ s32 priority = ctx->data.s32_val;
- port->priority = ctx->data.s32_val;
- team_queue_override_port_refresh(team, port);
+ if (port->priority == priority)
+ return 0;
+ port->priority = priority;
+ team_queue_override_port_prio_changed(team, port);
return 0;
}
@@ -1278,17 +1310,16 @@ static int team_queue_id_option_set(struct team *team,
struct team_gsetter_ctx *ctx)
{
struct team_port *port = ctx->info->port;
+ u16 new_queue_id = ctx->data.u32_val;
- if (port->queue_id == ctx->data.u32_val)
+ if (port->queue_id == new_queue_id)
return 0;
- if (ctx->data.u32_val >= team->dev->real_num_tx_queues)
+ if (new_queue_id >= team->dev->real_num_tx_queues)
return -EINVAL;
- port->queue_id = ctx->data.u32_val;
- team_queue_override_port_refresh(team, port);
+ team_queue_override_port_change_queue_id(team, port, new_queue_id);
return 0;
}
-
static const struct team_option team_options[] = {
{
.name = "mode",
--
1.8.1.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [patch net-next 2/3] team: use kfree_rcu instead of synchronize_rcu in team_port_dev
2013-06-10 15:42 [patch net-next 0/3] team: remove sychronize_rcu() calls Jiri Pirko
2013-06-10 15:42 ` [patch net-next 1/3] team: remove synchronize_rcu() called during queue override change Jiri Pirko
@ 2013-06-10 15:42 ` Jiri Pirko
2013-06-10 15:42 ` [patch net-next 3/3] team: remove synchronize_rcu() called during port disable Jiri Pirko
2013-06-12 10:10 ` [patch net-next 0/3] team: remove sychronize_rcu() calls David Miller
3 siblings, 0 replies; 10+ messages in thread
From: Jiri Pirko @ 2013-06-10 15:42 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, fbl
Signed-off-by: Jiri Pirko <jiri@resnulli.us>
---
drivers/net/team/team.c | 3 +--
include/linux/if_team.h | 1 +
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
index f00446e..4982aed 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -1192,8 +1192,7 @@ static int team_port_del(struct team *team, struct net_device *port_dev)
team_port_set_orig_dev_addr(port);
dev_set_mtu(port_dev, port->orig.mtu);
- synchronize_rcu();
- kfree(port);
+ kfree_rcu(port, rcu);
netdev_info(dev, "Port device %s removed\n", portname);
__team_compute_features(team);
diff --git a/include/linux/if_team.h b/include/linux/if_team.h
index 16fae64..556b791 100644
--- a/include/linux/if_team.h
+++ b/include/linux/if_team.h
@@ -69,6 +69,7 @@ struct team_port {
s32 priority; /* lower number ~ higher priority */
u16 queue_id;
struct list_head qom_list; /* node in queue override mapping list */
+ struct rcu_head rcu;
long mode_priv[0];
};
--
1.8.1.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [patch net-next 3/3] team: remove synchronize_rcu() called during port disable
2013-06-10 15:42 [patch net-next 0/3] team: remove sychronize_rcu() calls Jiri Pirko
2013-06-10 15:42 ` [patch net-next 1/3] team: remove synchronize_rcu() called during queue override change Jiri Pirko
2013-06-10 15:42 ` [patch net-next 2/3] team: use kfree_rcu instead of synchronize_rcu in team_port_dev Jiri Pirko
@ 2013-06-10 15:42 ` Jiri Pirko
2013-06-12 10:10 ` [patch net-next 0/3] team: remove sychronize_rcu() calls David Miller
3 siblings, 0 replies; 10+ messages in thread
From: Jiri Pirko @ 2013-06-10 15:42 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, fbl
Check the unlikely case of team->en_port_count == 0 before modulo
operation.
Signed-off-by: Jiri Pirko <jiri@resnulli.us>
---
drivers/net/team/team.c | 20 +++++---------------
drivers/net/team/team_mode_loadbalance.c | 3 +--
drivers/net/team/team_mode_roundrobin.c | 3 ++-
include/linux/if_team.h | 10 ++++++++++
4 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
index 4982aed..bff7e0b 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -525,31 +525,26 @@ static void team_set_no_mode(struct team *team)
team->mode = &__team_no_mode;
}
-static void __team_adjust_ops(struct team *team, int en_port_count)
+static void team_adjust_ops(struct team *team)
{
/*
* To avoid checks in rx/tx skb paths, ensure here that non-null and
* correct ops are always set.
*/
- if (!en_port_count || !team_is_mode_set(team) ||
+ if (!team->en_port_count || !team_is_mode_set(team) ||
!team->mode->ops->transmit)
team->ops.transmit = team_dummy_transmit;
else
team->ops.transmit = team->mode->ops->transmit;
- if (!en_port_count || !team_is_mode_set(team) ||
+ if (!team->en_port_count || !team_is_mode_set(team) ||
!team->mode->ops->receive)
team->ops.receive = team_dummy_receive;
else
team->ops.receive = team->mode->ops->receive;
}
-static void team_adjust_ops(struct team *team)
-{
- __team_adjust_ops(team, team->en_port_count);
-}
-
/*
* We can benefit from the fact that it's ensured no port is present
* at the time of mode change. Therefore no packets are in fly so there's no
@@ -877,14 +872,9 @@ static void team_port_disable(struct team *team,
hlist_del_rcu(&port->hlist);
__reconstruct_port_hlist(team, port->index);
port->index = -1;
- team_queue_override_port_del(team, port);
- __team_adjust_ops(team, team->en_port_count - 1);
- /*
- * Wait until readers see adjusted ops. This ensures that
- * readers never see team->en_port_count == 0
- */
- synchronize_rcu();
team->en_port_count--;
+ team_queue_override_port_del(team, port);
+ team_adjust_ops(team);
}
#define TEAM_VLAN_FEATURES (NETIF_F_ALL_CSUM | NETIF_F_SG | \
diff --git a/drivers/net/team/team_mode_loadbalance.c b/drivers/net/team/team_mode_loadbalance.c
index cdc31b5..829a9cd 100644
--- a/drivers/net/team/team_mode_loadbalance.c
+++ b/drivers/net/team/team_mode_loadbalance.c
@@ -112,9 +112,8 @@ static struct team_port *lb_hash_select_tx_port(struct team *team,
struct sk_buff *skb,
unsigned char hash)
{
- int port_index;
+ int port_index = team_num_to_port_index(team, hash);
- port_index = hash % team->en_port_count;
return team_get_port_by_index_rcu(team, port_index);
}
diff --git a/drivers/net/team/team_mode_roundrobin.c b/drivers/net/team/team_mode_roundrobin.c
index 472623f..5366585 100644
--- a/drivers/net/team/team_mode_roundrobin.c
+++ b/drivers/net/team/team_mode_roundrobin.c
@@ -30,7 +30,8 @@ static bool rr_transmit(struct team *team, struct sk_buff *skb)
struct team_port *port;
int port_index;
- port_index = rr_priv(team)->sent_packets++ % team->en_port_count;
+ port_index = team_num_to_port_index(team,
+ rr_priv(team)->sent_packets++);
port = team_get_port_by_index_rcu(team, port_index);
if (unlikely(!port))
goto drop;
diff --git a/include/linux/if_team.h b/include/linux/if_team.h
index 556b791..f6156f9 100644
--- a/include/linux/if_team.h
+++ b/include/linux/if_team.h
@@ -229,6 +229,16 @@ static inline struct team_port *team_get_port_by_index(struct team *team,
return port;
return NULL;
}
+
+static inline int team_num_to_port_index(struct team *team, int num)
+{
+ int en_port_count = ACCESS_ONCE(team->en_port_count);
+
+ if (unlikely(!en_port_count))
+ return 0;
+ return num % en_port_count;
+}
+
static inline struct team_port *team_get_port_by_index_rcu(struct team *team,
int port_index)
{
--
1.8.1.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [patch net-next 1/3] team: remove synchronize_rcu() called during queue override change
2013-06-10 15:42 ` [patch net-next 1/3] team: remove synchronize_rcu() called during queue override change Jiri Pirko
@ 2013-06-11 0:48 ` Flavio Leitner
2013-06-11 5:40 ` Jiri Pirko
0 siblings, 1 reply; 10+ messages in thread
From: Flavio Leitner @ 2013-06-11 0:48 UTC (permalink / raw)
To: Jiri Pirko; +Cc: netdev, davem, edumazet
On Mon, Jun 10, 2013 at 05:42:23PM +0200, Jiri Pirko wrote:
> This patch removes synchronize_rcu() from function
> __team_queue_override_port_del(). That can be done because it is ok to
> do list_del_rcu() and list_add_tail_rcu() on the same list_head member
> without calling synchronize_rcu() in between. A bit of refactoring
> needed to be done because INIT_LIST_HEAD needed to be removed (to not
> kill the forward pointer) as well.
>
> Signed-off-by: Jiri Pirko <jiri@resnulli.us>
> ---
> drivers/net/team/team.c | 63 ++++++++++++++++++++++++++++++++++++-------------
> 1 file changed, 47 insertions(+), 16 deletions(-)
>
[...]
> @@ -1278,17 +1310,16 @@ static int team_queue_id_option_set(struct team *team,
> struct team_gsetter_ctx *ctx)
> {
> struct team_port *port = ctx->info->port;
> + u16 new_queue_id = ctx->data.u32_val;
>
> - if (port->queue_id == ctx->data.u32_val)
> + if (port->queue_id == new_queue_id)
Since you're passing new_queue_id to port->queue_id and
in the other parts you test against !port->queue_id to see
if it's enable or not, that means queue 0 can't be used.
Maybe I am missing something, but wouldn't be better to
initialize with -1 and allow 0 to be used as well?
fbl
> return 0;
> - if (ctx->data.u32_val >= team->dev->real_num_tx_queues)
> + if (new_queue_id >= team->dev->real_num_tx_queues)
> return -EINVAL;
> - port->queue_id = ctx->data.u32_val;
> - team_queue_override_port_refresh(team, port);
> + team_queue_override_port_change_queue_id(team, port, new_queue_id);
> return 0;
> }
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [patch net-next 1/3] team: remove synchronize_rcu() called during queue override change
2013-06-11 0:48 ` Flavio Leitner
@ 2013-06-11 5:40 ` Jiri Pirko
2013-06-11 8:01 ` Jiri Pirko
0 siblings, 1 reply; 10+ messages in thread
From: Jiri Pirko @ 2013-06-11 5:40 UTC (permalink / raw)
To: netdev, davem, edumazet
Tue, Jun 11, 2013 at 02:48:45AM CEST, fbl@redhat.com wrote:
>On Mon, Jun 10, 2013 at 05:42:23PM +0200, Jiri Pirko wrote:
>> This patch removes synchronize_rcu() from function
>> __team_queue_override_port_del(). That can be done because it is ok to
>> do list_del_rcu() and list_add_tail_rcu() on the same list_head member
>> without calling synchronize_rcu() in between. A bit of refactoring
>> needed to be done because INIT_LIST_HEAD needed to be removed (to not
>> kill the forward pointer) as well.
>>
>> Signed-off-by: Jiri Pirko <jiri@resnulli.us>
>> ---
>> drivers/net/team/team.c | 63 ++++++++++++++++++++++++++++++++++++-------------
>> 1 file changed, 47 insertions(+), 16 deletions(-)
>>
>[...]
>
>> @@ -1278,17 +1310,16 @@ static int team_queue_id_option_set(struct team *team,
>> struct team_gsetter_ctx *ctx)
>> {
>> struct team_port *port = ctx->info->port;
>> + u16 new_queue_id = ctx->data.u32_val;
>>
>> - if (port->queue_id == ctx->data.u32_val)
>> + if (port->queue_id == new_queue_id)
>
>Since you're passing new_queue_id to port->queue_id and
>in the other parts you test against !port->queue_id to see
>if it's enable or not, that means queue 0 can't be used.
>
>Maybe I am missing something, but wouldn't be better to
>initialize with -1 and allow 0 to be used as well?
0 means default queue. It's done the same was as in bonding code.
>
>fbl
>
>> return 0;
>> - if (ctx->data.u32_val >= team->dev->real_num_tx_queues)
>> + if (new_queue_id >= team->dev->real_num_tx_queues)
>> return -EINVAL;
>> - port->queue_id = ctx->data.u32_val;
>> - team_queue_override_port_refresh(team, port);
>> + team_queue_override_port_change_queue_id(team, port, new_queue_id);
>> return 0;
>> }
>>
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [patch net-next 1/3] team: remove synchronize_rcu() called during queue override change
2013-06-11 5:40 ` Jiri Pirko
@ 2013-06-11 8:01 ` Jiri Pirko
2013-06-11 13:18 ` Flavio Leitner
0 siblings, 1 reply; 10+ messages in thread
From: Jiri Pirko @ 2013-06-11 8:01 UTC (permalink / raw)
To: fbl; +Cc: netdev, davem, edumazet
Tue, Jun 11, 2013 at 07:40:46AM CEST, jiri@resnulli.us wrote:
>Tue, Jun 11, 2013 at 02:48:45AM CEST, fbl@redhat.com wrote:
>>On Mon, Jun 10, 2013 at 05:42:23PM +0200, Jiri Pirko wrote:
>>> This patch removes synchronize_rcu() from function
>>> __team_queue_override_port_del(). That can be done because it is ok to
>>> do list_del_rcu() and list_add_tail_rcu() on the same list_head member
>>> without calling synchronize_rcu() in between. A bit of refactoring
>>> needed to be done because INIT_LIST_HEAD needed to be removed (to not
>>> kill the forward pointer) as well.
>>>
>>> Signed-off-by: Jiri Pirko <jiri@resnulli.us>
>>> ---
>>> drivers/net/team/team.c | 63 ++++++++++++++++++++++++++++++++++++-------------
>>> 1 file changed, 47 insertions(+), 16 deletions(-)
>>>
>>[...]
>>
>>> @@ -1278,17 +1310,16 @@ static int team_queue_id_option_set(struct team *team,
>>> struct team_gsetter_ctx *ctx)
>>> {
>>> struct team_port *port = ctx->info->port;
>>> + u16 new_queue_id = ctx->data.u32_val;
>>>
>>> - if (port->queue_id == ctx->data.u32_val)
>>> + if (port->queue_id == new_queue_id)
>>
>>Since you're passing new_queue_id to port->queue_id and
>>in the other parts you test against !port->queue_id to see
>>if it's enable or not, that means queue 0 can't be used.
>>
>>Maybe I am missing something, but wouldn't be better to
>>initialize with -1 and allow 0 to be used as well?
>
>0 means default queue. It's done the same was as in bonding code.
+ this patch does not change original behaviour...
>
>>
>>fbl
>>
>>> return 0;
>>> - if (ctx->data.u32_val >= team->dev->real_num_tx_queues)
>>> + if (new_queue_id >= team->dev->real_num_tx_queues)
>>> return -EINVAL;
>>> - port->queue_id = ctx->data.u32_val;
>>> - team_queue_override_port_refresh(team, port);
>>> + team_queue_override_port_change_queue_id(team, port, new_queue_id);
>>> return 0;
>>> }
>>>
>>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [patch net-next 1/3] team: remove synchronize_rcu() called during queue override change
2013-06-11 8:01 ` Jiri Pirko
@ 2013-06-11 13:18 ` Flavio Leitner
0 siblings, 0 replies; 10+ messages in thread
From: Flavio Leitner @ 2013-06-11 13:18 UTC (permalink / raw)
To: Jiri Pirko; +Cc: netdev, davem, edumazet
On Tue, Jun 11, 2013 at 10:01:07AM +0200, Jiri Pirko wrote:
> Tue, Jun 11, 2013 at 07:40:46AM CEST, jiri@resnulli.us wrote:
> >Tue, Jun 11, 2013 at 02:48:45AM CEST, fbl@redhat.com wrote:
> >>On Mon, Jun 10, 2013 at 05:42:23PM +0200, Jiri Pirko wrote:
> >>> This patch removes synchronize_rcu() from function
> >>> __team_queue_override_port_del(). That can be done because it is ok to
> >>> do list_del_rcu() and list_add_tail_rcu() on the same list_head member
> >>> without calling synchronize_rcu() in between. A bit of refactoring
> >>> needed to be done because INIT_LIST_HEAD needed to be removed (to not
> >>> kill the forward pointer) as well.
> >>>
> >>> Signed-off-by: Jiri Pirko <jiri@resnulli.us>
> >>> ---
> >>> drivers/net/team/team.c | 63 ++++++++++++++++++++++++++++++++++++-------------
> >>> 1 file changed, 47 insertions(+), 16 deletions(-)
> >>>
> >>[...]
> >>
> >>> @@ -1278,17 +1310,16 @@ static int team_queue_id_option_set(struct team *team,
> >>> struct team_gsetter_ctx *ctx)
> >>> {
> >>> struct team_port *port = ctx->info->port;
> >>> + u16 new_queue_id = ctx->data.u32_val;
> >>>
> >>> - if (port->queue_id == ctx->data.u32_val)
> >>> + if (port->queue_id == new_queue_id)
> >>
> >>Since you're passing new_queue_id to port->queue_id and
> >>in the other parts you test against !port->queue_id to see
> >>if it's enable or not, that means queue 0 can't be used.
> >>
> >>Maybe I am missing something, but wouldn't be better to
> >>initialize with -1 and allow 0 to be used as well?
> >
> >0 means default queue. It's done the same was as in bonding code.
>
> + this patch does not change original behaviour...
Jiri explained this bits off list to me, so
Acked-by: Flavio Leitner <fbl@redhat.com>
Thanks,
--
fbl
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [patch net-next 0/3] team: remove sychronize_rcu() calls
2013-06-10 15:42 [patch net-next 0/3] team: remove sychronize_rcu() calls Jiri Pirko
` (2 preceding siblings ...)
2013-06-10 15:42 ` [patch net-next 3/3] team: remove synchronize_rcu() called during port disable Jiri Pirko
@ 2013-06-12 10:10 ` David Miller
2013-06-12 11:01 ` Jiri Pirko
3 siblings, 1 reply; 10+ messages in thread
From: David Miller @ 2013-06-12 10:10 UTC (permalink / raw)
To: jiri; +Cc: netdev, edumazet, fbl
From: Jiri Pirko <jiri@resnulli.us>
Date: Mon, 10 Jun 2013 17:42:22 +0200
> Jiri Pirko (3):
> team: remove synchronize_rcu() called during queue override change
> team: use kfree_rcu instead of synchronize_rcu in team_port_dev
> team: remove synchronize_rcu() called during port disable
Applied, but I suspect this patch series was generated against the
patch set you submitted for "net" because I had to hand apply patch
#3 with some fuzz as git would not apply it directly.
Please don't do that, submit your patches in the future against what
is actually in net-next.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [patch net-next 0/3] team: remove sychronize_rcu() calls
2013-06-12 10:10 ` [patch net-next 0/3] team: remove sychronize_rcu() calls David Miller
@ 2013-06-12 11:01 ` Jiri Pirko
0 siblings, 0 replies; 10+ messages in thread
From: Jiri Pirko @ 2013-06-12 11:01 UTC (permalink / raw)
To: David Miller; +Cc: netdev, edumazet, fbl
Wed, Jun 12, 2013 at 12:10:22PM CEST, davem@davemloft.net wrote:
>From: Jiri Pirko <jiri@resnulli.us>
>Date: Mon, 10 Jun 2013 17:42:22 +0200
>
>> Jiri Pirko (3):
>> team: remove synchronize_rcu() called during queue override change
>> team: use kfree_rcu instead of synchronize_rcu in team_port_dev
>> team: remove synchronize_rcu() called during port disable
>
>Applied, but I suspect this patch series was generated against the
>patch set you submitted for "net" because I had to hand apply patch
>#3 with some fuzz as git would not apply it directly.
>
>Please don't do that, submit your patches in the future against what
>is actually in net-next.
Sorry. I will be more careful next time.
Jiri
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2013-06-12 11:01 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-06-10 15:42 [patch net-next 0/3] team: remove sychronize_rcu() calls Jiri Pirko
2013-06-10 15:42 ` [patch net-next 1/3] team: remove synchronize_rcu() called during queue override change Jiri Pirko
2013-06-11 0:48 ` Flavio Leitner
2013-06-11 5:40 ` Jiri Pirko
2013-06-11 8:01 ` Jiri Pirko
2013-06-11 13:18 ` Flavio Leitner
2013-06-10 15:42 ` [patch net-next 2/3] team: use kfree_rcu instead of synchronize_rcu in team_port_dev Jiri Pirko
2013-06-10 15:42 ` [patch net-next 3/3] team: remove synchronize_rcu() called during port disable Jiri Pirko
2013-06-12 10:10 ` [patch net-next 0/3] team: remove sychronize_rcu() calls David Miller
2013-06-12 11:01 ` Jiri Pirko
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.