[PATCH] Compile failure fix for ppc on 2.6.17-rc4-mm3 (2nd attempt)

Segher Boessenkool segher at kernel.crashing.org
Tue May 30 03:56:21 EST 2006


>>>  #define push_end(res, size) do { unsigned long __sz = (size) ; \
>>> -	res->end = ((res->end + __sz) / (__sz + 1)) * (__sz + 1) + __sz; \
>>> +	resource_size_t farEnd = (res->end + __sz); \
>>> +	do_div(farEnd, (__sz + 1)); \
>>> +	res->end = farEnd * (__sz + 1) + __sz; \
>>>      } while (0)
>>
>> Size here is a) a misnomer (size + 1 is the actual size) and b) 
>> always a power
>> of two minus one.  So instead, do
>>
>> #define push_end(res, mask) res->end = -(-res->end & ~(unsigned 
>> long)mask)
>>
>> (with a do { } while(0) armour if you prefer).
>>
>
> It's not doing the same as the old code so is your suggested fix a 
> correct replacement?
>
> For example, given 0xfff for size the current code rounds res->end to 
> the next 0x1000 boundary and adds 0xfff. Your propose fix just rounds 
> it to the next 0x1000 if I'm reading it correctly but is what the code 
> was meant to do in the first place? Using masks, the equivilant of the 
> current code is something like;
>
> #define push_end(res, mask) do { \
> 	res->end = -(-res->end & ~(unsigned long)mask); \
> 	res->end += mask; \
> } while (0)

Yeah forgot a bit, this looks fine.


Segher




More information about the Linuxppc-dev mailing list