PERFORCE change 125426 for review
Fabio Checconi
fabio at FreeBSD.org
Mon Aug 20 09:52:24 PDT 2007
http://perforce.freebsd.org/chv.cgi?CH=125426
Change 125426 by fabio at fabio_gror on 2007/08/20 16:51:50
Update the perforce repository with the snapshot that will be reviewed
for the SoC evaluation.
The project is tracked with git:
http://feanor.sssup.it/~fabio/git/?p=soc07.git
Affected files ...
.. //depot/projects/soc2007/fabio-lkvm/README#1 add
.. //depot/projects/soc2007/fabio-lkvm/kvm-17/configure#2 edit
.. //depot/projects/soc2007/fabio-lkvm/kvm-17/qemu/configure#2 edit
.. //depot/projects/soc2007/fabio-lkvm/kvm-17/qemu/exec.c#2 edit
.. //depot/projects/soc2007/fabio-lkvm/kvm-17/qemu/vl.c#2 edit
.. //depot/projects/soc2007/fabio-lkvm/kvm-17/user/configure#2 edit
.. //depot/projects/soc2007/fabio-lkvm/kvm-17/user/kvmctl.c#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/bitops.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/bug.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/current.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/desc.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/highmem.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/io.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/msr.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/processor.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/segment.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/semaphore.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/system.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/topology.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/types.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/ldev_stub.c#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/ldev_stub.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/linux/dcache.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/linux/file.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/linux/fs.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/linux/gfp.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/linux/interrupt.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/linux/mm.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/linux/module.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/linux/mutex.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/linux/page.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/linux/sched.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/linux/signal.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/linux/smp.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/linux/spinlock.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/linux/vmalloc.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/linux_compat/linux_compat.c#2 edit
.. //depot/projects/soc2007/fabio-lkvm/lkvm/Makefile.kld#2 edit
.. //depot/projects/soc2007/fabio-lkvm/lkvm/include/linux/kvm.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/lkvm/kvm.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/lkvm/kvm_main.c#2 edit
.. //depot/projects/soc2007/fabio-lkvm/lkvm/mmu.c#2 edit
.. //depot/projects/soc2007/fabio-lkvm/lkvm/paging_tmpl.h#2 edit
.. //depot/projects/soc2007/fabio-lkvm/lkvm/svm.c#2 edit
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-90_security#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-Makefile#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-PRId64#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-aa#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-audio-4#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-audio::ossaudio.c#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-bc#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-bd#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-be#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-bf#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-bg#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-bh#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-bk#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-block-qcow2.c#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-block-raw.c#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-block.c#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-bsdusb.patch#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-bt#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-fbsd#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-fpu-softfloat-native.c#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-libmath#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-libmath2#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-libmath4#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-osdep.c#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-qemu-img.c#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-qemu-img.texi#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-target-mips-cpu.h#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-vl.c#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-vl.c-nographic#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-vl.c-ppbus#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-vl.c-serial#1 add
.. //depot/projects/soc2007/fabio-lkvm/patches/qemu/patch-x_keymap.c#1 add
Differences ...
==== //depot/projects/soc2007/fabio-lkvm/kvm-17/configure#2 (xtext/text+ko) ====
==== //depot/projects/soc2007/fabio-lkvm/kvm-17/qemu/configure#2 (xtext/text+ko) ====
==== //depot/projects/soc2007/fabio-lkvm/kvm-17/qemu/exec.c#2 (text+ko) ====
@@ -42,6 +42,7 @@
//#define DEBUG_FLUSH
//#define DEBUG_TLB
//#define DEBUG_UNASSIGNED
+#define DEBUG_IOPORT
/* make various TB consistency checks */
//#define DEBUG_TB_CHECK
==== //depot/projects/soc2007/fabio-lkvm/kvm-17/qemu/vl.c#2 (text+ko) ====
@@ -106,8 +106,8 @@
#endif
#endif
-//#define DEBUG_UNUSED_IOPORT
-//#define DEBUG_IOPORT
+#define DEBUG_UNUSED_IOPORT
+#define DEBUG_IOPORT
#define PHYS_RAM_MAX_SIZE (2047 * 1024 * 1024)
==== //depot/projects/soc2007/fabio-lkvm/kvm-17/user/configure#2 (xtext/text+ko) ====
==== //depot/projects/soc2007/fabio-lkvm/kvm-17/user/kvmctl.c#2 (text+ko) ====
@@ -36,6 +36,36 @@
/* FIXME: or dynamically alloc/realloc regions */
#define KVM_MAX_NUM_MEM_REGIONS 4u
+#ifndef __FreeBSD__
+#define kvm_mmap mmap
+#else
+/*
+ * On FreeBSD we cannot hook the mmap call, so we turn it into
+ * something else...
+ */
+static inline void *
+kvm_mmap(void *addr, size_t len, int prot, int flags, int fd, off_t pos)
+{
+ struct kvm_mmap_args args;
+ int r;
+
+ args.addr = addr;
+ args.len = len;
+ args.prot = prot;
+ args.flags = flags;
+ args.fd = fd;
+ args.pos = pos;
+
+ r = ioctl(fd, KVM_VM_MMAP, &args);
+
+ if (r == 0)
+ return args.retval;
+
+ errno = r;
+ return MAP_FAILED;
+}
+#endif
+
/**
* \brief The KVM context
*
@@ -268,7 +298,7 @@
kvm_memory_region_save_params(kvm, &low_memory);
kvm_memory_region_save_params(kvm, &extended_memory);
- *vm_mem = mmap(0, memory, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
+ *vm_mem = kvm_mmap(0, memory, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
if (*vm_mem == MAP_FAILED) {
fprintf(stderr, "mmap: %m\n");
return -1;
@@ -312,7 +342,7 @@
if (writable)
prot |= PROT_WRITE;
- ptr = mmap(0, len, prot, MAP_SHARED, fd, phys_start);
+ ptr = kvm_mmap(0, len, prot, MAP_SHARED, fd, phys_start);
if (ptr == MAP_FAILED)
return 0;
return ptr;
@@ -338,7 +368,7 @@
log.u.dirty_bitmap = buf;
- r = ioctl(kvm->vm_fd, ioctl_num, &log);
+ r = ioctl(kvm->vm_fd, (unsigned long)ioctl_num, &log);
if (r == -1)
return -errno;
return 0;
@@ -538,19 +568,23 @@
sizer.nmsrs = 0;
r = ioctl(kvm->fd, KVM_GET_MSR_INDEX_LIST, &sizer);
-#ifndef __FreeBSD__
+#ifdef __FreeBSD__
+ if (sizer.error != 0) {
+ r = -1;
+ errno = -sizer.error;
+ }
+#endif
if (r == -1 && errno != E2BIG)
return 0;
-#else
- if (r == -1 || sizer.error != E2BIG)
- return 0;
-#endif
msrs = malloc(sizeof *msrs + sizer.nmsrs * sizeof *msrs->indices);
if (!msrs) {
errno = ENOMEM;
return 0;
}
msrs->nmsrs = sizer.nmsrs;
+#ifdef __FreeBSD__
+ msrs->indices = (__u32 *)&msrs[1];
+#endif
r = ioctl(kvm->fd, KVM_GET_MSR_INDEX_LIST, msrs);
if (r == -1) {
e = errno;
@@ -773,6 +807,14 @@
kvm_run.emulated = 0;
kvm_run.mmio_completed = 0;
+
+#ifdef __FreeBSD__
+ if (kvm_run.error != 0) {
+ r = -1;
+ errno = -kvm_run.error;
+ }
+#endif
+
if (r == -1 && errno != EINTR) {
r = -errno;
printf("kvm_run: %m\n");
==== //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/bitops.h#2 (text+ko) ====
@@ -1,26 +1,41 @@
#ifndef _LINUX_ASM_BITOPS_H
#define _LINUX_ASM_BITOPS_H
+#include <machine/_limits.h>
+
+/*
+ * In Linux (at least i386/amd64) this is undefined if word is zero.
+ */
static inline unsigned long __ffs(unsigned long word)
{
- return 0;
+ int i;
+
+ for (i = 0; i < sizeof(word) * 8; i++)
+ if (word & (1UL << i))
+ break;
+
+ return i;
}
-static inline void set_bit(int nr, volatile unsigned long *addr)
-{
-}
+/*
+ * XXX this should be atomic (so it should be defined in an
+ * arch-dependent way)
+ */
+#define set_bit(nr, addr) __set_bit(nr, addr)
static inline void __set_bit(int nr, volatile unsigned long *addr)
{
+ addr[nr / __LONG_BIT] |= 1UL << (nr % __LONG_BIT);
}
-static inline int test_bit(int nr, const volatile void *addr)
+static inline int test_bit(int nr, const volatile unsigned long *addr)
{
- return 0;
+ return (addr[nr / __LONG_BIT] & (1UL << (nr % __LONG_BIT))) != 0;
}
static inline void clear_bit(int nr, volatile unsigned long *addr)
{
+ addr[nr / __LONG_BIT] &= ~(1UL << (nr % __LONG_BIT));
}
#endif
==== //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/bug.h#2 (text+ko) ====
@@ -1,6 +1,9 @@
#ifndef _LINUX_ASM_BUG_H
#define _LINUX_ASM_BUG_H
-#define BUG_ON(condition)
+#define BUG_ON(condition) do { \
+ if ((condition)) \
+ panic("BUG\n"); \
+} while(0)
#endif
==== //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/current.h#2 (text+ko) ====
@@ -1,11 +1,15 @@
#ifndef _LINUX_CURRENT_H
#define _LINUX_CURRENT_H
-struct task_struct;
+/*
+ * XXX should really do something better, this makes little or no
+ * sense when we have more than one caller...
+ */
+extern struct task_struct __current;
static inline struct task_struct *get_current(void)
{
- return 0;
+ return &__current;
}
#define current get_current()
==== //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/desc.h#2 (text+ko) ====
@@ -2,6 +2,7 @@
#define _LINUX_ASM_DESC_H
#include <asm/desc_defs.h>
+#include <machine/cpufunc.h>
struct Xgt_desc_struct {
unsigned short size;
@@ -9,6 +10,12 @@
unsigned short pad;
} __attribute__((packed));
-#define load_TR_desc()
+static inline void load_TR_desc(void)
+{
+ int gsel_tss;
+
+ gsel_tss = GSEL(GPROC0_SEL, SEL_KPL);
+ ltr(gsel_tss);
+}
#endif
==== //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/highmem.h#2 (text+ko) ====
@@ -3,10 +3,11 @@
#include <asm/kmap_types.h>
#include <linux/interrupt.h>
+#include <linux/page.h>
static inline void *kmap_atomic(struct page *page, enum km_type type)
{
- return 0;
+ return (void *)PHYS_TO_DMAP(VM_PAGE_TO_PHYS(page->vm_page));
}
static inline void kunmap_atomic(void *kvaddr, enum km_type type)
==== //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/io.h#2 (text+ko) ====
@@ -1,9 +1,8 @@
#ifndef _LINUX_ASM_IO_H
#define _LINUX_ASM_IO_H
-static inline unsigned long virt_to_phys(volatile void *address)
-{
- return 0;
-}
+#include <linux/page.h>
+
+#define virt_to_phys(address) __pa(address)
#endif
==== //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/msr.h#2 (text+ko) ====
@@ -13,33 +13,35 @@
* pointer indirection), this allows gcc to optimize better
*/
-#define rdmsr_compat(msr,val1,val2) \
- __asm__ __volatile__("rdmsr" \
- : "=a" (val1), "=d" (val2) \
- : "c" (msr))
+#define rdmsr_compat(msr,val1,val2) \
+ __asm__ __volatile__("rdmsr" \
+ : "=a" (val1), "=d" (val2) \
+ : "c" (msr))
-#define wrmsr_compat(msr,val1,val2) \
- __asm__ __volatile__("wrmsr" \
- : /* no outputs */ \
- : "c" (msr), "a" (val1), "d" (val2))
+#define wrmsr_compat(msr,val1,val2) \
+ __asm__ __volatile__("wrmsr" \
+ : /* no outputs */ \
+ : "c" (msr), "a" (val1), "d" (val2))
#define rdmsrl(msr, val) ((val) = rdmsr(msr))
#define wrmsrl(msr, val) wrmsr(msr, val)
/* wrmsr with exception handling */
-#define wrmsr_safe(msr,a,b) ({ int ret__; \
- asm volatile("2: wrmsr ; xorl %0,%0\n" \
- "1:\n\t" \
- ".section .fixup,\"ax\"\n\t" \
- "3: movl %4,%0 ; jmp 1b\n\t" \
- ".previous\n\t" \
- ".section __ex_table,\"a\"\n" \
- " .align 4\n\t" \
- " .long 2b,3b\n\t" \
- ".previous" \
- : "=a" (ret__) \
- : "c" (msr), "0" (a), "d" (b), "i" (-EFAULT));\
- ret__; })
+static inline int wrmsr_safe(u_int msr, u_int32_t low, u_int32_t high)
+{
+ int ret = -EFAULT;
+
+ __asm__ __volatile__("movq $1f, %4\n"
+ "wrmsr\n"
+ "movl $0, %0\n"
+ "1:\n"
+ : "=m"(ret)
+ : "a"(low), "c"(msr), "d"(high),
+ "m"(PCPU_GET(curpcb)->pcb_onfault));
+
+ PCPU_GET(curpcb)->pcb_onfault = NULL;
+ return ret;
+}
/* rdmsr with exception handling */
static inline int rdmsr_safe(u_int msr, u_int32_t *low, u_int32_t *high)
@@ -47,12 +49,12 @@
int ret = -EFAULT;
__asm__ __volatile__("movq $1f, %4\n"
- "rdmsr\n"
- "movl $0, %3\n"
- "1:\n"
- : "=a"(*low), "=d"(*high)
- : "c"(msr), "m"(ret),
- "m"(PCPU_GET(curpcb)->pcb_onfault));
+ "rdmsr\n"
+ "movl $0, %2\n"
+ "1:\n"
+ : "=a"(*low), "=d"(*high), "=m"(ret)
+ : "c"(msr),
+ "m"(PCPU_GET(curpcb)->pcb_onfault));
PCPU_GET(curpcb)->pcb_onfault = NULL;
return ret;
==== //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/processor.h#2 (text+ko) ====
@@ -41,8 +41,8 @@
#define boot_cpu_data (get_boot_cpu_data())
static inline void cpuid(unsigned int op, unsigned int *eax,
- unsigned int *ebx, unsigned int *ecx,
- unsigned int *edx)
+ unsigned int *ebx, unsigned int *ecx,
+ unsigned int *edx)
{
__asm __volatile("cpuid"
: "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx)
@@ -51,12 +51,18 @@
static inline unsigned int cpuid_ebx(unsigned int op)
{
- return 0;
+ unsigned int r[4];
+
+ cpuid(op, &r[0], &r[1], &r[2], &r[3]);
+ return r[1];
}
static inline unsigned int cpuid_ecx(unsigned int op)
{
- return 0;
+ unsigned int r[4];
+
+ cpuid(op, &r[0], &r[1], &r[2], &r[3]);
+ return r[2];
}
static inline void set_debugreg(int regno, unsigned long value)
@@ -64,7 +70,7 @@
}
struct desc_struct {
- unsigned long a, b;
+ unsigned int a, b;
};
#endif
==== //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/segment.h#2 (text+ko) ====
@@ -1,10 +1,12 @@
#ifndef _LINUX_ASM_SEGMENT_H
#define _LINUX_ASM_SEGMENT_H
-#define GDT_ENTRY_TSS 0
+#include <machine/segments.h>
+
+#define GDT_ENTRY_TSS GPROC0_SEL
-#define __KERNEL_CS 0
-#define __KERNEL_DS 0
-#define __USER_DS 0
+#define __KERNEL_CS GSEL(GCODE_SEL, SEL_KPL)
+#define __KERNEL_DS GSEL(GDATA_SEL, SEL_KPL)
+#define __USER_DS GSEL(GUDATA_SEL, SEL_UPL)
#endif
==== //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/semaphore.h#2 (text+ko) ====
@@ -1,26 +1,30 @@
-/*
- * stub for asm/semaphore.h
- */
-
#ifndef _LINUX_ASM_SEMAPHORE_H
#define _LINUX_ASM_SEMAPHORE_H
-#include <linux/wait.h>
-#if 1 /* freebsd semaphores */
+#include <sys/types.h>
+#include <sys/lock.h>
+#include <sys/sema.h>
-#include <sys/mutex.h>
+/*
+ * We don't know when the semaphore object is destroyed, since in
+ * Linux there is no explicit call to notify this, so or we modify
+ * drivers to include a destructor code, or we leak some memory.
+ * We have the same problem with spinlocks.
+ *
+ * XXX By now just ignore that.
+ */
struct semaphore {
- struct mtx m;
+ struct sema sema;
};
static inline void init_MUTEX(struct semaphore *sem)
{
- mtx_init(&sem->m, "ldev", NULL, MTX_DEF);
+ //sema_init(&sem->sema, 1, "lkc-mutex");
}
static inline void down(struct semaphore *sem)
{
- mtx_lock(&sem->m);
+ //sema_wait(&sem->sema);
}
static inline int down_interruptible(struct semaphore *sem)
@@ -31,57 +35,7 @@
static inline void up(struct semaphore *sem)
{
- mtx_unlock(&sem->m);
-}
-
-#else /* linux semaphores */
-/* from asm/semaphore.h */
-struct semaphore {
- atomic_t count;
- int sleepers;
- wait_queue_head_t wait;
-};
-
-static inline void sema_init (struct semaphore *sem, int val)
-{
-/*
- * *sem = (struct semaphore)__SEMAPHORE_INITIALIZER((*sem),val);
- *
- * i'd rather use the more flexible initialization above, but sadly
- * GCC 2.7.2.3 emits a bogus warning. EGCS doesn't. Oh well.
- */
- atomic_set(&sem->count, val);
- sem->sleepers = 0;
- init_waitqueue_head(&sem->wait);
-}
-
-static inline void init_MUTEX (struct semaphore *sem)
-{
- sema_init(sem, 1);
-}
-
-static inline void up(struct semaphore *sem)
-{
- // XXX to be filled
+ //sema_post(&sem->sema);
}
-static inline void down(struct semaphore *sem)
-{
- // XXX to be filled
-}
-
-static inline int down_interruptible(struct semaphore *sem)
-{
- down(sem);
- return 0;
-}
-
-/* these are fake implementation to be fixed */
-#define spin_lock(sem) do {} while (0)
-#define spin_lock_irq(sem) do {} while (0)
-#define spin_lock_irqsave(sem, flags) do {flags = 0;} while (0)
-#define spin_unlock_irqrestore(sem, flags) do {} while (0)
-#define spin_unlock(sem) do {} while (0)
-#define spin_unlock_irq(sem) do {} while (0)
-#endif
#endif /* _LINUX_ASM_SEMAPHORE_H */
==== //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/system.h#2 (text+ko) ====
@@ -1,22 +1,12 @@
#ifndef _LINUX_ASM_SYSTEM_H
#define _LINUX_ASM_SYSTEM_H
-static inline void write_cr4(unsigned int val)
-{
-}
+#include <machine/cpufunc.h>
-static inline unsigned long read_cr0(void)
-{
- return 0;
-}
+#define write_cr4(val) load_cr4(val)
-static inline unsigned long read_cr3(void)
-{
- return 0;
-}
-static inline unsigned long read_cr4(void)
-{
- return 0;
-}
+#define read_cr0() rcr0()
+#define read_cr3() rcr3()
+#define read_cr4() rcr4()
#endif
==== //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/topology.h#2 (text+ko) ====
@@ -1,9 +1,6 @@
#ifndef _LINUX_ASM_TOPOLOGY_H
#define _LINUX_ASM_TOPOLOGY_H
-static inline int cpu_to_node(int cpu)
-{
- return 0;
-}
+#define cpu_to_node(cpu) (cpu)
#endif
==== //depot/projects/soc2007/fabio-lkvm/linux_compat/asm/types.h#2 (text+ko) ====
@@ -1,6 +1,8 @@
#ifndef _I386_TYPES_H
#define _I386_TYPES_H
+#include <machine/_limits.h>
+
#ifndef __ASSEMBLY__
typedef unsigned short umode_t;
@@ -31,7 +33,7 @@
*/
#ifdef __KERNEL__
-#define BITS_PER_LONG 32
+#define BITS_PER_LONG __LONG_BIT
#ifndef __ASSEMBLY__
==== //depot/projects/soc2007/fabio-lkvm/linux_compat/ldev_stub.c#2 (text+ko) ====
@@ -275,7 +275,7 @@
sc->sc_dev_t = make_dev(&ldev_cdevsw, unit, UID_ROOT, GID_OPERATOR,
0666, "%s%d", DEV_NAME, unit);
/* call the attach routine (where ???) */
- usbd_add_drv_event(USB_EVENT_DRIVER_ATTACH, sc->udev,USBDEV(sc->sc_dev));
+ usbd_add_drv_event(USB_EVENT_DRIVER_ATTACH, sc->udev,sc->sc_dev);
return 0; /* success */
}
@@ -294,7 +294,7 @@
selwakeuppri(&sc->rsel,PZERO);
}
device_printf(sc->sc_dev, "Disconnected while device is in use!\n");
- usb_detach_wait(USBDEV(sc->sc_dev));
+ usb_detach_wait(sc->sc_dev);
}
/* free resources etc. */
if (sc->l_u_d.mem) /* memory allocated for linux emulation */
@@ -304,12 +304,12 @@
mtx_destroy(&sc->ptrlock);
/* free memory ? */
- usbd_add_drv_event(USB_EVENT_DRIVER_DETACH, sc->udev,USBDEV(sc->sc_dev));
+ usbd_add_drv_event(USB_EVENT_DRIVER_DETACH, sc->udev,sc->sc_dev);
return 0;
}
static int
-ldev_open(struct cdev *dev, int flag, int mode, usb_proc_ptr p)
+ldev_open(struct cdev *dev, int flag, int mode, struct thread *p)
{
int err = 0;
int unit = LDEVUNIT(dev);
@@ -340,7 +340,7 @@
/* Watch out for races between close and detach */
static int
-ldev_close(struct cdev *dev, int flag, int mode, usb_proc_ptr p)
+ldev_close(struct cdev *dev, int flag, int mode, struct thread *p)
{
int unit = LDEVUNIT(dev);
struct ldev_softc *sc = devclass_get_softc(ldev_devclass, unit);
@@ -352,7 +352,7 @@
err = -sc->l_u_d.fops->release((struct inode *)sc, &sc->l_u_d.file);
sc->vopen = 0;
- usb_detach_wakeup(USBDEV(sc->sc_dev)); /* if a detach is pending */
+ usb_detach_wakeup(sc->sc_dev); /* if a detach is pending */
return err;
}
@@ -405,7 +405,8 @@
#include <linux/videodev.h>
static int
-ldev_ioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flag, usb_proc_ptr p)
+ldev_ioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flag,
+ struct thread *p)
{
int unit = LDEVUNIT(dev);
struct ldev_softc *sc = devclass_get_softc(ldev_devclass, unit);
@@ -434,7 +435,7 @@
/* XXX this is still incomplete */
static int
-ldev_poll(struct cdev *dev, int events, usb_proc_ptr p)
+ldev_poll(struct cdev *dev, int events, struct thread *p)
{
int unit = LDEVUNIT(dev);
struct ldev_softc *sc = devclass_get_softc(ldev_devclass, unit);
==== //depot/projects/soc2007/fabio-lkvm/linux_compat/ldev_stub.h#2 (text+ko) ====
@@ -64,6 +64,7 @@
// #include <vm/pmap.h>
#include <dev/usb/usb.h>
+#include <dev/usb/usb_port.h>
#include <dev/usb/usbdi.h>
#include <dev/usb/usbdi_util.h>
==== //depot/projects/soc2007/fabio-lkvm/linux_compat/linux/dcache.h#2 (text+ko) ====
@@ -3,12 +3,12 @@
#include <linux/cache.h>
+struct inode;
+
struct dentry {
+ struct inode *d_inode;
};
-static inline struct dentry *d_alloc_anon(struct inode *ino)
-{
- return 0;
-}
+#define d_alloc_anon(inode) kzalloc(sizeof(struct dentry), GFP_KERNEL)
#endif
==== //depot/projects/soc2007/fabio-lkvm/linux_compat/linux/file.h#2 (text+ko) ====
@@ -1,19 +1,13 @@
#ifndef _LINUX_FILE_H
#define _LINUX_FILE_H
-struct file;
+#include <linux/fs.h>
-static inline void fput(struct file *filp)
+static inline void fput(struct linux_file *filp)
{
}
-static inline int get_unused_fd(void)
-{
- return 0;
-}
-
-static inline void fd_install(unsigned int fd, struct file *filp)
-{
-}
+int get_unused_fd(void);
+void fd_install(int fd, struct linux_file *filp);
#endif
==== //depot/projects/soc2007/fabio-lkvm/linux_compat/linux/fs.h#2 (text+ko) ====
@@ -33,6 +33,9 @@
#include <linux/stat.h>
#include <asm/atomic.h>
+#include <sys/file.h>
+#include <sys/filedesc.h>
+
/*
* $Id: fs.h,v 1.4 2007/01/27 16:52:28 luigi Exp $
* Prototype of the struct file_operations used in device drivers.
@@ -45,7 +48,7 @@
struct address_space;
/* from file.h */
-struct file {
+struct linux_file {
struct path f_path;
const struct file_operations *f_op;
atomic_t f_count;
@@ -57,6 +60,13 @@
void *private_data;
};
+/*
+ * XXX that's quite dirty, from now on all `file' identifiers will be
+ * replaced with linux_file. this may cause *a lot* of nasty things
+ * and hard to find errors, but should work for KVM.
+ */
+#define file linux_file
+
// struct kiocb; /* in aio.h */
struct poll_table_struct; // XXX dummy
// struct dentry; // XXX dummy
@@ -128,10 +138,7 @@
{
}
-static inline struct file *get_empty_filp(void)
-{
- return 0;
-}
+#define get_empty_filp() kzalloc(sizeof(struct file), GFP_KERNEL)
struct super_block;
struct super_operations;
@@ -164,10 +171,7 @@
return 0;
}
-static inline struct inode *new_inode(struct super_block *sb)
-{
- return 0;
-}
+#define new_inode(sb) kzalloc(sizeof(struct inode), GFP_KERNEL)
static inline struct vfsmount *kern_mount(struct file_system_type *fs_type)
{
==== //depot/projects/soc2007/fabio-lkvm/linux_compat/linux/gfp.h#2 (text+ko) ====
@@ -16,9 +16,9 @@
struct page *alloc_pages(gfp_t gfp_mask, unsigned int order);
static inline struct page *alloc_pages_node(int nid, gfp_t gfp_mask,
- unsigned int order)
+ unsigned int order)
{
- return 0;
+ return alloc_pages(gfp_mask, order);
}
static inline void free_pages(unsigned long addr, unsigned int order)
==== //depot/projects/soc2007/fabio-lkvm/linux_compat/linux/interrupt.h#2 (text+ko) ====
@@ -1,12 +1,9 @@
#ifndef _LINUX_INTERRUPT_H
#define _LINUX_INTERRUPT_H
-static inline void local_irq_enable(void)
-{
-}
+#include <machine/cpufunc.h>
-static inline void local_irq_disable(void)
-{
-}
+#define local_irq_enable() enable_intr()
+#define local_irq_disable() disable_intr()
#endif
==== //depot/projects/soc2007/fabio-lkvm/linux_compat/linux/mm.h#2 (text+ko) ====
@@ -95,14 +95,33 @@
int remap_pfn_range(struct vm_area_struct *, unsigned long addr,
unsigned long pfn, unsigned long size, pgprot_t);
-#define page_address(page) ((void *)__va(VM_PAGE_TO_PHYS(page->vm_page)))
+static inline void *page_address(struct page *page)
+{
+#ifdef DEBUG_ADDR
+ KASSERT(pfn_to_page(page_to_pfn(page)) == page, ("page_address"));
+#endif
+ return __va(VM_PAGE_TO_PHYS(page->vm_page));
+}
static inline void get_page(struct page *page)
{
}
-#define page_private(page) ((unsigned long)page)
-#define set_page_private(page, v) ((page)->private = (v))
+static inline unsigned long page_private(struct page *page)
+{
+#ifdef DEBUG_ADDR
+ KASSERT(pfn_to_page(page_to_pfn(page)) == page, ("page_private"));
+#endif
+ return page->private;
+}
+
+static inline void set_page_private(struct page *page, unsigned long v)
+{
+#ifdef DEBUG_ADDR
+ KASSERT(pfn_to_page(page_to_pfn(page)) == page, ("set_page_private"));
+#endif
+ page->private = v;
+}
/* XXX this should not be done so late! */
#include <linux/page.h>
==== //depot/projects/soc2007/fabio-lkvm/linux_compat/linux/module.h#2 (text+ko) ====
@@ -145,7 +145,7 @@
dev->priv = data;
}
-struct file;
+#include <linux/fs.h>
struct inode;
struct video_device* video_devdata(struct file*);
@@ -208,13 +208,18 @@
/* make this non blocking */
#define kmalloc(siz,opt) malloc(siz, M_USBDEV, M_NOWAIT)
-#define kfree(pt) free(pt, M_USBDEV)
+#define kfree(pt) do { \
+ if (curthread->td_critnest == 0) \
+ free(pt, M_USBDEV); \
+} while (0)
#define HZ hz // on freebsd...
#define udelay(t) DELAY(t)
void linux_msleep(int ms);
#define msleep_compat(ms) linux_msleep(ms)
+#undef msleep
+#define msleep(ms) linux_msleep(ms)
// #define mdelay(ms) linux_msleep(ms) // maybe DELAY... */
#define mdelay(ms) DELAY(ms) // maybe DELAY... */
==== //depot/projects/soc2007/fabio-lkvm/linux_compat/linux/mutex.h#2 (text+ko) ====
@@ -9,16 +9,16 @@
struct mtx m;
};
-#define mutex_init(_m) mtx_init(&(_m)->m, "ldev", NULL, MTX_DEF)
-#define mutex_lock(_m) mtx_lock(&(_m)->m)
+#define mutex_init(_m) //mtx_init(&(_m)->m, "ldev", NULL, MTX_DEF)
+#define mutex_lock(_m) //mtx_lock(&(_m)->m)
static inline int
mutex_lock_interruptible(struct mutex *_m)
{
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list