[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen master] tools/tests: remove vhpet tests



commit 7a59096258fb9e9679538da8851fe00656841980
Author:     Juergen Gross <jgross@xxxxxxxx>
AuthorDate: Mon Mar 6 17:29:04 2023 +0100
Commit:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Wed Mar 8 13:20:06 2023 +0000

    tools/tests: remove vhpet tests
    
    tools/tests/vhpet tests don't build since ages (at least since 4.10)
    and they can't be activated from outside of tools/tests/vhpet.
    
    Remove them as they seem to be irrelevant.
    
    Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
    Acked-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
---
 tools/tests/vhpet/.gitignore |   4 -
 tools/tests/vhpet/Makefile   |  39 ---
 tools/tests/vhpet/emul.h     | 414 -----------------------
 tools/tests/vhpet/main.c     | 776 -------------------------------------------
 4 files changed, 1233 deletions(-)

diff --git a/tools/tests/vhpet/.gitignore b/tools/tests/vhpet/.gitignore
deleted file mode 100644
index 4cefa62218..0000000000
--- a/tools/tests/vhpet/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-test_vhpet
-test_vhpet.out
-hpet.h
-hpet.c
diff --git a/tools/tests/vhpet/Makefile b/tools/tests/vhpet/Makefile
deleted file mode 100644
index 2d56ffdfd9..0000000000
--- a/tools/tests/vhpet/Makefile
+++ /dev/null
@@ -1,39 +0,0 @@
-
-XEN_ROOT=$(CURDIR)/../../..
-include $(XEN_ROOT)/tools/Rules.mk
-
-TARGET := test_vhpet
-
-.PHONY: all
-all: $(TARGET)
-
-.PHONY: run
-run: $(TARGET)
-       ./$(TARGET) > $(TARGET).out
-       ./$(TARGET) 0 > $(TARGET).0.out
-       ./$(TARGET) 0 1 0 20 > $(TARGET).0.1.0.20.out
-       ./$(TARGET) 200 > $(TARGET).200.out
-       ./$(TARGET) 200 1 0 20 > $(TARGET).200.1.0.20.out
-       ./$(TARGET) 300 5 > $(TARGET).200.5.out
-       ./$(TARGET) 400 4 2000 > $(TARGET).200.4.2000.out
-       ./$(TARGET) 0 1 0 20 0x0103 > $(TARGET).0.1.0.20.0x0103.out
-       ./$(TARGET) 200 1 0 20 0x0103 > $(TARGET).200.1.0.20.0x0103.out
-
-$(TARGET): hpet.c main.c hpet.h emul.h Makefile
-       $(HOSTCC) -g -o $@ hpet.c main.c
-
-.PHONY: clean
-clean:
-       rm -rf $(TARGET) $(TARGET).out *.o *~ core* hpet.h hpet.c
-
-.PHONY: distclean
-distclean: clean
-
-.PHONY: install
-install:
-
-hpet.h: $(XEN_ROOT)/xen/arch/x86/include/asm/hpet.h
-       cp $< $@
-
-hpet.c: $(XEN_ROOT)/xen/arch/x86/hvm/hpet.c
-       sed -e "/#include/d" -e "1i#include \"emul.h\"\n" <$< >$@
diff --git a/tools/tests/vhpet/emul.h b/tools/tests/vhpet/emul.h
deleted file mode 100644
index b022cc0eab..0000000000
--- a/tools/tests/vhpet/emul.h
+++ /dev/null
@@ -1,414 +0,0 @@
-/*
- * Xen emulation for hpet
- *
- * Copyright (C) 2014 Verizon Corporation
- *
- * This file is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License Version 2 (GPLv2)
- * as published by the Free Software Foundation.
- *
- * This file is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details. <http://www.gnu.org/licenses/>.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <inttypes.h>
-#include <string.h>
-
-#define PCI_HAVE_64BIT_ADDRESS
-#include <pci/types.h>
-
-#include "hpet.h"
-
-#include <xen-tools/libs.h>
-
-#define NR_CPUS 8
-
-typedef int64_t s_time_t;
-typedef int spinlock_t;
-typedef int bool_t;
-
-#define BITS_PER_LONG __WORDSIZE
-#define BITS_TO_LONGS(bits) \
-    (((bits) + BITS_PER_LONG - 1) / BITS_PER_LONG)
-#define DECLARE_BITMAP(name, bits) \
-    unsigned long name[BITS_TO_LONGS(bits)]
-typedef struct cpumask
-{
-    DECLARE_BITMAP(bits, NR_CPUS);
-} cpumask_t;
-typedef cpumask_t *cpumask_var_t;
-struct msi_desc
-{
-    struct msi_attrib
-    {
-        u8    type    : 5;    /* {0: unused, 5h:MSI, 11h:MSI-X} */
-        u8    maskbit : 1;    /* mask-pending bit supported ?   */
-        u8    masked  : 1;
-        u8    is_64   : 1;    /* Address size: 0=32bit 1=64bit  */
-        u8    pos;            /* Location of the msi capability */
-        u16   entry_nr;       /* specific enabled entry         */
-    } msi_attrib;
-};
-
-struct msi_msg
-{
-    u32     address_lo;     /* low 32 bits of msi message address */
-    u32     address_hi;     /* high 32 bits of msi message address */
-    u32     data;           /* 16 bits of msi message data */
-    u32     dest32;         /* used when Interrupt Remapping with EIM is 
enabled */
-};
-
-#define X86EMUL_OKAY 100
-#define EINVAL 101
-
-#define DBG_LEVEL_PIT 200
-
-#define TRC_HW_VCHIP_HPET_START_TIMER 300
-#define TRC_HW_VCHIP_HPET_STOP_TIMER 301
-#define TRC_HW_VCHIP_PIT_STOP_TIMER 302
-
-#define TRC_HVM_VCHIP_HPET_START_TIMER 400
-#define TRC_HVM_VCHIP_HPET_STOP_TIMER 401
-#define TRC_HVM_VCHIP_PIT_STOP_TIMER 402
-
-#define TRC_HVM_EMUL_HPET_START_TIMER 400
-#define TRC_HVM_EMUL_HPET_STOP_TIMER 401
-#define TRC_HVM_EMUL_PIT_STOP_TIMER 402
-
-#define __read_mostly
-#define __initdata
-#define __init
-#define __maybe_unused
-#define __cacheline_aligned
-#define boolean_param(a, b)
-#define fix_to_virt(a) a
-#define xmalloc_array(_type, _num) (void *)(_type)(_num)
-#define DEFINE_PER_CPU(_type, _name) _type _name
-
-#define KERN_DEBUG
-#define KERN_INFO
-
-#define XENLOG_WARNING
-#define XENLOG_INFO
-#define XENLOG_ERR
-#define XENLOG_GUEST
-
-#define MSI_TYPE_UNKNOWN 0
-#define MSI_TYPE_HPET    1
-#define MSI_TYPE_IOMMU   2
-
-#define STIME_MAX ((s_time_t)((uint64_t)~0ull>>1))
-
-/* Low-latency softirqs come first in the following list. */
-enum
-{
-    TIMER_SOFTIRQ = 0,
-    SCHEDULE_SOFTIRQ,
-    NEW_TLBFLUSH_CLOCK_PERIOD_SOFTIRQ,
-    RCU_SOFTIRQ,
-    TASKLET_SOFTIRQ,
-    NR_COMMON_SOFTIRQS
-};
-/*
- * ..and if you can't take the strict
- * types, you can specify one yourself.
- *
- * Or not use min/max at all, of course.
- */
-#define min_t(type, x, y) \
-    ({ type __x = (x); type __y = (y); __x < __y ? __x : __y; })
-#define max_t(type, x, y) \
-    ({ type __x = (x); type __y = (y); __x > __y ? __x : __y; })
-#define offsetof(t, m) ((unsigned long )&((t *)0)->m)
-#define container_of(ptr, type, member) ({              \
-        typeof( ((type *)0)->member ) *__mptr = (ptr);  \
-        (type *)( (char *)__mptr - offsetof(type,member) ); })
-
-struct domain;
-
-struct vcpu
-{
-    int vcpu_id;
-    struct domain *domain;
-};
-
-typedef void time_cb(struct vcpu *v, void *opaque);
-
-struct periodic_time
-{
-#define PTSRC_isa    1 /* ISA time source */
-#define PTSRC_lapic  2 /* LAPIC time source */
-    u8 source;                  /* PTSRC_ */
-};
-
-void destroy_periodic_time(struct periodic_time *pt);
-void create_periodic_time(
-    struct vcpu *v, struct periodic_time *pt, uint64_t delta,
-    uint64_t period, uint8_t irq, time_cb *cb, void *data);
-
-#define HPET_TIMER_NUM 3
-
-struct hpet_registers
-{
-    /* Memory-mapped, software visible registers */
-    uint64_t capability;        /* capabilities */
-    uint64_t config;            /* configuration */
-    uint64_t isr;               /* interrupt status reg */
-    uint64_t mc64;              /* main counter */
-    struct                      /* timers */
-    {
-        uint64_t config;        /* configuration/cap */
-        uint64_t cmp;           /* comparator */
-        uint64_t fsb;           /* FSB route, not supported now */
-    } timers[HPET_TIMER_NUM];
-
-    /* Hidden register state */
-    uint64_t period[HPET_TIMER_NUM]; /* Last value written to comparator */
-    uint64_t comparator64[HPET_TIMER_NUM]; /* 64 bit running comparator */
-    uint64_t offset64[HPET_TIMER_NUM]; /* offset so comparator calc "works" */
-    uint64_t first_mc64[HPET_TIMER_NUM]; /* 1st interval main counter */
-    bool_t first_enabled[HPET_TIMER_NUM]; /* In 1st interval */
-};
-
-typedef struct HPETState
-{
-    struct hpet_registers hpet;
-    uint64_t stime_freq;
-    uint64_t hpet_to_ns_scale; /* hpet ticks to ns (multiplied by 2^10) */
-    uint64_t hpet_to_ns_limit; /* max hpet ticks convertable to ns      */
-    uint64_t mc_offset;
-    struct periodic_time pt[HPET_TIMER_NUM];
-    spinlock_t lock;
-} HPETState;
-
-typedef struct PITState
-{
-    struct periodic_time pt0;
-    spinlock_t lock;
-} PITState;
-
-
-struct pl_time      /* platform time */
-{
-    struct HPETState vhpet;
-    /* guest_time = Xen sys time + stime_offset */
-    int64_t stime_offset;
-    /* Ensures monotonicity in appropriate timer modes. */
-    uint64_t last_guest_time;
-    spinlock_t pl_time_lock;
-};
-
-#define HVM_PARAM_HPET_ENABLED 11
-
-struct hvm_domain
-{
-    struct pl_time         pl_time;
-    long params[20];
-};
-
-struct arch_domain
-{
-    struct hvm_domain hvm_domain;
-    struct PITState vpit;
-};
-
-struct domain
-{
-    int domain_id;
-    struct arch_domain arch;
-    struct vcpu *vcpu[NR_CPUS];
-};
-
-typedef int (*hvm_mmio_read_t)(struct vcpu *v,
-                               unsigned long addr,
-                               unsigned long length,
-                               unsigned long *val);
-typedef int (*hvm_mmio_write_t)(struct vcpu *v,
-                                unsigned long addr,
-                                unsigned long length,
-                                unsigned long val);
-typedef int (*hvm_mmio_check_t)(struct vcpu *v, unsigned long addr);
-
-
-struct hvm_mmio_ops
-{
-    hvm_mmio_check_t check;
-    hvm_mmio_read_t  read;
-    hvm_mmio_write_t write;
-};
-
-/* Marshalling and unmarshalling uses a buffer with size and cursor. */
-typedef struct hvm_domain_context
-{
-    uint32_t cur;
-    uint32_t size;
-    uint8_t *data;
-} hvm_domain_context_t;
-
-int current_domain_id(void);
-#define dprintk(_l, _f, _a...)                  \
-    printk(_l "%s:%d: " _f, __FILE__ , __LINE__ , ## _a )
-#define gdprintk(_l, _f, _a...)                         \
-    printk(XENLOG_GUEST _l "%s:%d:d%d " _f, __FILE__,   \
-           __LINE__, current_domain_id() , ## _a )
-struct vcpu *get_current();
-#define current get_current()
-
-#define HVM_SAVE_CODE(_x) HVM_SAVE_CODE_##_x
-#define HVM_SAVE_LENGTH(_x) HVM_SAVE_LENGTH_##_x
-
-/*
- * HPET
- */
-
-uint64_t hvm_get_guest_time(struct vcpu *v);
-
-#define HPET_TIMER_NUM     3    /* 3 timers supported now */
-struct hvm_hw_hpet
-{
-    /* Memory-mapped, software visible registers */
-    uint64_t capability;        /* capabilities */
-    uint64_t res0;              /* reserved */
-    uint64_t config;            /* configuration */
-    uint64_t res1;              /* reserved */
-    uint64_t isr;               /* interrupt status reg */
-    uint64_t res2[25];          /* reserved */
-    uint64_t mc64;              /* main counter */
-    uint64_t res3;              /* reserved */
-    struct                      /* timers */
-    {
-        uint64_t config;        /* configuration/cap */
-        uint64_t cmp;           /* comparator */
-        uint64_t fsb;           /* FSB route, not supported now */
-        uint64_t res4;          /* reserved */
-    } timers[HPET_TIMER_NUM];
-    uint64_t res5[4 * (24 - HPET_TIMER_NUM)]; /* reserved, up to 0x3ff */
-
-    /* Hidden register state */
-    uint64_t period[HPET_TIMER_NUM]; /* Last value written to comparator */
-};
-
-typedef int (*hvm_save_handler)(struct domain *d,
-                                hvm_domain_context_t *h);
-typedef int (*hvm_load_handler)(struct domain *d,
-                                hvm_domain_context_t *h);
-
-struct hvm_save_descriptor
-{
-    uint16_t typecode;          /* Used to demux the various types below */
-    uint16_t instance;          /* Further demux within a type */
-    uint32_t length;            /* In bytes, *not* including this descriptor */
-};
-
-void hvm_register_savevm(uint16_t typecode,
-                         const char *name,
-                         hvm_save_handler save_state,
-                         hvm_load_handler load_state,
-                         size_t size, int kind);
-
-#define HVMSR_PER_DOM 1
-
-#define HVM_REGISTER_SAVE_RESTORE(_x, _save, _load, _num, _k)       \
-    int __init __hvm_register_##_x##_save_and_restore(void)     \
-    {                                                                   \
-        hvm_register_savevm(HVM_SAVE_CODE(_x),                          \
-                            #_x,                                        \
-                            &_save,                                     \
-                            &_load,                                     \
-                            (_num) * (HVM_SAVE_LENGTH(_x)               \
-                                 + sizeof(struct hvm_save_descriptor)), \
-                            _k);                                        \
-        return 0;                                                       \
-    }                                                                   \
-
-#define HVM_SAVE_CODE_HPET 0
-#define HVM_SAVE_LENGTH_HPET sizeof(struct hvm_hw_hpet)
-
-#define printk printf
-
-#define spin_lock(a)
-#define spin_unlock(a)
-#define spin_lock_init(a)
-#define spin_is_locked(a) 1
-#define ASSERT(a)
-
-#define ADDR (*(volatile long *) addr)
-
-static inline void __set_bit(int nr, volatile void *addr)
-{
-    asm volatile(
-        "btsl %1,%0"
-        : "=m"(ADDR)
-        : "Ir"(nr), "m"(ADDR) : "memory");
-}
-
-static inline void __clear_bit(int nr, volatile void *addr)
-{
-    asm volatile(
-        "btrl %1,%0"
-        : "=m"(ADDR)
-        : "Ir"(nr), "m"(ADDR) : "memory");
-}
-
-static inline unsigned int find_first_set_bit(unsigned long word)
-{
-    asm("bsf %1,%0" : "=r"(word) : "r"(word));
-    return (unsigned int)word;
-}
-
-#define HVM_DBG_LOG(level, _f, _a...)                   \
-    do {                                \
-        printf("[HVM:%d.%d] <%s> " _f "\n",                             \
-               current->domain->domain_id, current->vcpu_id, __func__,  \
-               ## _a);                                                  \
-    } while ( 0 )
-
-void __domain_crash(struct domain *d);
-#define domain_crash(d) do {                        \
-        printf("domain_crash called from %s:%d\n", __FILE__, __LINE__); \
-        __domain_crash(d);                                              \
-    } while ( 0 )
-
-#define MICROSECS(_us) ((s_time_t)((_us) * 1000ULL))
-
-#define pt_global_vcpu_target(d)        \
-    ((d)->vcpu ? (d)->vcpu[0] : NULL)
-
-#define TRACE_0D(a)
-#define TRACE_1D(a, b)
-#define TRACE_2D(a, b, c)
-#define TRACE_3D(a, b, c, d)
-#define TRACE_4D(a, b, c, d, e)
-#define TRACE_5D(a, b, c, d, e, f)
-#define TRACE_6D(a, b, c, d, e, f, g)
-
-#define TRC_PAR_LONG(par) ((par)&0xFFFFFFFF),((par)>>32)
-
-#define TRACE_2_LONG_2D(_e, d1, d2, ...) \
-    TRACE_4D(_e, d1, d2)
-#define TRACE_2_LONG_3D(_e, d1, d2, d3, ...) \
-    TRACE_5D(_e, d1, d2, d3)
-#define TRACE_2_LONG_4D(_e, d1, d2, d3, d4, ...) \
-    TRACE_6D(_e, d1, d2, d3, d4)
-
-/* debug */
-
-extern int __read_mostly hpet_debug;
-extern uint64_t __read_mostly hpet_force_diff;
-extern uint64_t __read_mostly hpet_force_mc64;
-extern uint64_t __read_mostly hpet_force_cmp;
-extern uint64_t __read_mostly hpet_force_period;
-
-/*
- * Local variables:
- * mode: C
- * c-file-style: "BSD"
- * c-basic-offset: 4
- * indent-tabs-mode: nil
- * End:
- */
diff --git a/tools/tests/vhpet/main.c b/tools/tests/vhpet/main.c
deleted file mode 100644
index 6fe65ea808..0000000000
--- a/tools/tests/vhpet/main.c
+++ /dev/null
@@ -1,776 +0,0 @@
-/*
- * Xen emulation for hpet
- *
- * Copyright (C) 2014 Verizon Corporation
- *
- * This file is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License Version 2 (GPLv2)
- * as published by the Free Software Foundation.
- *
- * This file is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details. <http://www.gnu.org/licenses/>.
- */
-
-/*
- * 
http://www.intel.com/content/dam/www/public/us/en/documents/technical-specifications/software-developers-hpet-spec-1-0a.pdf
- *
- * xen_source is a directory that has all xen source below it.
- *
- * Usage:
- *
-
-
-  xen_source=../../..
-  sed -e "/#include/d" -e "1i#include \"emul.h\"\n" 
<$xen_source/xen/arch/x86/hvm/hpet.c >hpet.c
-  cp $xen_source/xen/include/asm-x86/hpet.h .
-
-  gcc -g -o test_vhpet hpet.c main.c
-  ./test_vhpet >test_vhpet.out
-
- *
- *
- * This is almost the same as
- *
-
-  make run
-
- *
- * Or
- *
- * make -C tools/tests/vhpet run
- *
- * From a xen source tree.  The differance
- * is that you need to be in a xen source tree
- * and normal make rules apply.
- *
- */
-
-#define FORCE_THOUSANDS_SEP
-
-#include <locale.h>
-#include <langinfo.h>
-#include <stdarg.h>
-#include "emul.h"
-#include "hpet.h"
-
-#define S_TO_NS    1000000000ULL           /* 1s  = 10^9  ns */
-
-#define START_MC64 0x108a8
-
-static int hpet_mult = 1;
-static int hpet_add;
-static int hvm_clock_cost = 1234567;
-static int tick_count = 1;
-static int debug = 3;
-
-static int skip_load;
-static int skip_error_on_load;
-
-static char *global_thousep;
-
-extern const struct hvm_mmio_ops hpet_mmio_ops;
-
-struct domain dom1;
-struct vcpu vcpu0;
-struct hvm_hw_hpet hpet_save;
-
-
-uint64_t hvm_guest_time;
-
-static struct
-{
-    hvm_save_handler save;
-    hvm_load_handler load;
-    const char *name;
-    size_t size;
-    int kind;
-} hvm_sr_handlers[3] = {{NULL, NULL, "<?>"},};
-
-static uint64_t new_guest_time[] = {
-    0x20,
-    0x2a840,
-    0xf4200,
-    0x10000000000ULL,
-    0x0fffffffffefff00ULL,
-    0x20,
-    0xffffffff00000000ULL,
-    0x20,
-};
-
-static int print_error(const char *fmt, ...)
-{
-    va_list args;
-    int i = 0;
-
-    if ( (debug & 0x0100) && skip_error_on_load )
-        return i;
-
-    va_start(args, fmt);
-    if ( debug & 0x0001 )
-        i = vfprintf(stdout, fmt, args);
-    va_end(args);
-    va_start(args, fmt);
-    if ( debug & 0x0002 )
-        i = vfprintf(stderr, fmt, args);
-    va_end(args);
-    return i;
-}
-
-
-int current_domain_id(void)
-{
-    return current->domain->domain_id;
-}
-
-struct vcpu *get_current()
-{
-    return &vcpu0;
-}
-
-void __domain_crash(struct domain *d)
-{
-    exit(42);
-}
-
-uint64_t hvm_get_guest_time(struct vcpu *v)
-{
-    uint64_t ret = hvm_guest_time;
-
-    hvm_guest_time += hvm_clock_cost;
-    return ret;
-}
-
-int _hvm_init_entry(struct hvm_domain_context *h,
-                    uint16_t tc, uint16_t inst, uint32_t len)
-{
-    h->cur = 0;
-    h->size = sizeof(hpet_save);
-    h->data = (void *)&hpet_save;
-
-    return 0;
-}
-
-int _hvm_check_entry(struct hvm_domain_context *h,
-                     uint16_t type, uint32_t len, bool_t strict_length)
-{
-    h->cur = 0;
-    h->size = sizeof(hpet_save);
-    h->data = (void *)&hpet_save;
-
-    return 0;
-}
-
-void __init hvm_register_savevm(uint16_t typecode,
-                                const char *name,
-                                hvm_save_handler save_state,
-                                hvm_load_handler load_state,
-                                size_t size, int kind)
-{
-    hvm_sr_handlers[typecode].save = save_state;
-    hvm_sr_handlers[typecode].load = load_state;
-    hvm_sr_handlers[typecode].name = name;
-    hvm_sr_handlers[typecode].size = size;
-    hvm_sr_handlers[typecode].kind = kind;
-}
-
-int do_save(uint16_t typecode, struct domain *d, hvm_domain_context_t *h)
-{
-    return hvm_sr_handlers[typecode].save(d, h);
-}
-
-int do_load(uint16_t typecode, struct domain *d, hvm_domain_context_t *h)
-{
-    if (skip_load & 0x1)
-    {
-        printf("skip_load=%#x\n", skip_load);
-    }
-    else
-    {
-        int ret;
-
-        printf("do_load\n");
-        skip_error_on_load = 1;
-        ret = hvm_sr_handlers[typecode].load(d, h);
-        skip_error_on_load = 0;
-    }
-}
-
-static void dump_hpet(void)
-{
-    int i;
-    unsigned long long conf;
-    struct hvm_hw_hpet h = hpet_save;
-    conf = (unsigned long long) h.config;
-    printf("    HPET: capability %#llx config %#llx(%s%s)\n",
-           (unsigned long long) h.capability,
-           conf,
-           conf & HPET_CFG_ENABLE ? "E" : "",
-           conf & HPET_CFG_LEGACY ? "L" : "");
-    printf("          isr %#llx counter %#llx(%'lld)\n",
-           (unsigned long long) h.isr,
-           (unsigned long long) h.mc64,
-           (unsigned long long) h.mc64);
-    for (i = 0; i < HPET_TIMER_NUM; i++)
-    {
-        conf = (unsigned long long) h.timers[i].config;
-        printf("          timer%i config %#llx(%s%s%s) cmp %#llx(%'lld)\n", i,
-               conf,
-               conf & HPET_TN_ENABLE ? "E" : "",
-               conf & HPET_TN_PERIODIC ? "P" : "",
-               conf & HPET_TN_32BIT ? "32" : "",
-               (unsigned long long) h.timers[i].cmp,
-               (unsigned long long) h.timers[i].cmp);
-        printf("          timer%i period %#llx(%'lld) fsb %#llx\n", i,
-               (unsigned long long) h.period[i],
-               (unsigned long long) h.period[i],
-               (unsigned long long) h.timers[i].fsb);
-    }
-}
-
-void pit_stop_channel0_irq(PITState *pit)
-{
-    printf("pit_stop_channel0_irq: pit=%p\n", pit);
-
-    TRACE_1D(TRC_HVM_VCHIP_PIT_STOP_TIMER, get_cycles());
-    spin_lock(&pit->lock);
-    destroy_periodic_time(&pit->pt0);
-    spin_unlock(&pit->lock);
-}
-
-void destroy_periodic_time(struct periodic_time *pt)
-{
-    int idx = ((long)pt) & 0x7;
-
-    printf("destroy_periodic_time: pt=%d\n", idx);
-}
-
-void create_periodic_time(struct vcpu *v, struct periodic_time *pt,
-                          uint64_t delta, uint64_t period, uint8_t irq,
-                          time_cb *cb, void *data)
-{
-    int idx = ((long)pt) & 0x7;
-
-    if ( debug & 0x0010 )
-    {
-        int i;
-
-        printf("create_periodic_time: "
-               "mc64=%#lx(%'ld) mc_offset=%#lx(%'ld)\n",
-               dom1.arch.hvm_domain.pl_time.vhpet.hpet.mc64,
-               dom1.arch.hvm_domain.pl_time.vhpet.hpet.mc64,
-               dom1.arch.hvm_domain.pl_time.vhpet.mc_offset,
-               dom1.arch.hvm_domain.pl_time.vhpet.mc_offset);
-        for (i = 0; i < 3; i++)
-        {
-            printf("                 "
-                   "[%d] cmp64=%#lx(%'ld) cmp=%#lx(%'ld)\n", i,
-                   dom1.arch.hvm_domain.pl_time.vhpet.hpet.comparator64[i],
-                   dom1.arch.hvm_domain.pl_time.vhpet.hpet.comparator64[i],
-                   dom1.arch.hvm_domain.pl_time.vhpet.hpet.timers[i].cmp,
-                   dom1.arch.hvm_domain.pl_time.vhpet.hpet.timers[i].cmp);
-        }
-    }
-    if ( period )
-    {
-        printf("create_periodic_time: pt=%d delta=%'"PRId64" period=%'"PRIu64
-               " - %'"PRIu64".%02d Hz irq=%d\n",
-               idx, delta, period, (uint64_t)(S_TO_NS / period),
-               (int)((S_TO_NS / (period / 100ULL)) % 100), irq);
-        /* +160 is for hpet_tick_to_ns() not simple. */
-        if ( delta > (period * (hpet_mult + hpet_add + 160)) )
-            print_error("%s(%ld): Possible ..MP-BIOS bug: 8254 timer...: 
delta=%'"PRId64
-                        " period=%'"PRIu64"\n", __func__, __LINE__,
-                        delta, period);
-    }
-    else
-        printf("create_periodic_time: pt=%d delta=%'"PRId64
-               " period=%'"PRIu64" irq=%d\n",
-               idx, delta, period, irq);
-}
-
-void udelay(int w)
-{
-}
-
-unsigned int hpet_readl(unsigned long a)
-{
-    unsigned long ret = 0;
-    hpet_mmio_ops.read(current, a, 4, &ret);
-    return ret;
-}
-
-void hpet_writel(unsigned long d, unsigned long a)
-{
-    hpet_mmio_ops.write(current, a, 4, d);
-    return;
-}
-
-static void _hpet_print_config(const char *function, int line)
-{
-    u32 i, timers, l, h;
-    printk(KERN_INFO "hpet: %s(%d):\n", function, line);
-    l = hpet_readl(HPET_ID);
-    h = hpet_readl(HPET_PERIOD);
-    timers = ((l & HPET_ID_NUMBER) >> HPET_ID_NUMBER_SHIFT) + 1;
-    printk(KERN_INFO "hpet: ID: 0x%x, PERIOD: 0x%x\n", l, h);
-    l = hpet_readl(HPET_CFG);
-    h = hpet_readl(HPET_STATUS);
-    printk(KERN_INFO "hpet: CFG: 0x%x, STATUS: 0x%x\n", l, h);
-    l = hpet_readl(HPET_COUNTER);
-    h = hpet_readl(HPET_COUNTER + 4);
-    printk(KERN_INFO "hpet: COUNTER_l: 0x%x, COUNTER_h: 0x%x\n", l, h);
-
-    for (i = 0; i < timers; i++)
-    {
-        l = hpet_readl(HPET_Tn_CFG(i));
-        h = hpet_readl(HPET_Tn_CFG(i) + 4);
-        printk(KERN_INFO "hpet: T%d: CFG_l: 0x%x, CFG_h: 0x%x\n",
-               i, l, h);
-        l = hpet_readl(HPET_Tn_CMP(i));
-        h = hpet_readl(HPET_Tn_CMP(i) + 4);
-        printk(KERN_INFO "hpet: T%d: CMP_l: 0x%x, CMP_h: 0x%x\n",
-               i, l, h);
-        l = hpet_readl(HPET_Tn_ROUTE(i));
-        h = hpet_readl(HPET_Tn_ROUTE(i) + 4);
-        printk(KERN_INFO "hpet: T%d ROUTE_l: 0x%x, ROUTE_h: 0x%x\n",
-               i, l, h);
-    }
-}
-
-#define hpet_print_config()                     \
-    do {                                        \
-        _hpet_print_config(__func__, __LINE__); \
-    } while ( 0 )
-
-static void hpet_stop_counter(void)
-{
-    unsigned long cfg = hpet_readl(HPET_CFG);
-    cfg &= ~HPET_CFG_ENABLE;
-    hpet_writel(cfg, HPET_CFG);
-}
-
-static void hpet_reset_counter(unsigned long low, unsigned long high)
-{
-    hpet_writel(low, HPET_COUNTER);
-    hpet_writel(high, HPET_COUNTER + 4);
-}
-
-static void hpet_start_counter(void)
-{
-    unsigned long cfg = hpet_readl(HPET_CFG);
-    cfg |= HPET_CFG_ENABLE;
-    hpet_writel(cfg, HPET_CFG);
-}
-
-static void hpet_restart_counter(void)
-{
-    hpet_stop_counter();
-    hpet_reset_counter(0, 0);
-    hpet_start_counter();
-}
-
-static void hpet_set_mode(uint64_t delta, int timer)
-{
-    unsigned long cfg, cmp, cmp2, now;
-
-    hpet_stop_counter();
-    now = hpet_readl(HPET_COUNTER);
-    cmp = now + (unsigned long)(hpet_mult * delta) + hpet_add;
-    cfg = hpet_readl(HPET_Tn_CFG(timer));
-    /* Make sure we use edge triggered interrupts */
-    cfg &= ~HPET_TN_LEVEL;
-    cfg |= HPET_TN_ENABLE | HPET_TN_PERIODIC |
-           HPET_TN_SETVAL | HPET_TN_32BIT;
-    /* Mask to 32 bits just like the hardware */
-    cmp = (uint32_t)cmp;
-    delta = (uint32_t)delta;
-    /* Do the config */
-    hpet_writel(cfg, HPET_Tn_CFG(timer));
-    hpet_writel(cmp, HPET_Tn_CMP(timer));
-    printf("%s(%ld): HPET_TN_SETVAL cmp=%#lx(%'ld) timer=%d\n",
-           __func__, __LINE__, cmp, cmp, timer);
-    udelay(1);
-    /*
-     * HPET on AMD 81xx needs a second write (with HPET_TN_SETVAL
-     * cleared) to T0_CMP to set the period. The HPET_TN_SETVAL
-     * bit is automatically cleared after the first write.
-     * (See AMD-8111 HyperTransport I/O Hub Data Sheet,
-     * Publication # 24674)
-     */
-    hpet_writel((unsigned long) delta, HPET_Tn_CMP(timer));
-    printf("%s(%ld): period=%#lx(%'ld) timer=%d\n", __func__, __LINE__,
-           (unsigned long) delta, (unsigned long) delta, timer);
-    cmp2 = hpet_readl(HPET_Tn_CMP(timer));
-    if ( cmp2 != cmp )
-        print_error("%s(%ld): T%d Error: Set %#lx(%'ld) != %#lx(%'ld)\n",
-                    __func__, __LINE__, timer, cmp, cmp, cmp2, cmp2);
-
-    hpet_start_counter();
-    hpet_print_config();
-}
-
-
-hpet_check_stopped(uint64_t old_delta, int timer)
-{
-    unsigned long mc_low, mc_high, old_cmp, now;
-    unsigned long cfg, cmp, delta, cmp2, cmp3;
-
-    if (skip_load & 0x2)
-    {
-        printf("Skip hpet_check_stopped. skip_load=%#x\n", skip_load);
-        return;
-    }
-    hpet_stop_counter();
-    mc_low = hpet_readl(HPET_COUNTER);
-    mc_high = hpet_readl(HPET_COUNTER + 4);
-    old_cmp = hpet_readl(HPET_Tn_CMP(timer));
-
-    hpet_reset_counter(67752, 0);
-    cmp = 255252;
-    delta = 62500;
-
-    now = hpet_readl(HPET_COUNTER);
-    if ( now != 67752 )
-        print_error("%s(%ld): T%d Error: Set mc %#lx(%'ld) != %#lx(%'ld)\n",
-                    __func__, __LINE__, timer, 67752, 67752, now, now);
-    cfg = hpet_readl(HPET_Tn_CFG(timer));
-    cfg |= HPET_TN_SETVAL;
-    hpet_writel(cfg, HPET_Tn_CFG(timer));
-    hpet_writel(cmp, HPET_Tn_CMP(timer));
-    printf("%s(%ld): HPET_TN_SETVAL cmp=%#lx(%'ld) timer=%d\n",
-           __func__, __LINE__, cmp, cmp, timer);
-    cmp2 = hpet_readl(HPET_Tn_CMP(timer));
-    if ( cmp2 != cmp )
-        print_error("%s(%ld): T%d Error: Set cmp %#lx(%'ld) != %#lx(%'ld)\n",
-                    __func__, __LINE__, timer, cmp, cmp, cmp2, cmp2);
-
-    hpet_writel((unsigned long) delta, HPET_Tn_CMP(timer));
-    printf("%s(%ld): period=%#lx(%'ld) timer=%d\n", __func__, __LINE__,
-           (unsigned long) delta, (unsigned long) delta, timer);
-    cmp3 = hpet_readl(HPET_Tn_CMP(timer));
-    if ( cmp3 != cmp )
-        print_error("%s(%ld): T%d Error: Set period, cmp %#lx(%'ld) != 
%#lx(%'ld)\n",
-                    __func__, __LINE__, timer, cmp, cmp, cmp3, cmp3);
-
-    if ( dom1.arch.hvm_domain.pl_time.vhpet.hpet.period[timer] != delta )
-        printf("%s(%ld): T%d Warning: Set period %#lx(%'ld) != %#lx(%'ld)\n",
-               __func__, __LINE__, timer, delta, delta,
-               dom1.arch.hvm_domain.pl_time.vhpet.hpet.period[timer],
-               dom1.arch.hvm_domain.pl_time.vhpet.hpet.period[timer]);
-
-    hpet_reset_counter(67752, 0);
-    cmp = 255252;
-    delta = 62500;
-
-    now = hpet_readl(HPET_COUNTER);
-    if ( now != 67752 )
-        print_error("%s(%ld): T%d Error: Set mc %#lx(%'ld) != %#lx(%'ld)\n",
-                    __func__, __LINE__, timer, 67752, 67752, now, now);
-    cfg = hpet_readl(HPET_Tn_CFG(timer));
-    cfg |= HPET_TN_SETVAL;
-    hpet_writel(cfg, HPET_Tn_CFG(timer));
-    hpet_writel(cmp, HPET_Tn_CMP(timer));
-    printf("%s(%ld): HPET_TN_SETVAL cmp=%#lx(%'ld) timer=%d\n",
-           __func__, __LINE__, cmp, cmp, timer);
-    cmp2 = hpet_readl(HPET_Tn_CMP(timer));
-    if ( cmp2 != cmp )
-        print_error("%s(%ld): T%d Error: Set cmp %#lx(%'ld) != %#lx(%'ld)\n",
-                    __func__, __LINE__, timer, cmp, cmp, cmp2, cmp2);
-
-    hpet_writel((unsigned long) delta, HPET_Tn_CMP(timer));
-    printf("%s(%ld): period=%#lx(%'ld) timer=%d\n", __func__, __LINE__,
-           (unsigned long) delta, (unsigned long) delta, timer);
-    cmp3 = hpet_readl(HPET_Tn_CMP(timer));
-    if ( cmp3 != cmp )
-        print_error("%s(%ld): T%d Error: Set period, cmp %#lx(%'ld) != 
%#lx(%'ld)\n",
-                    __func__, __LINE__, timer, cmp, cmp, cmp3, cmp3);
-
-    if ( dom1.arch.hvm_domain.pl_time.vhpet.hpet.period[timer] != delta )
-        printf("%s(%ld): T%d Warning: Set period %#lx(%'ld) != %#lx(%'ld)\n",
-               __func__, __LINE__, timer, delta, delta,
-               dom1.arch.hvm_domain.pl_time.vhpet.hpet.period[timer],
-               dom1.arch.hvm_domain.pl_time.vhpet.hpet.period[timer]);
-
-    hpet_reset_counter(67700, 0);
-
-    now = hpet_readl(HPET_COUNTER);
-    if ( now != 67700 )
-        print_error("%s(%ld): T%d Error: Set mc %#lx(%'ld) != %#lx(%'ld)\n",
-                    __func__, __LINE__, timer, 67752, 67752, now, now);
-    cmp2 = hpet_readl(HPET_Tn_CMP(timer));
-    if ( cmp2 != cmp )
-        print_error("%s(%ld): T%d Error: Set mc, cmp %#lx(%'ld) != 
%#lx(%'ld)\n",
-                    __func__, __LINE__, timer, cmp, cmp, cmp2, cmp2);
-
-    cmp3 = hpet_readl(HPET_Tn_CMP(timer));
-    if ( cmp3 != cmp )
-        print_error("%s(%ld): T%d Error: Set mc, cmp %#lx(%'ld) != 
%#lx(%'ld)\n",
-                    __func__, __LINE__, timer, cmp, cmp, cmp3, cmp3);
-
-    if ( dom1.arch.hvm_domain.pl_time.vhpet.hpet.period[timer] != delta )
-        printf("%s(%ld): T%d Warning: Set mc, period %#lx(%'ld) != 
%#lx(%'ld)\n",
-               __func__, __LINE__, timer, delta, delta,
-               dom1.arch.hvm_domain.pl_time.vhpet.hpet.period[timer],
-               dom1.arch.hvm_domain.pl_time.vhpet.hpet.period[timer]);
-
-    cmp = 67701;
-
-    now = hpet_readl(HPET_COUNTER);
-    if ( now != 67700 )
-        print_error("%s(%ld): T%d Error: Set cmp, mc %#lx(%'ld) != 
%#lx(%'ld)\n",
-                    __func__, __LINE__, timer, 67752, 67752, now, now);
-    cfg = hpet_readl(HPET_Tn_CFG(timer));
-    cfg |= HPET_TN_SETVAL;
-    hpet_writel(cfg, HPET_Tn_CFG(timer));
-    hpet_writel(cmp, HPET_Tn_CMP(timer));
-    printf("%s(%ld): HPET_TN_SETVAL cmp=%#lx(%'ld) timer=%d\n",
-           __func__, __LINE__, cmp, cmp, timer);
-    cmp2 = hpet_readl(HPET_Tn_CMP(timer));
-    if ( cmp2 != cmp )
-        print_error("%s(%ld): T%d Error: Set cmp, cmp %#lx(%'ld) != 
%#lx(%'ld)\n",
-                    __func__, __LINE__, timer, cmp, cmp, cmp2, cmp2);
-
-    cmp3 = hpet_readl(HPET_Tn_CMP(timer));
-    if ( cmp3 != cmp )
-        print_error("%s(%ld): T%d Error: Set cmp, cmp %#lx(%'ld) != 
%#lx(%'ld)\n",
-                    __func__, __LINE__, timer, cmp, cmp, cmp3, cmp3);
-
-    if ( dom1.arch.hvm_domain.pl_time.vhpet.hpet.period[timer] != delta )
-        printf("%s(%ld): T%d Warning: Set cmp, period %#lx(%'ld) != 
%#lx(%'ld)\n",
-               __func__, __LINE__, timer, delta, delta,
-               dom1.arch.hvm_domain.pl_time.vhpet.hpet.period[timer],
-               dom1.arch.hvm_domain.pl_time.vhpet.hpet.period[timer]);
-
-    delta = 500;
-
-    now = hpet_readl(HPET_COUNTER);
-    if ( now != 67700 )
-        print_error("%s(%ld): T%d Error: Set period, mc %#lx(%'ld) != 
%#lx(%'ld)\n",
-                    __func__, __LINE__, timer, 67752, 67752, now, now);
-    cmp2 = hpet_readl(HPET_Tn_CMP(timer));
-    if ( cmp2 != cmp )
-        print_error("%s(%ld): T%d Error: Set period, cmp %#lx(%'ld) != 
%#lx(%'ld)\n",
-                    __func__, __LINE__, timer, cmp, cmp, cmp2, cmp2);
-
-    hpet_writel((unsigned long) delta, HPET_Tn_CMP(timer));
-    printf("%s(%ld): period=%#lx(%'ld) timer=%d\n", __func__, __LINE__,
-           (unsigned long) delta, (unsigned long) delta, timer);
-    cmp3 = hpet_readl(HPET_Tn_CMP(timer));
-    if ( cmp3 != cmp )
-        print_error("%s(%ld): T%d Error: Set period, cmp %#lx(%'ld) != 
%#lx(%'ld)\n",
-                    __func__, __LINE__, timer, cmp, cmp, cmp3, cmp3);
-
-    if ( dom1.arch.hvm_domain.pl_time.vhpet.hpet.period[timer] != delta )
-        printf("%s(%ld): T%d Warning: Set period, period %#lx(%'ld) != 
%#lx(%'ld)\n",
-               __func__, __LINE__, timer, delta, delta,
-               dom1.arch.hvm_domain.pl_time.vhpet.hpet.period[timer],
-               dom1.arch.hvm_domain.pl_time.vhpet.hpet.period[timer]);
-
-    hpet_reset_counter(mc_low, mc_high);
-    cfg = hpet_readl(HPET_Tn_CFG(timer));
-    cfg |= HPET_TN_SETVAL;
-    hpet_writel(cfg, HPET_Tn_CFG(timer));
-    hpet_writel(old_cmp, HPET_Tn_CMP(timer));
-    hpet_writel(old_delta, HPET_Tn_CMP(timer));
-    hpet_start_counter();
-}
-
-
-int
-main(int argc, char **argv)
-{
-    hvm_domain_context_t hdc;
-    struct hvm_hw_hpet hpet0;
-    struct hvm_hw_hpet hpet1;
-    struct hvm_hw_hpet hpet2;
-    int i, k;
-
-    setlocale(LC_ALL, "");
-
-#ifdef FORCE_THOUSANDS_SEP
-    setlocale(LC_NUMERIC, "en_US.utf8");
-#endif
-    global_thousep = nl_langinfo(THOUSEP);
-
-    printf("test_vhpet 1.0\n");
-
-    if ( argc > 1 )
-        hvm_clock_cost = atoi(argv[1]);
-    if ( argc > 2 )
-        hpet_mult = atoi(argv[2]);
-    if ( argc > 3 )
-        hpet_add = atoi(argv[3]);
-    if ( argc > 4 )
-        tick_count = atoi(argv[4]);
-    if ( argc > 5 )
-        debug = strtol(argv[5], NULL, 0);
-
-    printf("hvm_clock_cost=%'d hpet_mult=%'d hpet_add=%'d tick_count=%d 
debug=%#x\n",
-           hvm_clock_cost, hpet_mult, hpet_add, tick_count, debug);
-
-    dom1.domain_id = 1;
-    dom1.vcpu[0] = &vcpu0;
-    vcpu0.vcpu_id = 0;
-    vcpu0.domain = &dom1;
-
-    __hvm_register_HPET_save_and_restore();
-
-    for (skip_load = 3; skip_load >= 0; skip_load--)
-    {
-
-        printf("\nskip_load=%d\n", skip_load);
-
-        hvm_guest_time = 16;
-
-        hpet_init(&vcpu0);
-
-        do_save(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-        dump_hpet();
-        hpet0 = hpet_save;
-        do_save(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-        dump_hpet();
-        hpet1 = hpet_save;
-        if (hpet0.mc64 != hpet1.mc64)
-            print_error("%s(%ld): With clock stopped mc64 changed: %'ld to 
%'ld\n",
-                        __func__, __LINE__, hpet0.mc64, hpet1.mc64);
-
-        do_load(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-        do_save(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-        dump_hpet();
-        hpet2 = hpet_save;
-        if (hpet1.mc64 != hpet2.mc64)
-            print_error("%s(%ld): With clock stopped mc64 changed: %'ld to 
%'ld\n",
-                        __func__, __LINE__, hpet1.mc64, hpet2.mc64);
-
-        dom1.arch.hvm_domain.pl_time.vhpet.hpet.mc64 = START_MC64;
-        dom1.arch.hvm_domain.pl_time.vhpet.mc_offset = START_MC64
-            - hvm_guest_time - hvm_clock_cost;
-        printf("\n"
-               "mc64=%#lx(%'ld) mc_offset=%#lx(%'ld)\n",
-               dom1.arch.hvm_domain.pl_time.vhpet.hpet.mc64,
-               dom1.arch.hvm_domain.pl_time.vhpet.hpet.mc64,
-               dom1.arch.hvm_domain.pl_time.vhpet.mc_offset,
-               dom1.arch.hvm_domain.pl_time.vhpet.mc_offset);
-
-        printf("\nhvm_guest_time=%#lx(%'ld)\n",
-               hvm_guest_time, hvm_guest_time);
-
-        do_save(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-        dump_hpet();
-        hpet0 = hpet_save;
-        do_save(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-        dump_hpet();
-        hpet1 = hpet_save;
-        if (hpet0.mc64 != hpet1.mc64)
-            print_error("%s(%ld): With clock stopped mc64 changed: %'ld to 
%'ld\n",
-                        __func__, __LINE__, hpet0.mc64, hpet1.mc64);
-
-        do_load(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-        do_save(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-        dump_hpet();
-        hpet2 = hpet_save;
-        if (hpet1.mc64 != hpet2.mc64)
-            print_error("%s(%ld): With clock stopped mc64 changed: %'ld to 
%'ld\n",
-                        __func__, __LINE__, hpet1.mc64, hpet2.mc64);
-
-        hpet_set_mode(0xf424, 0);
-        hpet_check_stopped(0xf424, 0);
-
-        do_save(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-        dump_hpet();
-        hpet0 = hpet_save;
-        do_save(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-        dump_hpet();
-        hpet1 = hpet_save;
-        do_load(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-        do_save(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-        dump_hpet();
-        hpet2 = hpet_save;
-
-        hpet_set_mode(0, 1);
-        hpet_check_stopped(0, 1);
-
-        do_save(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-        dump_hpet();
-        hpet0 = hpet_save;
-        do_save(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-        dump_hpet();
-        hpet1 = hpet_save;
-
-        do_load(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-        do_save(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-        dump_hpet();
-        hpet2 = hpet_save;
-
-        hpet_set_mode(~0ULL, 2);
-        hpet_check_stopped(~0ULL, 2);
-
-        hpet_set_mode(0x80000000, 2);
-        hpet_check_stopped(0x80000000, 2);
-
-        do_save(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-        dump_hpet();
-        hpet0 = hpet_save;
-        do_save(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-        dump_hpet();
-        hpet1 = hpet_save;
-
-        do_load(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-        do_save(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-        dump_hpet();
-        hpet2 = hpet_save;
-
-
-        for (k = 0; k < ARRAY_SIZE(new_guest_time); k++)
-        {
-            hvm_guest_time = new_guest_time[k];
-            printf("\nhvm_guest_time=%#lx(%'ld)\n",
-                   hvm_guest_time, hvm_guest_time);
-
-            do_save(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-            dump_hpet();
-            hpet0 = hpet_save;
-            do_save(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-            dump_hpet();
-            hpet1 = hpet_save;
-
-            do_load(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-            do_save(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-            dump_hpet();
-            hpet2 = hpet_save;
-
-            for (i = 0; i < tick_count; i++)
-            {
-                hvm_guest_time += 0x10;
-                printf("\nhvm_guest_time=%#lx(%'ld)\n",
-                       hvm_guest_time, hvm_guest_time);
-
-                do_save(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-                dump_hpet();
-                hpet0 = hpet_save;
-                do_save(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-                dump_hpet();
-                hpet1 = hpet_save;
-
-                do_load(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-                do_save(HVM_SAVE_CODE(HPET), &dom1, &hdc);
-                dump_hpet();
-                hpet2 = hpet_save;
-
-            }
-        }
-    }
-
-    return 0;
-}
-
-/*
- * Local variables:
- * mode: C
- * c-file-style: "BSD"
- * c-basic-offset: 4
- * indent-tabs-mode: nil
- * End:
- */
--
generated by git-patchbot for /home/xen/git/xen.git#master



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.