[kernel] r11697 - in dists/sid/linux-2.6/debian: . patches/bugfix/all/stable patches/series

Maximilian Attems maks at alioth.debian.org
Wed Jun 25 08:37:25 UTC 2008


Author: maks
Date: Wed Jun 25 08:37:21 2008
New Revision: 11697

Log:
add stable release 2.6.25.9

small thus no new conflicts

Added:
   dists/sid/linux-2.6/debian/patches/bugfix/all/stable/2.6.25.9.patch
Modified:
   dists/sid/linux-2.6/debian/changelog
   dists/sid/linux-2.6/debian/patches/series/6

Modified: dists/sid/linux-2.6/debian/changelog
==============================================================================
--- dists/sid/linux-2.6/debian/changelog	(original)
+++ dists/sid/linux-2.6/debian/changelog	Wed Jun 25 08:37:21 2008
@@ -51,6 +51,17 @@
     - tcp: TCP connection times out if ICMP frag needed is delayed
     - ALSA: hda - Fix resume of auto-config mode with Realtek codecs
     - netlink: Fix nla_parse_nested_compat() to call nla_parse() directly
+  * Add stable release 2.6.25.9:
+    - Add return value to reserve_bootmem_node()
+    - x86: use BOOTMEM_EXCLUSIVE on 32-bit
+    - sctp: Make sure N * sizeof(union sctp_addr) does not overflow.
+    - hwmon: (lm85) Fix function RANGE_TO_REG()
+    - hwmon: (adt7473) Initialize max_duty_at_overheat before use
+    - x86: set PAE PHYSICAL_MASK_SHIFT to 44 bits.
+    - Reinstate ZERO_PAGE optimization in 'get_user_pages()' and fix XIP
+    - watchdog: hpwdt: fix use of inline assembly
+    - Fix ZERO_PAGE breakage with vmware
+    - atl1: relax eeprom mac address error check
 
   [ Martin Michlmayr]
   * [arm/orion5x] Enable INPUT_EVDEV and KEYBOARD_GPIO.

