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-changelog

[Xen-changelog] [xen-unstable] x86: Remove jiffies usage.

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] x86: Remove jiffies usage.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 10 Apr 2008 04:10:14 -0700
Delivery-date: Thu, 10 Apr 2008 04:10:32 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1207818724 -3600
# Node ID 5b7a3e040683ba25766879e89c0c6b87b198f5e2
# Parent  9153b99a7066b6b5098f61483e3147e81ad7258e
x86: Remove jiffies usage.

Jiffies will be obsolete in x86 after PIT timer interupt is disabled,
so this patch replace jiffies usage with NOW() API.

Signed-off-by: Yu Ke <ke.yu@xxxxxxxxx>
Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
 xen/arch/x86/io_apic.c                 |    9 +++++++--
 xen/arch/x86/time.c                    |    5 ++---
 xen/drivers/passthrough/vtd/dmar.h     |    8 ++------
 xen/drivers/passthrough/vtd/intremap.c |   15 ++++++++-------
 xen/drivers/passthrough/vtd/iommu.c    |   19 ++++++++++---------
 xen/drivers/passthrough/vtd/qinval.c   |   15 ++++++++-------
 xen/drivers/passthrough/vtd/utils.c    |    7 ++++---
 xen/include/asm-ia64/domain.h          |    2 ++
 xen/include/xen/sched.h                |    2 --
 9 files changed, 43 insertions(+), 39 deletions(-)

