LCOV - code coverage report
Current view: top level - lib - find_last_bit.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 7 10 70.0 %
Date: 2015-04-12 14:34:49 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /* find_last_bit.c: fallback find next bit implementation
       2             :  *
       3             :  * Copyright (C) 2008 IBM Corporation
       4             :  * Written by Rusty Russell <rusty@rustcorp.com.au>
       5             :  * (Inspired by David Howell's find_next_bit implementation)
       6             :  *
       7             :  * This program is free software; you can redistribute it and/or
       8             :  * modify it under the terms of the GNU General Public License
       9             :  * as published by the Free Software Foundation; either version
      10             :  * 2 of the License, or (at your option) any later version.
      11             :  */
      12             : 
      13             : #include <linux/bitops.h>
      14             : #include <linux/export.h>
      15             : #include <asm/types.h>
      16             : #include <asm/byteorder.h>
      17             : 
      18             : #ifndef find_last_bit
      19             : 
      20       12732 : unsigned long find_last_bit(const unsigned long *addr, unsigned long size)
      21             : {
      22             :         unsigned long words;
      23             :         unsigned long tmp;
      24             : 
      25             :         /* Start at final word. */
      26       12732 :         words = size / BITS_PER_LONG;
      27             : 
      28             :         /* Partial final word? */
      29       12732 :         if (size & (BITS_PER_LONG-1)) {
      30           0 :                 tmp = (addr[words] & (~0UL >> (BITS_PER_LONG
      31           0 :                                          - (size & (BITS_PER_LONG-1)))));
      32           0 :                 if (tmp)
      33             :                         goto found;
      34             :         }
      35             : 
      36       12732 :         while (words) {
      37       12732 :                 tmp = addr[--words];
      38       12732 :                 if (tmp) {
      39             : found:
      40       25464 :                         return words * BITS_PER_LONG + __fls(tmp);
      41             :                 }
      42             :         }
      43             : 
      44             :         /* Not found */
      45             :         return size;
      46             : }
      47             : EXPORT_SYMBOL(find_last_bit);
      48             : 
      49             : #endif

Generated by: LCOV version 1.11