>>> On 16.04.15 at 12:53, <t...@xen.org> wrote:
> At 14:17 +0100 on 14 Apr (1429021061), Andrew Cooper wrote:
>> On 14/04/15 12:47, Jan Beulich wrote:
>> >>>> On 13.04.15 at 18:01, <dsl...@verizon.com> wrote:
>> >> --- a/xen/arch/x86/hvm/hvm.c
>> >> +++ b/xen/arch/x86/hvm/hvm.c
>> >> @@ -536,8 +536,9 @@ static int hvm_alloc_ioreq_gmfn(struct domain *d, 
>> >> unsigned long *gmfn)
>> >>  
>> >>  static void hvm_free_ioreq_gmfn(struct domain *d, unsigned long gmfn)
>> >>  {
>> >> -    unsigned int i = gmfn - d->arch.hvm_domain.ioreq_gmfn.base;
>> >> +    unsigned long i = gmfn - d->arch.hvm_domain.ioreq_gmfn.base;
>> >>  
>> >> +    BUG_ON(i >= sizeof(d->arch.hvm_domain.ioreq_gmfn.mask) * 8);
>> >>      clear_bit(i, &d->arch.hvm_domain.ioreq_gmfn.mask);
>> >>  }
>> > I'd be happier with an ASSERT() - Andrew?
>> 
>> If I recall, this is a follow on from the compiler error, where gmfn now
>> gets initialised to ~0 to avoid a build failure.
>> 
>> If gcc is correct and there is a way for gmfn to be used, then the
>> clear_bit() here clobber memory.  The BUG_ON() serves as a protection
>> against the clobbering.
>> 
>> If however gcc was actually wrong, then the code here is actually fine,
>> and a BUG_ON() or ASSERT() will never actually trigger.
>> 
>> In addition, not a hotpath in the slightest, so performance isn't a concern.
>> 
>> 
>> I have still not managed to conclusively work out whether gcc is correct
>> or wrong.  As a result, I would lean in the direction of BUG_ON() rather
>> than ASSERT(), out of paranoia.  However, I would prefer even more a
>> solution where we were certain that gmfn isn't bogus.
> 
> AFAICT GCC is wrong, though the code is confusing enough to me that I
> don't blame GCC for being confused too. :)
> 
> I would be inclined to use a bigger hammer here.  IMO refactoring like
> this makes it easier to reason about (compile tested only):

This looks like a pretty nice cleanup; I particularly like the 4 labels
going away.

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

Reply via email to