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] Merged.

# HG changeset patch
# User emellor@xxxxxxxxxxxxxxxxxxxxxx
# Node ID 78b5e590be34ee3454d970321d7c2f3199a0de41
# Parent  d1e1d6493d1d30711338201065f88c1674357da7
# Parent  f887ddae2b03ab363278afc92225aa3bc320de5f
Merged.

diff -r d1e1d6493d1d -r 78b5e590be34 
linux-2.6-xen-sparse/arch/xen/configs/xen0_defconfig_x86_32
--- a/linux-2.6-xen-sparse/arch/xen/configs/xen0_defconfig_x86_32       Thu Nov 
24 19:56:38 2005
+++ b/linux-2.6-xen-sparse/arch/xen/configs/xen0_defconfig_x86_32       Thu Nov 
24 19:57:01 2005
@@ -35,7 +35,6 @@
 # CONFIG_CLEAN_COMPILE is not set
 CONFIG_BROKEN=y
 CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
 CONFIG_INIT_ENV_ARG_LIMIT=32
 
 #
@@ -125,8 +124,6 @@
 # CONFIG_HPET_TIMER is not set
 # CONFIG_HPET_EMULATE_RTC is not set
 # CONFIG_SMP is not set
-CONFIG_PREEMPT=y
-CONFIG_PREEMPT_BKL=y
 # CONFIG_X86_REBOOTFIXUPS is not set
 CONFIG_MICROCODE=y
 CONFIG_X86_CPUID=y
@@ -141,7 +138,6 @@
 # CONFIG_HIGHMEM64G is not set
 CONFIG_HIGHMEM=y
 CONFIG_MTRR=y
-CONFIG_HAVE_DEC_LOCK=y
 # CONFIG_REGPARM is not set
 CONFIG_X86_LOCAL_APIC=y
 CONFIG_X86_IO_APIC=y
@@ -1259,7 +1255,6 @@
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_SCHEDSTATS is not set
 # CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
 # CONFIG_DEBUG_SPINLOCK is not set
 # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
 # CONFIG_DEBUG_KOBJECT is not set
diff -r d1e1d6493d1d -r 78b5e590be34 
linux-2.6-xen-sparse/arch/xen/configs/xen0_defconfig_x86_64
--- a/linux-2.6-xen-sparse/arch/xen/configs/xen0_defconfig_x86_64       Thu Nov 
24 19:56:38 2005
+++ b/linux-2.6-xen-sparse/arch/xen/configs/xen0_defconfig_x86_64       Thu Nov 
24 19:57:01 2005
@@ -90,7 +90,6 @@
 CONFIG_X86_GOOD_APIC=y
 # CONFIG_HPET_TIMER is not set
 # CONFIG_SMP is not set
-# CONFIG_PREEMPT is not set
 CONFIG_MICROCODE=y
 # CONFIG_X86_CPUID is not set
 CONFIG_SWIOTLB=y
diff -r d1e1d6493d1d -r 78b5e590be34 
linux-2.6-xen-sparse/arch/xen/configs/xenU_defconfig_x86_32
--- a/linux-2.6-xen-sparse/arch/xen/configs/xenU_defconfig_x86_32       Thu Nov 
24 19:56:38 2005
+++ b/linux-2.6-xen-sparse/arch/xen/configs/xenU_defconfig_x86_32       Thu Nov 
24 19:57:01 2005
@@ -125,8 +125,6 @@
 CONFIG_SMP_ALTERNATIVES=y
 CONFIG_NR_CPUS=8
 # CONFIG_SCHED_SMT is not set
-CONFIG_PREEMPT=y
-CONFIG_PREEMPT_BKL=y
 # CONFIG_X86_REBOOTFIXUPS is not set
 CONFIG_X86_CPUID=y
 
@@ -550,7 +548,6 @@
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_SCHEDSTATS is not set
 # CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
 # CONFIG_DEBUG_SPINLOCK is not set
 # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
 # CONFIG_DEBUG_KOBJECT is not set
diff -r d1e1d6493d1d -r 78b5e590be34 
linux-2.6-xen-sparse/arch/xen/configs/xenU_defconfig_x86_64
--- a/linux-2.6-xen-sparse/arch/xen/configs/xenU_defconfig_x86_64       Thu Nov 
24 19:56:38 2005
+++ b/linux-2.6-xen-sparse/arch/xen/configs/xenU_defconfig_x86_64       Thu Nov 
24 19:57:01 2005
@@ -92,7 +92,6 @@
 CONFIG_SMP=y
 CONFIG_NR_CPUS=8
 # CONFIG_SCHED_SMT is not set
