RXE fixes for 4.8
Subsystems (2)
cover RXE fixes for 4.8
Hi Doug,
Please find the following four patches from Yonatan which fixes numerous issues in RXE code.
Thanks,
Yonatan Cohen (4):
IB/rxe: Fix kernel panic in udp_setup_tunnel IB/rxe: Fix duplicate atomic request handling IB/rxe: Fix race condition between requester and completer IB/rxe: Fix kmem_cache leak
drivers/infiniband/sw/rxe/rxe.c | 14 +++++++-- drivers/infiniband/sw/rxe/rxe_comp.c | 13 ++++++++ drivers/infiniband/sw/rxe/rxe_net.c | 45 ++++++++++++++++++---------- drivers/infiniband/sw/rxe/rxe_net.h | 3 +- drivers/infiniband/sw/rxe/rxe_req.c | 57 ++++++++++++++++++++++++++++-------- drivers/infiniband/sw/rxe/rxe_resp.c | 11 +++---- 6 files changed, 106 insertions(+), 37 deletions(-)
--
2.7.4
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 1473077359-11546-1-git-send-email-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
PATCH 1/4 IB/rxe: Fix kernel panic in udp_setup_tunnel
From: Yonatan Cohen <yonatanc-VPRAkNaXOzVWk0Htik3J/[email protected]>
Disable creation of a UDP socket for ipv6
when CONFIG_IPV6 is not enabeld.
Since udp_sock_create6() returns 0 when CONFIG_IPV6 is not set
[ 46.888632] IP: [<c220705a>] setup_udp_tunnel_sock+0x6/0x4f [ 46.891355] *pdpt = 0000000000000000 *pde = f000ff53f000ff53 [ 46.893918] Oops: 0002 [#1] PREEMPT [ 46.896014] CPU: 0 PID: 1 Comm: swapper Not tainted 4.7.0-rc4-00001-g8700e3e #1 [ 46.900280] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Debian-1.8.2-1 04/01/2014 [ 46.904905] task: cf06c040 ti: cf05e000 task.ti: cf05e000 [ 46.907854] EIP: 0060:[<c220705a>] EFLAGS: 00210246 CPU: 0 [ 46.911137] EIP is at setup_udp_tunnel_sock+0x6/0x4f [ 46.914070] EAX: 00000044 EBX: 00000001 ECX: cf05fef0 EDX: ca8142e0 [ 46.917236] ESI: c2c4505b EDI: cf05fef0 EBP: cf05fed0 ESP: cf05fed0 [ 46.919836] DS: 007b ES: 007b FS: 0000 GS: 00e0 SS: 0068 [ 46.922046] CR0: 80050033 CR2: 000001fc CR3: 02cec000 CR4: 000006b0 [ 46.924550] Stack: [ 46.926014] cf05ff10 c1fd4657 ca8142e0 0000000a 00000000 00000000 0000b712 00000008 [ 46.931274] 00000000 6bb5bd01 c1fd48de 00000000 00000000 cf05ff1c 00000000 00000000 [ 46.936122] cf05ff1c c1fd4bdf 00000000 cf05ff28 c2c4507b ffffffff cf05ff88 c2bf1c74 [ 46.942350] Call Trace: [ 46.944403] [<c1fd4657>] rxe_setup_udp_tunnel+0x8f/0x99 [ 46.947689] [<c1fd48de>] ? net_to_rxe+0x4e/0x4e [ 46.950567] [<c1fd4bdf>] rxe_net_init+0xe/0xa4 [ 46.953147] [<c2c4507b>] rxe_module_init+0x20/0x4c [ 46.955448] [<c2bf1c74>] do_one_initcall+0x89/0x113 [ 46.957797] [<c2bf15eb>] ? set_debug_rodata+0xf/0xf [ 46.959966] [<c2bf1dbc>] ? kernel_init_freeable+0xbe/0x15b [ 46.962262] [<c2bf1ddc>] kernel_init_freeable+0xde/0x15b [ 46.964418] [<c232eb54>] kernel_init+0x8/0xd0 [ 46.966618] [<c2333122>] ret_from_kernel_thread+0xe/0x24 [ 46.969592] [<c232eb4c>] ? rest_init+0x6f/0x6f
--- drivers/infiniband/sw/rxe/rxe.c | 14 ++++++++++-- drivers/infiniband/sw/rxe/rxe_net.c | 45 ++++++++++++++++++++++++------------- drivers/infiniband/sw/rxe/rxe_net.h | 3 ++- 3 files changed, 43 insertions(+), 19 deletions(-)
drivers/infiniband/sw/rxe/rxe.c +12 -2
@@ -362,12 +362,22 @@ static int __init rxe_module_init(void)return err; } - err =rxe_net_init (); + err =rxe_net_ipv4_init ();if (err) { -pr_err ("rxe: unable to init\n" ); +pr_err ("rxe: unable to init ipv4 tunnel\n" );rxe_cache_exit ();return err; } + +#if IS_ENABLED (CONFIG_IPV6 ) + err =rxe_net_ipv6_init (); +if (err) { +pr_err ("rxe: unable to init ipv6 tunnel\n" ); +rxe_cache_exit (); +return err; + } +#endif +pr_info ("rxe: loaded\n" );return 0 ;
drivers/infiniband/sw/rxe/rxe_net.c +29 -16
81 lines not on this page · raw message
drivers/infiniband/sw/rxe/rxe_net.h +2 -1
@@ -47,7 +47,8 @@ extern struct rxe_recv_sockets recv_sockets;struct rxe_dev *rxe_net_add (struct net_device *ndev); -int rxe_net_init (void ); +int rxe_net_ipv4_init (void ); +int rxe_net_ipv6_init (void );void rxe_net_exit (void );#endif /* RXE_NET_H */
Signature · 6 lines
2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 1473077359-11546-2-git-send-email-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
Re: [PATCH rdma-rc 1/4] IB/rxe: Fix kernel panic in udp_setup_tunnel
Quoted 141 lines · Leon Romanovsky
From: Yonatan Cohen <yonatanc-VPRAkNaXOzVWk0Htik3J/[email protected]>
Disable creation of a UDP socket for ipv6
whenCONFIG_IPV6is not enabeld.
Sinceudp_sock_create6()returns 0 whenCONFIG_IPV6is not set[ 46.888632] IP: [<c220705a>] setup_udp_tunnel_sock+0x6/0x4f [ 46.891355] *pdpt = 0000000000000000 *pde = f000ff53f000ff53 [ 46.893918] Oops: 0002 [#1] PREEMPT [ 46.896014] CPU: 0 PID: 1 Comm: swapper Not tainted 4.7.0-rc4-00001-g8700e3e #1 [ 46.900280] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Debian-1.8.2-1 04/01/2014 [ 46.904905] task: cf06c040 ti: cf05e000 task.ti: cf05e000 [ 46.907854] EIP: 0060:[<c220705a>] EFLAGS: 00210246 CPU: 0 [ 46.911137] EIP is at setup_udp_tunnel_sock+0x6/0x4f [ 46.914070] EAX: 00000044 EBX: 00000001 ECX: cf05fef0 EDX: ca8142e0 [ 46.917236] ESI: c2c4505b EDI: cf05fef0 EBP: cf05fed0 ESP: cf05fed0 [ 46.919836] DS: 007b ES: 007b FS: 0000 GS: 00e0 SS: 0068 [ 46.922046] CR0: 80050033 CR2: 000001fc CR3: 02cec000 CR4: 000006b0 [ 46.924550] Stack: [ 46.926014] cf05ff10 c1fd4657 ca8142e0 0000000a 00000000 00000000 0000b712 00000008 [ 46.931274] 00000000 6bb5bd01 c1fd48de 00000000 00000000 cf05ff1c 00000000 00000000 [ 46.936122] cf05ff1c c1fd4bdf 00000000 cf05ff28 c2c4507b ffffffff cf05ff88 c2bf1c74 [ 46.942350] Call Trace: [ 46.944403] [<c1fd4657>] rxe_setup_udp_tunnel+0x8f/0x99 [ 46.947689] [<c1fd48de>] ? net_to_rxe+0x4e/0x4e [ 46.950567] [<c1fd4bdf>] rxe_net_init+0xe/0xa4 [ 46.953147] [<c2c4507b>] rxe_module_init+0x20/0x4c [ 46.955448] [<c2bf1c74>] do_one_initcall+0x89/0x113 [ 46.957797] [<c2bf15eb>] ? set_debug_rodata+0xf/0xf [ 46.959966] [<c2bf1dbc>] ? kernel_init_freeable+0xbe/0x15b [ 46.962262] [<c2bf1ddc>] kernel_init_freeable+0xde/0x15b [ 46.964418] [<c232eb54>] kernel_init+0x8/0xd0 [ 46.966618] [<c2333122>] ret_from_kernel_thread+0xe/0x24 [ 46.969592] [<c232eb4c>] ? rest_init+0x6f/0x6fFixes 8700e3e7c485 ("Soft RoCE driver")Signed-off-by Leon Romanovsky <[email protected]>--- drivers/infiniband/sw/rxe/rxe.c | 14 ++++++++++-- drivers/infiniband/sw/rxe/rxe_net.c | 45 ++++++++++++++++++++++++------------- drivers/infiniband/sw/rxe/rxe_net.h | 3 ++- 3 files changed, 43 insertions(+), 19 deletions(-)drivers/infiniband/sw/rxe/rxe.c +12
-2@@ -362,12 +362,22 @@ static int __init rxe_module_init(void)return err; } - err =rxe_net_init (); + err =rxe_net_ipv4_init ();if (err) { -pr_err ("rxe: unable to init\n" ); +pr_err ("rxe: unable to init ipv4 tunnel\n" );rxe_cache_exit ();return err; } + +#if IS_ENABLED (CONFIG_IPV6 ) + err =rxe_net_ipv6_init (); +if (err) { +pr_err ("rxe: unable to init ipv6 tunnel\n" ); +rxe_cache_exit (); +return err; + } +#endif +pr_info ("rxe: loaded\n" );return 0 ;drivers/infiniband/sw/rxe/rxe_net.c +17
-15@@ -249,8 +249,8 @@ static struct socket *rxe_setup_udp_tunnel(struct net *net, __be16 port,memset (&udp_cfg,0 ,sizeof (udp_cfg));if (ipv6) { - udp_cfg.family =AF_INET6 ; - udp_cfg.ipv6_v6only =1 ; + udp_cfg.family =AF_INET6 ; + udp_cfg.ipv6_v6only =1 ; }else { udp_cfg.family =AF_INET ; }@@ -662,33 +662,22 @@ static struct notifier_block rxe_net_notifier = { .notifier_call = rxe_notify, }; -int rxe_net_init (void ) +int rxe_net_ipv4_init (void ) {int err;spin_lock_init (&dev_list_lock); - recv_sockets.sk6 =rxe_setup_udp_tunnel (&init_net, -htons (ROCE_V2_UDP_DPORT ), true); -if (IS_ERR (recv_sockets.sk6)) { - recv_sockets.sk6 =NULL ; -pr_err ("rxe: Failed to create IPv6 UDP tunnel\n" ); -return -1 ; - } - recv_sockets.sk4 =rxe_setup_udp_tunnel (&init_net, -htons (ROCE_V2_UDP_DPORT ), false); +htons (ROCE_V2_UDP_DPORT ), false);if (IS_ERR (recv_sockets.sk4)) { -rxe_release_udp_tunnel (recv_sockets.sk6); recv_sockets.sk4 =NULL ; - recv_sockets.sk6 =NULL ;pr_err ("rxe: Failed to create IPv4 UDP tunnel\n" );return -1 ; } err =register_netdevice_notifier (&rxe_net_notifier);if (err) { -rxe_release_udp_tunnel (recv_sockets.sk6);rxe_release_udp_tunnel (recv_sockets.sk4);pr_err ("rxe: Failed to rigister netdev notifier\n" ); }@@ -696,11 +685,35 @@ int rxe_net_init(void)return err; } +int rxe_net_ipv6_init (void ) +{ +int err; + +spin_lock_init (&dev_list_lock); + + recv_sockets.sk6 =rxe_setup_udp_tunnel (&init_net, +htons (ROCE_V2_UDP_DPORT ), true); +if (IS_ERR (recv_sockets.sk6)) { + recv_sockets.sk6 =NULL ; +pr_err ("rxe: Failed to create IPv6 UDP tunnel\n" ); +return -1 ; + }
drivers/infiniband/sw/rxe/rxe_net.c int rxe_net_init(void) · line 710
Quoted 10 lines
drivers/infiniband/sw/rxe/rxe_net.c +10
-0+ + err =register_netdevice_notifier (&rxe_net_notifier); +if (err) { +rxe_release_udp_tunnel (recv_sockets.sk6); +pr_err ("rxe: Failed to rigister netdev notifier\n" ); + } + +return err; +} +
Can this be also in IS_ENABLED(CONFIG_IPV6) scope?
Quoted 15 lines
drivers/infiniband/sw/rxe/rxe_net.c +2
-1void rxe_net_exit (void ) { +#if IS_ENABLED (CONFIG_IPV6 )if (recv_sockets.sk6)rxe_release_udp_tunnel (recv_sockets.sk6); - +#endif if (recv_sockets.sk4)rxe_release_udp_tunnel (recv_sockets.sk4);drivers/infiniband/sw/rxe/rxe_net.h +0
-0
drivers/infiniband/sw/rxe/rxe_net.h extern struct rxe_recv_sockets recv_sockets; · line 51
Quoted 6 lines
drivers/infiniband/sw/rxe/rxe_net.h +2
-1@@ -47,7 +47,8 @@ extern struct rxe_recv_sockets recv_sockets;struct rxe_dev *rxe_net_add (struct net_device *ndev); -int rxe_net_init (void ); +int rxe_net_ipv4_init (void ); +int rxe_net_ipv6_init (void );
Can this be also in IS_ENABLED(CONFIG_IPV6) scope?
Quoted 10 lines
drivers/infiniband/sw/rxe/rxe_net.h +0
-0void rxe_net_exit (void );#endif /* RXE_NET_H */ Signature · 6 lines
2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20160905132402.GA14607-Hxa29pjIrETlQW142y8m19+IiqhCXseY@public.gmane.org
Re: [PATCH rdma-rc 1/4] IB/rxe: Fix kernel panic in udp_setup_tunnel
Quoted 171 lines · Yuval Shaia
Quoted 141 lines · Leon Romanovsky
From: Yonatan Cohen <yonatanc-VPRAkNaXOzVWk0Htik3J/[email protected]>
Disable creation of a UDP socket for ipv6
whenCONFIG_IPV6is not enabeld.
Sinceudp_sock_create6()returns 0 whenCONFIG_IPV6is not set[ 46.888632] IP: [<c220705a>] setup_udp_tunnel_sock+0x6/0x4f [ 46.891355] *pdpt = 0000000000000000 *pde = f000ff53f000ff53 [ 46.893918] Oops: 0002 [#1] PREEMPT [ 46.896014] CPU: 0 PID: 1 Comm: swapper Not tainted 4.7.0-rc4-00001-g8700e3e #1 [ 46.900280] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Debian-1.8.2-1 04/01/2014 [ 46.904905] task: cf06c040 ti: cf05e000 task.ti: cf05e000 [ 46.907854] EIP: 0060:[<c220705a>] EFLAGS: 00210246 CPU: 0 [ 46.911137] EIP is at setup_udp_tunnel_sock+0x6/0x4f [ 46.914070] EAX: 00000044 EBX: 00000001 ECX: cf05fef0 EDX: ca8142e0 [ 46.917236] ESI: c2c4505b EDI: cf05fef0 EBP: cf05fed0 ESP: cf05fed0 [ 46.919836] DS: 007b ES: 007b FS: 0000 GS: 00e0 SS: 0068 [ 46.922046] CR0: 80050033 CR2: 000001fc CR3: 02cec000 CR4: 000006b0 [ 46.924550] Stack: [ 46.926014] cf05ff10 c1fd4657 ca8142e0 0000000a 00000000 00000000 0000b712 00000008 [ 46.931274] 00000000 6bb5bd01 c1fd48de 00000000 00000000 cf05ff1c 00000000 00000000 [ 46.936122] cf05ff1c c1fd4bdf 00000000 cf05ff28 c2c4507b ffffffff cf05ff88 c2bf1c74 [ 46.942350] Call Trace: [ 46.944403] [<c1fd4657>] rxe_setup_udp_tunnel+0x8f/0x99 [ 46.947689] [<c1fd48de>] ? net_to_rxe+0x4e/0x4e [ 46.950567] [<c1fd4bdf>] rxe_net_init+0xe/0xa4 [ 46.953147] [<c2c4507b>] rxe_module_init+0x20/0x4c [ 46.955448] [<c2bf1c74>] do_one_initcall+0x89/0x113 [ 46.957797] [<c2bf15eb>] ? set_debug_rodata+0xf/0xf [ 46.959966] [<c2bf1dbc>] ? kernel_init_freeable+0xbe/0x15b [ 46.962262] [<c2bf1ddc>] kernel_init_freeable+0xde/0x15b [ 46.964418] [<c232eb54>] kernel_init+0x8/0xd0 [ 46.966618] [<c2333122>] ret_from_kernel_thread+0xe/0x24 [ 46.969592] [<c232eb4c>] ? rest_init+0x6f/0x6fFixes 8700e3e7c485 ("Soft RoCE driver")Signed-off-by Leon Romanovsky <[email protected]>--- drivers/infiniband/sw/rxe/rxe.c | 14 ++++++++++-- drivers/infiniband/sw/rxe/rxe_net.c | 45 ++++++++++++++++++++++++------------- drivers/infiniband/sw/rxe/rxe_net.h | 3 ++- 3 files changed, 43 insertions(+), 19 deletions(-)drivers/infiniband/sw/rxe/rxe.c +12
-2@@ -362,12 +362,22 @@ static int __init rxe_module_init(void)return err; } - err =rxe_net_init (); + err =rxe_net_ipv4_init ();if (err) { -pr_err ("rxe: unable to init\n" ); +pr_err ("rxe: unable to init ipv4 tunnel\n" );rxe_cache_exit ();return err; } + +#if IS_ENABLED (CONFIG_IPV6 ) + err =rxe_net_ipv6_init (); +if (err) { +pr_err ("rxe: unable to init ipv6 tunnel\n" ); +rxe_cache_exit (); +return err; + } +#endif +pr_info ("rxe: loaded\n" );return 0 ;drivers/infiniband/sw/rxe/rxe_net.c +17
-15@@ -249,8 +249,8 @@ static struct socket *rxe_setup_udp_tunnel(struct net *net, __be16 port,memset (&udp_cfg,0 ,sizeof (udp_cfg));if (ipv6) { - udp_cfg.family =AF_INET6 ; - udp_cfg.ipv6_v6only =1 ; + udp_cfg.family =AF_INET6 ; + udp_cfg.ipv6_v6only =1 ; }else { udp_cfg.family =AF_INET ; }@@ -662,33 +662,22 @@ static struct notifier_block rxe_net_notifier = { .notifier_call = rxe_notify, }; -int rxe_net_init (void ) +int rxe_net_ipv4_init (void ) {int err;spin_lock_init (&dev_list_lock); - recv_sockets.sk6 =rxe_setup_udp_tunnel (&init_net, -htons (ROCE_V2_UDP_DPORT ), true); -if (IS_ERR (recv_sockets.sk6)) { - recv_sockets.sk6 =NULL ; -pr_err ("rxe: Failed to create IPv6 UDP tunnel\n" ); -return -1 ; - } - recv_sockets.sk4 =rxe_setup_udp_tunnel (&init_net, -htons (ROCE_V2_UDP_DPORT ), false); +htons (ROCE_V2_UDP_DPORT ), false);if (IS_ERR (recv_sockets.sk4)) { -rxe_release_udp_tunnel (recv_sockets.sk6); recv_sockets.sk4 =NULL ; - recv_sockets.sk6 =NULL ;pr_err ("rxe: Failed to create IPv4 UDP tunnel\n" );return -1 ; } err =register_netdevice_notifier (&rxe_net_notifier);if (err) { -rxe_release_udp_tunnel (recv_sockets.sk6);rxe_release_udp_tunnel (recv_sockets.sk4);pr_err ("rxe: Failed to rigister netdev notifier\n" ); }@@ -696,11 +685,35 @@ int rxe_net_init(void)return err; } +int rxe_net_ipv6_init (void ) +{ +int err; + +spin_lock_init (&dev_list_lock); + + recv_sockets.sk6 =rxe_setup_udp_tunnel (&init_net, +htons (ROCE_V2_UDP_DPORT ), true); +if (IS_ERR (recv_sockets.sk6)) { + recv_sockets.sk6 =NULL ; +pr_err ("rxe: Failed to create IPv6 UDP tunnel\n" ); +return -1 ; + }drivers/infiniband/sw/rxe/rxe_net.c int rxe_net_init(void) · line 710
Quoted 10 lines
drivers/infiniband/sw/rxe/rxe_net.c +10
-0+ + err =register_netdevice_notifier (&rxe_net_notifier); +if (err) { +rxe_release_udp_tunnel (recv_sockets.sk6); +pr_err ("rxe: Failed to rigister netdev notifier\n" ); + } + +return err; +} +Can this be also in
IS_ENABLED(CONFIG_IPV6)scope?Quoted 16 lines
drivers/infiniband/sw/rxe/rxe_net.c +2
-1void rxe_net_exit (void ) { +#if IS_ENABLED (CONFIG_IPV6 )if (recv_sockets.sk6)rxe_release_udp_tunnel (recv_sockets.sk6); - +#endif if (recv_sockets.sk4)rxe_release_udp_tunnel (recv_sockets.sk4);drivers/infiniband/sw/rxe/rxe_net.h +0
-0@@ -47,7 +47,8 @@ extern struct rxe_recv_sockets recv_sockets;
Quoted 7 lines
drivers/infiniband/sw/rxe/rxe_net.h extern struct rxe_recv_sockets recv_sockets; · line 51
Quoted 5 lines
drivers/infiniband/sw/rxe/rxe_net.h +2
-1struct rxe_dev *rxe_net_add (struct net_device *ndev); -int rxe_net_init (void ); +int rxe_net_ipv4_init (void ); +int rxe_net_ipv6_init (void );Can this be also in
IS_ENABLED(CONFIG_IPV6)scope?
In current implementation it should.
I personally would implement these config checks in rxe_net_ipv6_init() function and not outside.
Quoted 11 lines
Quoted 11 lines
drivers/infiniband/sw/rxe/rxe_net.h +0
-1void rxe_net_exit (void );#endif /* RXE_NET_H */ --2.7.4
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH rdma-rc 1/4] IB/rxe: Fix kernel panic in udp_setup_tunnel
In reply to a message not in the archiveQuoted 8 lines · Leon Romanovsky
From: Yonatan Cohen <yonatanc-VPRAkNaXOzVWk0Htik3J/[email protected]>
drivers/infiniband/sw/rxe/rxe_net.c +0
-0
drivers/infiniband/sw/rxe/rxe_net.c static struct socket *rxe_setup_udp_tunnel(struct net *net, __be16 port, · line 256
Quoted 10 lines
drivers/infiniband/sw/rxe/rxe_net.c +2
-2@@ -249,8 +249,8 @@ static struct socket *rxe_setup_udp_tunnel(struct net *net, __be16 port,memset (&udp_cfg,0 ,sizeof (udp_cfg));if (ipv6) { - udp_cfg.family =AF_INET6 ; - udp_cfg.ipv6_v6only =1 ; + udp_cfg.family =AF_INET6 ; + udp_cfg.ipv6_v6only =1 ; }else { udp_cfg.family =AF_INET ; }
Is my mailer displaying this wrong, or is this hunk just intentionally introducing indent breakage?
Signature · 2 lines
Doug Ledford <[email protected]> GPG Key ID: 0E572FDD
A message that is not in the archive (sent off-list or not yet received): e0399c1c-567c-4996-a454-4ebefbe6e665-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
Re: [PATCH rdma-rc 1/4] IB/rxe: Fix kernel panic in udp_setup_tunnel
Quoted 11 lines · Doug Ledford
Quoted 10 lines · Leon Romanovsky
From: Yonatan Cohen <yonatanc-VPRAkNaXOzVWk0Htik3J/[email protected]>
drivers/infiniband/sw/rxe/rxe_net.c +0
-0@@ -249,8 +249,8 @@ static struct socket *rxe_setup_udp_tunnel(struct net *net, __be16 port,memset (&udp_cfg,0 ,sizeof (udp_cfg));
Quoted 11 lines
drivers/infiniband/sw/rxe/rxe_net.c static struct socket *rxe_setup_udp_tunnel(struct net *net, __be16 port, · line 256
Quoted 8 lines
drivers/infiniband/sw/rxe/rxe_net.c +2
-2if (ipv6) { - udp_cfg.family =AF_INET6 ; - udp_cfg.ipv6_v6only =1 ; + udp_cfg.family =AF_INET6 ; + udp_cfg.ipv6_v6only =1 ; }else { udp_cfg.family =AF_INET ; }Is my mailer displaying this wrong, or is this hunk just intentionally introducing indent breakage?
You are right, it is unintentionally. I'll repost.
Quoted 6 lines
--
Doug Ledford <[email protected]>
GPG Key ID: 0E572FDD
A message that is not in the archive (sent off-list or not yet received): CAJ3xEMiBpGRy-JGuJ=P4eUF5zyz+2bm43F-jqPHtwm=3Uz9YYA@mail.gmail.com
A message that is not in the archive (sent off-list or not yet received): CAJ3xEMiBpGRy-JGuJ=P4eUF5zyz+2bm43F-jqPHtwm=3Uz9YYA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org
Re: [PATCH rdma-rc 1/4] IB/rxe: Fix kernel panic in udp_setup_tunnel
Quoted 33 lines · Leon Romanovsky
Quoted 32 lines
From: Yonatan Cohen <yonatanc-VPRAkNaXOzVWk0Htik3J/[email protected]>
Disable creation of a UDP socket for ipv6
whenCONFIG_IPV6is not enabeld.
Sinceudp_sock_create6()returns 0 whenCONFIG_IPV6is not set[ 46.888632] IP: [<c220705a>] setup_udp_tunnel_sock+0x6/0x4f [ 46.891355] *pdpt = 0000000000000000 *pde = f000ff53f000ff53 [ 46.893918] Oops: 0002 [#1] PREEMPT [ 46.896014] CPU: 0 PID: 1 Comm: swapper Not tainted 4.7.0-rc4-00001-g8700e3e #1 [ 46.900280] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Debian-1.8.2-1 04/01/2014 [ 46.904905] task: cf06c040 ti: cf05e000 task.ti: cf05e000 [ 46.907854] EIP: 0060:[<c220705a>] EFLAGS: 00210246 CPU: 0 [ 46.911137] EIP is at setup_udp_tunnel_sock+0x6/0x4f [ 46.914070] EAX: 00000044 EBX: 00000001 ECX: cf05fef0 EDX: ca8142e0 [ 46.917236] ESI: c2c4505b EDI: cf05fef0 EBP: cf05fed0 ESP: cf05fed0 [ 46.919836] DS: 007b ES: 007b FS: 0000 GS: 00e0 SS: 0068 [ 46.922046] CR0: 80050033 CR2: 000001fc CR3: 02cec000 CR4: 000006b0 [ 46.924550] Stack: [ 46.926014] cf05ff10 c1fd4657 ca8142e0 0000000a 00000000 00000000 0000b712 00000008 [ 46.931274] 00000000 6bb5bd01 c1fd48de 00000000 00000000 cf05ff1c 00000000 00000000 [ 46.936122] cf05ff1c c1fd4bdf 00000000 cf05ff28 c2c4507b ffffffff cf05ff88 c2bf1c74 [ 46.942350] Call Trace: [ 46.944403] [<c1fd4657>] rxe_setup_udp_tunnel+0x8f/0x99 [ 46.947689] [<c1fd48de>] ? net_to_rxe+0x4e/0x4e [ 46.950567] [<c1fd4bdf>] rxe_net_init+0xe/0xa4
Quoted 8 lines
Quoted 8 lines
[ 46.953147] [<c2c4507b>] rxe_module_init+0x20/0x4c [ 46.955448] [<c2bf1c74>] do_one_initcall+0x89/0x113 [ 46.957797] [<c2bf15eb>] ? set_debug_rodata+0xf/0xf [ 46.959966] [<c2bf1dbc>] ? kernel_init_freeable+0xbe/0x15b [ 46.962262] [<c2bf1ddc>] kernel_init_freeable+0xde/0x15b [ 46.964418] [<c232eb54>] kernel_init+0x8/0xd0 [ 46.966618] [<c2333122>] ret_from_kernel_thread+0xe/0x24 [ 46.969592] [<c232eb4c>] ? rest_init+0x6f/0x6f
Hi Yoni, in this case, the trace contributes practically nothing to the driver and kernel maintainers, please remove it.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): CAJ3xEMidqQRMqP6u+SJSJVbq0weREAtAJN=eXsA_zzS0KnQ_7Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org
Re: [PATCH rdma-rc 1/4] IB/rxe: Fix kernel panic in udp_setup_tunnel
Quoted 42 lines · Or Gerlitz
Quoted 33 lines · Leon Romanovsky
Quoted 32 lines
From: Yonatan Cohen <yonatanc-VPRAkNaXOzVWk0Htik3J/[email protected]>
Disable creation of a UDP socket for ipv6
whenCONFIG_IPV6is not enabeld.
Sinceudp_sock_create6()returns 0 whenCONFIG_IPV6is not set[ 46.888632] IP: [<c220705a>] setup_udp_tunnel_sock+0x6/0x4f [ 46.891355] *pdpt = 0000000000000000 *pde = f000ff53f000ff53 [ 46.893918] Oops: 0002 [#1] PREEMPT [ 46.896014] CPU: 0 PID: 1 Comm: swapper Not tainted 4.7.0-rc4-00001-g8700e3e #1 [ 46.900280] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Debian-1.8.2-1 04/01/2014 [ 46.904905] task: cf06c040 ti: cf05e000 task.ti: cf05e000 [ 46.907854] EIP: 0060:[<c220705a>] EFLAGS: 00210246 CPU: 0 [ 46.911137] EIP is at setup_udp_tunnel_sock+0x6/0x4f [ 46.914070] EAX: 00000044 EBX: 00000001 ECX: cf05fef0 EDX: ca8142e0 [ 46.917236] ESI: c2c4505b EDI: cf05fef0 EBP: cf05fed0 ESP: cf05fed0 [ 46.919836] DS: 007b ES: 007b FS: 0000 GS: 00e0 SS: 0068 [ 46.922046] CR0: 80050033 CR2: 000001fc CR3: 02cec000 CR4: 000006b0 [ 46.924550] Stack: [ 46.926014] cf05ff10 c1fd4657 ca8142e0 0000000a 00000000 00000000 0000b712 00000008 [ 46.931274] 00000000 6bb5bd01 c1fd48de 00000000 00000000 cf05ff1c 00000000 00000000 [ 46.936122] cf05ff1c c1fd4bdf 00000000 cf05ff28 c2c4507b ffffffff cf05ff88 c2bf1c74 [ 46.942350] Call Trace: [ 46.944403] [<c1fd4657>] rxe_setup_udp_tunnel+0x8f/0x99 [ 46.947689] [<c1fd48de>] ? net_to_rxe+0x4e/0x4e [ 46.950567] [<c1fd4bdf>] rxe_net_init+0xe/0xa4Quoted 8 lines
Quoted 8 lines
[ 46.953147] [<c2c4507b>] rxe_module_init+0x20/0x4c [ 46.955448] [<c2bf1c74>] do_one_initcall+0x89/0x113 [ 46.957797] [<c2bf15eb>] ? set_debug_rodata+0xf/0xf [ 46.959966] [<c2bf1dbc>] ? kernel_init_freeable+0xbe/0x15b [ 46.962262] [<c2bf1ddc>] kernel_init_freeable+0xde/0x15b [ 46.964418] [<c232eb54>] kernel_init+0x8/0xd0 [ 46.966618] [<c2333122>] ret_from_kernel_thread+0xe/0x24 [ 46.969592] [<c232eb4c>] ? rest_init+0x6f/0x6f
Quoted 2 lines
Hi Yoni, in this case, the trace contributes practically nothing to the driver and kernel maintainers, please remove it.
Hi Or,
I like your self-confident.
In this case, I asked from Yoni to add this call trace for a number of reasons:
1. We got this call stack from external user and he wants to know that it is fixed.
2. I'm looking on the oops posted to the list to get better understanding if such cases exist in other places too.
3. We are in late -rc stage and kernel trace shows that it is real issue which justifies late acceptance/pull request.
Thanks
Quoted 4 lines
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20160906050518.GJ21847-2ukJVAZIZ/[email protected]
Re: [PATCH rdma-rc 1/4] IB/rxe: Fix kernel panic in udp_setup_tunnel
Quoted 7 lines · Leon Romanovsky
Quoted 2 lines · Or Gerlitz
Hi Yoni, in this case, the trace contributes practically nothing to the driver and kernel maintainers, please remove it.
1. We got this call stack from external user and he wants to know that it is fixed.
good to know, Yoni - we should give them credit! add Reported-by: line after your author S.O.B line
Quoted 2 lines
2. I'm looking on the oops posted to the list to get better understanding if such cases exist in other places too.
for both (1) and (2) you can put the track trace after the --- line of the submitted patch,
such that when the maintainer does git am, we don't carry that forever in the kernel logs.
Quoted 2 lines
3. We are in late -rc stage and kernel trace shows that it is real issue which justifies late acceptance/pull request.
You can solve it with two words "kernel crash" in the change log
The crash originates from small wrongish behaviour of the rxe driver, not from sophisticated and complex bug. The crash trace doesn't contribute anything to future
maintainship of the driver and/or the IB subsystem.
Quoted 2 lines
I like your self-confident.
In this case, I asked from Yoni to add this call trace for a number of reasons:
$ ./scripts/get_maintainer.pl drivers/infiniband/sw/rxe
Moni Shoua <monis-VPRAkNaXOzVWk0Htik3J/[email protected]> (supporter:SOFT-ROCE DRIVER (rxe)) Doug Ledford <[email protected]> (supporter:INFINIBAND SUBSYSTEM) Sean Hefty <[email protected]> (supporter:INFINIBAND SUBSYSTEM) Hal Rosenstock <[email protected]> (supporter:INFINIBAND SUBSYSTEM) [email protected] (open list:SOFT-ROCE DRIVER (rxe)) [email protected] (open list)
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): CAJ3xEMiuuCTGiWbefAFLRYART4h8YypsvGqxT69cTpkbrDdx1g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org
Re: [PATCH rdma-rc 1/4] IB/rxe: Fix kernel panic in udp_setup_tunnel
Quoted 11 lines · Or Gerlitz
Quoted 7 lines · Leon Romanovsky
Quoted 2 lines · Or Gerlitz
Hi Yoni, in this case, the trace contributes practically nothing to the driver and kernel maintainers, please remove it.
1. We got this call stack from external user and he wants to know that it is fixed.
good to know, Yoni - we should give them credit! add Reported-by: line after your author S.O.B line
Internally, It was asked too, and we decided to skip it. It is uncommon to put jenkins bot name.
A message that is not in the archive (sent off-list or not yet received): 20160906085943.GL21847-2ukJVAZIZ/[email protected]
Re: [PATCH rdma-rc 1/4] IB/rxe: Fix kernel panic in udp_setup_tunnel
Quoted 7 lines · Leon Romanovsky
Quoted 6 lines · Or Gerlitz
Quoted 4 lines · Leon Romanovsky
Quoted 2 lines · Or Gerlitz
Hi Yoni, in this case, the trace contributes practically nothing to the driver and kernel maintainers, please remove it.
Quoted 8 lines
Quoted 5 lines
Quoted 2 lines
1. We got this call stack from external user and he wants to know that it is fixed.
good to know, Yoni - we should give them credit! add Reported-by: line after your author S.O.B line
Internally, It was asked too, and we decided to skip it. It is uncommon to put jenkins bot name.
I couldn't realize from your email that it was a robot finding that and not a human, you
can skip the robot name or creditize the person that read the robot's email, if this is
the author of the patch, no need for double credit.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 2/4 IB/rxe: Fix duplicate atomic request handling
In reply to a message not in the archiveFrom: Yonatan Cohen <yonatanc-VPRAkNaXOzVWk0Htik3J/[email protected]>
When handling ack for atomic opcodes like "fetch&add"
or "cmp&swp", the method send_atomic_ack() saves the ack before sending it, in case it gets lost and never reach the requester. In which case the method duplicate_request() will need to find it using the duplicated request.psn.
But send_atomic_ack() used a wrong psn value and thus
the above ack was never found.
This fix uses the ack.psn to locate the ack in case
its needed.
This fix also copies the ack packet to the skb's control buffer since duplicate_request() will need it when calling rxe_xmit_packet()
--- drivers/infiniband/sw/rxe/rxe_resp.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
drivers/infiniband/sw/rxe/rxe_resp.c +6 -5
@@ -972,11 +972,13 @@ static int send_atomic_ack(struct rxe_qp *qp, struct rxe_pkt_info *pkt,free_rd_atomic_resource (qp, res);rxe_advance_resp_resource (qp); +memcpy (SKB_TO_PKT (skb), &ack_pkt,sizeof (skb->cb)); + res->type =RXE_ATOMIC_MASK ; res->atomic.skb = skb; - res->first_psn = qp->resp.psn; - res->last_psn = qp->resp.psn; - res->cur_psn = qp->resp.psn; + res->first_psn = ack_pkt.psn; + res->last_psn = ack_pkt.psn; + res->cur_psn = ack_pkt.psn; rc =rxe_xmit_packet (rxe, qp, &ack_pkt, skb_copy);if (rc) {
@@ -1116,8 +1118,7 @@ static enum resp_states duplicate_request(struct rxe_qp *qp, rc =RESPST_CLEANUP ; goto out; } -bth_set_psn (SKB_TO_PKT (skb_copy), - qp->resp.psn -1 ); +/* Resend the result. */ rc =rxe_xmit_packet (to_rdev (qp->ibqp.device), qp, pkt, skb_copy);
Signature · 6 lines
2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 3/4 IB/rxe: Fix race condition between requester and completer
In reply to a message not in the archiveFrom: Yonatan Cohen <yonatanc-VPRAkNaXOzVWk0Htik3J/[email protected]>
rxe_requester() is sending a pkt with rxe_xmit_packet() and then calls rxe_update() to update the wqe and qp's psn values. But sometimes the response is received before the requester had time to update the wqe in which case the completer acts on errornous wqe values.
This fix updates the wqe and qp before actually sending the request and rolls back when xmit fails.
--- drivers/infiniband/sw/rxe/rxe_req.c | 57 ++++++++++++++++++++++++++++--------- 1 file changed, 44 insertions(+), 13 deletions(-)
drivers/infiniband/sw/rxe/rxe_req.c +44 -13
@@ -511,24 +511,21 @@ static int fill_packet(struct rxe_qp *qp, struct rxe_send_wqe *wqe, }static void update_wqe_state (struct rxe_qp *qp, -struct rxe_send_wqe *wqe, -struct rxe_pkt_info *pkt, -enum wqe_state *prev_state) +struct rxe_send_wqe *wqe, +struct rxe_pkt_info *pkt) { -enum wqe_state prev_state_ = wqe->state; -if (pkt->mask &RXE_END_MASK ) {if (qp_type (qp) ==IB_QPT_RC ) wqe->state = wqe_state_pending; }else { wqe->state = wqe_state_processing; } - - *prev_state = prev_state_; } -static void update_state (struct rxe_qp *qp,struct rxe_send_wqe *wqe, -struct rxe_pkt_info *pkt,int payload) +static void update_wqe_psn (struct rxe_qp *qp, +struct rxe_send_wqe *wqe, +struct rxe_pkt_info *pkt, +int payload) {/* number of packets left to send including current one */ int num_pkt = (wqe->dma.resid + payload + qp->mtu -1 ) / qp->mtu;
@@ -546,9 +543,34 @@ static void update_state(struct rxe_qp *qp, struct rxe_send_wqe *wqe, qp->req.psn = (wqe->first_psn + num_pkt) &BTH_PSN_MASK ; else qp->req.psn = (qp->req.psn + 1) & BTH_PSN_MASK; +} - qp->req.opcode = pkt->opcode; +static void save_state (struct rxe_send_wqe *wqe, +struct rxe_qp *qp, +struct rxe_send_wqe *rollback_wqe, +struct rxe_qp *rollback_qp) +{ + rollback_wqe->state = wqe->state; + rollback_wqe->first_psn = wqe->first_psn; + rollback_wqe->last_psn = wqe->last_psn; + rollback_qp->req.psn = qp->req.psn; +} +static void rollback_state (struct rxe_send_wqe *wqe, +struct rxe_qp *qp, +struct rxe_send_wqe *rollback_wqe, +struct rxe_qp *rollback_qp) +{ + wqe->state = rollback_wqe->state; + wqe->first_psn = rollback_wqe->first_psn; + wqe->last_psn = rollback_wqe->last_psn; + qp->req.psn = rollback_qp->req.psn; +} + +static void update_state (struct rxe_qp *qp,struct rxe_send_wqe *wqe, +struct rxe_pkt_info *pkt,int payload) +{ + qp->req.opcode = pkt->opcode;if (pkt->mask &RXE_END_MASK ) qp->req.wqe_index =next_index (qp->sq.queue, qp->req.wqe_index);
@@ -571,7 +593,8 @@ int rxe_requester(void *arg)int mtu;int opcode;int ret; -enum wqe_state prev_state; +struct rxe_qp rollback_qp; +struct rxe_send_wqe rollback_wqe; next_wqe:if (unlikely (!qp->valid || qp->req.state ==QP_STATE_ERROR ))
@@ -688,13 +711,21 @@ next_wqe: goto err; } -update_wqe_state (qp, wqe, &pkt, &prev_state); +/* +* To prevent a race on wqe access between requester and completer, +* wqe members state and psn need to be set before calling +* rxe_xmit_packet(). +* Otherwise, completer might initiate an unjustified retry flow. +*/ +save_state (wqe, qp, &rollback_wqe, &rollback_qp); +update_wqe_state (qp, wqe, &pkt); +update_wqe_psn (qp, wqe, &pkt, payload); ret =rxe_xmit_packet (to_rdev (qp->ibqp.device), qp, &pkt, skb);if (ret) { qp->need_req_skb =1 ;kfree_skb (skb); - wqe->state = prev_state; +rollback_state (wqe, qp, &rollback_wqe, &rollback_qp);if (ret == -EAGAIN ) {rxe_run_task (&qp->req.task,1 );
Signature · 6 lines
2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 4/4 IB/rxe: Fix kmem_cache leak
In reply to a message not in the archiveFrom: Yonatan Cohen <yonatanc-VPRAkNaXOzVWk0Htik3J/[email protected]>
Decrement qp reference when handling error path
in completer to prevent kmem_cache leak.
--- drivers/infiniband/sw/rxe/rxe_comp.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
drivers/infiniband/sw/rxe/rxe_comp.c +13 -0
@@ -689,7 +689,14 @@ int rxe_completer(void *arg) qp->req.need_retry =1 ;rxe_run_task (&qp->req.task,1 ); } + +if (pkt) { +rxe_drop_ref (pkt->qp); +kfree_skb (skb); + } + goto exit; + }else { wqe->status =IB_WC_RETRY_EXC_ERR ; state =COMPST_ERROR ;
@@ -716,6 +723,12 @@ int rxe_completer(void *arg)case COMPST_ERROR :do_complete (qp, wqe);rxe_qp_error (qp); + +if (pkt) { +rxe_drop_ref (pkt->qp); +kfree_skb (skb); + } + goto exit; } }
Signature · 6 lines
2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html