WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] code question?

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: Re: [Xen-devel] code question?
From: David Hopwood <david.nospam.hopwood@xxxxxxxxxxxxxxxx>
Date: Thu, 11 Aug 2005 17:55:53 +0100
Delivery-date: Thu, 11 Aug 2005 16:54:07 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <1123775716.3043.15.camel@thinkpad>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <1123775716.3043.15.camel@thinkpad>
Reply-to: david.nospam.hopwood@xxxxxxxxxxxxxxxx
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mozilla Thunderbird 1.0.2 (Windows/20050317)
Jerone Young wrote:
Doing some janitorial (you cleaning the flooded toilets and such) work
today. I have come across this line of code that really I'm not sure
what the intent was..in xen/include/sched.h

#define hypercall_preempt_check() (unlikely(            \
        softirq_pending(smp_processor_id()) |           \
        (!!current->vcpu_info->evtchn_upcall_pending &  \
          !current->vcpu_info->evtchn_upcall_mask)      \
    ))

the part where we have !!current->vcpu_info_evtchen_upcall pending
should this be..should the "!! just be "!"?

And if so shouldn't this just be changed to
#define hypercall_preempt_check() (unlikely( \
        softirq_pending(smp_processor_id()) |           \
        (!(current->vcpu_info->evtchn_upcall_pending & \
          current->vcpu_info->evtchn_upcall_mask)) \
        ))

Seems more likely to have been intended as:

  #define hypercall_preempt_check() (unlikely(           \
          softirq_pending(smp_processor_id()) ||         \
          (current->vcpu_info->evtchn_upcall_pending &&  \
            !current->vcpu_info->evtchn_upcall_mask)     \
      ))

Keir wrote:
> Forming compound predicates for bitwise operators can be faster than using the
> logical operators because they are non 'short circuiting'. This means you end
> up with fewer branches in the generated code and end up with nice 
straight-line
> code that should execute fast.

If that's true on a given platform, the compiler can optimize it. Note that
in this case "(current->vcpu_info->evtchn_upcall_pending &&
!current->vcpu_info->evtchn_upcall_mask)" has no side effects (unless current
or current->vcpu_info are not valid pointers, which is undefined behaviour so
still optimizable).

--
David Hopwood <david.nospam.hopwood@xxxxxxxxxxxxxxxx>


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>