rpms/kernel/devel linux-2.6-crash-driver.patch, NONE, 1.1 linux-2.6-devmem.patch, NONE, 1.1 linux-2.6-sleepon.patch, NONE, 1.1 linux-2.6-vm-oomkiller-debugging.patch, NONE, 1.1 linux-2.6-x86-tune-p4.patch, NONE, 1.1 kernel-2.6.spec, 1.1608, 1.1609 linux-2.6.0-sleepon.patch, 1.14, NONE linux-2.6.10-x86-tune-p4.patch, 1.4, NONE linux-2.6.11-devmem.patch, 1.6, NONE linux-2.6.3-crash-driver.patch, 1.6, NONE linux-2.6.9-vm-oomkiller-debugging.patch, 1.4, NONE
fedora-cvs-commits at redhat.com
fedora-cvs-commits at redhat.com
Sat Oct 15 01:13:26 UTC 2005
- Previous message (by thread): rpms/kernel/devel linux-2.6-crash-xen.patch, NONE, 1.1 linux-2.6-devmem-xen.patch, NONE, 1.1 linux-2.6-xen-additional.patch, NONE, 1.1 linux-2.6-xen-compile.patch, NONE, 1.1 linux-2.6-xen.patch, NONE, 1.1 kernel-2.6.spec, 1.1607, 1.1608 linux-2.6.10-crash-xen.patch, 1.1, NONE linux-2.6.12-xen-additional.patch, 1.3, NONE linux-2.6.12-xen.patch, 1.1, NONE linux-2.6.8-devmem-xen.patch, 1.2, NONE linux-2.6.9-xen-compile.patch, 1.52, NONE
- Next message (by thread): rpms/kernel/devel linux-2.6-scsi-advansys-enabler.patch, NONE, 1.1 linux-2.6-scsi-advansys-pcitable.patch, NONE, 1.1 linux-2.6-scsi-megaraid-legacy.patch, NONE, 1.1 kernel-2.6.spec, 1.1609, 1.1610 linux-2.6.12-scsi-advansys-pcitable.patch, 1.3, NONE linux-2.6.9-scsi-advansys-enabler.patch, 1.2, NONE linux-2.6.9-scsi-megaraid-legacy.patch, 1.4, NONE
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: davej
Update of /cvs/dist/rpms/kernel/devel
In directory cvs.devel.redhat.com:/tmp/cvs-serv5520
Modified Files:
kernel-2.6.spec
Added Files:
linux-2.6-crash-driver.patch linux-2.6-devmem.patch
linux-2.6-sleepon.patch linux-2.6-vm-oomkiller-debugging.patch
linux-2.6-x86-tune-p4.patch
Removed Files:
linux-2.6.0-sleepon.patch linux-2.6.10-x86-tune-p4.patch
linux-2.6.11-devmem.patch linux-2.6.3-crash-driver.patch
linux-2.6.9-vm-oomkiller-debugging.patch
Log Message:
more renaming.
linux-2.6-crash-driver.patch:
arch/i386/mm/init.c | 2
arch/ia64/kernel/ia64_ksyms.c | 3
arch/x86_64/mm/init.c | 3
drivers/char/Kconfig | 2
drivers/char/Makefile | 1
drivers/char/crash.c | 129 ++++++++++++++++++++++++++++++++++++++++++
include/asm-i386/crash.h | 75 ++++++++++++++++++++++++
include/asm-ia64/crash.h | 90 +++++++++++++++++++++++++++++
include/asm-x86_64/crash.h | 75 ++++++++++++++++++++++++
9 files changed, 380 insertions(+)
--- NEW FILE linux-2.6-crash-driver.patch ---
diff -urNp --exclude-from=/home/davej/.exclude linux-1050/arch/i386/mm/init.c linux-1060/arch/i386/mm/init.c
--- linux-1050/arch/i386/mm/init.c
+++ linux-1060/arch/i386/mm/init.c
@@ -248,6 +248,8 @@ int devmem_is_allowed(unsigned long page
return 0;
}
+EXPORT_SYMBOL_GPL(page_is_ram);
+
#ifdef CONFIG_HIGHMEM
pte_t *kmap_pte;
pgprot_t kmap_prot;
diff -urNp --exclude-from=/home/davej/.exclude linux-1050/arch/ia64/kernel/ia64_ksyms.c linux-1060/arch/ia64/kernel/ia64_ksyms.c
--- linux-1050/arch/ia64/kernel/ia64_ksyms.c
+++ linux-1060/arch/ia64/kernel/ia64_ksyms.c
@@ -106,6 +106,9 @@ EXPORT_SYMBOL(ia64_save_scratch_fpregs);
#include <asm/unwind.h>
EXPORT_SYMBOL(unw_init_running);
+#include <linux/efi.h>
+EXPORT_SYMBOL_GPL(efi_mem_type);
+
#ifdef ASM_SUPPORTED
# ifdef CONFIG_SMP
# if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 3)
diff -urNp --exclude-from=/home/davej/.exclude linux-1050/arch/x86_64/mm/init.c linux-1060/arch/x86_64/mm/init.c
--- linux-1050/arch/x86_64/mm/init.c
+++ linux-1060/arch/x86_64/mm/init.c
@@ -7,6 +7,7 @@
*/
#include <linux/config.h>
+#include <linux/module.h>
#include <linux/signal.h>
#include <linux/sched.h>
#include <linux/kernel.h>
@@ -417,6 +418,8 @@ int devmem_is_allowed(unsigned long page
}
+EXPORT_SYMBOL_GPL(page_is_ram);
+
static struct kcore_list kcore_mem, kcore_vmalloc, kcore_kernel, kcore_modules,
kcore_vsyscall;
diff -urNp --exclude-from=/home/davej/.exclude linux-1050/drivers/char/crash.c linux-1060/drivers/char/crash.c
--- linux-1050/drivers/char/crash.c
+++ linux-1060/drivers/char/crash.c
@@ -0,0 +1,129 @@
+/*
+ * linux/drivers/char/crash.c
+ *
+ * Copyright (C) 2004 Dave Anderson <anderson at redhat.com>
+ * Copyright (C) 2004 Red Hat, Inc.
+ */
+
+/******************************************************************************
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *****************************************************************************/
+
+#include <linux/module.h>
+#include <linux/config.h>
+#include <linux/types.h>
+#include <linux/miscdevice.h>
+#include <linux/init.h>
+#include <asm/io.h>
+#include <asm/uaccess.h>
+#include <asm/types.h>
+#include <asm/crash.h>
+
+#define CRASH_VERSION "1.0"
+
+/*
+ * These are the file operation functions that allow crash utility
+ * access to physical memory.
+ */
+
+static loff_t
+crash_llseek(struct file * file, loff_t offset, int orig)
+{
+ switch (orig) {
+ case 0:
+ file->f_pos = offset;
+ return file->f_pos;
+ case 1:
+ file->f_pos += offset;
+ return file->f_pos;
+ default:
+ return -EINVAL;
+ }
+}
+
+/*
+ * Determine the page address for an address offset value,
+ * get a virtual address for it, and copy it out.
+ * Accesses must fit within a page.
+ */
+static ssize_t
+crash_read(struct file *file, char *buf, size_t count, loff_t *poff)
+{
+ void *vaddr;
+ struct page *page;
+ u64 offset;
+ ssize_t read;
+
+ offset = *poff;
+ if (offset >> PAGE_SHIFT != (offset+count-1) >> PAGE_SHIFT)
+ return -EINVAL;
+
+ vaddr = map_virtual(offset, &page);
+ if (!vaddr)
+ return -EFAULT;
+
+ if (copy_to_user(buf, vaddr, count)) {
+ unmap_virtual(page);
+ return -EFAULT;
+ }
+ unmap_virtual(page);
+
+ read = count;
+ *poff += read;
+ return read;
+}
+
+static struct file_operations crash_fops = {
+ .owner = THIS_MODULE,
+ .llseek = crash_llseek,
+ .read = crash_read,
+};
+
+static struct miscdevice crash_dev = {
+ MISC_DYNAMIC_MINOR,
+ "crash",
+ &crash_fops
+};
+
+static int __init
+crash_init(void)
+{
+ int ret;
+
+ ret = misc_register(&crash_dev);
+ if (ret) {
+ printk(KERN_ERR
+ "crash memory driver: cannot misc_register (MISC_DYNAMIC_MINOR)\n");
+ goto out;
+ }
+
+ ret = 0;
+ printk(KERN_INFO "crash memory driver: version %s\n", CRASH_VERSION);
+out:
+ return ret;
+}
+
+static void __exit
+crash_cleanup_module(void)
+{
+ misc_deregister(&crash_dev);
+}
+
+module_init(crash_init);
+module_exit(crash_cleanup_module);
+
+MODULE_LICENSE("GPL");
diff -urNp --exclude-from=/home/davej/.exclude linux-1050/drivers/char/Kconfig linux-1060/drivers/char/Kconfig
--- linux-1050/drivers/char/Kconfig
+++ linux-1060/drivers/char/Kconfig
@@ -441,6 +441,8 @@ config LEGACY_PTYS
security. This option enables these legacy devices; on most
systems, it is safe to say N.
+config CRASH
+ tristate "Crash Utility memory driver"
config LEGACY_PTY_COUNT
int "Maximum number of legacy PTY in use"
diff -urNp --exclude-from=/home/davej/.exclude linux-1050/drivers/char/Makefile linux-1060/drivers/char/Makefile
--- linux-1050/drivers/char/Makefile
+++ linux-1060/drivers/char/Makefile
@@ -88,6 +88,7 @@ obj-$(CONFIG_PCMCIA) += pcmcia/
obj-$(CONFIG_IPMI_HANDLER) += ipmi/
obj-$(CONFIG_HANGCHECK_TIMER) += hangcheck-timer.o
+obj-$(CONFIG_CRASH) += crash.o
obj-$(CONFIG_TCG_TPM) += tpm/
# Files generated that shall be removed upon make clean
clean-files := consolemap_deftbl.c defkeymap.c qtronixmap.c
diff -urNp --exclude-from=/home/davej/.exclude linux-1050/include/asm-i386/crash.h linux-1060/include/asm-i386/crash.h
--- linux-1050/include/asm-i386/crash.h
+++ linux-1060/include/asm-i386/crash.h
@@ -0,0 +1,75 @@
+#ifndef _ASM_I386_CRASH_H
+#define _ASM_I386_CRASH_H
+
+/*
+ * linux/include/asm-i386/crash.h
+ *
+ * Copyright (c) 2004 Red Hat, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#ifdef __KERNEL__
+
+#include <linux/mm.h>
+#include <linux/highmem.h>
+#include <asm/mmzone.h>
+
+extern int page_is_ram(unsigned long);
+
+static inline void *
+map_virtual(u64 offset, struct page **pp)
+{
+ struct page *page;
+ unsigned long pfn;
+ void *vaddr;
+
+ pfn = (unsigned long)(offset >> PAGE_SHIFT);
+
+ if (!page_is_ram(pfn)) {
+ printk(KERN_INFO
+ "crash memory driver: !page_is_ram(pfn: %lx)\n", pfn);
+ return NULL;
+ }
+
+ if (!pfn_valid(pfn)) {
+ printk(KERN_INFO
+ "crash memory driver: invalid pfn: %lx )\n", pfn);
+ return NULL;
+ }
+
+ page = pfn_to_page(pfn);
+
+ vaddr = kmap(page);
+ if (!vaddr) {
+ printk(KERN_INFO
+ "crash memory driver: pfn: %lx kmap(page: %lx) failed\n",
+ pfn, (unsigned long)page);
+ return NULL;
+ }
+
+ *pp = page;
+ return (vaddr + (offset & (PAGE_SIZE-1)));
+}
+
+static inline void unmap_virtual(struct page *page)
+{
+ kunmap(page);
+}
+
+#endif /* __KERNEL__ */
+
+#endif /* _ASM_I386_CRASH_H */
diff -urNp --exclude-from=/home/davej/.exclude linux-1050/include/asm-ia64/crash.h linux-1060/include/asm-ia64/crash.h
--- linux-1050/include/asm-ia64/crash.h
+++ linux-1060/include/asm-ia64/crash.h
@@ -0,0 +1,90 @@
+#ifndef _ASM_IA64_CRASH_H
+#define _ASM_IA64_CRASH_H
+
+/*
+ * linux/include/asm-ia64/crash.h
+ *
+ * Copyright (c) 2004 Red Hat, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#ifdef __KERNEL__
+
+#include <linux/efi.h>
+#include <linux/mm.h>
+#include <asm/mmzone.h>
+
+static inline void *
+map_virtual(u64 offset, struct page **pp)
+{
+ struct page *page;
+ unsigned long pfn;
+ u32 type;
+
+ if (REGION_NUMBER(offset) == 5) {
+ char byte;
+
+ if (__get_user(byte, (char *)offset) == 0)
+ return (void *)offset;
+ else
+ return NULL;
+ }
+
+ switch (type = efi_mem_type(offset))
+ {
+ case EFI_LOADER_CODE:
+ case EFI_LOADER_DATA:
+ case EFI_BOOT_SERVICES_CODE:
+ case EFI_BOOT_SERVICES_DATA:
+ case EFI_CONVENTIONAL_MEMORY:
+ break;
+
+ default:
+ printk(KERN_INFO
+ "crash memory driver: invalid memory type for %lx: %d\n",
+ offset, type);
+ return NULL;
+ }
+
+ pfn = offset >> PAGE_SHIFT;
+
+ if (!pfn_valid(pfn)) {
+ printk(KERN_INFO
+ "crash memory driver: invalid pfn: %lx )\n", pfn);
+ return NULL;
+ }
+
+ page = pfn_to_page(pfn);
+
+ if (!page->virtual) {
+ printk(KERN_INFO
+ "crash memory driver: offset: %lx page: %lx page->virtual: NULL\n",
+ offset, (unsigned long)page);
+ return NULL;
+ }
+
+ return (page->virtual + (offset & (PAGE_SIZE-1)));
+}
+
+static inline void unmap_virtual(struct page *page)
+{
+ return;
+}
+
+#endif /* __KERNEL__ */
+
+#endif /* _ASM_IA64_CRASH_H */
diff -urNp --exclude-from=/home/davej/.exclude linux-1050/include/asm-x86_64/crash.h linux-1060/include/asm-x86_64/crash.h
--- linux-1050/include/asm-x86_64/crash.h
+++ linux-1060/include/asm-x86_64/crash.h
@@ -0,0 +1,75 @@
+#ifndef _ASM_X86_64_CRASH_H
+#define _ASM_X86_64_CRASH_H
+
+/*
+ * linux/include/asm-x86_64/crash.h
+ *
+ * Copyright (c) 2004 Red Hat, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#ifdef __KERNEL__
+
+#include <linux/mm.h>
+#include <linux/highmem.h>
+#include <asm/mmzone.h>
+
+extern int page_is_ram(unsigned long);
+
+static inline void *
+map_virtual(u64 offset, struct page **pp)
+{
+ struct page *page;
+ unsigned long pfn;
+ void *vaddr;
+
+ pfn = (unsigned long)(offset >> PAGE_SHIFT);
+
+ if (!page_is_ram(pfn)) {
+ printk(KERN_INFO
+ "crash memory driver: !page_is_ram(pfn: %lx)\n", pfn);
+ return NULL;
+ }
+
+ if (!pfn_valid(pfn)) {
+ printk(KERN_INFO
+ "crash memory driver: invalid pfn: %lx )\n", pfn);
+ return NULL;
+ }
+
+ page = pfn_to_page(pfn);
+
+ vaddr = kmap(page);
+ if (!vaddr) {
+ printk(KERN_INFO
+ "crash memory driver: pfn: %lx kmap(page: %lx) failed\n",
+ pfn, (unsigned long)page);
+ return NULL;
+ }
+
+ *pp = page;
+ return (vaddr + (offset & (PAGE_SIZE-1)));
+}
+
+static inline void unmap_virtual(struct page *page)
+{
+ kunmap(page);
+}
+
+#endif /* __KERNEL__ */
+
+#endif /* _ASM_X86_64_CRASH_H */
linux-2.6-devmem.patch:
linux-1050/arch/i386/mm/init.c | 19 ++++
linux-1050/arch/ia64/mm/init.c | 7 +
linux-1050/arch/ppc64/mm/init.c | 12 ++
linux-1050/arch/s390/mm/init.c | 5 +
linux-1050/arch/x86_64/mm/init.c | 20 ++++
linux-1050/drivers/char/mem.c | 146 ++++----------------------------
linux-1050/fs/proc/kcore.c | 2
linux-1050/include/asm-alpha/page.h | 1
linux-1050/include/asm-arm/page.h | 2
linux-1050/include/asm-arm26/page.h | 2
linux-1050/include/asm-cris/page.h | 2
linux-1050/include/asm-h8300/page.h | 2
linux-1050/include/asm-i386/page.h | 4
linux-1050/include/asm-ia64/page.h | 2
linux-1050/include/asm-m68k/page.h | 2
linux-1050/include/asm-m68knommu/page.h | 2
linux-1050/include/asm-mips/page.h | 2
linux-1050/include/asm-parisc/page.h | 2
linux-1050/include/asm-ppc/page.h | 2
linux-1050/include/asm-ppc64/page.h | 2
linux-1050/include/asm-s390/page.h | 2
linux-1050/include/asm-sh/page.h | 2
linux-1050/include/asm-sh64/page.h | 2
linux-1050/include/asm-sparc/page.h | 2
linux-1050/include/asm-sparc64/page.h | 2
linux-1050/include/asm-um/page.h | 1
linux-1050/include/asm-v850/page.h | 2
linux-1050/include/asm-x86_64/page.h | 4
linux-2.6.13/arch/x86_64/mm/init.c | 22 ++++
29 files changed, 152 insertions(+), 125 deletions(-)
--- NEW FILE linux-2.6-devmem.patch ---
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/arch/i386/mm/init.c linux-1050/arch/i386/mm/init.c
--- linux-1020/arch/i386/mm/init.c
+++ linux-1050/arch/i386/mm/init.c
@@ -229,6 +229,25 @@ static inline int page_is_ram(unsigned l
return 0;
}
+/*
+ * devmem_is_allowed() checks to see if /dev/mem access to a certain address is
+ * valid. The argument is a physical page number.
+ *
+ *
+ * On x86, access has to be given to the first megabyte of ram because that area
+ * contains bios code and data regions used by X and dosemu and similar apps.
+ * Access has to be given to non-kernel-ram areas as well, these contain the PCI
+ * mmio resources as well as potential bios/acpi data regions.
+ */
+int devmem_is_allowed(unsigned long pagenr)
+{
+ if (pagenr <= 256)
+ return 1;
+ if (!page_is_ram(pagenr))
+ return 1;
+ return 0;
+}
+
#ifdef CONFIG_HIGHMEM
pte_t *kmap_pte;
pgprot_t kmap_prot;
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/arch/ia64/mm/init.c linux-1050/arch/ia64/mm/init.c
--- linux-1020/arch/ia64/mm/init.c
+++ linux-1050/arch/ia64/mm/init.c
@@ -230,6 +230,13 @@ free_initrd_mem (unsigned long start, un
}
}
+int page_is_ram(unsigned long pagenr)
+{
+ //FIXME: implement w/efi walk
+ printk("page is ram is called!!!!!\n");
+ return 1;
+}
+
/*
* This installs a clean page in the kernel's page table.
*/
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/arch/ppc64/mm/init.c linux-1050/arch/ppc64/mm/init.c
--- linux-1020/arch/ppc64/mm/init.c
+++ linux-1050/arch/ppc64/mm/init.c
@@ -722,6 +722,18 @@ void __init mem_init(void)
totalram_pages += free_all_bootmem();
#endif
+#ifdef CONFIG_PPC_PSERIES
+ /* Mark the RTAS pages as PG_reserved so userspace can mmap them */
+ if (rtas_rmo_buf) {
+ unsigned long pfn, start_pfn, end_pfn;
+
+ start_pfn = rtas_rmo_buf >> PAGE_SHIFT;
+ end_pfn = (rtas_rmo_buf + RTAS_RMOBUF_MAX) >> PAGE_SHIFT;
+ for (pfn = start_pfn; pfn < end_pfn; pfn++)
+ SetPageReserved(pfn_to_page(pfn));
+ }
+#endif
+
for_each_pgdat(pgdat) {
for (i = 0; i < pgdat->node_spanned_pages; i++) {
page = pgdat->node_mem_map + i;
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/arch/s390/mm/init.c linux-1050/arch/s390/mm/init.c
--- linux-1020/arch/s390/mm/init.c
+++ linux-1050/arch/s390/mm/init.c
@@ -253,6 +253,11 @@ void __init paging_init(void)
}
#endif /* CONFIG_ARCH_S390X */
+int page_is_ram (unsigned long pagenr)
+{
+ return pagenr < max_mapnr;
+}
+
void __init mem_init(void)
{
unsigned long codesize, reservedpages, datasize, initsize;
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/arch/x86_64/mm/init.c linux-1050/arch/x86_64/mm/init.c
--- linux-1020/arch/x86_64/mm/init.c
+++ linux-1050/arch/x86_64/mm/init.c
@@ -397,6 +397,26 @@ static inline int page_is_ram (unsigned
extern int swiotlb_force;
+/*
+ * devmem_is_allowed() checks to see if /dev/mem access to a certain address is
+ * valid. The argument is a physical page number.
+ *
+ *
+ * On x86-64, access has to be given to the first megabyte of ram because that area
+ * contains bios code and data regions used by X and dosemu and similar apps.
+ * Access has to be given to non-kernel-ram areas as well, these contain the PCI
+ * mmio resources as well as potential bios/acpi data regions.
+ */
+int devmem_is_allowed(unsigned long pagenr)
+{
+ if (pagenr <= 256)
+ return 1;
+ if (!page_is_ram(pagenr))
+ return 1;
+ return 0;
+}
+
+
static struct kcore_list kcore_mem, kcore_vmalloc, kcore_kernel, kcore_modules,
kcore_vsyscall;
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/drivers/char/mem.c linux-1050/drivers/char/mem.c
--- linux-1020/drivers/char/mem.c
+++ linux-1050/drivers/char/mem.c
@@ -111,6 +111,22 @@ static inline int valid_phys_addr_range(
}
#endif
+static inline int range_is_allowed(unsigned long from, unsigned long to)
+{
+ unsigned long cursor;
+
+ cursor = from >> PAGE_SHIFT;
+ while ((cursor << PAGE_SHIFT) < to) {
+ if (!devmem_is_allowed(cursor)) {
+ printk ("Program %s tried to read /dev/mem between %lx->%lx.\n",
+ current->comm, from, to);
+ return 0;
+ }
+ cursor++;
+ }
+ return 1;
+}
+
/*
* This funcion reads the *physical* memory. The f_pos points directly to the
* memory location.
@@ -160,6 +176,8 @@ static ssize_t read_mem(struct file * fi
*/
ptr = xlate_dev_mem_ptr(p);
+ if (!range_is_allowed(p, p+count))
+ return -EPERM;
if (copy_to_user(buf, ptr, sz))
return -EFAULT;
buf += sz;
@@ -217,6 +235,8 @@ static ssize_t write_mem(struct file * f
*/
ptr = xlate_dev_mem_ptr(p);
+ if (!range_is_allowed(ptr, ptr+sz))
+ return -EPERM;
copied = copy_from_user(ptr, buf, sz);
if (copied) {
ssize_t ret;
@@ -270,6 +290,8 @@ static ssize_t read_kmem(struct file *fi
ssize_t read, virtr, sz;
char * kbuf; /* k-addr because vread() takes vmlist_lock rwlock */
+ return -EPERM;
+
read = 0;
virtr = 0;
if (p < (unsigned long) high_memory) {
@@ -345,128 +367,6 @@ static ssize_t read_kmem(struct file *fi
}
-static inline ssize_t
-do_write_kmem(void *p, unsigned long realp, const char __user * buf,
- size_t count, loff_t *ppos)
-{
- ssize_t written, sz;
- unsigned long copied;
-
- written = 0;
-#ifdef __ARCH_HAS_NO_PAGE_ZERO_MAPPED
- /* we don't have page 0 mapped on sparc and m68k.. */
- if (realp < PAGE_SIZE) {
- unsigned long sz = PAGE_SIZE - realp;
- if (sz > count)
- sz = count;
- /* Hmm. Do something? */
- buf += sz;
- p += sz;
- realp += sz;
- count -= sz;
- written += sz;
- }
-#endif
-
- while (count > 0) {
- char *ptr;
- /*
- * Handle first page in case it's not aligned
- */
- if (-realp & (PAGE_SIZE - 1))
- sz = -realp & (PAGE_SIZE - 1);
- else
- sz = PAGE_SIZE;
-
- sz = min_t(unsigned long, sz, count);
-
- /*
- * On ia64 if a page has been mapped somewhere as
- * uncached, then it must also be accessed uncached
- * by the kernel or data corruption may occur
- */
- ptr = xlate_dev_kmem_ptr(p);
-
- copied = copy_from_user(ptr, buf, sz);
- if (copied) {
- ssize_t ret;
-
- ret = written + (sz - copied);
- if (ret)
- return ret;
- return -EFAULT;
- }
- buf += sz;
- p += sz;
- realp += sz;
- count -= sz;
- written += sz;
- }
-
- *ppos += written;
- return written;
-}
-
-
-/*
- * This function writes to the *virtual* memory as seen by the kernel.
- */
-static ssize_t write_kmem(struct file * file, const char __user * buf,
- size_t count, loff_t *ppos)
-{
- unsigned long p = *ppos;
- ssize_t wrote = 0;
- ssize_t virtr = 0;
- ssize_t written;
- char * kbuf; /* k-addr because vwrite() takes vmlist_lock rwlock */
-
- if (p < (unsigned long) high_memory) {
-
- wrote = count;
- if (count > (unsigned long) high_memory - p)
- wrote = (unsigned long) high_memory - p;
-
- written = do_write_kmem((void*)p, p, buf, wrote, ppos);
- if (written != wrote)
- return written;
- wrote = written;
- p += wrote;
- buf += wrote;
- count -= wrote;
- }
-
- if (count > 0) {
- kbuf = (char *)__get_free_page(GFP_KERNEL);
- if (!kbuf)
- return wrote ? wrote : -ENOMEM;
- while (count > 0) {
- int len = count;
-
- if (len > PAGE_SIZE)
- len = PAGE_SIZE;
- if (len) {
- written = copy_from_user(kbuf, buf, len);
- if (written) {
- ssize_t ret;
-
- free_page((unsigned long)kbuf);
- ret = wrote + virtr + (len - written);
- return ret ? ret : -EFAULT;
- }
- }
- len = vwrite(kbuf, (char *)p, len);
- count -= len;
- buf += len;
- virtr += len;
- p += len;
- }
- free_page((unsigned long)kbuf);
- }
-
- *ppos = p;
- return virtr + wrote;
-}
-
#if (defined(CONFIG_ISA) || !defined(__mc68000__)) && (!defined(CONFIG_PPC_ISERIES) || defined(CONFIG_PCI))
static ssize_t read_port(struct file * file, char __user * buf,
size_t count, loff_t *ppos)
@@ -717,7 +617,6 @@ static struct file_operations mem_fops =
static struct file_operations kmem_fops = {
.llseek = memory_lseek,
.read = read_kmem,
- .write = write_kmem,
.mmap = mmap_kmem,
.open = open_kmem,
};
@@ -823,7 +722,6 @@ static const struct {
struct file_operations *fops;
} devlist[] = { /* list of minor devices */
{1, "mem", S_IRUSR | S_IWUSR | S_IRGRP, &mem_fops},
- {2, "kmem", S_IRUSR | S_IWUSR | S_IRGRP, &kmem_fops},
{3, "null", S_IRUGO | S_IWUGO, &null_fops},
#if defined(CONFIG_ISA) || !defined(__mc68000__)
{4, "port", S_IRUSR | S_IWUSR | S_IRGRP, &port_fops},
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/fs/proc/kcore.c linux-1050/fs/proc/kcore.c
--- linux-1020/fs/proc/kcore.c
+++ linux-1050/fs/proc/kcore.c
@@ -25,7 +25,7 @@
static int open_kcore(struct inode * inode, struct file * filp)
{
- return capable(CAP_SYS_RAWIO) ? 0 : -EPERM;
+ return -EPERM;
}
static ssize_t read_kcore(struct file *, char __user *, size_t, loff_t *);
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/include/asm-alpha/page.h linux-1050/include/asm-alpha/page.h
--- linux-1020/include/asm-alpha/page.h
+++ linux-1050/include/asm-alpha/page.h
@@ -110,6 +110,7 @@ extern __inline__ int get_order(unsigned
#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \
VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
+#define devmem_is_allowed(x) 1
#endif /* __KERNEL__ */
#endif /* _ALPHA_PAGE_H */
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/include/asm-arm/page.h linux-1050/include/asm-arm/page.h
--- linux-1020/include/asm-arm/page.h
+++ linux-1050/include/asm-arm/page.h
@@ -192,6 +192,8 @@ static inline int get_order(unsigned lon
#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \
VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
+#define devmem_is_allowed(x) 1
+
#endif /* __KERNEL__ */
#endif
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/include/asm-arm26/page.h linux-1050/include/asm-arm26/page.h
--- linux-1020/include/asm-arm26/page.h
+++ linux-1050/include/asm-arm26/page.h
@@ -110,6 +110,8 @@ static inline int get_order(unsigned lon
#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \
VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
+#define devmem_is_allowed(x) 1
+
#endif /* __KERNEL__ */
#endif
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/include/asm-cris/page.h linux-1050/include/asm-cris/page.h
--- linux-1020/include/asm-cris/page.h
+++ linux-1050/include/asm-cris/page.h
@@ -99,6 +99,8 @@ static inline int get_order(unsigned lon
#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \
VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
+#define devmem_is_allowed(x) 1
+
#endif /* __KERNEL__ */
#endif /* _CRIS_PAGE_H */
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/include/asm-h8300/page.h linux-1050/include/asm-h8300/page.h
--- linux-1020/include/asm-h8300/page.h
+++ linux-1050/include/asm-h8300/page.h
@@ -99,6 +99,8 @@ extern unsigned long memory_end;
#endif /* __ASSEMBLY__ */
+#define devmem_is_allowed(x) 1
+
#endif /* __KERNEL__ */
#endif /* _H8300_PAGE_H */
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/include/asm-i386/page.h linux-1050/include/asm-i386/page.h
--- linux-1020/include/asm-i386/page.h
+++ linux-1050/include/asm-i386/page.h
@@ -119,6 +119,8 @@ static __inline__ int get_order(unsigned
extern int sysctl_legacy_va_layout;
+extern int devmem_is_allowed(unsigned long pagenr);
+
#endif /* __ASSEMBLY__ */
#ifdef __ASSEMBLY__
@@ -148,6 +150,8 @@ extern int sysctl_legacy_va_layout;
((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0 ) | \
VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
+
+
#endif /* __KERNEL__ */
#endif /* _I386_PAGE_H */
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/include/asm-ia64/page.h linux-1050/include/asm-ia64/page.h
--- linux-1020/include/asm-ia64/page.h
+++ linux-1050/include/asm-ia64/page.h
@@ -204,4 +204,6 @@ get_order (unsigned long size)
(((current->personality & READ_IMPLIES_EXEC) != 0) \
? VM_EXEC : 0))
+#define devmem_is_allowed(x) 1
+
#endif /* _ASM_IA64_PAGE_H */
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/include/asm-m68k/page.h linux-1050/include/asm-m68k/page.h
--- linux-1020/include/asm-m68k/page.h
+++ linux-1050/include/asm-m68k/page.h
@@ -190,6 +190,8 @@ static inline void *__va(unsigned long x
#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \
VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
+#define devmem_is_allowed(x) 1
+
#endif /* __KERNEL__ */
#endif /* _M68K_PAGE_H */
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/include/asm-m68knommu/page.h linux-1050/include/asm-m68knommu/page.h
--- linux-1020/include/asm-m68knommu/page.h
+++ linux-1050/include/asm-m68knommu/page.h
@@ -96,6 +96,8 @@ extern unsigned long memory_end;
#endif /* __ASSEMBLY__ */
+#define devmem_is_allowed(x) 1
+
#endif /* __KERNEL__ */
#endif /* _M68KNOMMU_PAGE_H */
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/include/asm-mips/page.h linux-1050/include/asm-mips/page.h
--- linux-1020/include/asm-mips/page.h
+++ linux-1050/include/asm-mips/page.h
@@ -148,4 +148,6 @@ static __inline__ int get_order(unsigned
#define WANT_PAGE_VIRTUAL
#endif
+#define devmem_is_allowed(x) 1
+
#endif /* _ASM_PAGE_H */
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/include/asm-parisc/page.h linux-1050/include/asm-parisc/page.h
--- linux-1020/include/asm-parisc/page.h
+++ linux-1050/include/asm-parisc/page.h
@@ -157,6 +157,8 @@ extern int npmem_ranges;
#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \
VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
+#define devmem_is_allowed(x) 1
+
#endif /* __KERNEL__ */
#endif /* _PARISC_PAGE_H */
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/include/asm-ppc/page.h linux-1050/include/asm-ppc/page.h
--- linux-1020/include/asm-ppc/page.h
+++ linux-1050/include/asm-ppc/page.h
@@ -163,5 +163,7 @@ extern __inline__ int get_order(unsigned
#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \
VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
+#define devmem_is_allowed(x) 1
+
#endif /* __KERNEL__ */
#endif /* _PPC_PAGE_H */
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/include/asm-ppc64/page.h linux-1050/include/asm-ppc64/page.h
--- linux-1020/include/asm-ppc64/page.h
+++ linux-1050/include/asm-ppc64/page.h
@@ -257,5 +257,7 @@ extern u64 ppc64_pft_size; /* Log 2 of
#define VM_STACK_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \
VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
+#define devmem_is_allowed(x) 1
+
#endif /* __KERNEL__ */
#endif /* _PPC64_PAGE_H */
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/include/asm-s390/page.h linux-1050/include/asm-s390/page.h
--- linux-1020/include/asm-s390/page.h
+++ linux-1050/include/asm-s390/page.h
@@ -203,6 +203,8 @@ page_get_storage_key(unsigned long addr)
#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \
VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
+#define devmem_is_allowed(x) 1
+
#endif /* __KERNEL__ */
#endif /* _S390_PAGE_H */
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/include/asm-sh/page.h linux-1050/include/asm-sh/page.h
--- linux-1020/include/asm-sh/page.h
+++ linux-1050/include/asm-sh/page.h
@@ -139,6 +139,8 @@ static __inline__ int get_order(unsigned
#endif
+#define devmem_is_allowed(x) 1
+
#endif /* __KERNEL__ */
#endif /* __ASM_SH_PAGE_H */
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/include/asm-sh64/page.h linux-1050/include/asm-sh64/page.h
--- linux-1020/include/asm-sh64/page.h
+++ linux-1050/include/asm-sh64/page.h
@@ -132,6 +132,8 @@ extern __inline__ int get_order(unsigned
#endif
+#define devmem_is_allowed(x) 1
+
#endif /* __KERNEL__ */
#endif /* __ASM_SH64_PAGE_H */
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/include/asm-sparc/page.h linux-1050/include/asm-sparc/page.h
--- linux-1020/include/asm-sparc/page.h
+++ linux-1050/include/asm-sparc/page.h
@@ -176,6 +176,8 @@ extern unsigned long pfn_base;
#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \
VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
+#define devmem_is_allowed(x) 1
+
#endif /* __KERNEL__ */
#endif /* _SPARC_PAGE_H */
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/include/asm-sparc64/page.h linux-1050/include/asm-sparc64/page.h
--- linux-1020/include/asm-sparc64/page.h
+++ linux-1050/include/asm-sparc64/page.h
@@ -156,6 +156,8 @@ static __inline__ int get_order(unsigned
#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \
VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
+#define devmem_is_allowed(x) 1
+
#endif /* !(__KERNEL__) */
#endif /* !(_SPARC64_PAGE_H) */
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/include/asm-um/page.h linux-1050/include/asm-um/page.h
--- linux-1020/include/asm-um/page.h
+++ linux-1050/include/asm-um/page.h
@@ -123,6 +123,7 @@ static __inline__ int get_order(unsigned
extern struct page *arch_validate(struct page *page, int mask, int order);
#define HAVE_ARCH_VALIDATE
+#define devmem_is_allowed(x) 1
extern void arch_free_page(struct page *page, int order);
#define HAVE_ARCH_FREE_PAGE
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/include/asm-v850/page.h linux-1050/include/asm-v850/page.h
--- linux-1020/include/asm-v850/page.h
+++ linux-1050/include/asm-v850/page.h
@@ -141,6 +141,8 @@ extern __inline__ int get_order (unsigne
#define __va(x) ((void *)__phys_to_virt ((unsigned long)(x)))
+#define devmem_is_allowed(x) 1
+
#endif /* KERNEL */
#endif /* __V850_PAGE_H__ */
diff -urNp --exclude-from=/home/davej/.exclude linux-1020/include/asm-x86_64/page.h linux-1050/include/asm-x86_64/page.h
--- linux-1020/include/asm-x86_64/page.h
+++ linux-1050/include/asm-x86_64/page.h
@@ -138,6 +138,10 @@ extern __inline__ int get_order(unsigned
#define __HAVE_ARCH_GATE_AREA 1
+#ifndef __ASSEMBLY__
+extern int devmem_is_allowed(unsigned long pagenr);
+#endif
+
#endif /* __KERNEL__ */
#endif /* _X86_64_PAGE_H */
--- linux-2.6.13/arch/x86_64/mm/init.c~ 2005-09-13 01:17:03.000000000 -0400
+++ linux-2.6.13/arch/x86_64/mm/init.c 2005-09-13 01:18:03.000000000 -0400
@@ -414,6 +414,28 @@ unsigned long next_ram_page (unsigned lo
EXPORT_SYMBOL_GPL(next_ram_page);
+static inline int page_is_ram (unsigned long pagenr)
+{
+ int i;
+
+ for (i = 0; i < e820.nr_map; i++) {
+ unsigned long addr, end;
+
+ if (e820.map[i].type != E820_RAM) /* not usable memory */
+ continue;
+ /*
+ * !!!FIXME!!! Some BIOSen report areas as RAM that
+ * are not. Notably the 640->1Mb area. We need a sanity
+ * check here.
+ */
+ addr = (e820.map[i].addr+PAGE_SIZE-1) >> PAGE_SHIFT;
+ end = (e820.map[i].addr+e820.map[i].size) >> PAGE_SHIFT;
+ if ((pagenr >= addr) && (pagenr < end))
+ return 1;
+ }
+ return 0;
+}
+
/*
* devmem_is_allowed() checks to see if /dev/mem access to a certain address is
* valid. The argument is a physical page number.
linux-2.6-sleepon.patch:
drivers/block/DAC960.c | 12 +++++++++++-
drivers/net/tokenring/ibmtr.c | 9 ++++++++-
include/linux/wait.h | 6 +++---
kernel/sched.c | 28 +++++++++++++++-------------
net/sunrpc/clnt.c | 9 ++++++++-
5 files changed, 45 insertions(+), 19 deletions(-)
--- NEW FILE linux-2.6-sleepon.patch ---
diff -urNp --exclude-from=/home/davej/.exclude linux-1060/drivers/block/DAC960.c linux-1070/drivers/block/DAC960.c
--- linux-1060/drivers/block/DAC960.c
+++ linux-1070/drivers/block/DAC960.c
@@ -6132,6 +6132,9 @@ static boolean DAC960_V2_ExecuteUserComm
unsigned long flags;
unsigned char Channel, TargetID, LogicalDriveNumber;
unsigned short LogicalDeviceNumber;
+ wait_queue_t __wait;
+
+ init_waitqueue_entry(&__wait, current);
spin_lock_irqsave(&Controller->queue_lock, flags);
while ((Command = DAC960_AllocateCommand(Controller)) == NULL)
@@ -6314,11 +6317,18 @@ static boolean DAC960_V2_ExecuteUserComm
.SegmentByteCount =
CommandMailbox->ControllerInfo.DataTransferSize;
DAC960_ExecuteCommand(Command);
+ add_wait_queue(&Controller->CommandWaitQueue, &__wait);
+ set_current_state(TASK_UNINTERRUPTIBLE);
+
while (Controller->V2.NewControllerInformation->PhysicalScanActive)
{
DAC960_ExecuteCommand(Command);
- sleep_on_timeout(&Controller->CommandWaitQueue, HZ);
+ schedule_timeout(HZ);
+ set_current_state(TASK_UNINTERRUPTIBLE);
}
+ current->state = TASK_RUNNING;
+ remove_wait_queue(&Controller->CommandWaitQueue, &__wait);
+
DAC960_UserCritical("Discovery Completed\n", Controller);
}
}
diff -urNp --exclude-from=/home/davej/.exclude linux-1060/drivers/net/tokenring/ibmtr.c linux-1070/drivers/net/tokenring/ibmtr.c
--- linux-1060/drivers/net/tokenring/ibmtr.c
+++ linux-1070/drivers/net/tokenring/ibmtr.c
@@ -850,6 +850,8 @@ static int tok_init_card(struct net_devi
struct tok_info *ti;
short PIOaddr;
unsigned long i;
+ wait_queue_t __wait;
+ init_waitqueue_entry(&__wait, current);
PIOaddr = dev->base_addr;
ti = (struct tok_info *) dev->priv;
@@ -862,13 +864,18 @@ static int tok_init_card(struct net_devi
current->state=TASK_UNINTERRUPTIBLE;
schedule_timeout(TR_RST_TIME); /* wait 50ms */
+ add_wait_queue(&ti->wait_for_reset, &__wait);
+ set_current_state(TASK_UNINTERRUPTIBLE);
outb(0, PIOaddr + ADAPTRESETREL);
#ifdef ENABLE_PAGING
if (ti->page_mask)
writeb(SRPR_ENABLE_PAGING,ti->mmio+ACA_OFFSET+ACA_RW+SRPR_EVEN);
#endif
writeb(INT_ENABLE, ti->mmio + ACA_OFFSET + ACA_SET + ISRP_EVEN);
- i = sleep_on_timeout(&ti->wait_for_reset, 4 * HZ);
+ #warning pci posting bug
+ i = schedule_timeout(4 * HZ);
+ current->state = TASK_RUNNING;
+ remove_wait_queue(&ti->wait_for_reset, &__wait);
return i? 0 : -EAGAIN;
}
diff -urNp --exclude-from=/home/davej/.exclude linux-1060/include/linux/wait.h linux-1070/include/linux/wait.h
--- linux-1060/include/linux/wait.h
+++ linux-1070/include/linux/wait.h
@@ -364,10 +364,10 @@ static inline void remove_wait_queue_loc
* They are racy. DO NOT use them, use the wait_event* interfaces above.
* We plan to remove these interfaces during 2.7.
*/
-extern void FASTCALL(sleep_on(wait_queue_head_t *q));
-extern long FASTCALL(sleep_on_timeout(wait_queue_head_t *q,
+extern void __deprecated FASTCALL(sleep_on(wait_queue_head_t *q));
+extern long __deprecated FASTCALL(sleep_on_timeout(wait_queue_head_t *q,
signed long timeout));
-extern void FASTCALL(interruptible_sleep_on(wait_queue_head_t *q));
+extern void __deprecated FASTCALL(interruptible_sleep_on(wait_queue_head_t *q));
extern long FASTCALL(interruptible_sleep_on_timeout(wait_queue_head_t *q,
signed long timeout));
diff -urNp --exclude-from=/home/davej/.exclude linux-1060/kernel/sched.c linux-1070/kernel/sched.c
--- linux-1060/kernel/sched.c
+++ linux-1070/kernel/sched.c
@@ -3118,10 +3118,21 @@ EXPORT_SYMBOL(wait_for_completion_interr
__remove_wait_queue(q, &wait); \
spin_unlock_irqrestore(&q->lock, flags);
+#define SLEEP_ON_BKLCHECK \
+ if (unlikely(!kernel_locked()) && \
+ sleep_on_bkl_warnings < 10) { \
+ sleep_on_bkl_warnings++; \
+ WARN_ON(1); \
+ }
+
+static int sleep_on_bkl_warnings;
+
void fastcall __sched interruptible_sleep_on(wait_queue_head_t *q)
{
SLEEP_ON_VAR
+ SLEEP_ON_BKLCHECK
+
current->state = TASK_INTERRUPTIBLE;
SLEEP_ON_HEAD
@@ -3135,6 +3146,8 @@ long fastcall __sched interruptible_slee
{
SLEEP_ON_VAR
+ SLEEP_ON_BKLCHECK
+
current->state = TASK_INTERRUPTIBLE;
SLEEP_ON_HEAD
@@ -3146,23 +3159,12 @@ long fastcall __sched interruptible_slee
EXPORT_SYMBOL(interruptible_sleep_on_timeout);
-void fastcall __sched sleep_on(wait_queue_head_t *q)
-{
- SLEEP_ON_VAR
-
- current->state = TASK_UNINTERRUPTIBLE;
-
- SLEEP_ON_HEAD
- schedule();
- SLEEP_ON_TAIL
-}
-
-EXPORT_SYMBOL(sleep_on);
-
long fastcall __sched sleep_on_timeout(wait_queue_head_t *q, long timeout)
{
SLEEP_ON_VAR
+ SLEEP_ON_BKLCHECK
+
current->state = TASK_UNINTERRUPTIBLE;
SLEEP_ON_HEAD
diff -urNp --exclude-from=/home/davej/.exclude linux-1060/net/sunrpc/clnt.c linux-1070/net/sunrpc/clnt.c
--- linux-1060/net/sunrpc/clnt.c
+++ linux-1070/net/sunrpc/clnt.c
@@ -223,17 +223,24 @@ out_no_clnt:
int
rpc_shutdown_client(struct rpc_clnt *clnt)
{
+ wait_queue_t __wait;
+ init_waitqueue_entry(&__wait, current);
dprintk("RPC: shutting down %s client for %s, tasks=%d\n",
clnt->cl_protname, clnt->cl_server,
atomic_read(&clnt->cl_users));
+ add_wait_queue(&destroy_wait, &__wait);
+ set_current_state(TASK_UNINTERRUPTIBLE);
while (atomic_read(&clnt->cl_users) > 0) {
/* Don't let rpc_release_client destroy us */
clnt->cl_oneshot = 0;
clnt->cl_dead = 0;
rpc_killall_tasks(clnt);
- sleep_on_timeout(&destroy_wait, 1*HZ);
+ schedule_timeout(1*HZ);
+ set_current_state(TASK_UNINTERRUPTIBLE);
}
+ current->state = TASK_RUNNING;
+ remove_wait_queue(&destroy_wait, &__wait);
if (atomic_read(&clnt->cl_users) < 0) {
printk(KERN_ERR "RPC: rpc_shutdown_client clnt %p tasks=%d\n",
linux-2.6-vm-oomkiller-debugging.patch:
oom_kill.c | 1 +
1 files changed, 1 insertion(+)
--- NEW FILE linux-2.6-vm-oomkiller-debugging.patch ---
--- linux-2.6.12/mm/oom_kill.c~ 2005-06-22 14:16:57.000000000 -0400
+++ linux-2.6.12/mm/oom_kill.c 2005-06-22 14:17:35.000000000 -0400
@@ -272,6 +272,7 @@ retry:
/* Found nothing?!?! Either we hang forever, or we panic. */
if (!p) {
read_unlock(&tasklist_lock);
+ show_mem();
panic("Out of memory and no killable processes...\n");
}
linux-2.6-x86-tune-p4.patch:
linux-2.6.10/arch/i386/Makefile | 2 +-
linux-2.6.12/arch/x86_64/Makefile | 4 +---
2 files changed, 2 insertions(+), 4 deletions(-)
--- NEW FILE linux-2.6-x86-tune-p4.patch ---
diff -urNp --exclude-from=/home/davej/.exclude linux-1/arch/i386/Makefile linux-212/arch/i386/Makefile
--- linux-2.6.10/arch/i386/Makefile
+++ linux-2.6.10/arch/i386/Makefile
@@ -33,7 +33,7 @@ cflags-$(CONFIG_M486) += -march=i486
cflags-$(CONFIG_M586) += -march=i586
cflags-$(CONFIG_M586TSC) += -march=i586
cflags-$(CONFIG_M586MMX) += $(call cc-option,-march=pentium-mmx,-march=i586)
-cflags-$(CONFIG_M686) += -march=i686
+cflags-$(CONFIG_M686) += -march=i686 $(call cc-option,-mtune=pentium4)
cflags-$(CONFIG_MPENTIUMII) += -march=i686 $(call cc-option,-mtune=pentium2)
cflags-$(CONFIG_MPENTIUMIII) += -march=i686 $(call cc-option,-mtune=pentium3)
cflags-$(CONFIG_MPENTIUMM) += -march=i686 $(call cc-option,-mtune=pentium3)
--- linux-2.6.12/arch/x86_64/Makefile~ 2005-07-05 19:48:18.000000000 -0400
+++ linux-2.6.12/arch/x86_64/Makefile 2005-07-05 19:49:06.000000000 -0400
@@ -39,9 +39,7 @@ LDFLAGS_vmlinux :=
CHECKFLAGS += -D__x86_64__ -m64
-cflags-$(CONFIG_MK8) += $(call cc-option,-march=k8)
-cflags-$(CONFIG_MPSC) += $(call cc-option,-march=nocona)
-CFLAGS += $(cflags-y)
+CFLAGS += -march=k8 -mtune=nocona
CFLAGS += -mno-red-zone
CFLAGS += -mcmodel=kernel
Index: kernel-2.6.spec
===================================================================
RCS file: /cvs/dist/rpms/kernel/devel/kernel-2.6.spec,v
retrieving revision 1.1608
retrieving revision 1.1609
diff -u -r1.1608 -r1.1609
--- kernel-2.6.spec 15 Oct 2005 01:07:27 -0000 1.1608
+++ kernel-2.6.spec 15 Oct 2005 01:13:22 -0000 1.1609
@@ -206,7 +206,7 @@
# 200 - 299 x86(-64)
-Patch200: linux-2.6.10-x86-tune-p4.patch
+Patch200: linux-2.6-x86-tune-p4.patch
Patch201: linux-2.6-x86_64-disable-tlb-flush-filter.patch
Patch202: linux-2.6-x86-apic-off-by-default.patch
@@ -265,12 +265,12 @@
Patch1020: linux-2.6-debug-sleep-in-irq-warning.patch
Patch1021: linux-2.6-debug-reference-discarded-return-result.patch
-Patch1050: linux-2.6.11-devmem.patch
+Patch1050: linux-2.6-devmem.patch
Patch1051: linux-2.6-devmem-xen.patch
-Patch1060: linux-2.6.3-crash-driver.patch
+Patch1060: linux-2.6-crash-driver.patch
Patch1061: linux-2.6-crash-xen.patch
-Patch1070: linux-2.6.0-sleepon.patch
+Patch1070: linux-2.6-sleepon.patch
# Tweak some defaults.
Patch1080: linux-2.6-default-elevator.patch
@@ -328,7 +328,7 @@
# VM bits.
-Patch2000: linux-2.6.9-vm-oomkiller-debugging.patch
+Patch2000: linux-2.6-vm-oomkiller-debugging.patch
Patch2001: linux-2.6-vm-silence-atomic-alloc-failures.patch
--- linux-2.6.0-sleepon.patch DELETED ---
--- linux-2.6.10-x86-tune-p4.patch DELETED ---
--- linux-2.6.11-devmem.patch DELETED ---
--- linux-2.6.3-crash-driver.patch DELETED ---
--- linux-2.6.9-vm-oomkiller-debugging.patch DELETED ---
- Previous message (by thread): rpms/kernel/devel linux-2.6-crash-xen.patch, NONE, 1.1 linux-2.6-devmem-xen.patch, NONE, 1.1 linux-2.6-xen-additional.patch, NONE, 1.1 linux-2.6-xen-compile.patch, NONE, 1.1 linux-2.6-xen.patch, NONE, 1.1 kernel-2.6.spec, 1.1607, 1.1608 linux-2.6.10-crash-xen.patch, 1.1, NONE linux-2.6.12-xen-additional.patch, 1.3, NONE linux-2.6.12-xen.patch, 1.1, NONE linux-2.6.8-devmem-xen.patch, 1.2, NONE linux-2.6.9-xen-compile.patch, 1.52, NONE
- Next message (by thread): rpms/kernel/devel linux-2.6-scsi-advansys-enabler.patch, NONE, 1.1 linux-2.6-scsi-advansys-pcitable.patch, NONE, 1.1 linux-2.6-scsi-megaraid-legacy.patch, NONE, 1.1 kernel-2.6.spec, 1.1609, 1.1610 linux-2.6.12-scsi-advansys-pcitable.patch, 1.3, NONE linux-2.6.9-scsi-advansys-enabler.patch, 1.2, NONE linux-2.6.9-scsi-megaraid-legacy.patch, 1.4, NONE
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-cvs-commits
mailing list