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. > > As for int versus bool, I don't see a strong argument for either. So let's stick > with int since that's what the current code is using and that aligns with the > generic kernel WARN_ON(). > > If someone wants to propose using a bool instead of an int that should be a > separate commit anyway and needs an actual justification. Wait a bit. Let me seek for a valid reason from the WARN side first. CodingStyle already says: bool function return types and stack variables are always fine to use whenever appropriate. Use of bool is encouraged to improve readability and is often a better option than 'int' for storing boolean values.