diff options
author | Jeff Garzik <jgarzik@pobox.com> | 2005-10-27 20:43:20 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-10-27 20:43:20 -0400 |
commit | 26ba2a7a9f4d8921f095af646a7d22c15a148028 (patch) | |
tree | 1e694da6999653551bc61eb9cc6db2eb4645fcd1 | |
parent | 91190758d410a5d33c6051ba9ca95baa430256bb (diff) | |
parent | 741b2252a5e14d6c60a913c77a6099abe73a854a (diff) |
Merge branch 'master'
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | arch/arm/mach-pxa/corgi_lcd.c | 2 | ||||
-rw-r--r-- | arch/ppc64/kernel/mpic.c | 4 | ||||
-rw-r--r-- | drivers/char/drm/radeon_cp.c | 11 | ||||
-rw-r--r-- | drivers/cpufreq/cpufreq_conservative.c | 6 | ||||
-rw-r--r-- | drivers/md/md.c | 10 | ||||
-rw-r--r-- | drivers/serial/8250_pci.c | 26 | ||||
-rw-r--r-- | fs/hfsplus/super.c | 1 | ||||
-rw-r--r-- | include/asm-arm/bitops.h | 1 | ||||
-rw-r--r-- | include/asm-x86_64/pci.h | 6 | ||||
-rw-r--r-- | include/linux/pci_ids.h | 2 | ||||
-rw-r--r-- | kernel/exit.c | 8 | ||||
-rw-r--r-- | kernel/posix-cpu-timers.c | 63 | ||||
-rw-r--r-- | kernel/sched.c | 1 | ||||
-rw-r--r-- | mm/page_alloc.c | 2 | ||||
-rw-r--r-- | net/core/wireless.c | 9 | ||||
-rw-r--r-- | net/ipv4/tcp_input.c | 1 | ||||
-rw-r--r-- | net/sunrpc/svcsock.c | 2 |
18 files changed, 103 insertions, 54 deletions
@@ -1,7 +1,7 @@ | |||
1 | VERSION = 2 | 1 | VERSION = 2 |
2 | PATCHLEVEL = 6 | 2 | PATCHLEVEL = 6 |
3 | SUBLEVEL = 14 | 3 | SUBLEVEL = 14 |
4 | EXTRAVERSION =-rc5 | 4 | EXTRAVERSION = |
5 | NAME=Affluent Albatross | 5 | NAME=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 | ||
489 | unsigned long spitz_get_hsync_len(void) | 489 | unsigned 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 | ||
350 | static __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 | */ |
94 | static inline void bump_cpu_timer(struct k_itimer *timer, | 94 | static 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 |
3881 | cpumask_t cpu_online_map = CPU_MASK_ALL; | 3881 | cpumask_t cpu_online_map = CPU_MASK_ALL; |
3882 | EXPORT_SYMBOL_GPL(cpu_online_map); | ||
3882 | cpumask_t cpu_possible_map = CPU_MASK_ALL; | 3883 | cpumask_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 */ |