Re: [PATCH] proc-based cpu affinity user interface

Davide Libenzi (davidel@xmailserver.org)
Mon, 26 Nov 2001 20:39:11 -0800 (PST)


On 26 Nov 2001, Robert Love wrote:

> On Mon, 2001-11-26 at 22:52, Davide Libenzi wrote:
> > As I said in reply to Ingo patch, it'd be better to expose "number" cpu
> > masks not "logical" ( like cpus_allowed ).
> > In this way the users can use 0..N-1 ( N == number of cpus phisically
> > available ) w/out having to know the internal mapping between logical and
> > number ids.
>
> Do you mean you don't like using a bitmask ?

No no, I love binary math :)

> 00000001 = first CPU, its not logical, its physical.

If You set this directly to cpus_allowed You're going to set the logical
one.
This because cpus_allowed is logical, because it's used like, ie:

int this_cpu = p->processor;

if (p->cpus_allowed & (1 << this_cpu)) ...

and p->processor is logical.
Something like :

unsigned long num2log_mask(unsigned long cmsk) {
unsigned long msk = 0;
int ii;

for (ii = 0; ii < smp_num_cpus; ii++)
if (cmsk & (1 << ii))
msk |= (1 << cpu_logical_map(ii));
return msk;
}

unsigned long log2num_mask(unsigned long cmsk) {
unsigned long msk = 0;
int ii;

for (ii = 0; ii < smp_num_cpus; ii++)
if (cmsk & (1 << ii))
msk |= (1 << cpu_number_map(ii));
return msk;
}

You use num2log_mask() on the user input mask to set cpus_allowed and
log2num_mask() to return the map to the user.

- Davide

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/