-# CONFIG_PREEMPT is not set
 # CONFIG_MICROCODE is not set
 CONFIG_X86_CPUID=y
 # CONFIG_NUMA is not set
diff -r d1e1d6493d1d -r 78b5e590be34 
linux-2.6-xen-sparse/arch/xen/configs/xen_defconfig_x86_32
--- a/linux-2.6-xen-sparse/arch/xen/configs/xen_defconfig_x86_32        Thu Nov 
24 19:56:38 2005
+++ b/linux-2.6-xen-sparse/arch/xen/configs/xen_defconfig_x86_32        Thu Nov 
24 19:57:01 2005
@@ -132,8 +132,6 @@
 CONFIG_SMP_ALTERNATIVES=y
 CONFIG_NR_CPUS=8
 # CONFIG_SCHED_SMT is not set
-CONFIG_PREEMPT=y
-CONFIG_PREEMPT_BKL=y
 # CONFIG_X86_REBOOTFIXUPS is not set
 CONFIG_MICROCODE=y
 CONFIG_X86_CPUID=m
@@ -2951,7 +2949,6 @@
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_SCHEDSTATS is not set
 # CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
 # CONFIG_DEBUG_SPINLOCK is not set
 # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
 # CONFIG_DEBUG_KOBJECT is not set
diff -r d1e1d6493d1d -r 78b5e590be34 
linux-2.6-xen-sparse/arch/xen/configs/xen_defconfig_x86_64
--- a/linux-2.6-xen-sparse/arch/xen/configs/xen_defconfig_x86_64        Thu Nov 
24 19:56:38 2005
+++ b/linux-2.6-xen-sparse/arch/xen/configs/xen_defconfig_x86_64        Thu Nov 
24 19:57:01 2005
@@ -95,7 +95,6 @@
 CONFIG_SMP=y
 CONFIG_NR_CPUS=8
 # CONFIG_SCHED_SMT is not set
-# CONFIG_PREEMPT is not set
 CONFIG_MICROCODE=y
 # CONFIG_X86_CPUID is not set
 # CONFIG_NUMA is not set
diff -r d1e1d6493d1d -r 78b5e590be34 linux-2.6-xen-sparse/arch/xen/i386/Kconfig
--- a/linux-2.6-xen-sparse/arch/xen/i386/Kconfig        Thu Nov 24 19:56:38 2005
+++ b/linux-2.6-xen-sparse/arch/xen/i386/Kconfig        Thu Nov 24 19:57:01 2005
@@ -415,17 +415,17 @@
          cost of slightly increased overhead in some places. If unsure say
          N here.
 
-config PREEMPT
-       bool "Preemptible Kernel"
-       help
-         This option reduces the latency of the kernel when reacting to
-         real-time or interactive events by allowing a low priority process to
-         be preempted even if it is in kernel mode executing a system call.
-         This allows applications to run more reliably even when the system is
-         under load.
-
-         Say Y here if you are building a kernel for a desktop, embedded
-         or real-time system.  Say N if you are unsure.
+#config PREEMPT
+#      bool "Preemptible Kernel"
+#      help
+#        This option reduces the latency of the kernel when reacting to
+#        real-time or interactive events by allowing a low priority process to
+#        be preempted even if it is in kernel mode executing a system call.
+#        This allows applications to run more reliably even when the system is
+#        under load.
+#
+#        Say Y here if you are building a kernel for a desktop, embedded
+#        or real-time system.  Say N if you are unsure.
 
 config PREEMPT_BKL
        bool "Preempt The Big Kernel Lock"
diff -r d1e1d6493d1d -r 78b5e590be34 
linux-2.6-xen-sparse/arch/xen/i386/mm/pgtable.c
--- a/linux-2.6-xen-sparse/arch/xen/i386/mm/pgtable.c   Thu Nov 24 19:56:38 2005
+++ b/linux-2.6-xen-sparse/arch/xen/i386/mm/pgtable.c   Thu Nov 24 19:57:01 2005
@@ -27,8 +27,9 @@
 #include <asm-xen/foreign_page.h>
 #include <asm/hypervisor.h>
 
