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

[Xen-devel] question on the use of fs in evtchn.c

To: xen-devel@xxxxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] question on the use of fs in evtchn.c
From: ron minnich <rminnich@xxxxxxxx>
Date: Mon, 9 Aug 2004 22:40:10 -0600 (MDT)
Delivery-date: Tue, 10 Aug 2004 05:43:01 +0100
Envelope-to: steven.hand@xxxxxxxxxxxx
List-archive: <http://sourceforge.net/mailarchive/forum.php?forum=xen-devel>
List-help: <mailto:xen-devel-request@lists.sourceforge.net?subject=help>
List-id: List for Xen developers <xen-devel.lists.sourceforge.net>
List-post: <mailto:xen-devel@lists.sourceforge.net>
List-subscribe: <https://lists.sourceforge.net/lists/listinfo/xen-devel>, <mailto:xen-devel-request@lists.sourceforge.net?subject=subscribe>
List-unsubscribe: <https://lists.sourceforge.net/lists/listinfo/xen-devel>, <mailto:xen-devel-request@lists.sourceforge.net?subject=unsubscribe>
Sender: xen-devel-admin@xxxxxxxxxxxxxxxxxxxxx
       while ( (l1i = ffs(l1)) != 0 )
                               ^^
        {
            l1i--;
            l1 &= ~(1 << l1i);

            l2 = s->evtchn_pending[l1i] & ~s->evtchn_mask[l1i];
            while ( (l2i = ffs(l2)) != 0 )
                                    ^^
            {
                l2i--;
                l2 &= ~(1 << l2i);

                port = (l1i << 5) + l2i;

this is in:
"../linux-2.4.26-xenU/arch/xen/kernel/evtchn.c" 

The problem is that ffs will return -1 if l1 is 0. Yeah, I know, unlikely,
but if it ever happens that l1 or l2 are 0, well, you're in for a fun
time. In any event, the loop condition holds for both a valid result and 
an error, which may not be what you really want to do. 

In the plan 9 port this is:

       while ( (l1i = ffs(l1)) > 0 )
                               ^
        {
            l1i--;
            l1 &= ~(1 << l1i);

            l2 = s->evtchn_pending[l1i] & ~s->evtchn_mask[l1i];
            while ( (l2i = ffs(l2)) > 0 )
                                    ^
            {
                l2i--;
                l2 &= ~(1 << l2i);

                port = (l1i << 5) + l2i;

A little paranoid, I realize, but mistakes happen. I can't think of a case 
where this would happen, but what the heck. Maybe if l1 is 0 it should 
complain ...

BTW my little patch for level (not edge) VIRQ_TIMER interrupts is giving
me something more like what I expect from timer interrupts. I hope you'll
at least consider the idea.

ron


-- 
LANL CCS-1 email flavor:
***** Correspondence   []
***** DUSA LACSI-HW    [ ]
***** DUSA LACSI-OS    [x ]
***** DUSA LACSI-CS    [ ]




-------------------------------------------------------
SF.Net email is sponsored by Shop4tech.com-Lowest price on Blank Media
100pk Sonic DVD-R 4x for only $29 -100pk Sonic DVD+R for only $33
Save 50% off Retail on Ink & Toner - Free Shipping and Free Gift.
http://www.shop4tech.com/z/Inkjet_Cartridges/9_108_r285
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/xen-devel

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