On Sat, Mar 04, 2023, Wang, Wei W wrote: > On Saturday, March 4, 2023 1:36 AM, David Matlack wrote: > > > > On Friday, March 3, 2023 2:12 AM, Mingwei Zhang wrote: > > > > > > On Thursday, March 2, 2023 12:55 PM, Mingwei Zhang wrote: > > > > > > > I don't get it. Why bothering the type if we just do this? > > > > > > > > > > > > > > diff --git a/include/linux/kvm_host.h > > > > > > > b/include/linux/kvm_host.h index 4f26b244f6d0..10455253c6ea > > > > > > > 100644 > > > > > > > --- a/include/linux/kvm_host.h > > > > > > > +++ b/include/linux/kvm_host.h > > > > > > > @@ -848,7 +848,7 @@ static inline void kvm_vm_bugged(struct > > > > > > > kvm > > > > > > > *kvm) > > > > > > > > > > > > > > #define KVM_BUG(cond, kvm, fmt...) \ > > > > > > > ({ \ > > > > > > > - int __ret = (cond); \ > > > > > > > + int __ret = !!(cond); \ > > > > > > > > > > > > This is essentially "bool __ret". No biggie to change it this way. > > > > > > > > > > !! will return an int, not a boolean, but it is used as a boolean. > > > > > > > > What's the point of defining it as an int when actually being used as a > > Boolean? > > > > Original returning of an 'int' is a bug in this sense. Either > > > > returning a Boolean or the same type (length) as cond is good way to me. > > > > > > What's the point of using an integer? I think we need to ask the > > > original author. But I think one of the reasons might be convenience > > > as the return value. I am not sure if we can return a boolean in the > > > function. But it should be fine here since it is a macro. > > > > > > Anyway, returning an 'int' is not a bug. The bug is the casting from > > > 'cond' to the integer that may lose information and this is what you > > > have captured. > > > > typeof() won't work if cond is a bitfield. See commit 8d4fbcfbe0a4 ("Fix > > WARN_ON() on bitfield ops") from Linus from back in 2007: > > Yes, this seems to be a good reason for not going for typeof. Thanks for sharing. Ya, just make __ret a bool. I'm 99% certain I just loosely copied from WARN_ON(), but missed the !!.