-static void __pgd_pin(pgd_t *pgd);
-static void __pgd_unpin(pgd_t *pgd);
+static void pgd_test_and_unpin(pgd_t *pgd);
+#define suspend_disable        preempt_disable
+#define suspend_enable preempt_enable
 
 void show_mem(void)
 {
@@ -284,26 +285,23 @@
        BUG_ON(rc);
 #endif
 
-       if (!HAVE_SHARED_KERNEL_PMD)
-               spin_lock_irqsave(&pgd_lock, flags);
-
-       memcpy((pgd_t *)pgd + USER_PTRS_PER_PGD,
-                       swapper_pg_dir + USER_PTRS_PER_PGD,
-                       (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t));
-
-       if (HAVE_SHARED_KERNEL_PMD)
-               return;
-
+       if (HAVE_SHARED_KERNEL_PMD) {
+               memcpy((pgd_t *)pgd + USER_PTRS_PER_PGD,
+                      swapper_pg_dir + USER_PTRS_PER_PGD,
+                      (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t));
+               return;
+       }
+
+       memset(pgd, 0, PTRS_PER_PGD*sizeof(pgd_t));
+
+       spin_lock_irqsave(&pgd_lock, flags);
        pgd_list_add(pgd);
        spin_unlock_irqrestore(&pgd_lock, flags);
-       memset(pgd, 0, USER_PTRS_PER_PGD*sizeof(pgd_t));
 }
 
 void pgd_dtor(void *pgd, kmem_cache_t *cache, unsigned long unused)
 {
        unsigned long flags; /* can be called from interrupt context */
-
-       BUG_ON(test_bit(PG_pinned, &virt_to_page(pgd)->flags));
 
        if (HAVE_SHARED_KERNEL_PMD)
                return;
@@ -311,6 +309,8 @@
        spin_lock_irqsave(&pgd_lock, flags);
        pgd_list_del(pgd);
        spin_unlock_irqrestore(&pgd_lock, flags);
+
+       pgd_test_and_unpin(pgd);
 }
 
 pgd_t *pgd_alloc(struct mm_struct *mm)
@@ -318,7 +318,7 @@
        int i = 0;
        pgd_t *pgd = kmem_cache_alloc(pgd_cache, GFP_KERNEL);
 
-       BUG_ON(test_bit(PG_pinned, &virt_to_page(pgd)->flags));
+       pgd_test_and_unpin(pgd);
 
        if (PTRS_PER_PMD == 1 || !pgd)
                return pgd;
@@ -345,7 +345,11 @@
                pmd_t *pmd = kmem_cache_alloc(pmd_cache, GFP_KERNEL);
                if (!pmd)
                        goto out_oom;
+               suspend_disable();
+               if (test_bit(PG_pinned, &virt_to_page(pgd)->flags))
+                       make_lowmem_page_readonly(pmd);
                set_pgd(&pgd[i], __pgd(1 + __pa(pmd)));
+               suspend_enable();
        }
        return pgd;
 
@@ -360,23 +364,28 @@
 {
        int i;
 
-       if (test_bit(PG_pinned, &virt_to_page(pgd)->flags))
-               __pgd_unpin(pgd);
+       suspend_disable();
+       pgd_test_and_unpin(pgd);
 
        /* in the PAE case user pgd entries are overwritten before usage */
        if (PTRS_PER_PMD > 1) {
                for (i = 0; i < USER_PTRS_PER_PGD; ++i) {
                        pmd_t *pmd = (void *)__va(pgd_val(pgd[i])-1);
+                       set_pgd(&pgd[i], __pgd(0));
                        make_lowmem_page_writable(pmd);
                        kmem_cache_free(pmd_cache, pmd);
                }
                if (!HAVE_SHARED_KERNEL_PMD) {
                        pmd_t *pmd = (void 
*)__va(pgd_val(pgd[USER_PTRS_PER_PGD])-1);
+                       set_pgd(&pgd[USER_PTRS_PER_PGD], __pgd(0));
                        make_lowmem_page_writable(pmd);
                        memset(pmd, 0, PTRS_PER_PMD*sizeof(pmd_t));
                        kmem_cache_free(pmd_cache, pmd);
                }
        }
+
+       suspend_enable();
+
        /* in the non-PAE case, free_pgtables() clears user pgd entries */
        kmem_cache_free(pgd_cache, pgd);
 }
@@ -501,6 +510,9 @@
 
 static void __pgd_pin(pgd_t *pgd)
 {
+       /* PAE PGDs with no kernel PMD cannot be pinned. Bail right now. */
+       if ((PTRS_PER_PMD > 1) && pgd_none(pgd[USER_PTRS_PER_PGD]))
+               return;
        pgd_walk(pgd, PAGE_KERNEL_RO);
        xen_pgd_pin(__pa(pgd));
        set_bit(PG_pinned, &virt_to_page(pgd)->flags);
@@ -511,6 +523,14 @@
        xen_pgd_unpin(__pa(pgd));
        pgd_walk(pgd, PAGE_KERNEL);
        clear_bit(PG_pinned, &virt_to_page(pgd)->flags);
+}
+
+static void pgd_test_and_unpin(pgd_t *pgd)
+{
+       suspend_disable();
+       if (test_bit(PG_pinned, &virt_to_page(pgd)->flags))
+               __pgd_unpin(pgd);
+       suspend_enable();
 }
 
 void mm_pin(struct mm_struct *mm)