Added: dists/sid/linux-2.6/debian/patches/bugfix/all/stable/2.6.25.9.patch
==============================================================================
--- (empty file)
+++ dists/sid/linux-2.6/debian/patches/bugfix/all/stable/2.6.25.9.patch	Wed Jun 25 08:37:21 2008
@@ -0,0 +1,426 @@
+diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c
+index d3437c4..e3b2185 100644
+--- a/arch/powerpc/kernel/vdso.c
++++ b/arch/powerpc/kernel/vdso.c
+@@ -141,7 +141,7 @@ static void dump_one_vdso_page(struct page *pg, struct page *upg)
+ 	printk("kpg: %p (c:%d,f:%08lx)", __va(page_to_pfn(pg) << PAGE_SHIFT),
+ 	       page_count(pg),
+ 	       pg->flags);
+-	if (upg/* && pg != upg*/) {
++	if (upg && !IS_ERR(upg) /* && pg != upg*/) {
+ 		printk(" upg: %p (c:%d,f:%08lx)", __va(page_to_pfn(upg)
+ 						       << PAGE_SHIFT),
+ 		       page_count(upg),
+diff --git a/arch/x86/kernel/setup_32.c b/arch/x86/kernel/setup_32.c
+index 2b3e5d4..9ac056b 100644
+--- a/arch/x86/kernel/setup_32.c
++++ b/arch/x86/kernel/setup_32.c
+@@ -483,10 +483,16 @@ static void __init reserve_crashkernel(void)
+ 					(unsigned long)(crash_size >> 20),
+ 					(unsigned long)(crash_base >> 20),
+ 					(unsigned long)(total_mem >> 20));
++
++			if (reserve_bootmem(crash_base, crash_size,
++					BOOTMEM_EXCLUSIVE) < 0) {
++				printk(KERN_INFO "crashkernel reservation "
++					"failed - memory is in use\n");
++				return;
++			}
++
+ 			crashk_res.start = crash_base;
+ 			crashk_res.end   = crash_base + crash_size - 1;
+-			reserve_bootmem(crash_base, crash_size,
+-					BOOTMEM_DEFAULT);
+ 		} else
+ 			printk(KERN_INFO "crashkernel reservation failed - "
+ 					"you have to specify a base address\n");
+diff --git a/drivers/hwmon/adt7473.c b/drivers/hwmon/adt7473.c
+index 9587869..8396e0f 100644
+--- a/drivers/hwmon/adt7473.c
++++ b/drivers/hwmon/adt7473.c
+@@ -309,6 +309,9 @@ no_sensor_update:
+ 						ADT7473_REG_PWM_BHVR(i));
+ 	}
+ 
++	i = i2c_smbus_read_byte_data(client, ADT7473_REG_CFG4);
++	data->max_duty_at_overheat = !!(i & ADT7473_CFG4_MAX_DUTY_AT_OVT);
++
+ 	data->limits_last_updated = local_jiffies;
+ 	data->limits_valid = 1;
+ 
+diff --git a/drivers/hwmon/lm85.c b/drivers/hwmon/lm85.c
+index 182fe6a..30bdd50 100644
+--- a/drivers/hwmon/lm85.c
++++ b/drivers/hwmon/lm85.c
+@@ -192,7 +192,7 @@ static int RANGE_TO_REG( int range )
+ {
+ 	int i;
+ 
+-	if ( range < lm85_range_map[0] ) { 
++	if (range <= lm85_range_map[0]) {
+ 		return 0 ;
+ 	} else if ( range > lm85_range_map[15] ) {
+ 		return 15 ;
+diff --git a/drivers/net/atl1/atl1_hw.c b/drivers/net/atl1/atl1_hw.c
+index 9d3bd22..a965f68 100644
+--- a/drivers/net/atl1/atl1_hw.c
++++ b/drivers/net/atl1/atl1_hw.c
+@@ -250,7 +250,6 @@ static int atl1_get_permanent_address(struct atl1_hw *hw)
+ 			memcpy(hw->perm_mac_addr, eth_addr, ETH_ALEN);
+ 			return 0;
+ 		}
+-		return 1;
+ 	}
+ 
+ 	/* see if SPI FLAGS exist ? */
+diff --git a/drivers/watchdog/hpwdt.c b/drivers/watchdog/hpwdt.c
+index 6483d10..2b756ef 100644
+--- a/drivers/watchdog/hpwdt.c
++++ b/drivers/watchdog/hpwdt.c
+@@ -140,49 +140,52 @@ static struct pci_device_id hpwdt_devices[] = {
+ };
+ MODULE_DEVICE_TABLE(pci, hpwdt_devices);
+ 
++extern asmlinkage void asminline_call(struct cmn_registers *pi86Regs, unsigned long *pRomEntry);
++
+ #ifndef CONFIG_X86_64
+ /* --32 Bit Bios------------------------------------------------------------ */
+ 
+ #define HPWDT_ARCH	32
+ 
+-static void asminline_call(struct cmn_registers *pi86Regs,
+-			   unsigned long *pRomEntry)
+-{
+-	asm("pushl       %ebp               \n\t"
+-	    "movl        %esp, %ebp         \n\t"
+-	    "pusha                          \n\t"
+-	    "pushf                          \n\t"
+-	    "push        %es                \n\t"
+-	    "push        %ds                \n\t"
+-	    "pop         %es                \n\t"
+-	    "movl        8(%ebp),%eax       \n\t"
+-	    "movl        4(%eax),%ebx       \n\t"
+-	    "movl        8(%eax),%ecx       \n\t"
+-	    "movl        12(%eax),%edx      \n\t"
+-	    "movl        16(%eax),%esi      \n\t"
+-	    "movl        20(%eax),%edi      \n\t"
+-	    "movl        (%eax),%eax        \n\t"
+-	    "push        %cs                \n\t"
+-	    "call        *12(%ebp)          \n\t"
+-	    "pushf                          \n\t"
+-	    "pushl       %eax               \n\t"
+-	    "movl        8(%ebp),%eax       \n\t"
+-	    "movl        %ebx,4(%eax)       \n\t"
+-	    "movl        %ecx,8(%eax)       \n\t"
+-	    "movl        %edx,12(%eax)      \n\t"
+-	    "movl        %esi,16(%eax)      \n\t"
+-	    "movl        %edi,20(%eax)      \n\t"
+-	    "movw        %ds,24(%eax)       \n\t"
+-	    "movw        %es,26(%eax)       \n\t"
+-	    "popl        %ebx               \n\t"
+-	    "movl        %ebx,(%eax)        \n\t"
+-	    "popl        %ebx               \n\t"
+-	    "movl        %ebx,28(%eax)      \n\t"
+-	    "pop         %es                \n\t"
+-	    "popf                           \n\t"
+-	    "popa                           \n\t"
+-	    "leave                          \n\t" "ret");
+-}
++asm(".text                          \n\t"
++    ".align 4                       \n"
++    "asminline_call:                \n\t"
++    "pushl       %ebp               \n\t"
++    "movl        %esp, %ebp         \n\t"
++    "pusha                          \n\t"
++    "pushf                          \n\t"
++    "push        %es                \n\t"
++    "push        %ds                \n\t"
++    "pop         %es                \n\t"
++    "movl        8(%ebp),%eax       \n\t"
++    "movl        4(%eax),%ebx       \n\t"
++    "movl        8(%eax),%ecx       \n\t"
++    "movl        12(%eax),%edx      \n\t"
++    "movl        16(%eax),%esi      \n\t"
++    "movl        20(%eax),%edi      \n\t"
++    "movl        (%eax),%eax        \n\t"
++    "push        %cs                \n\t"
++    "call        *12(%ebp)          \n\t"
++    "pushf                          \n\t"
++    "pushl       %eax               \n\t"
++    "movl        8(%ebp),%eax       \n\t"
++    "movl        %ebx,4(%eax)       \n\t"
++    "movl        %ecx,8(%eax)       \n\t"
++    "movl        %edx,12(%eax)      \n\t"
++    "movl        %esi,16(%eax)      \n\t"
++    "movl        %edi,20(%eax)      \n\t"
++    "movw        %ds,24(%eax)       \n\t"
++    "movw        %es,26(%eax)       \n\t"
++    "popl        %ebx               \n\t"
++    "movl        %ebx,(%eax)        \n\t"
++    "popl        %ebx               \n\t"
++    "movl        %ebx,28(%eax)      \n\t"
++    "pop         %es                \n\t"
++    "popf                           \n\t"
++    "popa                           \n\t"
++    "leave                          \n\t"
++    "ret                            \n\t"
++    ".previous");
+ 
+ /*
+  *	cru_detect
+@@ -333,43 +336,44 @@ static int __devinit detect_cru_service(void)
+ 
+ #define HPWDT_ARCH	64
+ 
+-static void asminline_call(struct cmn_registers *pi86Regs,
+-			   unsigned long *pRomEntry)
+-{
+-	asm("pushq      %rbp            \n\t"
+-	    "movq       %rsp, %rbp      \n\t"
+-	    "pushq      %rax            \n\t"
+-	    "pushq      %rbx            \n\t"
+-	    "pushq      %rdx            \n\t"
+-	    "pushq      %r12            \n\t"
+-	    "pushq      %r9             \n\t"
+-	    "movq       %rsi, %r12      \n\t"
+-	    "movq       %rdi, %r9       \n\t"
+-	    "movl       4(%r9),%ebx     \n\t"
+-	    "movl       8(%r9),%ecx     \n\t"
+-	    "movl       12(%r9),%edx    \n\t"
+-	    "movl       16(%r9),%esi    \n\t"
+-	    "movl       20(%r9),%edi    \n\t"
+-	    "movl       (%r9),%eax      \n\t"
+-	    "call       *%r12           \n\t"
+-	    "pushfq                     \n\t"
+-	    "popq        %r12           \n\t"
+-	    "popfq                      \n\t"
+-	    "movl       %eax, (%r9)     \n\t"
+-	    "movl       %ebx, 4(%r9)    \n\t"
+-	    "movl       %ecx, 8(%r9)    \n\t"
+-	    "movl       %edx, 12(%r9)   \n\t"
+-	    "movl       %esi, 16(%r9)   \n\t"
+-	    "movl       %edi, 20(%r9)   \n\t"
+-	    "movq       %r12, %rax      \n\t"
+-	    "movl       %eax, 28(%r9)   \n\t"
+-	    "popq       %r9             \n\t"
+-	    "popq       %r12            \n\t"
+-	    "popq       %rdx            \n\t"
+-	    "popq       %rbx            \n\t"
+-	    "popq       %rax            \n\t"
+-	    "leave                      \n\t" "ret");
+-}
++asm(".text                      \n\t"
++    ".align 4                   \n"
++    "asminline_call:            \n\t"
++    "pushq      %rbp            \n\t"
++    "movq       %rsp, %rbp      \n\t"
++    "pushq      %rax            \n\t"
++    "pushq      %rbx            \n\t"
++    "pushq      %rdx            \n\t"
++    "pushq      %r12            \n\t"
++    "pushq      %r9             \n\t"
++    "movq       %rsi, %r12      \n\t"
++    "movq       %rdi, %r9       \n\t"
++    "movl       4(%r9),%ebx     \n\t"
++    "movl       8(%r9),%ecx     \n\t"
++    "movl       12(%r9),%edx    \n\t"
++    "movl       16(%r9),%esi    \n\t"
++    "movl       20(%r9),%edi    \n\t"
++    "movl       (%r9),%eax      \n\t"
++    "call       *%r12           \n\t"
++    "pushfq                     \n\t"
++    "popq        %r12           \n\t"
++    "popfq                      \n\t"
++    "movl       %eax, (%r9)     \n\t"
++    "movl       %ebx, 4(%r9)    \n\t"
++    "movl       %ecx, 8(%r9)    \n\t"
++    "movl       %edx, 12(%r9)   \n\t"
++    "movl       %esi, 16(%r9)   \n\t"
++    "movl       %edi, 20(%r9)   \n\t"
++    "movq       %r12, %rax      \n\t"
++    "movl       %eax, 28(%r9)   \n\t"
++    "popq       %r9             \n\t"
++    "popq       %r12            \n\t"
++    "popq       %rdx            \n\t"
++    "popq       %rbx            \n\t"
++    "popq       %rax            \n\t"
++    "leave                      \n\t"
++    "ret                        \n\t"
++    ".previous");
+ 
+ /*
+  *	dmi_find_cru
+diff --git a/include/asm-x86/page_32.h b/include/asm-x86/page_32.h
+index 5f7257f..8f8085b 100644
+--- a/include/asm-x86/page_32.h
++++ b/include/asm-x86/page_32.h
+@@ -14,7 +14,8 @@
+ #define __PAGE_OFFSET		_AC(CONFIG_PAGE_OFFSET, UL)
+ 
+ #ifdef CONFIG_X86_PAE
+-#define __PHYSICAL_MASK_SHIFT	36
++/* 44=32+12, the limit we can fit into an unsigned long pfn */
++#define __PHYSICAL_MASK_SHIFT	44
+ #define __VIRTUAL_MASK_SHIFT	32
+ #define PAGETABLE_LEVELS	3
+ 
+diff --git a/include/linux/bootmem.h b/include/linux/bootmem.h
+index 4e4e340..db3d837 100644
+--- a/include/linux/bootmem.h
++++ b/include/linux/bootmem.h
+@@ -94,7 +94,7 @@ extern unsigned long init_bootmem_node(pg_data_t *pgdat,
+ 				       unsigned long freepfn,
+ 				       unsigned long startpfn,
+ 				       unsigned long endpfn);
+-extern void reserve_bootmem_node(pg_data_t *pgdat,
++extern int reserve_bootmem_node(pg_data_t *pgdat,
+ 				 unsigned long physaddr,
+ 				 unsigned long size,
+ 				 int flags);
+diff --git a/mm/bootmem.c b/mm/bootmem.c
+index 2ccea70..8bb58da 100644
+--- a/mm/bootmem.c
++++ b/mm/bootmem.c
+@@ -398,10 +398,10 @@ unsigned long __init init_bootmem_node(pg_data_t *pgdat, unsigned long freepfn,
+ 	return init_bootmem_core(pgdat, freepfn, startpfn, endpfn);
+ }
+ 
+-void __init reserve_bootmem_node(pg_data_t *pgdat, unsigned long physaddr,
++int __init reserve_bootmem_node(pg_data_t *pgdat, unsigned long physaddr,
+ 				 unsigned long size, int flags)
+ {
+-	reserve_bootmem_core(pgdat->bdata, physaddr, size, flags);
++	return reserve_bootmem_core(pgdat->bdata, physaddr, size, flags);
+ }
+ 
+ void __init free_bootmem_node(pg_data_t *pgdat, unsigned long physaddr,
+diff --git a/mm/memory.c b/mm/memory.c
+index 0d14d1e..df84668 100644
+--- a/mm/memory.c
++++ b/mm/memory.c
+@@ -943,17 +943,15 @@ struct page *follow_page(struct vm_area_struct *vma, unsigned long address,
+ 	}
+ 
+ 	ptep = pte_offset_map_lock(mm, pmd, address, &ptl);
+-	if (!ptep)
+-		goto out;
+ 
+ 	pte = *ptep;
+ 	if (!pte_present(pte))
+-		goto unlock;
++		goto no_page;
+ 	if ((flags & FOLL_WRITE) && !pte_write(pte))
+ 		goto unlock;
+ 	page = vm_normal_page(vma, address, pte);
+ 	if (unlikely(!page))
+-		goto unlock;
++		goto bad_page;
+ 
+ 	if (flags & FOLL_GET)
+ 		get_page(page);
+@@ -968,6 +966,15 @@ unlock:
+ out:
+ 	return page;
+ 
++bad_page:
++	pte_unmap_unlock(ptep, ptl);
++	return ERR_PTR(-EFAULT);
++
++no_page:
++	pte_unmap_unlock(ptep, ptl);
++	if (!pte_none(pte))
++		return page;
++	/* Fall through to ZERO_PAGE handling */
+ no_page_table:
+ 	/*
+ 	 * When core dumping an enormous anonymous area that nobody
+@@ -982,6 +989,26 @@ no_page_table:
+ 	return page;
+ }
+ 
++/* Can we do the FOLL_ANON optimization? */
++static inline int use_zero_page(struct vm_area_struct *vma)
++{
++	/*
++	 * We don't want to optimize FOLL_ANON for make_pages_present()
++	 * when it tries to page in a VM_LOCKED region. As to VM_SHARED,
++	 * we want to get the page from the page tables to make sure
++	 * that we serialize and update with any other user of that
++	 * mapping.
++	 */
++	if (vma->vm_flags & (VM_LOCKED | VM_SHARED))
++		return 0;
++	/*
++	 * And if we have a fault or a nopfn routine, it's not an
++	 * anonymous region.
++	 */
++	return !vma->vm_ops ||
++		(!vma->vm_ops->fault && !vma->vm_ops->nopfn);
++}
++
+ int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
+ 		unsigned long start, int len, int write, int force,
+ 		struct page **pages, struct vm_area_struct **vmas)
+@@ -1056,9 +1083,7 @@ int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
+ 		foll_flags = FOLL_TOUCH;
+ 		if (pages)
+ 			foll_flags |= FOLL_GET;
+-		if (!write && !(vma->vm_flags & VM_LOCKED) &&
+-		    (!vma->vm_ops || (!vma->vm_ops->nopage &&
+-					!vma->vm_ops->fault)))
++		if (!write && use_zero_page(vma))
+ 			foll_flags |= FOLL_ANON;
+ 
+ 		do {
+@@ -1104,6 +1129,8 @@ int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
+ 
+ 				cond_resched();
+ 			}
++			if (IS_ERR(page))
++				return i ? i : PTR_ERR(page);
+ 			if (pages) {
+ 				pages[i] = page;
+ 
+diff --git a/mm/migrate.c b/mm/migrate.c
+index 4e0eccc..6acc815 100644
+--- a/mm/migrate.c
++++ b/mm/migrate.c
+@@ -858,6 +858,11 @@ static int do_move_pages(struct mm_struct *mm, struct page_to_node *pm,
+ 			goto set_status;
+ 
+ 		page = follow_page(vma, pp->addr, FOLL_GET);
++
++		err = PTR_ERR(page);
++		if (IS_ERR(page))
++			goto set_status;
++
+ 		err = -ENOENT;
+ 		if (!page)
+ 			goto set_status;
+@@ -921,6 +926,11 @@ static int do_pages_stat(struct mm_struct *mm, struct page_to_node *pm)
+ 			goto set_status;
+ 
+ 		page = follow_page(vma, pm->addr, 0);
++
++		err = PTR_ERR(page);
++		if (IS_ERR(page))
++			goto set_status;
++
+ 		err = -ENOENT;
+ 		/* Use PageReserved to check for zero page */
+ 		if (!page || PageReserved(page))
+diff --git a/net/sctp/socket.c b/net/sctp/socket.c
+index 998e63a..2d42260 100644
+--- a/net/sctp/socket.c
++++ b/net/sctp/socket.c
+@@ -4421,7 +4421,9 @@ static int sctp_getsockopt_local_addrs_old(struct sock *sk, int len,
+ 	if (copy_from_user(&getaddrs, optval, len))
+ 		return -EFAULT;
+ 
+-	if (getaddrs.addr_num <= 0) return -EINVAL;
++	if (getaddrs.addr_num <= 0 ||
++	    getaddrs.addr_num >= (INT_MAX / sizeof(union sctp_addr)))
++		return -EINVAL;
+ 	/*
+ 	 *  For UDP-style sockets, id specifies the association to query.
+ 	 *  If the id field is set to the value '0' then the locally bound

Modified: dists/sid/linux-2.6/debian/patches/series/6
==============================================================================
--- dists/sid/linux-2.6/debian/patches/series/6	(original)
+++ dists/sid/linux-2.6/debian/patches/series/6	Wed Jun 25 08:37:21 2008
@@ -1,2 +1,3 @@
 + bugfix/all/stable/2.6.25.7.patch
 + bugfix/all/stable/2.6.25.8.patch
++ bugfix/all/stable/2.6.25.9.patch



More information about the Kernel-svn-changes mailing list