Re: arch/i386/kernel/mpparse.c warning fixes

mikpe@csd.uu.se
Thu, 22 May 2003 20:29:41 +0200


William Lee Irwin III writes:
> William Lee Irwin III writes:
> >> - if (m->mpc_apicid > MAX_APICS) {
> >> + if (MAX_APICS - m->mpc_apicid <= 0) {
> >> printk(KERN_WARNING "Processor #%d INVALID. (Max ID: %d).\n",
> >> m->mpc_apicid, MAX_APICS);
> >> --num_processors;
>
> On Thu, May 22, 2003 at 06:07:43PM +0200, mikpe@csd.uu.se wrote:
> > Eeew. Whatever the original problem is, this "fix" is just too
> > obscure and ugly.
>
> m->mpc_apicid is an 8-bit type; MAX_APICS can be 256. The above fix
> properly compares two integral expressions of equal width.

In the original "_>_", the 8-bit mpc_apicid is implicitly converted to int
before the comparison, as part of the "integer promotions" in the "usual
arithmetic conversions" (C standard lingo). The same happens in your "_-_<=0".
So what's the benefit of the rewrite?

> Also, as MAX_APICS-1 is reserved for the broadcast physical APIC ID
> (it's 0xF for serial APIC and 0xFF for xAPIC) the small semantic change
> here is correct.

No argument there, except that ">=" gets the job done in a cleaner way.
-
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/