Merge tag 'asm-generic-5.4' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 17 Sep 2019 21:30:30 +0000 (14:30 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 17 Sep 2019 21:30:30 +0000 (14:30 -0700)
Pull asm-generic updates from Arnd Bergmann:
 "Here are three small cleanup patches for the include/asm-generic
  directory.

  Christoph removes the __ioremap as part of a cleanup, Nico improves
  the constant do_div() optimization, and Denis changes BUG_ON() to be
  consistent with other implementations"

* tag 'asm-generic-5.4' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic:
  asm-generic: add unlikely to default BUG_ON(x)
  __div64_const32(): improve the generic C version
  asm-generic: don't provide __ioremap

1  2 
include/asm-generic/div64.h

index b2a9c74efa55aee063d0cad3c6be9a5ebe644eb6,33358245b4fa57ff89c94ce9ee046e9e45dc5e17..a3b98c86f077482df66c3d1729601239e1aba11e
  
  /**
   * do_div - returns 2 values: calculate remainder and update new dividend
 - * @n: pointer to uint64_t dividend (will be updated)
 + * @n: uint64_t dividend (will be updated)
   * @base: uint32_t divisor
   *
   * Summary:
 - * ``uint32_t remainder = *n % base;``
 - * ``*n = *n / base;``
 + * ``uint32_t remainder = n % base;``
 + * ``n = n / base;``
   *
   * Return: (uint32_t)remainder
   *
@@@ -178,7 -178,8 +178,8 @@@ static inline uint64_t __arch_xprod_64(
        uint32_t m_hi = m >> 32;
        uint32_t n_lo = n;
        uint32_t n_hi = n >> 32;
-       uint64_t res, tmp;
+       uint64_t res;
+       uint32_t res_lo, res_hi, tmp;
  
        if (!bias) {
                res = ((uint64_t)m_lo * n_lo) >> 32;
                res = (m + (uint64_t)m_lo * n_lo) >> 32;
        } else {
                res = m + (uint64_t)m_lo * n_lo;
-               tmp = (res < m) ? (1ULL << 32) : 0;
-               res = (res >> 32) + tmp;
+               res_lo = res >> 32;
+               res_hi = (res_lo < m_hi);
+               res = res_lo | ((uint64_t)res_hi << 32);
        }
  
        if (!(m & ((1ULL << 63) | (1ULL << 31)))) {
                res += (uint64_t)m_hi * n_lo;
                res >>= 32;
        } else {
-               tmp = res += (uint64_t)m_lo * n_hi;
+               res += (uint64_t)m_lo * n_hi;
+               tmp = res >> 32;
                res += (uint64_t)m_hi * n_lo;
-               tmp = (res < tmp) ? (1ULL << 32) : 0;
-               res = (res >> 32) + tmp;
+               res_lo = res >> 32;
+               res_hi = (res_lo < tmp);
+               res = res_lo | ((uint64_t)res_hi << 32);
        }
  
        res += (uint64_t)m_hi * n_hi;