diff options
Diffstat (limited to 'net/core/net-sysfs.c')
| -rw-r--r-- | net/core/net-sysfs.c | 14 | 
1 files changed, 12 insertions, 2 deletions
diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c index e353b822bb15..efec66fa78b7 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c @@ -11,6 +11,7 @@  #include <linux/if_arp.h>  #include <linux/slab.h>  #include <linux/sched/signal.h> +#include <linux/sched/isolation.h>  #include <linux/nsproxy.h>  #include <net/sock.h>  #include <net/net_namespace.h> @@ -741,7 +742,7 @@ static ssize_t store_rps_map(struct netdev_rx_queue *queue,  {  	struct rps_map *old_map, *map;  	cpumask_var_t mask; -	int err, cpu, i; +	int err, cpu, i, hk_flags;  	static DEFINE_MUTEX(rps_map_mutex);  	if (!capable(CAP_NET_ADMIN)) @@ -756,6 +757,15 @@ static ssize_t store_rps_map(struct netdev_rx_queue *queue,  		return err;  	} +	if (!cpumask_empty(mask)) { +		hk_flags = HK_FLAG_DOMAIN | HK_FLAG_WQ; +		cpumask_and(mask, mask, housekeeping_cpumask(hk_flags)); +		if (cpumask_empty(mask)) { +			free_cpumask_var(mask); +			return -EINVAL; +		} +	} +  	map = kzalloc(max_t(unsigned int,  			    RPS_MAP_SIZE(cpumask_weight(mask)), L1_CACHE_BYTES),  		      GFP_KERNEL); @@ -1108,7 +1118,7 @@ static ssize_t tx_timeout_show(struct netdev_queue *queue, char *buf)  	trans_timeout = queue->trans_timeout;  	spin_unlock_irq(&queue->_xmit_lock); -	return sprintf(buf, "%lu", trans_timeout); +	return sprintf(buf, fmt_ulong, trans_timeout);  }  static unsigned int get_netdev_queue_index(struct netdev_queue *queue)  | 
