Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 10baa26c authored by Andre Detsch's avatar Andre Detsch Committed by Jeremy Kerr
Browse files

powerpc/spufs: Improve search of node for contexts with SPU affinity



This patch improves redability of the code responsible for trying to find
a node with enough SPUs not committed to other affinity gangs.

An additional check is also added, to avoid taking into account gangs that
have no SPU affinity.

Signed-off-by: default avatarAndre Detsch <adetsch@br.ibm.com>
Signed-off-by: default avatarJeremy Kerr <jk@ozlabs.org>
parent 837ef884
Loading
Loading
Loading
Loading
+13 −6
Original line number Original line Diff line number Diff line
@@ -312,6 +312,15 @@ static struct spu *aff_ref_location(struct spu_context *ctx, int mem_aff,
	 */
	 */
	node = cpu_to_node(raw_smp_processor_id());
	node = cpu_to_node(raw_smp_processor_id());
	for (n = 0; n < MAX_NUMNODES; n++, node++) {
	for (n = 0; n < MAX_NUMNODES; n++, node++) {
		/*
		 * "available_spus" counts how many spus are not potentially
		 * going to be used by other affinity gangs whose reference
		 * context is already in place. Although this code seeks to
		 * avoid having affinity gangs with a summed amount of
		 * contexts bigger than the amount of spus in the node,
		 * this may happen sporadically. In this case, available_spus
		 * becomes negative, which is harmless.
		 */
		int available_spus;
		int available_spus;


		node = (node < MAX_NUMNODES) ? node : 0;
		node = (node < MAX_NUMNODES) ? node : 0;
@@ -321,11 +330,9 @@ static struct spu *aff_ref_location(struct spu_context *ctx, int mem_aff,
		available_spus = 0;
		available_spus = 0;
		mutex_lock(&cbe_spu_info[node].list_mutex);
		mutex_lock(&cbe_spu_info[node].list_mutex);
		list_for_each_entry(spu, &cbe_spu_info[node].spus, cbe_list) {
		list_for_each_entry(spu, &cbe_spu_info[node].spus, cbe_list) {
			if (spu->ctx && spu->ctx->gang
			if (spu->ctx && spu->ctx->gang && !spu->ctx->aff_offset
					&& spu->ctx->aff_offset == 0)
					&& spu->ctx->gang->aff_ref_spu)
				available_spus -=
				available_spus -= spu->ctx->gang->contexts;
					(spu->ctx->gang->contexts - 1);
			else
			available_spus++;
			available_spus++;
		}
		}
		if (available_spus < ctx->gang->contexts) {
		if (available_spus < ctx->gang->contexts) {