mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 08:43:31 +00:00
net: protect NAPI config fields with netdev_lock()
Protect the following members of netdev and napi by netdev_lock: - defer_hard_irqs, - gro_flush_timeout, - irq_suspend_timeout. The first two are written via sysfs (which this patch switches to new lock), and netdev genl which holds both netdev and rtnl locks. irq_suspend_timeout is only written by netdev genl. Reviewed-by: Joe Damato <jdamato@fastly.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com> Link: https://patch.msgid.link/20250115035319.559603-11-kuba@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
53ed30800d
commit
e7ed2ba757
2 changed files with 7 additions and 5 deletions
|
@ -384,11 +384,11 @@ struct napi_struct {
|
|||
int rx_count; /* length of rx_list */
|
||||
unsigned int napi_id; /* protected by netdev_lock */
|
||||
struct hrtimer timer;
|
||||
struct task_struct *thread; /* protected by netdev_lock */
|
||||
/* all fields past this point are write-protected by netdev_lock */
|
||||
struct task_struct *thread;
|
||||
unsigned long gro_flush_timeout;
|
||||
unsigned long irq_suspend_timeout;
|
||||
u32 defer_hard_irqs;
|
||||
/* all fields past this point are write-protected by netdev_lock */
|
||||
/* control-path-only fields follow */
|
||||
struct list_head dev_list;
|
||||
struct hlist_node napi_hash_node;
|
||||
|
@ -2452,7 +2452,8 @@ struct net_device {
|
|||
* Drivers are free to use it for other protection.
|
||||
*
|
||||
* Protects:
|
||||
* @napi_list, @net_shaper_hierarchy, @reg_state, @threaded
|
||||
* @gro_flush_timeout, @napi_defer_hard_irqs, @napi_list,
|
||||
* @net_shaper_hierarchy, @reg_state, @threaded
|
||||
*
|
||||
* Partially protects (writers must hold both @lock and rtnl_lock):
|
||||
* @up
|
||||
|
|
|
@ -450,7 +450,7 @@ static ssize_t gro_flush_timeout_store(struct device *dev,
|
|||
if (!capable(CAP_NET_ADMIN))
|
||||
return -EPERM;
|
||||
|
||||
return netdev_store(dev, attr, buf, len, change_gro_flush_timeout);
|
||||
return netdev_lock_store(dev, attr, buf, len, change_gro_flush_timeout);
|
||||
}
|
||||
NETDEVICE_SHOW_RW(gro_flush_timeout, fmt_ulong);
|
||||
|
||||
|
@ -470,7 +470,8 @@ static ssize_t napi_defer_hard_irqs_store(struct device *dev,
|
|||
if (!capable(CAP_NET_ADMIN))
|
||||
return -EPERM;
|
||||
|
||||
return netdev_store(dev, attr, buf, len, change_napi_defer_hard_irqs);
|
||||
return netdev_lock_store(dev, attr, buf, len,
|
||||
change_napi_defer_hard_irqs);
|
||||
}
|
||||
NETDEVICE_SHOW_RW(napi_defer_hard_irqs, fmt_uint);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue