aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Garzik <jgarzik@pobox.com>2005-10-27 20:43:20 -0400
committerJeff Garzik <jgarzik@pobox.com>2005-10-27 20:43:20 -0400
commit26ba2a7a9f4d8921f095af646a7d22c15a148028 (patch)
tree1e694da6999653551bc61eb9cc6db2eb4645fcd1
parent91190758d410a5d33c6051ba9ca95baa430256bb (diff)
parent741b2252a5e14d6c60a913c77a6099abe73a854a (diff)
Merge branch 'master'
-rw-r--r--Makefile2
-rw-r--r--arch/arm/mach-pxa/corgi_lcd.c2
-rw-r--r--arch/ppc64/kernel/mpic.c4
-rw-r--r--drivers/char/drm/radeon_cp.c11
-rw-r--r--drivers/cpufreq/cpufreq_conservative.c6
-rw-r--r--drivers/md/md.c10
-rw-r--r--drivers/serial/8250_pci.c26
-rw-r--r--fs/hfsplus/super.c1
-rw-r--r--include/asm-arm/bitops.h1
-rw-r--r--include/asm-x86_64/pci.h6
-rw-r--r--include/linux/pci_ids.h2
-rw-r--r--kernel/exit.c8
-rw-r--r--kernel/posix-cpu-timers.c63
-rw-r--r--kernel/sched.c1
-rw-r--r--mm/page_alloc.c2
-rw-r--r--net/core/wireless.c9
-rw-r--r--net/ipv4/tcp_input.c1
-rw-r--r--net/sunrpc/svcsock.c2
18 files changed, 103 insertions, 54 deletions
diff --git a/Makefile b/Makefile
index 4a7000e353b5..1fa7e5343464 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
1VERSION = 2 1VERSION = 2
2PATCHLEVEL = 6 2PATCHLEVEL = 6
3SUBLEVEL = 14 3SUBLEVEL = 14
4EXTRAVERSION =-rc5 4EXTRAVERSION =
5NAME=Affluent Albatross 5NAME=Affluent Albatross
6 6
7# *DOCUMENTATION* 7# *DOCUMENTATION*
diff --git a/arch/arm/mach-pxa/corgi_lcd.c b/arch/arm/mach-pxa/corgi_lcd.c
index 850538fadece..370df113dc06 100644
--- a/arch/arm/mach-pxa/corgi_lcd.c
+++ b/arch/arm/mach-pxa/corgi_lcd.c
@@ -488,6 +488,7 @@ static int is_pxafb_device(struct device * dev, void * data)
488 488
489unsigned long spitz_get_hsync_len(void) 489unsigned long spitz_get_hsync_len(void)
490{ 490{
491#ifdef CONFIG_FB_PXA
491 if (!spitz_pxafb_dev) { 492 if (!spitz_pxafb_dev) {
492 spitz_pxafb_dev = bus_find_device(&platform_bus_type, NULL, NULL, is_pxafb_device); 493 spitz_pxafb_dev = bus_find_device(&platform_bus_type, NULL, NULL, is_pxafb_device);
493 if (!spitz_pxafb_dev) 494 if (!spitz_pxafb_dev)
@@ -496,6 +497,7 @@ unsigned long spitz_get_hsync_len(void)
496 if (!get_hsync_time) 497 if (!get_hsync_time)
497 get_hsync_time = symbol_get(pxafb_get_hsync_time); 498 get_hsync_time = symbol_get(pxafb_get_hsync_time);
498 if (!get_hsync_time) 499 if (!get_hsync_time)
500#endif
499 return 0; 501 return 0;
500 502
501 return pxafb_get_hsync_time(spitz_pxafb_dev); 503 return pxafb_get_hsync_time(spitz_pxafb_dev);
diff --git a/arch/ppc64/kernel/mpic.c b/arch/ppc64/kernel/mpic.c
index cc262a05ddb4..5f5bc73754d9 100644
--- a/arch/ppc64/kernel/mpic.c
+++ b/arch/ppc64/kernel/mpic.c
@@ -506,8 +506,8 @@ struct mpic * __init mpic_alloc(unsigned long phys_addr,
506 mpic->senses_count = senses_count; 506 mpic->senses_count = senses_count;
507 507
508 /* Map the global registers */ 508 /* Map the global registers */
509 mpic->gregs = ioremap(phys_addr + MPIC_GREG_BASE, 0x1000); 509 mpic->gregs = ioremap(phys_addr + MPIC_GREG_BASE, 0x2000);
510 mpic->tmregs = mpic->gregs + (MPIC_TIMER_BASE >> 2); 510 mpic->tmregs = mpic->gregs + ((MPIC_TIMER_BASE - MPIC_GREG_BASE) >> 2);
511 BUG_ON(mpic->gregs == NULL); 511 BUG_ON(mpic->gregs == NULL);
512 512
513 /* Reset */ 513 /* Reset */
diff --git a/drivers/char/drm/radeon_cp.c b/drivers/char/drm/radeon_cp.c
index 6d9080a3ca7e..12ef13ff04ca 100644
--- a/drivers/char/drm/radeon_cp.c
+++ b/drivers/char/drm/radeon_cp.c
@@ -1133,10 +1133,10 @@ static void radeon_cp_init_ring_buffer( drm_device_t *dev,
1133 ring_start = (dev_priv->cp_ring->offset 1133 ring_start = (dev_priv->cp_ring->offset
1134 - dev->agp->base 1134 - dev->agp->base
1135 + dev_priv->gart_vm_start); 1135 + dev_priv->gart_vm_start);
1136 } else 1136 } else
1137#endif 1137#endif
1138 ring_start = (dev_priv->cp_ring->offset 1138 ring_start = (dev_priv->cp_ring->offset
1139 - dev->sg->handle 1139 - (unsigned long)dev->sg->virtual
1140 + dev_priv->gart_vm_start); 1140 + dev_priv->gart_vm_start);
1141 1141
1142 RADEON_WRITE( RADEON_CP_RB_BASE, ring_start ); 1142 RADEON_WRITE( RADEON_CP_RB_BASE, ring_start );
@@ -1164,7 +1164,8 @@ static void radeon_cp_init_ring_buffer( drm_device_t *dev,
1164 drm_sg_mem_t *entry = dev->sg; 1164 drm_sg_mem_t *entry = dev->sg;
1165 unsigned long tmp_ofs, page_ofs; 1165 unsigned long tmp_ofs, page_ofs;
1166 1166
1167 tmp_ofs = dev_priv->ring_rptr->offset - dev->sg->handle; 1167 tmp_ofs = dev_priv->ring_rptr->offset -
1168 (unsigned long)dev->sg->virtual;
1168 page_ofs = tmp_ofs >> PAGE_SHIFT; 1169 page_ofs = tmp_ofs >> PAGE_SHIFT;
1169 1170
1170 RADEON_WRITE( RADEON_CP_RB_RPTR_ADDR, 1171 RADEON_WRITE( RADEON_CP_RB_RPTR_ADDR,
@@ -1491,8 +1492,8 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init )
1491 else 1492 else
1492#endif 1493#endif
1493 dev_priv->gart_buffers_offset = (dev->agp_buffer_map->offset 1494 dev_priv->gart_buffers_offset = (dev->agp_buffer_map->offset
1494 - dev->sg->handle 1495 - (unsigned long)dev->sg->virtual
1495 + dev_priv->gart_vm_start); 1496 + dev_priv->gart_vm_start);
1496 1497
1497 DRM_DEBUG( "dev_priv->gart_size %d\n", 1498 DRM_DEBUG( "dev_priv->gart_size %d\n",
1498 dev_priv->gart_size ); 1499 dev_priv->gart_size );
diff --git a/drivers/cpufreq/cpufreq_conservative.c b/drivers/cpufreq/cpufreq_conservative.c
index e1df376e709e..2ed5c4363b53 100644
--- a/drivers/cpufreq/cpufreq_conservative.c
+++ b/drivers/cpufreq/cpufreq_conservative.c
@@ -315,9 +315,9 @@ static void dbs_check_cpu(int cpu)
315 policy = this_dbs_info->cur_policy; 315 policy = this_dbs_info->cur_policy;
316 316
317 if ( init_flag == 0 ) { 317 if ( init_flag == 0 ) {
318 for ( /* NULL */; init_flag < NR_CPUS; init_flag++ ) { 318 for_each_online_cpu(j) {
319 dbs_info = &per_cpu(cpu_dbs_info, init_flag); 319 dbs_info = &per_cpu(cpu_dbs_info, j);
320 requested_freq[cpu] = dbs_info->cur_policy->cur; 320 requested_freq[j] = dbs_info->cur_policy->cur;
321 } 321 }
322 init_flag = 1; 322 init_flag = 1;
323 } 323 }
diff --git a/drivers/md/md.c b/drivers/md/md.c
index e9476075aa13..2a8a5696bf8a 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -3568,7 +3568,8 @@ static void md_do_sync(mddev_t *mddev)
3568 mddev->curr_resync = 2; 3568 mddev->curr_resync = 2;
3569 3569
3570 try_again: 3570 try_again:
3571 if (signal_pending(current)) { 3571 if (signal_pending(current) ||
3572 kthread_should_stop()) {
3572 flush_signals(current); 3573 flush_signals(current);
3573 set_bit(MD_RECOVERY_INTR, &mddev->recovery); 3574 set_bit(MD_RECOVERY_INTR, &mddev->recovery);
3574 goto skip; 3575 goto skip;
@@ -3590,8 +3591,9 @@ static void md_do_sync(mddev_t *mddev)
3590 */ 3591 */
3591 continue; 3592 continue;
3592 prepare_to_wait(&resync_wait, &wq, TASK_INTERRUPTIBLE); 3593 prepare_to_wait(&resync_wait, &wq, TASK_INTERRUPTIBLE);
3593 if (!signal_pending(current) 3594 if (!signal_pending(current) &&
3594 && mddev2->curr_resync >= mddev->curr_resync) { 3595 !kthread_should_stop() &&
3596 mddev2->curr_resync >= mddev->curr_resync) {
3595 printk(KERN_INFO "md: delaying resync of %s" 3597 printk(KERN_INFO "md: delaying resync of %s"
3596 " until %s has finished resync (they" 3598 " until %s has finished resync (they"
3597 " share one or more physical units)\n", 3599 " share one or more physical units)\n",
@@ -3697,7 +3699,7 @@ static void md_do_sync(mddev_t *mddev)
3697 } 3699 }
3698 3700
3699 3701
3700 if (signal_pending(current)) { 3702 if (signal_pending(current) || kthread_should_stop()) {
3701 /* 3703 /*
3702 * got a signal, exit. 3704 * got a signal, exit.
3703 */ 3705 */
diff --git a/drivers/serial/8250_pci.c b/drivers/serial/8250_pci.c
index 0e21f583690e..5c3c03932d6d 100644
--- a/drivers/serial/8250_pci.c
+++ b/drivers/serial/8250_pci.c
@@ -152,6 +152,7 @@ static int __devinit pci_hp_diva_init(struct pci_dev *dev)
152 rc = 4; 152 rc = 4;
153 break; 153 break;
154 case PCI_DEVICE_ID_HP_DIVA_POWERBAR: 154 case PCI_DEVICE_ID_HP_DIVA_POWERBAR:
155 case PCI_DEVICE_ID_HP_DIVA_HURRICANE:
155 rc = 1; 156 rc = 1;
156 break; 157 break;
157 } 158 }
@@ -226,8 +227,10 @@ static int __devinit pci_plx9050_init(struct pci_dev *dev)
226 } 227 }
227 228
228 irq_config = 0x41; 229 irq_config = 0x41;
229 if (dev->vendor == PCI_VENDOR_ID_PANACOM) 230 if (dev->vendor == PCI_VENDOR_ID_PANACOM ||
231 dev->subsystem_vendor == PCI_SUBVENDOR_ID_EXSYS) {
230 irq_config = 0x43; 232 irq_config = 0x43;
233 }
231 if ((dev->vendor == PCI_VENDOR_ID_PLX) && 234 if ((dev->vendor == PCI_VENDOR_ID_PLX) &&
232 (dev->device == PCI_DEVICE_ID_PLX_ROMULUS)) { 235 (dev->device == PCI_DEVICE_ID_PLX_ROMULUS)) {
233 /* 236 /*
@@ -664,6 +667,15 @@ static struct pci_serial_quirk pci_serial_quirks[] = {
664 { 667 {
665 .vendor = PCI_VENDOR_ID_PLX, 668 .vendor = PCI_VENDOR_ID_PLX,
666 .device = PCI_DEVICE_ID_PLX_9050, 669 .device = PCI_DEVICE_ID_PLX_9050,
670 .subvendor = PCI_SUBVENDOR_ID_EXSYS,
671 .subdevice = PCI_SUBDEVICE_ID_EXSYS_4055,
672 .init = pci_plx9050_init,
673 .setup = pci_default_setup,
674 .exit = __devexit_p(pci_plx9050_exit),
675 },
676 {
677 .vendor = PCI_VENDOR_ID_PLX,
678 .device = PCI_DEVICE_ID_PLX_9050,
667 .subvendor = PCI_SUBVENDOR_ID_KEYSPAN, 679 .subvendor = PCI_SUBVENDOR_ID_KEYSPAN,
668 .subdevice = PCI_SUBDEVICE_ID_KEYSPAN_SX2, 680 .subdevice = PCI_SUBDEVICE_ID_KEYSPAN_SX2,
669 .init = pci_plx9050_init, 681 .init = pci_plx9050_init,
@@ -927,6 +939,7 @@ enum pci_board_num_t {
927 pbn_panacom, 939 pbn_panacom,
928 pbn_panacom2, 940 pbn_panacom2,
929 pbn_panacom4, 941 pbn_panacom4,
942 pbn_exsys_4055,
930 pbn_plx_romulus, 943 pbn_plx_romulus,
931 pbn_oxsemi, 944 pbn_oxsemi,
932 pbn_intel_i960, 945 pbn_intel_i960,
@@ -1292,6 +1305,13 @@ static struct pciserial_board pci_boards[] __devinitdata = {
1292 .reg_shift = 7, 1305 .reg_shift = 7,
1293 }, 1306 },
1294 1307
1308 [pbn_exsys_4055] = {
1309 .flags = FL_BASE2,
1310 .num_ports = 4,
1311 .base_baud = 115200,
1312 .uart_offset = 8,
1313 },
1314
1295 /* I think this entry is broken - the first_offset looks wrong --rmk */ 1315 /* I think this entry is broken - the first_offset looks wrong --rmk */
1296 [pbn_plx_romulus] = { 1316 [pbn_plx_romulus] = {
1297 .flags = FL_BASE2, 1317 .flags = FL_BASE2,
@@ -1853,6 +1873,10 @@ static struct pci_device_id serial_pci_tbl[] = {
1853 PCI_SUBVENDOR_ID_CHASE_PCIRAS, 1873 PCI_SUBVENDOR_ID_CHASE_PCIRAS,
1854 PCI_SUBDEVICE_ID_CHASE_PCIRAS8, 0, 0, 1874 PCI_SUBDEVICE_ID_CHASE_PCIRAS8, 0, 0,
1855 pbn_b2_8_460800 }, 1875 pbn_b2_8_460800 },
1876 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
1877 PCI_SUBVENDOR_ID_EXSYS,
1878 PCI_SUBDEVICE_ID_EXSYS_4055, 0, 0,
1879 pbn_exsys_4055 },
1856 /* 1880 /*
1857 * Megawolf Romulus PCI Serial Card, from Mike Hudson 1881 * Megawolf Romulus PCI Serial Card, from Mike Hudson
1858 * (Exoray@isys.ca) 1882 * (Exoray@isys.ca)
diff --git a/fs/hfsplus/super.c b/fs/hfsplus/super.c
index fd0f0f050e1d..452fc1fdbd32 100644
--- a/fs/hfsplus/super.c
+++ b/fs/hfsplus/super.c
@@ -50,6 +50,7 @@ static void hfsplus_read_inode(struct inode *inode)
50 init_MUTEX(&HFSPLUS_I(inode).extents_lock); 50 init_MUTEX(&HFSPLUS_I(inode).extents_lock);
51 HFSPLUS_I(inode).flags = 0; 51 HFSPLUS_I(inode).flags = 0;
52 HFSPLUS_I(inode).rsrc_inode = NULL; 52 HFSPLUS_I(inode).rsrc_inode = NULL;
53 atomic_set(&HFSPLUS_I(inode).opencnt, 0);
53 54
54 if (inode->i_ino >= HFSPLUS_FIRSTUSER_CNID) { 55 if (inode->i_ino >= HFSPLUS_FIRSTUSER_CNID) {
55 read_inode: 56 read_inode:
diff --git a/include/asm-arm/bitops.h b/include/asm-arm/bitops.h
index aad7aad026b3..e007dd990da5 100644
--- a/include/asm-arm/bitops.h
+++ b/include/asm-arm/bitops.h
@@ -347,7 +347,6 @@ static inline unsigned long __ffs(unsigned long word)
347 * the clz instruction for much better code efficiency. 347 * the clz instruction for much better code efficiency.
348 */ 348 */
349 349
350static __inline__ int generic_fls(int x);
351#define fls(x) \ 350#define fls(x) \
352 ( __builtin_constant_p(x) ? generic_fls(x) : \ 351 ( __builtin_constant_p(x) ? generic_fls(x) : \
353 ({ int __r; asm("clz\t%0, %1" : "=r"(__r) : "r"(x) : "cc"); 32-__r; }) ) 352 ({ int __r; asm("clz\t%0, %1" : "=r"(__r) : "r"(x) : "cc"); 32-__r; }) )
diff --git a/include/asm-x86_64/pci.h b/include/asm-x86_64/pci.h
index 5a82a6762c21..eeb3088a1c9e 100644
--- a/include/asm-x86_64/pci.h
+++ b/include/asm-x86_64/pci.h
@@ -50,10 +50,10 @@ extern int iommu_setup(char *opt);
50 * address space. The networking and block device layers use 50 * address space. The networking and block device layers use
51 * this boolean for bounce buffer decisions 51 * this boolean for bounce buffer decisions
52 * 52 *
53 * On x86-64 it mostly equals, but we set it to zero to tell some subsystems 53 * On AMD64 it mostly equals, but we set it to zero to tell some subsystems
54 * that an hard or soft IOMMU is available. 54 * that an IOMMU is available.
55 */ 55 */
56#define PCI_DMA_BUS_IS_PHYS 0 56#define PCI_DMA_BUS_IS_PHYS (no_iommu ? 1 : 0)
57 57
58/* 58/*
59 * x86-64 always supports DAC, but sometimes it is useful to force 59 * x86-64 always supports DAC, but sometimes it is useful to force
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index f74ed9462475..71834f05504f 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -723,6 +723,7 @@
723#define PCI_DEVICE_ID_HP_DIVA_EVEREST 0x1282 723#define PCI_DEVICE_ID_HP_DIVA_EVEREST 0x1282
724#define PCI_DEVICE_ID_HP_DIVA_AUX 0x1290 724#define PCI_DEVICE_ID_HP_DIVA_AUX 0x1290
725#define PCI_DEVICE_ID_HP_DIVA_RMP3 0x1301 725#define PCI_DEVICE_ID_HP_DIVA_RMP3 0x1301
726#define PCI_DEVICE_ID_HP_DIVA_HURRICANE 0x132a
726#define PCI_DEVICE_ID_HP_CISS 0x3210 727#define PCI_DEVICE_ID_HP_CISS 0x3210
727#define PCI_DEVICE_ID_HP_CISSA 0x3220 728#define PCI_DEVICE_ID_HP_CISSA 0x3220
728#define PCI_DEVICE_ID_HP_CISSB 0x3222 729#define PCI_DEVICE_ID_HP_CISSB 0x3222
@@ -2696,6 +2697,7 @@
2696 2697
2697#define PCI_SUBVENDOR_ID_EXSYS 0xd84d 2698#define PCI_SUBVENDOR_ID_EXSYS 0xd84d
2698#define PCI_SUBDEVICE_ID_EXSYS_4014 0x4014 2699#define PCI_SUBDEVICE_ID_EXSYS_4014 0x4014
2700#define PCI_SUBDEVICE_ID_EXSYS_4055 0x4055
2699 2701
2700#define PCI_VENDOR_ID_TIGERJET 0xe159 2702#define PCI_VENDOR_ID_TIGERJET 0xe159
2701#define PCI_DEVICE_ID_TIGERJET_300 0x0001 2703#define PCI_DEVICE_ID_TIGERJET_300 0x0001
diff --git a/kernel/exit.c b/kernel/exit.c
index 4897977a1f4b..3b25b182d2be 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -825,6 +825,14 @@ fastcall NORET_TYPE void do_exit(long code)
825 825
826 tsk->flags |= PF_EXITING; 826 tsk->flags |= PF_EXITING;
827 827
828 /*
829 * Make sure we don't try to process any timer firings
830 * while we are already exiting.
831 */
832 tsk->it_virt_expires = cputime_zero;
833 tsk->it_prof_expires = cputime_zero;
834 tsk->it_sched_expires = 0;
835
828 if (unlikely(in_atomic())) 836 if (unlikely(in_atomic()))
829 printk(KERN_INFO "note: %s[%d] exited with preempt_count %d\n", 837 printk(KERN_INFO "note: %s[%d] exited with preempt_count %d\n",
830 current->comm, current->pid, 838 current->comm, current->pid,
diff --git a/kernel/posix-cpu-timers.c b/kernel/posix-cpu-timers.c
index b15462b17a58..bf374fceb39c 100644
--- a/kernel/posix-cpu-timers.c
+++ b/kernel/posix-cpu-timers.c
@@ -91,7 +91,7 @@ static inline union cpu_time_count cpu_time_sub(clockid_t which_clock,
91 * Update expiry time from increment, and increase overrun count, 91 * Update expiry time from increment, and increase overrun count,
92 * given the current clock sample. 92 * given the current clock sample.
93 */ 93 */
94static inline void bump_cpu_timer(struct k_itimer *timer, 94static void bump_cpu_timer(struct k_itimer *timer,
95 union cpu_time_count now) 95 union cpu_time_count now)
96{ 96{
97 int i; 97 int i;
@@ -110,7 +110,7 @@ static inline void bump_cpu_timer(struct k_itimer *timer,
110 for (i = 0; incr < delta - incr; i++) 110 for (i = 0; incr < delta - incr; i++)
111 incr = incr << 1; 111 incr = incr << 1;
112 for (; i >= 0; incr >>= 1, i--) { 112 for (; i >= 0; incr >>= 1, i--) {
113 if (delta <= incr) 113 if (delta < incr)
114 continue; 114 continue;
115 timer->it.cpu.expires.sched += incr; 115 timer->it.cpu.expires.sched += incr;
116 timer->it_overrun += 1 << i; 116 timer->it_overrun += 1 << i;
@@ -128,7 +128,7 @@ static inline void bump_cpu_timer(struct k_itimer *timer,
128 for (i = 0; cputime_lt(incr, cputime_sub(delta, incr)); i++) 128 for (i = 0; cputime_lt(incr, cputime_sub(delta, incr)); i++)
129 incr = cputime_add(incr, incr); 129 incr = cputime_add(incr, incr);
130 for (; i >= 0; incr = cputime_halve(incr), i--) { 130 for (; i >= 0; incr = cputime_halve(incr), i--) {
131 if (cputime_le(delta, incr)) 131 if (cputime_lt(delta, incr))
132 continue; 132 continue;
133 timer->it.cpu.expires.cpu = 133 timer->it.cpu.expires.cpu =
134 cputime_add(timer->it.cpu.expires.cpu, incr); 134 cputime_add(timer->it.cpu.expires.cpu, incr);
@@ -497,7 +497,7 @@ static void process_timer_rebalance(struct task_struct *p,
497 left = cputime_div(cputime_sub(expires.cpu, val.cpu), 497 left = cputime_div(cputime_sub(expires.cpu, val.cpu),
498 nthreads); 498 nthreads);
499 do { 499 do {
500 if (!unlikely(t->exit_state)) { 500 if (!unlikely(t->flags & PF_EXITING)) {
501 ticks = cputime_add(prof_ticks(t), left); 501 ticks = cputime_add(prof_ticks(t), left);
502 if (cputime_eq(t->it_prof_expires, 502 if (cputime_eq(t->it_prof_expires,
503 cputime_zero) || 503 cputime_zero) ||
@@ -512,7 +512,7 @@ static void process_timer_rebalance(struct task_struct *p,
512 left = cputime_div(cputime_sub(expires.cpu, val.cpu), 512 left = cputime_div(cputime_sub(expires.cpu, val.cpu),
513 nthreads); 513 nthreads);
514 do { 514 do {
515 if (!unlikely(t->exit_state)) { 515 if (!unlikely(t->flags & PF_EXITING)) {
516 ticks = cputime_add(virt_ticks(t), left); 516 ticks = cputime_add(virt_ticks(t), left);
517 if (cputime_eq(t->it_virt_expires, 517 if (cputime_eq(t->it_virt_expires,
518 cputime_zero) || 518 cputime_zero) ||
@@ -527,7 +527,7 @@ static void process_timer_rebalance(struct task_struct *p,
527 nsleft = expires.sched - val.sched; 527 nsleft = expires.sched - val.sched;
528 do_div(nsleft, nthreads); 528 do_div(nsleft, nthreads);
529 do { 529 do {
530 if (!unlikely(t->exit_state)) { 530 if (!unlikely(t->flags & PF_EXITING)) {
531 ns = t->sched_time + nsleft; 531 ns = t->sched_time + nsleft;
532 if (t->it_sched_expires == 0 || 532 if (t->it_sched_expires == 0 ||
533 t->it_sched_expires > ns) { 533 t->it_sched_expires > ns) {
@@ -566,6 +566,9 @@ static void arm_timer(struct k_itimer *timer, union cpu_time_count now)
566 struct cpu_timer_list *next; 566 struct cpu_timer_list *next;
567 unsigned long i; 567 unsigned long i;
568 568
569 if (CPUCLOCK_PERTHREAD(timer->it_clock) && (p->flags & PF_EXITING))
570 return;
571
569 head = (CPUCLOCK_PERTHREAD(timer->it_clock) ? 572 head = (CPUCLOCK_PERTHREAD(timer->it_clock) ?
570 p->cpu_timers : p->signal->cpu_timers); 573 p->cpu_timers : p->signal->cpu_timers);
571 head += CPUCLOCK_WHICH(timer->it_clock); 574 head += CPUCLOCK_WHICH(timer->it_clock);
@@ -576,17 +579,15 @@ static void arm_timer(struct k_itimer *timer, union cpu_time_count now)
576 listpos = head; 579 listpos = head;
577 if (CPUCLOCK_WHICH(timer->it_clock) == CPUCLOCK_SCHED) { 580 if (CPUCLOCK_WHICH(timer->it_clock) == CPUCLOCK_SCHED) {
578 list_for_each_entry(next, head, entry) { 581 list_for_each_entry(next, head, entry) {
579 if (next->expires.sched > nt->expires.sched) { 582 if (next->expires.sched > nt->expires.sched)
580 listpos = &next->entry;
581 break; 583 break;
582 } 584 listpos = &next->entry;
583 } 585 }
584 } else { 586 } else {
585 list_for_each_entry(next, head, entry) { 587 list_for_each_entry(next, head, entry) {
586 if (cputime_gt(next->expires.cpu, nt->expires.cpu)) { 588 if (cputime_gt(next->expires.cpu, nt->expires.cpu))
587 listpos = &next->entry;
588 break; 589 break;
589 } 590 listpos = &next->entry;
590 } 591 }
591 } 592 }
592 list_add(&nt->entry, listpos); 593 list_add(&nt->entry, listpos);
@@ -1206,7 +1207,7 @@ static void check_process_timers(struct task_struct *tsk,
1206 1207
1207 do { 1208 do {
1208 t = next_thread(t); 1209 t = next_thread(t);
1209 } while (unlikely(t->exit_state)); 1210 } while (unlikely(t->flags & PF_EXITING));
1210 } while (t != tsk); 1211 } while (t != tsk);
1211 } 1212 }
1212} 1213}
@@ -1295,30 +1296,30 @@ void run_posix_cpu_timers(struct task_struct *tsk)
1295 1296
1296#undef UNEXPIRED 1297#undef UNEXPIRED
1297 1298
1299 BUG_ON(tsk->exit_state);
1300
1298 /* 1301 /*
1299 * Double-check with locks held. 1302 * Double-check with locks held.
1300 */ 1303 */
1301 read_lock(&tasklist_lock); 1304 read_lock(&tasklist_lock);
1302 if (likely(tsk->signal != NULL)) { 1305 spin_lock(&tsk->sighand->siglock);
1303 spin_lock(&tsk->sighand->siglock);
1304 1306
1305 /* 1307 /*
1306 * Here we take off tsk->cpu_timers[N] and tsk->signal->cpu_timers[N] 1308 * Here we take off tsk->cpu_timers[N] and tsk->signal->cpu_timers[N]
1307 * all the timers that are firing, and put them on the firing list. 1309 * all the timers that are firing, and put them on the firing list.
1308 */ 1310 */
1309 check_thread_timers(tsk, &firing); 1311 check_thread_timers(tsk, &firing);
1310 check_process_timers(tsk, &firing); 1312 check_process_timers(tsk, &firing);
1311 1313
1312 /* 1314 /*
1313 * We must release these locks before taking any timer's lock. 1315 * We must release these locks before taking any timer's lock.
1314 * There is a potential race with timer deletion here, as the 1316 * There is a potential race with timer deletion here, as the
1315 * siglock now protects our private firing list. We have set 1317 * siglock now protects our private firing list. We have set
1316 * the firing flag in each timer, so that a deletion attempt 1318 * the firing flag in each timer, so that a deletion attempt
1317 * that gets the timer lock before we do will give it up and 1319 * that gets the timer lock before we do will give it up and
1318 * spin until we've taken care of that timer below. 1320 * spin until we've taken care of that timer below.
1319 */ 1321 */
1320 spin_unlock(&tsk->sighand->siglock); 1322 spin_unlock(&tsk->sighand->siglock);
1321 }
1322 read_unlock(&tasklist_lock); 1323 read_unlock(&tasklist_lock);
1323 1324
1324 /* 1325 /*
diff --git a/kernel/sched.c b/kernel/sched.c
index 1f31a528fdba..1e5cafdf4e27 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -3879,6 +3879,7 @@ EXPORT_SYMBOL(cpu_present_map);
3879 3879
3880#ifndef CONFIG_SMP 3880#ifndef CONFIG_SMP
3881cpumask_t cpu_online_map = CPU_MASK_ALL; 3881cpumask_t cpu_online_map = CPU_MASK_ALL;
3882EXPORT_SYMBOL_GPL(cpu_online_map);
3882cpumask_t cpu_possible_map = CPU_MASK_ALL; 3883cpumask_t cpu_possible_map = CPU_MASK_ALL;
3883#endif 3884#endif
3884 3885
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index cc1fe2672a31..e1d3d77f4aee 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -1750,6 +1750,8 @@ inline void setup_pageset(struct per_cpu_pageset *p, unsigned long batch)
1750{ 1750{
1751 struct per_cpu_pages *pcp; 1751 struct per_cpu_pages *pcp;
1752 1752
1753 memset(p, 0, sizeof(*p));
1754
1753 pcp = &p->pcp[0]; /* hot */ 1755 pcp = &p->pcp[0]; /* hot */
1754 pcp->count = 0; 1756 pcp->count = 0;
1755 pcp->low = 2 * batch; 1757 pcp->low = 2 * batch;
diff --git a/net/core/wireless.c b/net/core/wireless.c
index d17f1583ea3e..271ddb35b0b2 100644
--- a/net/core/wireless.c
+++ b/net/core/wireless.c
@@ -455,10 +455,15 @@ static inline struct iw_statistics *get_wireless_stats(struct net_device *dev)
455 455
456 /* Old location, field to be removed in next WE */ 456 /* Old location, field to be removed in next WE */
457 if(dev->get_wireless_stats) { 457 if(dev->get_wireless_stats) {
458 printk(KERN_DEBUG "%s (WE) : Driver using old /proc/net/wireless support, please fix driver !\n", 458 static int printed_message;
459 dev->name); 459
460 if (!printed_message++)
461 printk(KERN_DEBUG "%s (WE) : Driver using old /proc/net/wireless support, please fix driver !\n",
462 dev->name);
463
460 return dev->get_wireless_stats(dev); 464 return dev->get_wireless_stats(dev);
461 } 465 }
466
462 /* Not found */ 467 /* Not found */
463 return (struct iw_statistics *) NULL; 468 return (struct iw_statistics *) NULL;
464} 469}
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 677419d0c9ad..3e98b57578dc 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -2239,6 +2239,7 @@ static int tcp_ack_update_window(struct sock *sk, struct tcp_sock *tp,
2239 /* Note, it is the only place, where 2239 /* Note, it is the only place, where
2240 * fast path is recovered for sending TCP. 2240 * fast path is recovered for sending TCP.
2241 */ 2241 */
2242 tp->pred_flags = 0;
2242 tcp_fast_path_check(sk, tp); 2243 tcp_fast_path_check(sk, tp);
2243 2244
2244 if (nwin > tp->max_window) { 2245 if (nwin > tp->max_window) {
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
index 30ec3efc48a6..691dea4a58e7 100644
--- a/net/sunrpc/svcsock.c
+++ b/net/sunrpc/svcsock.c
@@ -587,7 +587,7 @@ svc_udp_recvfrom(struct svc_rqst *rqstp)
587 struct timeval tv; 587 struct timeval tv;
588 588
589 tv.tv_sec = xtime.tv_sec; 589 tv.tv_sec = xtime.tv_sec;
590 tv.tv_usec = xtime.tv_nsec * 1000; 590 tv.tv_usec = xtime.tv_nsec / NSEC_PER_USEC;
591 skb_set_timestamp(skb, &tv); 591 skb_set_timestamp(skb, &tv);
592 /* Don't enable netstamp, sunrpc doesn't 592 /* Don't enable netstamp, sunrpc doesn't
593 need that much accuracy */ 593 need that much accuracy */