[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date: Thu, 02 Feb 2017 17:47:23 -0600
From: Joel Cunningham <joel.cunningham@...com>
To: Linux Kernel Network Developers <netdev@...r.kernel.org>
Subject: Understanding mutual exclusion between rtnl_lock and rcu_read_lock
Hi,
I’m studying the synchronization used on different parts of struct net_device and I’m struggling to understand how structure member modifications in dev_ioctl are synchronized. Getters in dev_ifsioc_locked() are only holding rcu_read_lock() while setters in dev_ifsioc() are holding rtnl_lock, but not using RCU APIs. I was specifically looking at SIOCGIFHWADDR/SIOCSIFHWADDR. What’s to prevent one CPU from executing a getter and another CPU from executing a setter resulting in possibly a torn read/write? I didn’t see anything in rtnl_lock() that would wait for any rcu_reader_lock() critical sections (on other CPUs) to finish before acquiring the mutex.
Is there something about dev_ioctl that prevents parallel execution? or maybe something I still don’t understand about the RCU implementation?
Thanks,
Joel
Powered by blists - more mailing lists