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] [PATCH] x86/HPET: fix oversight in 23033:84bacd800bf8 (2nd t

To: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH] x86/HPET: fix oversight in 23033:84bacd800bf8 (2nd try)
From: "Jan Beulich" <JBeulich@xxxxxxxxxx>
Date: Thu, 17 Mar 2011 11:43:34 +0000
Delivery-date: Thu, 17 Mar 2011 04:44:14 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
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/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Clearly for the adjusted BUG_ON()s to not yield false positives
num_hpets_used (rather than num_chs_used, as done mistakenly in
23042:599ceb5b0a9b) must be incremented before setting up an IRQ (and
decremented back when the setup failed). To avoid further confusion,
just eliminate the local variable altogether.

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>

--- a/xen/arch/x86/hpet.c
+++ b/xen/arch/x86/hpet.c
@@ -392,17 +392,17 @@ static int __init hpet_assign_irq(unsign
     return irq;
 }
 
-static unsigned int __init hpet_fsb_cap_lookup(void)
+static void __init hpet_fsb_cap_lookup(void)
 {
     u32 id;
-    unsigned int i, num_chs, num_chs_used;
+    unsigned int i, num_chs;
 
     /* TODO. */
     if ( iommu_intremap )
     {
         printk(XENLOG_INFO "HPET's MSI mode hasn't been supported when "
             "Interrupt Remapping is enabled.\n");
-        return 0;
+        return;
     }
 
     id = hpet_read32(HPET_ID);
@@ -412,13 +412,12 @@ static unsigned int __init hpet_fsb_cap_
 
     hpet_events = xmalloc_array(struct hpet_event_channel, num_chs);
     if ( !hpet_events )
-        return 0;
+        return;
     memset(hpet_events, 0, num_chs * sizeof(*hpet_events));
 
-    num_chs_used = 0;
     for ( i = 0; i < num_chs; i++ )
     {
-        struct hpet_event_channel *ch = &hpet_events[num_chs_used];
+        struct hpet_event_channel *ch = &hpet_events[num_hpets_used];
         u32 cfg = hpet_read32(HPET_Tn_CFG(i));
 
         /* Only consider HPET timer with MSI support */
@@ -428,14 +427,12 @@ static unsigned int __init hpet_fsb_cap_
         ch->flags = 0;
         ch->idx = i;
 
-        if ( (ch->irq = hpet_assign_irq(num_chs_used++)) < 0 )
-            num_chs_used--;
+        if ( (ch->irq = hpet_assign_irq(num_hpets_used++)) < 0 )
+            num_hpets_used--;
     }
 
     printk(XENLOG_INFO "HPET: %u timers (%u will be used for broadcast)\n",
-           num_chs, num_chs_used);
-
-    return num_chs_used;
+           num_chs, num_hpets_used);
 }
 
 static struct hpet_event_channel *hpet_get_channel(unsigned int cpu)
@@ -555,7 +552,7 @@ void __init hpet_broadcast_init(void)
 
     cfg = hpet_read32(HPET_CFG);
 
-    num_hpets_used = hpet_fsb_cap_lookup();
+    hpet_fsb_cap_lookup();
     if ( num_hpets_used > 0 )
     {
         /* Stop HPET legacy interrupts */



Attachment: x86-hpet-fix-23042.patch
Description: Text document

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH] x86/HPET: fix oversight in 23033:84bacd800bf8 (2nd try), Jan Beulich <=