diff -r d1e1d6493d1d -r 78b5e590be34 
linux-2.6-xen-sparse/arch/xen/x86_64/Kconfig
--- a/linux-2.6-xen-sparse/arch/xen/x86_64/Kconfig      Thu Nov 24 19:56:38 2005
+++ b/linux-2.6-xen-sparse/arch/xen/x86_64/Kconfig      Thu Nov 24 19:57:01 2005
@@ -224,21 +224,21 @@
 
          If you don't know what to do here, say N.
 
-config PREEMPT
-       bool "Preemptible Kernel"
-       ---help---
-         This option reduces the latency of the kernel when reacting to
-         real-time or interactive events by allowing a low priority process to
-         be preempted even if it is in kernel mode executing a system call.
-         This allows applications to run more reliably even when the system is
-         under load. On contrary it may also break your drivers and add
-         priority inheritance problems to your system. Don't select it if
-         you rely on a stable system or have slightly obscure hardware.
-         It's also not very well tested on x86-64 currently.
-         You have been warned.
-
-         Say Y here if you are feeling brave and building a kernel for a
-         desktop, embedded or real-time system.  Say N if you are unsure.
+#config PREEMPT
+#      bool "Preemptible Kernel"
+#      ---help---
+#        This option reduces the latency of the kernel when reacting to
+#        real-time or interactive events by allowing a low priority process to
+#        be preempted even if it is in kernel mode executing a system call.
+#        This allows applications to run more reliably even when the system is
+#        under load. On contrary it may also break your drivers and add
+#        priority inheritance problems to your system. Don't select it if
+#        you rely on a stable system or have slightly obscure hardware.
+#        It's also not very well tested on x86-64 currently.
+#        You have been warned.
+#
+#        Say Y here if you are feeling brave and building a kernel for a
+#        desktop, embedded or real-time system.  Say N if you are unsure.
 
 config SCHED_SMT
        bool "SMT (Hyperthreading) scheduler support"
diff -r d1e1d6493d1d -r 78b5e590be34 xen/common/grant_table.c
--- a/xen/common/grant_table.c  Thu Nov 24 19:56:38 2005
+++ b/xen/common/grant_table.c  Thu Nov 24 19:57:01 2005
@@ -726,10 +726,11 @@
              unlikely(e->tot_pages >= e->max_pages) ||
              unlikely(!gnttab_prepare_for_transfer(e, d, gop.ref)) )
         {
-            DPRINTK("gnttab_transfer: Transferee has no reservation headroom "
-                    "(%d,%d) or provided a bad grant ref (%08x) or "
-                    "is dying (%lx)\n",
-                    e->tot_pages, e->max_pages, gop.ref, e->domain_flags);
+            if ( !test_bit(_DOMF_dying, &e->domain_flags) )
+                DPRINTK("gnttab_transfer: Transferee has no reservation "
+                        "headroom (%d,%d) or provided a bad grant ref (%08x) "
+                        "or is dying (%lx)\n",
+                        e->tot_pages, e->max_pages, gop.ref, e->domain_flags);
             spin_unlock(&e->page_alloc_lock);
             put_domain(e);
             (void)__put_user(GNTST_general_error, &uop[i].status);
diff -r d1e1d6493d1d -r 78b5e590be34 xen/include/asm-x86/flushtlb.h
--- a/xen/include/asm-x86/flushtlb.h    Thu Nov 24 19:56:38 2005
+++ b/xen/include/asm-x86/flushtlb.h    Thu Nov 24 19:57:01 2005
@@ -97,7 +97,7 @@
 extern void flush_tlb_all_pge(void);
 extern void __flush_tlb_mask(cpumask_t mask, unsigned long va);
 #define flush_tlb_mask(mask)       __flush_tlb_mask(mask,FLUSHVA_ALL)
-#define flush_tlb_one_mask(mask,v) __flush_tlb_mask(mask,v)
+#define flush_tlb_one_mask(mask,v) __flush_tlb_mask(mask,(unsigned long)(v))
 #endif
 
 #endif /* __FLUSHTLB_H__ */

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

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