1*2c64e9cbSAndy Shevchenko #include <linux/compiler.h> 2*2c64e9cbSAndy Shevchenko #include <linux/gcd.h> 3*2c64e9cbSAndy Shevchenko #include <linux/export.h> 4*2c64e9cbSAndy Shevchenko #include <linux/lcm.h> 5*2c64e9cbSAndy Shevchenko 6*2c64e9cbSAndy Shevchenko /* Lowest common multiple */ 7*2c64e9cbSAndy Shevchenko unsigned long lcm(unsigned long a, unsigned long b) 8*2c64e9cbSAndy Shevchenko { 9*2c64e9cbSAndy Shevchenko if (a && b) 10*2c64e9cbSAndy Shevchenko return (a / gcd(a, b)) * b; 11*2c64e9cbSAndy Shevchenko else 12*2c64e9cbSAndy Shevchenko return 0; 13*2c64e9cbSAndy Shevchenko } 14*2c64e9cbSAndy Shevchenko EXPORT_SYMBOL_GPL(lcm); 15*2c64e9cbSAndy Shevchenko 16*2c64e9cbSAndy Shevchenko unsigned long lcm_not_zero(unsigned long a, unsigned long b) 17*2c64e9cbSAndy Shevchenko { 18*2c64e9cbSAndy Shevchenko unsigned long l = lcm(a, b); 19*2c64e9cbSAndy Shevchenko 20*2c64e9cbSAndy Shevchenko if (l) 21*2c64e9cbSAndy Shevchenko return l; 22*2c64e9cbSAndy Shevchenko 23*2c64e9cbSAndy Shevchenko return (b ? : a); 24*2c64e9cbSAndy Shevchenko } 25*2c64e9cbSAndy Shevchenko EXPORT_SYMBOL_GPL(lcm_not_zero); 26