diff -r 9153b99a7066 -r 5b7a3e040683 xen/arch/x86/io_apic.c
--- a/xen/arch/x86/io_apic.c    Thu Apr 10 10:00:41 2008 +0100
+++ b/xen/arch/x86/io_apic.c    Thu Apr 10 10:12:04 2008 +0100
@@ -1244,7 +1244,11 @@ static void __init setup_ioapic_ids_from
  */
 static int __init timer_irq_works(void)
 {
-    unsigned long t1 = jiffies;
+    extern unsigned long pit0_ticks;
+    unsigned long t1;
+
+    t1 = pit0_ticks;
+    mb();
 
     local_irq_enable();
     /* Let ten ticks pass... */
@@ -1257,7 +1261,8 @@ static int __init timer_irq_works(void)
      * might have cached one ExtINT interrupt.  Finally, at
      * least one tick may be lost due to delays.
      */
-    if (jiffies - t1 > 4)
+    mb();
+    if (pit0_ticks - t1 > 4)
         return 1;
 
     return 0;
diff -r 9153b99a7066 -r 5b7a3e040683 xen/arch/x86/time.c
--- a/xen/arch/x86/time.c       Thu Apr 10 10:00:41 2008 +0100
+++ b/xen/arch/x86/time.c       Thu Apr 10 10:12:04 2008 +0100
@@ -40,7 +40,7 @@ unsigned long cpu_khz;  /* CPU clock fre
 unsigned long cpu_khz;  /* CPU clock frequency in kHz. */
 unsigned long hpet_address;
 DEFINE_SPINLOCK(rtc_lock);
-volatile unsigned long jiffies;
+unsigned long pit0_ticks;
 static u32 wc_sec, wc_nsec; /* UTC time at last 'time update'. */
 static DEFINE_SPINLOCK(wc_lock);
 
@@ -150,8 +150,7 @@ void timer_interrupt(int irq, void *dev_
 {
     ASSERT(local_irq_is_enabled());
 
-    /* Update jiffies counter. */
-    (*(volatile unsigned long *)&jiffies)++;
+    (*(volatile unsigned long *)&pit0_ticks)++;
 
     /* Rough hack to allow accurate timers to sort-of-work with no APIC. */
     if ( !cpu_has_apic )
diff -r 9153b99a7066 -r 5b7a3e040683 xen/drivers/passthrough/vtd/dmar.h
--- a/xen/drivers/passthrough/vtd/dmar.h        Thu Apr 10 10:00:41 2008 +0100
+++ b/xen/drivers/passthrough/vtd/dmar.h        Thu Apr 10 10:12:04 2008 +0100
@@ -92,14 +92,10 @@ struct acpi_rmrr_unit * acpi_find_matche
 #define RMRR_TYPE 2
 #define ATSR_TYPE 3
 
-#define DMAR_OPERATION_TIMEOUT (HZ*60) /* 1m */
-#define time_after(a,b)         \
-        (typecheck(unsigned long, a) && \
-         typecheck(unsigned long, b) && \
-         ((long)(b) - (long)(a) < 0))
+#define DMAR_OPERATION_TIMEOUT MILLISECS(1000)
 
 int vtd_hw_check(void);
 void disable_pmr(struct iommu *iommu);
 int is_usb_device(struct pci_dev *pdev);
 
-#endif // _DMAR_H_
+#endif /* _DMAR_H_ */
diff -r 9153b99a7066 -r 5b7a3e040683 xen/drivers/passthrough/vtd/intremap.c
--- a/xen/drivers/passthrough/vtd/intremap.c    Thu Apr 10 10:00:41 2008 +0100
+++ b/xen/drivers/passthrough/vtd/intremap.c    Thu Apr 10 10:12:04 2008 +0100
@@ -21,6 +21,7 @@
 #include <xen/irq.h>
 #include <xen/sched.h>
 #include <xen/iommu.h>
+#include <xen/time.h>
 #include "iommu.h"
 #include "dmar.h"
 #include "vtd.h"
@@ -244,7 +245,7 @@ int intremap_setup(struct iommu *iommu)
 int intremap_setup(struct iommu *iommu)
 {
     struct ir_ctrl *ir_ctrl;
-    unsigned long start_time;
+    s_time_t start_time;
 
     if ( !ecap_intr_remap(iommu->ecap) )
         return -ENODEV;
@@ -275,10 +276,10 @@ int intremap_setup(struct iommu *iommu)
     dmar_writel(iommu->reg, DMAR_GCMD_REG, iommu->gcmd);
 
     /* Make sure hardware complete it */
-    start_time = jiffies;
+    start_time = NOW();
     while ( !(dmar_readl(iommu->reg, DMAR_GSTS_REG) & DMA_GSTS_SIRTPS) )
     {
-        if ( time_after(jiffies, start_time + DMAR_OPERATION_TIMEOUT) )
+        if ( NOW() > (start_time + DMAR_OPERATION_TIMEOUT) )
         {
             dprintk(XENLOG_ERR VTDPREFIX,
                     "Cannot set SIRTP field for interrupt remapping\n");
@@ -291,10 +292,10 @@ int intremap_setup(struct iommu *iommu)
     iommu->gcmd |= DMA_GCMD_CFI;
     dmar_writel(iommu->reg, DMAR_GCMD_REG, iommu->gcmd);
 
-    start_time = jiffies;
+    start_time = NOW();
     while ( !(dmar_readl(iommu->reg, DMAR_GSTS_REG) & DMA_GSTS_CFIS) )
     {
-        if ( time_after(jiffies, start_time + DMAR_OPERATION_TIMEOUT) )
+        if ( NOW() > (start_time + DMAR_OPERATION_TIMEOUT) )
         {
             dprintk(XENLOG_ERR VTDPREFIX,
                     "Cannot set CFI field for interrupt remapping\n");
@@ -307,10 +308,10 @@ int intremap_setup(struct iommu *iommu)
     iommu->gcmd |= DMA_GCMD_IRE;
     dmar_writel(iommu->reg, DMAR_GCMD_REG, iommu->gcmd);
 
-    start_time = jiffies;
+    start_time = NOW();
     while ( !(dmar_readl(iommu->reg, DMAR_GSTS_REG) & DMA_GSTS_IRES) )
     {
-        if ( time_after(jiffies, start_time + DMAR_OPERATION_TIMEOUT) )
+        if ( NOW() > (start_time + DMAR_OPERATION_TIMEOUT) ) 
         {
             dprintk(XENLOG_ERR VTDPREFIX,
                     "Cannot set IRE field for interrupt remapping\n");
diff -r 9153b99a7066 -r 5b7a3e040683 xen/drivers/passthrough/vtd/iommu.c
--- a/xen/drivers/passthrough/vtd/iommu.c       Thu Apr 10 10:00:41 2008 +0100
+++ b/xen/drivers/passthrough/vtd/iommu.c       Thu Apr 10 10:12:04 2008 +0100
@@ -26,6 +26,7 @@
 #include <asm/paging.h>
 #include <xen/iommu.h>
 #include <xen/numa.h>
+#include <xen/time.h>
 #include "iommu.h"
 #include "dmar.h"
 #include "../pci-direct.h"
@@ -356,7 +357,7 @@ static void iommu_flush_write_buffer(str
 {
     u32 val;
     unsigned long flag;
-    unsigned long start_time;
+    s_time_t start_time;
 
     if ( !cap_rwbf(iommu->cap) )
         return;
@@ -366,13 +367,13 @@ static void iommu_flush_write_buffer(str
     dmar_writel(iommu->reg, DMAR_GCMD_REG, val);
 
     /* Make sure hardware complete it */
-    start_time = jiffies;
+    start_time = NOW();
     for ( ; ; )
     {
         val = dmar_readl(iommu->reg, DMAR_GSTS_REG);
         if ( !(val & DMA_GSTS_WBFS) )
             break;
-        if ( time_after(jiffies, start_time + DMAR_OPERATION_TIMEOUT) )
+        if ( NOW() > start_time + DMAR_OPERATION_TIMEOUT )
             panic("DMAR hardware is malfunctional,"
                   " please disable IOMMU\n");
         cpu_relax();
@@ -389,7 +390,7 @@ static int flush_context_reg(
     struct iommu *iommu = (struct iommu *) _iommu;
     u64 val = 0;
     unsigned long flag;
-    unsigned long start_time;
+    s_time_t start_time;
 
     /*
      * In the non-present entry flush case, if hardware doesn't cache
@@ -427,13 +428,13 @@ static int flush_context_reg(
     dmar_writeq(iommu->reg, DMAR_CCMD_REG, val);
 
     /* Make sure hardware complete it */
-    start_time = jiffies;
+    start_time = NOW();
     for ( ; ; )
     {
         val = dmar_readq(iommu->reg, DMAR_CCMD_REG);
         if ( !(val & DMA_CCMD_ICC) )
             break;
-        if ( time_after(jiffies, start_time + DMAR_OPERATION_TIMEOUT) )
+        if ( NOW() > start_time + DMAR_OPERATION_TIMEOUT )
             panic("DMAR hardware is malfunctional, please disable IOMMU\n");
         cpu_relax();
     }
@@ -477,7 +478,7 @@ static int flush_iotlb_reg(void *_iommu,
     int tlb_offset = ecap_iotlb_offset(iommu->ecap);
     u64 val = 0, val_iva = 0;
     unsigned long flag;
-    unsigned long start_time;
+    s_time_t start_time;
 
     /*
      * In the non-present entry flush case, if hardware doesn't cache
@@ -524,13 +525,13 @@ static int flush_iotlb_reg(void *_iommu,
     dmar_writeq(iommu->reg, tlb_offset + 8, val);
 
     /* Make sure hardware complete it */
-    start_time = jiffies;
+    start_time = NOW();
     for ( ; ; )
     {
         val = dmar_readq(iommu->reg, tlb_offset + 8);
         if ( !(val & DMA_TLB_IVT) )
             break;
-        if ( time_after(jiffies, start_time + DMAR_OPERATION_TIMEOUT) )
+        if ( NOW() > start_time + DMAR_OPERATION_TIMEOUT )
             panic("DMAR hardware is malfunctional, please disable IOMMU\n");
         cpu_relax();
     }
diff -r 9153b99a7066 -r 5b7a3e040683 xen/drivers/passthrough/vtd/qinval.c
--- a/xen/drivers/passthrough/vtd/qinval.c      Thu Apr 10 10:00:41 2008 +0100
+++ b/xen/drivers/passthrough/vtd/qinval.c      Thu Apr 10 10:12:04 2008 +0100
@@ -21,6 +21,7 @@
 
 #include <xen/sched.h>
 #include <xen/iommu.h>
+#include <xen/time.h>
 #include "iommu.h"
 #include "dmar.h"
 #include "vtd.h"
@@ -183,7 +184,7 @@ static int queue_invalidate_wait(struct 
     u8 iflag, u8 sw, u8 fn, u32 sdata, volatile u32 *saddr)
 {
     unsigned long flags;
-    unsigned long start_time;
+    s_time_t start_time;
     int index = -1;
     int ret = -1;
     struct qi_ctrl *qi_ctrl = iommu_qi_ctrl(iommu);
@@ -201,10 +202,10 @@ static int queue_invalidate_wait(struct 
     if ( sw )
     {
         /* In case all wait descriptor writes to same addr with same data */
-        start_time = jiffies;
+        start_time = NOW();
         while ( *saddr != 1 )
         {
-            if ( time_after(jiffies, start_time + DMAR_OPERATION_TIMEOUT) )
+            if ( NOW() > (start_time + DMAR_OPERATION_TIMEOUT) )
             {
                 print_qi_regs(iommu);
                 panic("queue invalidate wait descriptor was not executed\n");
@@ -414,7 +415,7 @@ static int flush_iotlb_qi(
 
 int qinval_setup(struct iommu *iommu)
 {
-    unsigned long start_time;
+    s_time_t start_time;
     u32 status = 0;
     struct qi_ctrl *qi_ctrl;
     struct iommu_flush *flush;
@@ -448,13 +449,13 @@ int qinval_setup(struct iommu *iommu)
     dmar_writel(iommu->reg, DMAR_GCMD_REG, iommu->gcmd);
 
     /* Make sure hardware complete it */
-    start_time = jiffies;
-    while ( 1 )
+    start_time = NOW();
+    for ( ; ; )
     {
         status = dmar_readl(iommu->reg, DMAR_GSTS_REG);
         if ( status & DMA_GSTS_QIES )
             break;
-        if ( time_after(jiffies, start_time + DMAR_OPERATION_TIMEOUT) )
+        if ( NOW() > (start_time + DMAR_OPERATION_TIMEOUT) )
             panic("Cannot set QIE field for queue invalidation\n");
         cpu_relax();
     }
diff -r 9153b99a7066 -r 5b7a3e040683 xen/drivers/passthrough/vtd/utils.c
--- a/xen/drivers/passthrough/vtd/utils.c       Thu Apr 10 10:00:41 2008 +0100
+++ b/xen/drivers/passthrough/vtd/utils.c       Thu Apr 10 10:12:04 2008 +0100
@@ -20,6 +20,7 @@
 #include <xen/sched.h>
 #include <xen/delay.h>
 #include <xen/iommu.h>
+#include <xen/time.h>
 #include "iommu.h"
 #include "dmar.h"
 #include "../pci-direct.h"
@@ -69,7 +70,7 @@ int vtd_hw_check(void)
 /* Disable vt-d protected memory registers. */
 void disable_pmr(struct iommu *iommu)
 {
-    unsigned long start_time;
+    s_time_t start_time;
     unsigned int val;
 
     val = dmar_readl(iommu->reg, DMAR_PMEN_REG);
@@ -77,7 +78,7 @@ void disable_pmr(struct iommu *iommu)
         return;
 
     dmar_writel(iommu->reg, DMAR_PMEN_REG, val & ~DMA_PMEN_EPM);
-    start_time = jiffies;
+    start_time = NOW();
 
     for ( ; ; )
     {
@@ -85,7 +86,7 @@ void disable_pmr(struct iommu *iommu)
         if ( (val & DMA_PMEN_PRS) == 0 )
             break;
 
-        if ( time_after(jiffies, start_time + DMAR_OPERATION_TIMEOUT) )
+        if ( NOW() > start_time + DMAR_OPERATION_TIMEOUT )
             panic("Disable PMRs timeout\n");
 
         cpu_relax();
diff -r 9153b99a7066 -r 5b7a3e040683 xen/include/asm-ia64/domain.h
--- a/xen/include/asm-ia64/domain.h     Thu Apr 10 10:00:41 2008 +0100
+++ b/xen/include/asm-ia64/domain.h     Thu Apr 10 10:12:04 2008 +0100
@@ -17,6 +17,8 @@ struct p2m_entry;
 #ifdef CONFIG_XEN_IA64_TLB_TRACK
 struct tlb_track;
 #endif
+
+extern unsigned long volatile jiffies;
 
 struct vcpu;
 extern void relinquish_vcpu_resources(struct vcpu *v);
diff -r 9153b99a7066 -r 5b7a3e040683 xen/include/xen/sched.h
--- a/xen/include/xen/sched.h   Thu Apr 10 10:00:41 2008 +0100
+++ b/xen/include/xen/sched.h   Thu Apr 10 10:12:04 2008 +0100
@@ -24,8 +24,6 @@
 #include <compat/vcpu.h>
 DEFINE_XEN_GUEST_HANDLE(vcpu_runstate_info_compat_t);
 #endif
-
-extern unsigned long volatile jiffies;
 
 /* A global pointer to the initial domain (DOM0). */
 extern struct domain *dom0;

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] x86: Remove jiffies usage., Xen patchbot-unstable <=