* [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
* 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
* [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 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 a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).