Christoph Lameter <cl@xxxxxxxxxxxxxxxxxxxx> writes: > On Wed, 20 Jan 2010, Yinghai Lu wrote: > >> + * This looks more complex than it should be. But we need to >> + * get the type for the ~ right in round_down (it needs to be >> + * as wide as the result!), and we want to evaluate the macro >> + * arguments just once each. >> + */ >> +#define __round_mask(x,y) ((__typeof__(x))((y)-1)) >> +#define round_up(x,y) ((((x)-1) | __round_mask(x,y))+1) >> +#define round_down(x,y) ((x) & ~__round_mask(x,y)) >> + >> #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) >> #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) >> #define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y)) > > So we are back to the earlier version. > > Two functions doing the same thing. round_up and roundup. > > If they are different(are they really used that way?) then they should > have names that emphasize the difference. round_up() basically only works for power of two, but they should generate the same code for constants. The only user right now is e820.c, but it uses the second argument with non constants, so would generate a slower true division with roundup() Right now it probably doesn't make much difference because e820 lists are small, but I saw a patchkit to let e820 replace bootmem and then they might not be anymore. -Andi -- ak@xxxxxxxxxxxxxxx -- Speaking for myself only. -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html