1*d6e6a27dSMatthew Wilcox (Oracle) #ifndef _TOOLS_MATH_H 2*d6e6a27dSMatthew Wilcox (Oracle) #define _TOOLS_MATH_H 3*d6e6a27dSMatthew Wilcox (Oracle) 4*d6e6a27dSMatthew Wilcox (Oracle) /* 5*d6e6a27dSMatthew Wilcox (Oracle) * This looks more complex than it should be. But we need to 6*d6e6a27dSMatthew Wilcox (Oracle) * get the type for the ~ right in round_down (it needs to be 7*d6e6a27dSMatthew Wilcox (Oracle) * as wide as the result!), and we want to evaluate the macro 8*d6e6a27dSMatthew Wilcox (Oracle) * arguments just once each. 9*d6e6a27dSMatthew Wilcox (Oracle) */ 10*d6e6a27dSMatthew Wilcox (Oracle) #define __round_mask(x, y) ((__typeof__(x))((y)-1)) 11*d6e6a27dSMatthew Wilcox (Oracle) #define round_up(x, y) ((((x)-1) | __round_mask(x, y))+1) 12*d6e6a27dSMatthew Wilcox (Oracle) #define round_down(x, y) ((x) & ~__round_mask(x, y)) 13*d6e6a27dSMatthew Wilcox (Oracle) 14*d6e6a27dSMatthew Wilcox (Oracle) #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) 15*d6e6a27dSMatthew Wilcox (Oracle) 16*d6e6a27dSMatthew Wilcox (Oracle) #ifndef roundup 17*d6e6a27dSMatthew Wilcox (Oracle) #define roundup(x, y) ( \ 18*d6e6a27dSMatthew Wilcox (Oracle) { \ 19*d6e6a27dSMatthew Wilcox (Oracle) const typeof(y) __y = y; \ 20*d6e6a27dSMatthew Wilcox (Oracle) (((x) + (__y - 1)) / __y) * __y; \ 21*d6e6a27dSMatthew Wilcox (Oracle) } \ 22*d6e6a27dSMatthew Wilcox (Oracle) ) 23*d6e6a27dSMatthew Wilcox (Oracle) #endif 24*d6e6a27dSMatthew Wilcox (Oracle) 25*d6e6a27dSMatthew Wilcox (Oracle) #endif 26