From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marc Aurele La France Subject: RCU'ed dst_get_neighbour() Date: Tue, 29 Nov 2011 10:44:36 -0700 (Mountain Standard Time) Message-ID: Mime-Version: 1.0 Content-Type: TEXT/PLAIN; format=flowed; charset=US-ASCII To: netdev@vger.kernel.org, eric.dumazet@gmail.com Return-path: Received: from smtp.srv.ualberta.ca ([129.128.5.19]:61326 "EHLO mail1.srv.ualberta.ca" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755968Ab1K2SFk (ORCPT ); Tue, 29 Nov 2011 13:05:40 -0500 Sender: netdev-owner@vger.kernel.org List-ID: Hi. Commit (1) seems to imply that all dst_get_neighbour() references now need to be wrapped with rcu_read_lock()/rcu_read_unlock() sequences. See (2) for one such proposed change. In the case I have here (ipoib), this commit results in ... =================================================== [ INFO: suspicious rcu_dereference_check() usage. ] --------------------------------------------------- include/net/dst.h:91 invoked rcu_dereference_check() without protection! other info that might help us debug this: rcu_scheduler_active = 1, debug_locks = 1 4 locks held by kworker/3:1/630: #0: (ib_cm){.+.+.+}, at: [] process_one_work+0x1ab/0x4f9 #1: ((&(&work->work)->work)){+.+.+.}, at: [] process_one_work+0x1ab/0x4f9 #2: (rcu_read_lock_bh){.+....}, at: [] dev_queue_xmit+0x0/0x5ae #3: (_xmit_INFINIBAND){+.-...}, at: [] sch_direct_xmit+0x4d/0x22b stack backtrace: Pid: 630, comm: kworker/3:1 Not tainted 3.1.3-smp #1 Call Trace: [] lockdep_rcu_dereference+0x9b/0xa4 [] ipoib_start_xmit+0xf4/0x36f [] dev_hard_start_xmit+0x2a7/0x54f [] sch_direct_xmit+0x70/0x22b [] dev_queue_xmit+0x309/0x5ae [] ? napi_gro_receive+0xb3/0xb3 [] ipoib_cm_rep_handler+0x208/0x248 [] ? _raw_spin_unlock_irqrestore+0x3d/0x5b [] ipoib_cm_tx_handler+0x95/0x27f [] ? __trace_hardirqs_on_caller+0x41/0x65 [] cm_process_work+0x26/0xbc [] cm_rep_handler+0x274/0x2ae [] cm_work_handler+0x41/0x91 [] process_one_work+0x2a2/0x4f9 [] ? process_one_work+0x1ab/0x4f9 [] ? worker_thread+0x4a/0x1ca [] ? cm_req_handler+0x355/0x355 [] worker_thread+0xf9/0x1ca [] ? gcwq_mayday_timeout+0x77/0x77 [] kthread+0x86/0x8e [] kernel_thread_helper+0x4/0x10 [] ? retint_restore_args+0xe/0xe [] ? kthread_stop+0x1cd/0x1cd [] ? gs_change+0xb/0xb =================================================== [ INFO: suspicious rcu_dereference_check() usage. ] --------------------------------------------------- include/net/dst.h:91 invoked rcu_dereference_check() without protection! other info that might help us debug this: rcu_scheduler_active = 1, debug_locks = 1 2 locks held by kworker/u:2/748: #0: ((name)){.+.+.+}, at: [] process_one_work+0x1ab/0x4f9 #1: ((&port_priv->work)){+.+.+.}, at: [] process_one_work+0x1ab/0x4f9 stack backtrace: Pid: 748, comm: kworker/u:2 Not tainted 3.1.3-smp #1 Call Trace: [] lockdep_rcu_dereference+0x9b/0xa4 [] ipoib_mcast_join_finish+0x362/0x48a [] ipoib_mcast_sendonly_join_complete+0x3b/0x174 [] mcast_work_handler+0xba/0x182 [] join_handler+0xe6/0xee [] ib_sa_mcmember_rec_callback+0x51/0x5c [] recv_handler+0x44/0x50 [] ib_mad_complete_recv+0xc3/0x125 [] ? find_mad_agent+0x13a/0x149 [] ib_mad_recv_done_handler+0x2de/0x326 [] ib_mad_completion_handler+0x5e/0x91 [] process_one_work+0x2a2/0x4f9 [] ? process_one_work+0x1ab/0x4f9 [] ? worker_thread+0x4a/0x1ca [] ? ib_mad_recv_done_handler+0x326/0x326 [] worker_thread+0xf9/0x1ca [] ? gcwq_mayday_timeout+0x77/0x77 [] kthread+0x86/0x8e [] kernel_thread_helper+0x4/0x10 [] ? retint_restore_args+0xe/0xe [] ? kthread_stop+0x1cd/0x1cd [] ? gs_change+0xb/0xb Comments/flames? Thanks. Marc. PS: Please reply-to-all as I am not subscribed to netdev. (1) http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=f2c31e32b378a6653f8de606149d963baf11d7d3 (2) http://www.spinics.net/lists/netdev/msg179639.html +----------------------------------+----------------------------------+ | Marc Aurele La France | work: 1-780-492-9310 | | Academic Information and | fax: 1-780-492-1729 | | Communications Technologies | email: tsi@ualberta.ca | | 352 General Services Building +----------------------------------+ | University of Alberta | | | Edmonton, Alberta | Standard disclaimers apply | | T6G 2H1 | | | CANADA | | +----------------------------------+----------------------------------+