Message ID | 20110505080729.GD14391@elte.hu (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
* Ingo Molnar <mingo@elte.hu> wrote: > I'm not entirely happy about how it has added dependent includes to virtio.c > but that's a property of this messy header file. Might be worth adding a > comment about that. This block: > +#include <linux/stringify.h> > +#include <linux/bitops.h> > +#include <asm/alternative.h> > #include <asm/system.h> Could be put into a new tools/kvm/include/kvm/barrier.h file, with a comment - that way the virtio.c inclusion looks very clean. Note: i'd not put it into linux/barrier.h, to not clash with any possible future linux/barrier.h file, and to also make it clear that this is a kvm specific wrapper. Oh, and those 3 lines could be put into upstream arch/x86's system.h as well, to make asm/system.h standalone includable. Does anyone want to send a patch for that? Once that header fix is upstream and once tools/kvm/ merges that upstream kernel the special wrapper barrier.h can be dropped and virtio.c can include asm/system.h for the barriers. The joys of a clean Git workflow and a unified kernel+tools tree, it actually helps fix crap on both sides :-) Thanks, Ingo -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/tools/kvm/include/asm/hweight.h b/tools/kvm/include/asm/hweight.h new file mode 100644 index 0000000..36cf26d --- /dev/null +++ b/tools/kvm/include/asm/hweight.h @@ -0,0 +1,8 @@ +#ifndef PERF_HWEIGHT_H +#define PERF_HWEIGHT_H + +#include <linux/types.h> +unsigned int hweight32(unsigned int w); +unsigned long hweight64(__u64 w); + +#endif /* PERF_HWEIGHT_H */ diff --git a/tools/kvm/include/linux/bitops.h b/tools/kvm/include/linux/bitops.h new file mode 100644 index 0000000..305c848 --- /dev/null +++ b/tools/kvm/include/linux/bitops.h @@ -0,0 +1,33 @@ +#ifndef _PERF_LINUX_BITOPS_H_ +#define _PERF_LINUX_BITOPS_H_ + +#include <linux/kernel.h> +#include <linux/compiler.h> +#include <asm/hweight.h> + +#define BITS_PER_LONG __WORDSIZE +#define BITS_PER_BYTE 8 +#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long)) + +static inline void set_bit(int nr, unsigned long *addr) +{ + addr[nr / BITS_PER_LONG] |= 1UL << (nr % BITS_PER_LONG); +} + +static inline void clear_bit(int nr, unsigned long *addr) +{ + addr[nr / BITS_PER_LONG] &= ~(1UL << (nr % BITS_PER_LONG)); +} + +static __always_inline int test_bit(unsigned int nr, const unsigned long *addr) +{ + return ((1UL << (nr % BITS_PER_LONG)) & + (((unsigned long *)addr)[nr / BITS_PER_LONG])) != 0; +} + +static inline unsigned long hweight_long(unsigned long w) +{ + return sizeof(w) == 4 ? hweight32(w) : hweight64(w); +} + +#endif diff --git a/tools/kvm/virtio.c b/tools/kvm/virtio.c index 266a1b6..3a4b1c9 100644 --- a/tools/kvm/virtio.c +++ b/tools/kvm/virtio.c @@ -1,7 +1,12 @@ #include <linux/virtio_ring.h> #include <stdint.h> #include <sys/uio.h> + +#include <linux/stringify.h> +#include <linux/bitops.h> +#include <asm/alternative.h> #include <asm/system.h> + #include "kvm/kvm.h" #include "kvm/virtio.h"