Commit 6e49ba1b authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull fixes for cpumask and modules from Rusty Russell:
 "** NOW WITH TESTING! **

  Two fixes which got lost in my recent distraction.  One is a weird
  cpumask function which needed to be rewritten, the other is a module
  bug which is cc:stable"

* tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux:
  cpumask_set_cpu_local_first => cpumask_local_spread, lament
  module: Call module notifier on failure after complete_formation()
parents d0af6988 f36963c9
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -2358,11 +2358,11 @@ static int be_evt_queues_create(struct be_adapter *adapter)
				    adapter->cfg_num_qs);

	for_all_evt_queues(adapter, eqo, i) {
		int numa_node = dev_to_node(&adapter->pdev->dev);
		if (!zalloc_cpumask_var(&eqo->affinity_mask, GFP_KERNEL))
			return -ENOMEM;
		cpumask_set_cpu_local_first(i, dev_to_node(&adapter->pdev->dev),
		cpumask_set_cpu(cpumask_local_spread(i, numa_node),
				eqo->affinity_mask);

		netif_napi_add(adapter->netdev, &eqo->napi, be_poll,
			       BE_NAPI_WEIGHT);
		napi_hash_add(&eqo->napi);
+3 −7
Original line number Diff line number Diff line
@@ -1501,17 +1501,13 @@ static int mlx4_en_init_affinity_hint(struct mlx4_en_priv *priv, int ring_idx)
{
	struct mlx4_en_rx_ring *ring = priv->rx_ring[ring_idx];
	int numa_node = priv->mdev->dev->numa_node;
	int ret = 0;

	if (!zalloc_cpumask_var(&ring->affinity_mask, GFP_KERNEL))
		return -ENOMEM;

	ret = cpumask_set_cpu_local_first(ring_idx, numa_node,
	cpumask_set_cpu(cpumask_local_spread(ring_idx, numa_node),
			ring->affinity_mask);
	if (ret)
		free_cpumask_var(ring->affinity_mask);

	return ret;
	return 0;
}

static void mlx4_en_free_affinity_hint(struct mlx4_en_priv *priv, int ring_idx)
+3 −3
Original line number Diff line number Diff line
@@ -144,8 +144,8 @@ int mlx4_en_create_tx_ring(struct mlx4_en_priv *priv,
	ring->queue_index = queue_index;

	if (queue_index < priv->num_tx_rings_p_up)
		cpumask_set_cpu_local_first(queue_index,
					    priv->mdev->dev->numa_node,
		cpumask_set_cpu(cpumask_local_spread(queue_index,
						     priv->mdev->dev->numa_node),
				&ring->affinity_mask);

	*pring = ring;
+2 −4
Original line number Diff line number Diff line
@@ -151,10 +151,8 @@ static inline unsigned int cpumask_any_but(const struct cpumask *mask,
	return 1;
}

static inline int cpumask_set_cpu_local_first(int i, int numa_node, cpumask_t *dstp)
static inline unsigned int cpumask_local_spread(unsigned int i, int node)
{
	set_bit(0, cpumask_bits(dstp));

	return 0;
}

@@ -208,7 +206,7 @@ static inline unsigned int cpumask_next_zero(int n, const struct cpumask *srcp)

int cpumask_next_and(int n, const struct cpumask *, const struct cpumask *);
int cpumask_any_but(const struct cpumask *mask, unsigned int cpu);
int cpumask_set_cpu_local_first(int i, int numa_node, cpumask_t *dstp);
unsigned int cpumask_local_spread(unsigned int i, int node);

/**
 * for_each_cpu - iterate over every cpu in a mask
+3 −0
Original line number Diff line number Diff line
@@ -3370,6 +3370,9 @@ static int load_module(struct load_info *info, const char __user *uargs,
	module_bug_cleanup(mod);
	mutex_unlock(&module_mutex);

	blocking_notifier_call_chain(&module_notify_list,
				     MODULE_STATE_GOING, mod);

	/* we can't deallocate the module until we clear memory protection */
	unset_module_init_ro_nx(mod);
	unset_module_core_ro_nx(mod);
Loading