bitops: make BYTES_TO_BITS() treewide-available
Avoid open-coding that simple expression each time by moving BYTES_TO_BITS() from the probes code to <linux/bitops.h> to export it to the rest of the kernel. Simplify the macro while at it. `BITS_PER_LONG / sizeof(long)` always equals to %BITS_PER_BYTE, regardless of the target architecture. Do the same for the tools ecosystem as well (incl. its version of bitops.h). The previous implementation had its implicit type of long, while the new one is int, so adjust the format literal accordingly in the perf code. Suggested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com> Acked-by: Yury Norov <yury.norov@gmail.com> Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
72cc1980a0
commit
7d8296b250
@ -21,6 +21,8 @@
|
|||||||
#define BITS_TO_U32(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u32))
|
#define BITS_TO_U32(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u32))
|
||||||
#define BITS_TO_BYTES(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(char))
|
#define BITS_TO_BYTES(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(char))
|
||||||
|
|
||||||
|
#define BYTES_TO_BITS(nb) ((nb) * BITS_PER_BYTE)
|
||||||
|
|
||||||
extern unsigned int __sw_hweight8(unsigned int w);
|
extern unsigned int __sw_hweight8(unsigned int w);
|
||||||
extern unsigned int __sw_hweight16(unsigned int w);
|
extern unsigned int __sw_hweight16(unsigned int w);
|
||||||
extern unsigned int __sw_hweight32(unsigned int w);
|
extern unsigned int __sw_hweight32(unsigned int w);
|
||||||
|
@ -1180,8 +1180,6 @@ parse_probe_arg(char *arg, const struct fetch_type *type,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define BYTES_TO_BITS(nb) ((BITS_PER_LONG * (nb)) / sizeof(long))
|
|
||||||
|
|
||||||
/* Bitfield type needs to be parsed into a fetch function */
|
/* Bitfield type needs to be parsed into a fetch function */
|
||||||
static int __parse_bitfield_probe_arg(const char *bf,
|
static int __parse_bitfield_probe_arg(const char *bf,
|
||||||
const struct fetch_type *t,
|
const struct fetch_type *t,
|
||||||
|
@ -20,6 +20,8 @@
|
|||||||
#define BITS_TO_U32(nr) DIV_ROUND_UP(nr, BITS_PER_TYPE(u32))
|
#define BITS_TO_U32(nr) DIV_ROUND_UP(nr, BITS_PER_TYPE(u32))
|
||||||
#define BITS_TO_BYTES(nr) DIV_ROUND_UP(nr, BITS_PER_TYPE(char))
|
#define BITS_TO_BYTES(nr) DIV_ROUND_UP(nr, BITS_PER_TYPE(char))
|
||||||
|
|
||||||
|
#define BYTES_TO_BITS(nb) ((nb) * BITS_PER_BYTE)
|
||||||
|
|
||||||
extern unsigned int __sw_hweight8(unsigned int w);
|
extern unsigned int __sw_hweight8(unsigned int w);
|
||||||
extern unsigned int __sw_hweight16(unsigned int w);
|
extern unsigned int __sw_hweight16(unsigned int w);
|
||||||
extern unsigned int __sw_hweight32(unsigned int w);
|
extern unsigned int __sw_hweight32(unsigned int w);
|
||||||
|
@ -186,8 +186,6 @@ static_var:
|
|||||||
return ret2;
|
return ret2;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define BYTES_TO_BITS(nb) ((nb) * BITS_PER_LONG / sizeof(long))
|
|
||||||
|
|
||||||
static int convert_variable_type(Dwarf_Die *vr_die,
|
static int convert_variable_type(Dwarf_Die *vr_die,
|
||||||
struct probe_trace_arg *tvar,
|
struct probe_trace_arg *tvar,
|
||||||
const char *cast, bool user_access)
|
const char *cast, bool user_access)
|
||||||
@ -217,7 +215,7 @@ static int convert_variable_type(Dwarf_Die *vr_die,
|
|||||||
total = dwarf_bytesize(vr_die);
|
total = dwarf_bytesize(vr_die);
|
||||||
if (boffs < 0 || total < 0)
|
if (boffs < 0 || total < 0)
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
ret = snprintf(buf, 16, "b%d@%d/%zd", bsize, boffs,
|
ret = snprintf(buf, 16, "b%d@%d/%d", bsize, boffs,
|
||||||
BYTES_TO_BITS(total));
|
BYTES_TO_BITS(total));
|
||||||
goto formatted;
|
goto formatted;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user