diff options
38 files changed, 182 insertions, 122 deletions
| @@ -1,7 +1,7 @@ | |||
| 1 | VERSION = 2 | 1 | VERSION = 2 |
| 2 | PATCHLEVEL = 6 | 2 | PATCHLEVEL = 6 |
| 3 | SUBLEVEL = 21 | 3 | SUBLEVEL = 21 |
| 4 | EXTRAVERSION = -rc5 | 4 | EXTRAVERSION = -rc6 |
| 5 | NAME = Nocturnal Monster Puppy | 5 | NAME = Nocturnal Monster Puppy |
| 6 | 6 | ||
| 7 | # *DOCUMENTATION* | 7 | # *DOCUMENTATION* |
diff --git a/arch/i386/kernel/io_apic.c b/arch/i386/kernel/io_apic.c index e4408ff4e674..b3ab8ffebd27 100644 --- a/arch/i386/kernel/io_apic.c +++ b/arch/i386/kernel/io_apic.c | |||
| @@ -736,7 +736,7 @@ failed: | |||
| 736 | return 0; | 736 | return 0; |
| 737 | } | 737 | } |
| 738 | 738 | ||
| 739 | int __init irqbalance_disable(char *str) | 739 | int __devinit irqbalance_disable(char *str) |
| 740 | { | 740 | { |
| 741 | irqbalance_disabled = 1; | 741 | irqbalance_disabled = 1; |
| 742 | return 1; | 742 | return 1; |
diff --git a/arch/i386/kernel/vmi.c b/arch/i386/kernel/vmi.c index fb07a1aad225..edc339fa5038 100644 --- a/arch/i386/kernel/vmi.c +++ b/arch/i386/kernel/vmi.c | |||
| @@ -69,6 +69,7 @@ struct { | |||
| 69 | void (*flush_tlb)(int); | 69 | void (*flush_tlb)(int); |
| 70 | void (*set_initial_ap_state)(int, int); | 70 | void (*set_initial_ap_state)(int, int); |
| 71 | void (*halt)(void); | 71 | void (*halt)(void); |
| 72 | void (*set_lazy_mode)(int mode); | ||
| 72 | } vmi_ops; | 73 | } vmi_ops; |
| 73 | 74 | ||
| 74 | /* XXX move this to alternative.h */ | 75 | /* XXX move this to alternative.h */ |
| @@ -574,6 +575,26 @@ vmi_startup_ipi_hook(int phys_apicid, unsigned long start_eip, | |||
| 574 | } | 575 | } |
| 575 | #endif | 576 | #endif |
| 576 | 577 | ||
| 578 | static void vmi_set_lazy_mode(int mode) | ||
| 579 | { | ||
| 580 | static DEFINE_PER_CPU(int, lazy_mode); | ||
| 581 | |||
| 582 | if (!vmi_ops.set_lazy_mode) | ||
| 583 | return; | ||
| 584 | |||
| 585 | /* Modes should never nest or overlap */ | ||
| 586 | BUG_ON(__get_cpu_var(lazy_mode) && !(mode == PARAVIRT_LAZY_NONE || | ||
| 587 | mode == PARAVIRT_LAZY_FLUSH)); | ||
| 588 | |||
| 589 | if (mode == PARAVIRT_LAZY_FLUSH) { | ||
| 590 | vmi_ops.set_lazy_mode(0); | ||
| 591 | vmi_ops.set_lazy_mode(__get_cpu_var(lazy_mode)); | ||
| 592 | } else { | ||
| 593 | vmi_ops.set_lazy_mode(mode); | ||
| 594 | __get_cpu_var(lazy_mode) = mode; | ||
| 595 | } | ||
| 596 | } | ||
| 597 | |||
| 577 | static inline int __init check_vmi_rom(struct vrom_header *rom) | 598 | static inline int __init check_vmi_rom(struct vrom_header *rom) |
| 578 | { | 599 | { |
| 579 | struct pci_header *pci; | 600 | struct pci_header *pci; |
| @@ -804,7 +825,7 @@ static inline int __init activate_vmi(void) | |||
| 804 | para_wrap(load_esp0, vmi_load_esp0, set_kernel_stack, UpdateKernelStack); | 825 | para_wrap(load_esp0, vmi_load_esp0, set_kernel_stack, UpdateKernelStack); |
| 805 | para_fill(set_iopl_mask, SetIOPLMask); | 826 | para_fill(set_iopl_mask, SetIOPLMask); |
| 806 | para_fill(io_delay, IODelay); | 827 | para_fill(io_delay, IODelay); |
| 807 | para_fill(set_lazy_mode, SetLazyMode); | 828 | para_wrap(set_lazy_mode, vmi_set_lazy_mode, set_lazy_mode, SetLazyMode); |
| 808 | 829 | ||
| 809 | /* user and kernel flush are just handled with different flags to FlushTLB */ | 830 | /* user and kernel flush are just handled with different flags to FlushTLB */ |
| 810 | para_wrap(flush_tlb_user, vmi_flush_tlb_user, flush_tlb, FlushTLB); | 831 | para_wrap(flush_tlb_user, vmi_flush_tlb_user, flush_tlb, FlushTLB); |
diff --git a/arch/i386/mm/highmem.c b/arch/i386/mm/highmem.c index bb2de1089add..ac70d09df7ee 100644 --- a/arch/i386/mm/highmem.c +++ b/arch/i386/mm/highmem.c | |||
| @@ -42,6 +42,7 @@ void *kmap_atomic(struct page *page, enum km_type type) | |||
| 42 | 42 | ||
| 43 | vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); | 43 | vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); |
| 44 | set_pte(kmap_pte-idx, mk_pte(page, kmap_prot)); | 44 | set_pte(kmap_pte-idx, mk_pte(page, kmap_prot)); |
| 45 | arch_flush_lazy_mmu_mode(); | ||
| 45 | 46 | ||
| 46 | return (void*) vaddr; | 47 | return (void*) vaddr; |
| 47 | } | 48 | } |
| @@ -82,6 +83,7 @@ void *kmap_atomic_pfn(unsigned long pfn, enum km_type type) | |||
| 82 | idx = type + KM_TYPE_NR*smp_processor_id(); | 83 | idx = type + KM_TYPE_NR*smp_processor_id(); |
| 83 | vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); | 84 | vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); |
| 84 | set_pte(kmap_pte-idx, pfn_pte(pfn, kmap_prot)); | 85 | set_pte(kmap_pte-idx, pfn_pte(pfn, kmap_prot)); |
| 86 | arch_flush_lazy_mmu_mode(); | ||
| 85 | 87 | ||
| 86 | return (void*) vaddr; | 88 | return (void*) vaddr; |
| 87 | } | 89 | } |
diff --git a/arch/ia64/kernel/msi_ia64.c b/arch/ia64/kernel/msi_ia64.c index ebbeadfee42d..c81080df70df 100644 --- a/arch/ia64/kernel/msi_ia64.c +++ b/arch/ia64/kernel/msi_ia64.c | |||
| @@ -76,7 +76,7 @@ int ia64_setup_msi_irq(struct pci_dev *pdev, struct msi_desc *desc) | |||
| 76 | 76 | ||
| 77 | set_irq_msi(irq, desc); | 77 | set_irq_msi(irq, desc); |
| 78 | dest_phys_id = cpu_physical_id(first_cpu(cpu_online_map)); | 78 | dest_phys_id = cpu_physical_id(first_cpu(cpu_online_map)); |
| 79 | vector = irq; | 79 | vector = irq_to_vector(irq); |
| 80 | 80 | ||
| 81 | msg.address_hi = 0; | 81 | msg.address_hi = 0; |
| 82 | msg.address_lo = | 82 | msg.address_lo = |
| @@ -110,7 +110,7 @@ static void ia64_ack_msi_irq(unsigned int irq) | |||
| 110 | 110 | ||
| 111 | static int ia64_msi_retrigger_irq(unsigned int irq) | 111 | static int ia64_msi_retrigger_irq(unsigned int irq) |
| 112 | { | 112 | { |
| 113 | unsigned int vector = irq; | 113 | unsigned int vector = irq_to_vector(irq); |
| 114 | ia64_resend_irq(vector); | 114 | ia64_resend_irq(vector); |
| 115 | 115 | ||
| 116 | return 1; | 116 | return 1; |
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c index 69b9bb3fd7c5..dc7dd7648ec5 100644 --- a/arch/ia64/kernel/setup.c +++ b/arch/ia64/kernel/setup.c | |||
| @@ -640,7 +640,7 @@ show_cpuinfo (struct seq_file *m, void *v) | |||
| 640 | "features : %s\n" | 640 | "features : %s\n" |
| 641 | "cpu number : %lu\n" | 641 | "cpu number : %lu\n" |
| 642 | "cpu regs : %u\n" | 642 | "cpu regs : %u\n" |
| 643 | "cpu MHz : %lu.%06lu\n" | 643 | "cpu MHz : %lu.%03lu\n" |
| 644 | "itc MHz : %lu.%06lu\n" | 644 | "itc MHz : %lu.%06lu\n" |
| 645 | "BogoMIPS : %lu.%02lu\n", | 645 | "BogoMIPS : %lu.%02lu\n", |
| 646 | cpunum, c->vendor, c->family, c->model, | 646 | cpunum, c->vendor, c->family, c->model, |
diff --git a/arch/ia64/sn/kernel/bte_error.c b/arch/ia64/sn/kernel/bte_error.c index f1ec1370b3e3..b6fcf8164f2b 100644 --- a/arch/ia64/sn/kernel/bte_error.c +++ b/arch/ia64/sn/kernel/bte_error.c | |||
| @@ -78,7 +78,7 @@ int shub1_bte_error_handler(unsigned long _nodepda) | |||
| 78 | * There are errors which still need to be cleaned up by | 78 | * There are errors which still need to be cleaned up by |
| 79 | * hubiio_crb_error_handler | 79 | * hubiio_crb_error_handler |
| 80 | */ | 80 | */ |
| 81 | mod_timer(recovery_timer, HZ * 5); | 81 | mod_timer(recovery_timer, jiffies + (HZ * 5)); |
| 82 | BTE_PRINTK(("eh:%p:%d Marked Giving up\n", err_nodepda, | 82 | BTE_PRINTK(("eh:%p:%d Marked Giving up\n", err_nodepda, |
| 83 | smp_processor_id())); | 83 | smp_processor_id())); |
| 84 | return 1; | 84 | return 1; |
| @@ -95,7 +95,7 @@ int shub1_bte_error_handler(unsigned long _nodepda) | |||
| 95 | icrbd.ii_icrb0_d_regval = | 95 | icrbd.ii_icrb0_d_regval = |
| 96 | REMOTE_HUB_L(nasid, IIO_ICRB_D(i)); | 96 | REMOTE_HUB_L(nasid, IIO_ICRB_D(i)); |
| 97 | if (icrbd.d_bteop) { | 97 | if (icrbd.d_bteop) { |
| 98 | mod_timer(recovery_timer, HZ * 5); | 98 | mod_timer(recovery_timer, jiffies + (HZ * 5)); |
| 99 | BTE_PRINTK(("eh:%p:%d Valid %d, Giving up\n", | 99 | BTE_PRINTK(("eh:%p:%d Valid %d, Giving up\n", |
| 100 | err_nodepda, smp_processor_id(), | 100 | err_nodepda, smp_processor_id(), |
| 101 | i)); | 101 | i)); |
| @@ -150,7 +150,7 @@ int shub2_bte_error_handler(unsigned long _nodepda) | |||
| 150 | status = BTE_LNSTAT_LOAD(bte); | 150 | status = BTE_LNSTAT_LOAD(bte); |
| 151 | if ((status & IBLS_ERROR) || !(status & IBLS_BUSY)) | 151 | if ((status & IBLS_ERROR) || !(status & IBLS_BUSY)) |
| 152 | continue; | 152 | continue; |
| 153 | mod_timer(recovery_timer, HZ * 5); | 153 | mod_timer(recovery_timer, jiffies + (HZ * 5)); |
| 154 | BTE_PRINTK(("eh:%p:%d Marked Giving up\n", err_nodepda, | 154 | BTE_PRINTK(("eh:%p:%d Marked Giving up\n", err_nodepda, |
| 155 | smp_processor_id())); | 155 | smp_processor_id())); |
| 156 | return 1; | 156 | return 1; |
diff --git a/arch/ia64/sn/pci/pcibr/pcibr_dma.c b/arch/ia64/sn/pci/pcibr/pcibr_dma.c index 1ee977fb6ebb..95af40cb22f2 100644 --- a/arch/ia64/sn/pci/pcibr/pcibr_dma.c +++ b/arch/ia64/sn/pci/pcibr/pcibr_dma.c | |||
| @@ -96,10 +96,14 @@ pcibr_dmamap_ate32(struct pcidev_info *info, | |||
| 96 | } | 96 | } |
| 97 | 97 | ||
| 98 | /* | 98 | /* |
| 99 | * If we're mapping for MSI, set the MSI bit in the ATE | 99 | * If we're mapping for MSI, set the MSI bit in the ATE. If it's a |
| 100 | * TIOCP based pci bus, we also need to set the PIO bit in the ATE. | ||
| 100 | */ | 101 | */ |
| 101 | if (dma_flags & SN_DMA_MSI) | 102 | if (dma_flags & SN_DMA_MSI) { |
| 102 | ate |= PCI32_ATE_MSI; | 103 | ate |= PCI32_ATE_MSI; |
| 104 | if (IS_TIOCP_SOFT(pcibus_info)) | ||
| 105 | ate |= PCI32_ATE_PIO; | ||
| 106 | } | ||
| 103 | 107 | ||
| 104 | ate_write(pcibus_info, ate_index, ate_count, ate); | 108 | ate_write(pcibus_info, ate_index, ate_count, ate); |
| 105 | 109 | ||
diff --git a/arch/x86_64/kernel/early-quirks.c b/arch/x86_64/kernel/early-quirks.c index 148c6bcf5bb4..fede55a53995 100644 --- a/arch/x86_64/kernel/early-quirks.c +++ b/arch/x86_64/kernel/early-quirks.c | |||
| @@ -88,7 +88,7 @@ struct chipset { | |||
| 88 | void (*f)(void); | 88 | void (*f)(void); |
| 89 | }; | 89 | }; |
| 90 | 90 | ||
| 91 | static struct __initdata chipset early_qrk[] = { | 91 | static struct chipset early_qrk[] __initdata = { |
| 92 | { PCI_VENDOR_ID_NVIDIA, nvidia_bugs }, | 92 | { PCI_VENDOR_ID_NVIDIA, nvidia_bugs }, |
| 93 | { PCI_VENDOR_ID_VIA, via_bugs }, | 93 | { PCI_VENDOR_ID_VIA, via_bugs }, |
| 94 | { PCI_VENDOR_ID_ATI, ati_bugs }, | 94 | { PCI_VENDOR_ID_ATI, ati_bugs }, |
diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c index e542a628f1c7..a9fdbf9126ca 100644 --- a/drivers/char/agp/intel-agp.c +++ b/drivers/char/agp/intel-agp.c | |||
| @@ -18,11 +18,14 @@ | |||
| 18 | #define PCI_DEVICE_ID_INTEL_82965Q_IG 0x2992 | 18 | #define PCI_DEVICE_ID_INTEL_82965Q_IG 0x2992 |
| 19 | #define PCI_DEVICE_ID_INTEL_82965G_HB 0x29A0 | 19 | #define PCI_DEVICE_ID_INTEL_82965G_HB 0x29A0 |
| 20 | #define PCI_DEVICE_ID_INTEL_82965G_IG 0x29A2 | 20 | #define PCI_DEVICE_ID_INTEL_82965G_IG 0x29A2 |
| 21 | #define PCI_DEVICE_ID_INTEL_82965GM_HB 0x2A00 | ||
| 22 | #define PCI_DEVICE_ID_INTEL_82965GM_IG 0x2A02 | ||
| 21 | 23 | ||
| 22 | #define IS_I965 (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82946GZ_HB || \ | 24 | #define IS_I965 (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82946GZ_HB || \ |
| 23 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965G_1_HB || \ | 25 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965G_1_HB || \ |
| 24 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965Q_HB || \ | 26 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965Q_HB || \ |
| 25 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965G_HB) | 27 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965G_HB || \ |
| 28 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965GM_HB) | ||
| 26 | 29 | ||
| 27 | 30 | ||
| 28 | extern int agp_memory_reserved; | 31 | extern int agp_memory_reserved; |
| @@ -1921,7 +1924,13 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev, | |||
| 1921 | bridge->driver = &intel_845_driver; | 1924 | bridge->driver = &intel_845_driver; |
| 1922 | name = "965G"; | 1925 | name = "965G"; |
| 1923 | break; | 1926 | break; |
| 1924 | 1927 | case PCI_DEVICE_ID_INTEL_82965GM_HB: | |
| 1928 | if (find_i830(PCI_DEVICE_ID_INTEL_82965GM_IG)) | ||
| 1929 | bridge->driver = &intel_i965_driver; | ||
| 1930 | else | ||
| 1931 | bridge->driver = &intel_845_driver; | ||
| 1932 | name = "965GM"; | ||
| 1933 | break; | ||
| 1925 | case PCI_DEVICE_ID_INTEL_7505_0: | 1934 | case PCI_DEVICE_ID_INTEL_7505_0: |
| 1926 | bridge->driver = &intel_7505_driver; | 1935 | bridge->driver = &intel_7505_driver; |
| 1927 | name = "E7505"; | 1936 | name = "E7505"; |
| @@ -2080,6 +2089,7 @@ static struct pci_device_id agp_intel_pci_table[] = { | |||
| 2080 | ID(PCI_DEVICE_ID_INTEL_82965G_1_HB), | 2089 | ID(PCI_DEVICE_ID_INTEL_82965G_1_HB), |
| 2081 | ID(PCI_DEVICE_ID_INTEL_82965Q_HB), | 2090 | ID(PCI_DEVICE_ID_INTEL_82965Q_HB), |
| 2082 | ID(PCI_DEVICE_ID_INTEL_82965G_HB), | 2091 | ID(PCI_DEVICE_ID_INTEL_82965G_HB), |
| 2092 | ID(PCI_DEVICE_ID_INTEL_82965GM_HB), | ||
| 2083 | { } | 2093 | { } |
| 2084 | }; | 2094 | }; |
| 2085 | 2095 | ||
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index 67f3347afcf3..1cca32f46947 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c | |||
| @@ -969,7 +969,7 @@ int hid_input_report(struct hid_device *hid, int type, u8 *data, int size, int i | |||
| 969 | 969 | ||
| 970 | if (size < rsize) { | 970 | if (size < rsize) { |
| 971 | dbg("report %d is too short, (%d < %d)", report->id, size, rsize); | 971 | dbg("report %d is too short, (%d < %d)", report->id, size, rsize); |
| 972 | return -1; | 972 | memset(data + size, 0, rsize - size); |
| 973 | } | 973 | } |
| 974 | 974 | ||
| 975 | if ((hid->claimed & HID_CLAIMED_HIDDEV) && hid->hiddev_report_event) | 975 | if ((hid->claimed & HID_CLAIMED_HIDDEV) && hid->hiddev_report_event) |
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c index 45a928c058cf..638becda81c6 100644 --- a/drivers/ide/ide-cd.c +++ b/drivers/ide/ide-cd.c | |||
| @@ -735,6 +735,15 @@ static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret) | |||
| 735 | cdrom_saw_media_change (drive); | 735 | cdrom_saw_media_change (drive); |
| 736 | /*printk("%s: media changed\n",drive->name);*/ | 736 | /*printk("%s: media changed\n",drive->name);*/ |
| 737 | return 0; | 737 | return 0; |
| 738 | } else if ((sense_key == ILLEGAL_REQUEST) && | ||
| 739 | (rq->cmd[0] == GPCMD_START_STOP_UNIT)) { | ||
| 740 | /* | ||
| 741 | * Don't print error message for this condition-- | ||
| 742 | * SFF8090i indicates that 5/24/00 is the correct | ||
| 743 | * response to a request to close the tray if the | ||
| 744 | * drive doesn't have that capability. | ||
| 745 | * cdrom_log_sense() knows this! | ||
| 746 | */ | ||
| 738 | } else if (!(rq->cmd_flags & REQ_QUIET)) { | 747 | } else if (!(rq->cmd_flags & REQ_QUIET)) { |
| 739 | /* Otherwise, print an error. */ | 748 | /* Otherwise, print an error. */ |
| 740 | ide_dump_status(drive, "packet command error", stat); | 749 | ide_dump_status(drive, "packet command error", stat); |
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c index 0e0280076fcd..8670112f1d39 100644 --- a/drivers/ide/ide-io.c +++ b/drivers/ide/ide-io.c | |||
| @@ -1226,6 +1226,7 @@ static void ide_do_request (ide_hwgroup_t *hwgroup, int masked_irq) | |||
| 1226 | #endif | 1226 | #endif |
| 1227 | /* so that ide_timer_expiry knows what to do */ | 1227 | /* so that ide_timer_expiry knows what to do */ |
| 1228 | hwgroup->sleeping = 1; | 1228 | hwgroup->sleeping = 1; |
| 1229 | hwgroup->req_gen_timer = hwgroup->req_gen; | ||
| 1229 | mod_timer(&hwgroup->timer, sleep); | 1230 | mod_timer(&hwgroup->timer, sleep); |
| 1230 | /* we purposely leave hwgroup->busy==1 | 1231 | /* we purposely leave hwgroup->busy==1 |
| 1231 | * while sleeping */ | 1232 | * while sleeping */ |
| @@ -1411,7 +1412,8 @@ void ide_timer_expiry (unsigned long data) | |||
| 1411 | 1412 | ||
| 1412 | spin_lock_irqsave(&ide_lock, flags); | 1413 | spin_lock_irqsave(&ide_lock, flags); |
| 1413 | 1414 | ||
| 1414 | if ((handler = hwgroup->handler) == NULL) { | 1415 | if (((handler = hwgroup->handler) == NULL) || |
| 1416 | (hwgroup->req_gen != hwgroup->req_gen_timer)) { | ||
| 1415 | /* | 1417 | /* |
| 1416 | * Either a marginal timeout occurred | 1418 | * Either a marginal timeout occurred |
| 1417 | * (got the interrupt just as timer expired), | 1419 | * (got the interrupt just as timer expired), |
| @@ -1439,6 +1441,7 @@ void ide_timer_expiry (unsigned long data) | |||
| 1439 | if ((wait = expiry(drive)) > 0) { | 1441 | if ((wait = expiry(drive)) > 0) { |
| 1440 | /* reset timer */ | 1442 | /* reset timer */ |
| 1441 | hwgroup->timer.expires = jiffies + wait; | 1443 | hwgroup->timer.expires = jiffies + wait; |
| 1444 | hwgroup->req_gen_timer = hwgroup->req_gen; | ||
| 1442 | add_timer(&hwgroup->timer); | 1445 | add_timer(&hwgroup->timer); |
| 1443 | spin_unlock_irqrestore(&ide_lock, flags); | 1446 | spin_unlock_irqrestore(&ide_lock, flags); |
| 1444 | return; | 1447 | return; |
| @@ -1653,6 +1656,7 @@ irqreturn_t ide_intr (int irq, void *dev_id) | |||
| 1653 | printk(KERN_ERR "%s: ide_intr: hwgroup->busy was 0 ??\n", drive->name); | 1656 | printk(KERN_ERR "%s: ide_intr: hwgroup->busy was 0 ??\n", drive->name); |
| 1654 | } | 1657 | } |
| 1655 | hwgroup->handler = NULL; | 1658 | hwgroup->handler = NULL; |
| 1659 | hwgroup->req_gen++; | ||
| 1656 | del_timer(&hwgroup->timer); | 1660 | del_timer(&hwgroup->timer); |
| 1657 | spin_unlock(&ide_lock); | 1661 | spin_unlock(&ide_lock); |
| 1658 | 1662 | ||
diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c index 1ee53a551c3a..3caa176b3155 100644 --- a/drivers/ide/ide-iops.c +++ b/drivers/ide/ide-iops.c | |||
| @@ -889,6 +889,7 @@ static void __ide_set_handler (ide_drive_t *drive, ide_handler_t *handler, | |||
| 889 | hwgroup->handler = handler; | 889 | hwgroup->handler = handler; |
| 890 | hwgroup->expiry = expiry; | 890 | hwgroup->expiry = expiry; |
| 891 | hwgroup->timer.expires = jiffies + timeout; | 891 | hwgroup->timer.expires = jiffies + timeout; |
| 892 | hwgroup->req_gen_timer = hwgroup->req_gen; | ||
| 892 | add_timer(&hwgroup->timer); | 893 | add_timer(&hwgroup->timer); |
| 893 | } | 894 | } |
| 894 | 895 | ||
| @@ -929,6 +930,7 @@ void ide_execute_command(ide_drive_t *drive, task_ioreg_t cmd, ide_handler_t *ha | |||
| 929 | hwgroup->handler = handler; | 930 | hwgroup->handler = handler; |
| 930 | hwgroup->expiry = expiry; | 931 | hwgroup->expiry = expiry; |
| 931 | hwgroup->timer.expires = jiffies + timeout; | 932 | hwgroup->timer.expires = jiffies + timeout; |
| 933 | hwgroup->req_gen_timer = hwgroup->req_gen; | ||
| 932 | add_timer(&hwgroup->timer); | 934 | add_timer(&hwgroup->timer); |
| 933 | hwif->OUTBSYNC(drive, cmd, IDE_COMMAND_REG); | 935 | hwif->OUTBSYNC(drive, cmd, IDE_COMMAND_REG); |
| 934 | /* Drive takes 400nS to respond, we must avoid the IRQ being | 936 | /* Drive takes 400nS to respond, we must avoid the IRQ being |
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c index a6f098fda884..ae5bf2be6f52 100644 --- a/drivers/ide/ide.c +++ b/drivers/ide/ide.c | |||
| @@ -1962,6 +1962,8 @@ static char *media_string(ide_drive_t *drive) | |||
| 1962 | return "tape"; | 1962 | return "tape"; |
| 1963 | case ide_floppy: | 1963 | case ide_floppy: |
| 1964 | return "floppy"; | 1964 | return "floppy"; |
| 1965 | case ide_optical: | ||
| 1966 | return "optical"; | ||
| 1965 | default: | 1967 | default: |
| 1966 | return "UNKNOWN"; | 1968 | return "UNKNOWN"; |
| 1967 | } | 1969 | } |
diff --git a/drivers/net/sc92031.c b/drivers/net/sc92031.c index 4a926f20b6ea..c32c21af3fdd 100644 --- a/drivers/net/sc92031.c +++ b/drivers/net/sc92031.c | |||
| @@ -964,7 +964,7 @@ static int sc92031_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 964 | goto out; | 964 | goto out; |
| 965 | } | 965 | } |
| 966 | 966 | ||
| 967 | spin_lock_bh(&priv->lock); | 967 | spin_lock(&priv->lock); |
| 968 | 968 | ||
| 969 | if (unlikely(!netif_carrier_ok(dev))) { | 969 | if (unlikely(!netif_carrier_ok(dev))) { |
| 970 | err = -ENOLINK; | 970 | err = -ENOLINK; |
| @@ -1005,7 +1005,7 @@ static int sc92031_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 1005 | netif_stop_queue(dev); | 1005 | netif_stop_queue(dev); |
| 1006 | 1006 | ||
| 1007 | out_unlock: | 1007 | out_unlock: |
| 1008 | spin_unlock_bh(&priv->lock); | 1008 | spin_unlock(&priv->lock); |
| 1009 | 1009 | ||
| 1010 | out: | 1010 | out: |
| 1011 | dev_kfree_skb(skb); | 1011 | dev_kfree_skb(skb); |
| @@ -1042,12 +1042,12 @@ static int sc92031_open(struct net_device *dev) | |||
| 1042 | priv->pm_config = 0; | 1042 | priv->pm_config = 0; |
| 1043 | 1043 | ||
| 1044 | /* Interrupts already disabled by sc92031_stop or sc92031_probe */ | 1044 | /* Interrupts already disabled by sc92031_stop or sc92031_probe */ |
| 1045 | spin_lock(&priv->lock); | 1045 | spin_lock_bh(&priv->lock); |
| 1046 | 1046 | ||
| 1047 | _sc92031_reset(dev); | 1047 | _sc92031_reset(dev); |
| 1048 | mmiowb(); | 1048 | mmiowb(); |
| 1049 | 1049 | ||
| 1050 | spin_unlock(&priv->lock); | 1050 | spin_unlock_bh(&priv->lock); |
| 1051 | sc92031_enable_interrupts(dev); | 1051 | sc92031_enable_interrupts(dev); |
| 1052 | 1052 | ||
| 1053 | if (netif_carrier_ok(dev)) | 1053 | if (netif_carrier_ok(dev)) |
| @@ -1077,13 +1077,13 @@ static int sc92031_stop(struct net_device *dev) | |||
| 1077 | /* Disable interrupts, stop Tx and Rx. */ | 1077 | /* Disable interrupts, stop Tx and Rx. */ |
| 1078 | sc92031_disable_interrupts(dev); | 1078 | sc92031_disable_interrupts(dev); |
| 1079 | 1079 | ||
| 1080 | spin_lock(&priv->lock); | 1080 | spin_lock_bh(&priv->lock); |
| 1081 | 1081 | ||
| 1082 | _sc92031_disable_tx_rx(dev); | 1082 | _sc92031_disable_tx_rx(dev); |
| 1083 | _sc92031_tx_clear(dev); | 1083 | _sc92031_tx_clear(dev); |
| 1084 | mmiowb(); | 1084 | mmiowb(); |
| 1085 | 1085 | ||
| 1086 | spin_unlock(&priv->lock); | 1086 | spin_unlock_bh(&priv->lock); |
| 1087 | 1087 | ||
| 1088 | free_irq(pdev->irq, dev); | 1088 | free_irq(pdev->irq, dev); |
| 1089 | pci_free_consistent(pdev, TX_BUF_TOT_LEN, priv->tx_bufs, | 1089 | pci_free_consistent(pdev, TX_BUF_TOT_LEN, priv->tx_bufs, |
| @@ -1539,13 +1539,13 @@ static int sc92031_suspend(struct pci_dev *pdev, pm_message_t state) | |||
| 1539 | /* Disable interrupts, stop Tx and Rx. */ | 1539 | /* Disable interrupts, stop Tx and Rx. */ |
| 1540 | sc92031_disable_interrupts(dev); | 1540 | sc92031_disable_interrupts(dev); |
| 1541 | 1541 | ||
| 1542 | spin_lock(&priv->lock); | 1542 | spin_lock_bh(&priv->lock); |
| 1543 | 1543 | ||
| 1544 | _sc92031_disable_tx_rx(dev); | 1544 | _sc92031_disable_tx_rx(dev); |
| 1545 | _sc92031_tx_clear(dev); | 1545 | _sc92031_tx_clear(dev); |
| 1546 | mmiowb(); | 1546 | mmiowb(); |
| 1547 | 1547 | ||
| 1548 | spin_unlock(&priv->lock); | 1548 | spin_unlock_bh(&priv->lock); |
| 1549 | 1549 | ||
| 1550 | out: | 1550 | out: |
| 1551 | pci_set_power_state(pdev, pci_choose_state(pdev, state)); | 1551 | pci_set_power_state(pdev, pci_choose_state(pdev, state)); |
| @@ -1565,12 +1565,12 @@ static int sc92031_resume(struct pci_dev *pdev) | |||
| 1565 | goto out; | 1565 | goto out; |
| 1566 | 1566 | ||
| 1567 | /* Interrupts already disabled by sc92031_suspend */ | 1567 | /* Interrupts already disabled by sc92031_suspend */ |
| 1568 | spin_lock(&priv->lock); | 1568 | spin_lock_bh(&priv->lock); |
| 1569 | 1569 | ||
| 1570 | _sc92031_reset(dev); | 1570 | _sc92031_reset(dev); |
| 1571 | mmiowb(); | 1571 | mmiowb(); |
| 1572 | 1572 | ||
| 1573 | spin_unlock(&priv->lock); | 1573 | spin_unlock_bh(&priv->lock); |
| 1574 | sc92031_enable_interrupts(dev); | 1574 | sc92031_enable_interrupts(dev); |
| 1575 | 1575 | ||
| 1576 | netif_device_attach(dev); | 1576 | netif_device_attach(dev); |
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 0acee9f324e9..256969e1300c 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
| @@ -4834,8 +4834,10 @@ static int tg3_chip_reset(struct tg3 *tp) | |||
| 4834 | * sharing or irqpoll. | 4834 | * sharing or irqpoll. |
| 4835 | */ | 4835 | */ |
| 4836 | tp->tg3_flags |= TG3_FLAG_CHIP_RESETTING; | 4836 | tp->tg3_flags |= TG3_FLAG_CHIP_RESETTING; |
| 4837 | tp->hw_status->status = 0; | 4837 | if (tp->hw_status) { |
| 4838 | tp->hw_status->status_tag = 0; | 4838 | tp->hw_status->status = 0; |
| 4839 | tp->hw_status->status_tag = 0; | ||
| 4840 | } | ||
| 4839 | tp->last_tag = 0; | 4841 | tp->last_tag = 0; |
| 4840 | smp_mb(); | 4842 | smp_mb(); |
| 4841 | synchronize_irq(tp->pdev->irq); | 4843 | synchronize_irq(tp->pdev->irq); |
diff --git a/drivers/pcmcia/omap_cf.c b/drivers/pcmcia/omap_cf.c index d77f75129f8a..2df216b00817 100644 --- a/drivers/pcmcia/omap_cf.c +++ b/drivers/pcmcia/omap_cf.c | |||
| @@ -202,15 +202,14 @@ static struct pccard_operations omap_cf_ops = { | |||
| 202 | * "what chipselect is used". Boards could want more. | 202 | * "what chipselect is used". Boards could want more. |
| 203 | */ | 203 | */ |
| 204 | 204 | ||
| 205 | static int __devinit omap_cf_probe(struct device *dev) | 205 | static int __init omap_cf_probe(struct platform_device *pdev) |
| 206 | { | 206 | { |
| 207 | unsigned seg; | 207 | unsigned seg; |
| 208 | struct omap_cf_socket *cf; | 208 | struct omap_cf_socket *cf; |
| 209 | struct platform_device *pdev = to_platform_device(dev); | ||
| 210 | int irq; | 209 | int irq; |
| 211 | int status; | 210 | int status; |
| 212 | 211 | ||
| 213 | seg = (int) dev->platform_data; | 212 | seg = (int) pdev->dev.platform_data; |
| 214 | if (seg == 0 || seg > 3) | 213 | if (seg == 0 || seg > 3) |
| 215 | return -ENODEV; | 214 | return -ENODEV; |
| 216 | 215 | ||
| @@ -227,7 +226,7 @@ static int __devinit omap_cf_probe(struct device *dev) | |||
| 227 | cf->timer.data = (unsigned long) cf; | 226 | cf->timer.data = (unsigned long) cf; |
| 228 | 227 | ||
| 229 | cf->pdev = pdev; | 228 | cf->pdev = pdev; |
| 230 | dev_set_drvdata(dev, cf); | 229 | platform_set_drvdata(pdev, cf); |
| 231 | 230 | ||
| 232 | /* this primarily just shuts up irq handling noise */ | 231 | /* this primarily just shuts up irq handling noise */ |
| 233 | status = request_irq(irq, omap_cf_irq, IRQF_SHARED, | 232 | status = request_irq(irq, omap_cf_irq, IRQF_SHARED, |
| @@ -291,7 +290,7 @@ static int __devinit omap_cf_probe(struct device *dev) | |||
| 291 | omap_cf_present() ? "present" : "(not present)"); | 290 | omap_cf_present() ? "present" : "(not present)"); |
| 292 | 291 | ||
| 293 | cf->socket.owner = THIS_MODULE; | 292 | cf->socket.owner = THIS_MODULE; |
| 294 | cf->socket.dev.parent = dev; | 293 | cf->socket.dev.parent = &pdev->dev; |
| 295 | cf->socket.ops = &omap_cf_ops; | 294 | cf->socket.ops = &omap_cf_ops; |
| 296 | cf->socket.resource_ops = &pccard_static_ops; | 295 | cf->socket.resource_ops = &pccard_static_ops; |
| 297 | cf->socket.features = SS_CAP_PCCARD | SS_CAP_STATIC_MAP | 296 | cf->socket.features = SS_CAP_PCCARD | SS_CAP_STATIC_MAP |
| @@ -318,9 +317,9 @@ fail0: | |||
| 318 | return status; | 317 | return status; |
| 319 | } | 318 | } |
| 320 | 319 | ||
| 321 | static int __devexit omap_cf_remove(struct device *dev) | 320 | static int __exit omap_cf_remove(struct platform_device *pdev) |
| 322 | { | 321 | { |
| 323 | struct omap_cf_socket *cf = dev_get_drvdata(dev); | 322 | struct omap_cf_socket *cf = platform_get_drvdata(pdev); |
| 324 | 323 | ||
| 325 | cf->active = 0; | 324 | cf->active = 0; |
| 326 | pcmcia_unregister_socket(&cf->socket); | 325 | pcmcia_unregister_socket(&cf->socket); |
| @@ -332,26 +331,36 @@ static int __devexit omap_cf_remove(struct device *dev) | |||
| 332 | return 0; | 331 | return 0; |
| 333 | } | 332 | } |
| 334 | 333 | ||
| 335 | static struct device_driver omap_cf_driver = { | 334 | static int omap_cf_suspend(struct platform_device *pdev, pm_message_t mesg) |
| 336 | .name = (char *) driver_name, | 335 | { |
| 337 | .bus = &platform_bus_type, | 336 | return pcmcia_socket_dev_suspend(&pdev->dev, mesg); |
| 338 | .probe = omap_cf_probe, | 337 | } |
| 339 | .remove = __devexit_p(omap_cf_remove), | 338 | |
| 340 | .suspend = pcmcia_socket_dev_suspend, | 339 | static int omap_cf_resume(struct platform_device *pdev) |
| 341 | .resume = pcmcia_socket_dev_resume, | 340 | { |
| 341 | return pcmcia_socket_dev_resume(&pdev->dev); | ||
| 342 | } | ||
| 343 | |||
| 344 | static struct platform_driver omap_cf_driver = { | ||
| 345 | .driver = { | ||
| 346 | .name = (char *) driver_name, | ||
| 347 | }, | ||
| 348 | .remove = __exit_p(omap_cf_remove), | ||
| 349 | .suspend = omap_cf_suspend, | ||
| 350 | .resume = omap_cf_resume, | ||
| 342 | }; | 351 | }; |
| 343 | 352 | ||
| 344 | static int __init omap_cf_init(void) | 353 | static int __init omap_cf_init(void) |
| 345 | { | 354 | { |
| 346 | if (cpu_is_omap16xx()) | 355 | if (cpu_is_omap16xx()) |
| 347 | return driver_register(&omap_cf_driver); | 356 | return platform_driver_probe(&omap_cf_driver, omap_cf_probe); |
| 348 | return -ENODEV; | 357 | return -ENODEV; |
| 349 | } | 358 | } |
| 350 | 359 | ||
| 351 | static void __exit omap_cf_exit(void) | 360 | static void __exit omap_cf_exit(void) |
| 352 | { | 361 | { |
| 353 | if (cpu_is_omap16xx()) | 362 | if (cpu_is_omap16xx()) |
| 354 | driver_unregister(&omap_cf_driver); | 363 | platform_driver_unregister(&omap_cf_driver); |
| 355 | } | 364 | } |
| 356 | 365 | ||
| 357 | module_init(omap_cf_init); | 366 | module_init(omap_cf_init); |
diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c index 406bf61ed510..8890eba1db52 100644 --- a/fs/fuse/dir.c +++ b/fs/fuse/dir.c | |||
| @@ -195,7 +195,7 @@ static struct dentry_operations fuse_dentry_operations = { | |||
| 195 | .d_revalidate = fuse_dentry_revalidate, | 195 | .d_revalidate = fuse_dentry_revalidate, |
| 196 | }; | 196 | }; |
| 197 | 197 | ||
| 198 | static int valid_mode(int m) | 198 | int fuse_valid_type(int m) |
| 199 | { | 199 | { |
| 200 | return S_ISREG(m) || S_ISDIR(m) || S_ISLNK(m) || S_ISCHR(m) || | 200 | return S_ISREG(m) || S_ISDIR(m) || S_ISLNK(m) || S_ISCHR(m) || |
| 201 | S_ISBLK(m) || S_ISFIFO(m) || S_ISSOCK(m); | 201 | S_ISBLK(m) || S_ISFIFO(m) || S_ISSOCK(m); |
| @@ -248,7 +248,8 @@ static struct dentry *fuse_lookup(struct inode *dir, struct dentry *entry, | |||
| 248 | fuse_put_request(fc, req); | 248 | fuse_put_request(fc, req); |
| 249 | /* Zero nodeid is same as -ENOENT, but with valid timeout */ | 249 | /* Zero nodeid is same as -ENOENT, but with valid timeout */ |
| 250 | if (!err && outarg.nodeid && | 250 | if (!err && outarg.nodeid && |
| 251 | (invalid_nodeid(outarg.nodeid) || !valid_mode(outarg.attr.mode))) | 251 | (invalid_nodeid(outarg.nodeid) || |
| 252 | !fuse_valid_type(outarg.attr.mode))) | ||
| 252 | err = -EIO; | 253 | err = -EIO; |
| 253 | if (!err && outarg.nodeid) { | 254 | if (!err && outarg.nodeid) { |
| 254 | inode = fuse_iget(dir->i_sb, outarg.nodeid, outarg.generation, | 255 | inode = fuse_iget(dir->i_sb, outarg.nodeid, outarg.generation, |
diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h index b98b20de7405..68ae87cbafab 100644 --- a/fs/fuse/fuse_i.h +++ b/fs/fuse/fuse_i.h | |||
| @@ -552,3 +552,8 @@ int fuse_ctl_add_conn(struct fuse_conn *fc); | |||
| 552 | * Remove connection from control filesystem | 552 | * Remove connection from control filesystem |
| 553 | */ | 553 | */ |
| 554 | void fuse_ctl_remove_conn(struct fuse_conn *fc); | 554 | void fuse_ctl_remove_conn(struct fuse_conn *fc); |
| 555 | |||
| 556 | /** | ||
| 557 | * Is file type valid? | ||
| 558 | */ | ||
| 559 | int fuse_valid_type(int m); | ||
diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index 5ab8e50e7808..608db81219a0 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c | |||
| @@ -330,6 +330,8 @@ static int parse_fuse_opt(char *opt, struct fuse_mount_data *d, int is_bdev) | |||
| 330 | case OPT_ROOTMODE: | 330 | case OPT_ROOTMODE: |
| 331 | if (match_octal(&args[0], &value)) | 331 | if (match_octal(&args[0], &value)) |
| 332 | return 0; | 332 | return 0; |
| 333 | if (!fuse_valid_type(value)) | ||
| 334 | return 0; | ||
| 333 | d->rootmode = value; | 335 | d->rootmode = value; |
| 334 | d->rootmode_present = 1; | 336 | d->rootmode_present = 1; |
| 335 | break; | 337 | break; |
diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h index 00c23433b39f..6d7e279b1490 100644 --- a/include/asm-generic/pgtable.h +++ b/include/asm-generic/pgtable.h | |||
| @@ -180,6 +180,7 @@ static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addres | |||
| 180 | #ifndef __HAVE_ARCH_ENTER_LAZY_MMU_MODE | 180 | #ifndef __HAVE_ARCH_ENTER_LAZY_MMU_MODE |
| 181 | #define arch_enter_lazy_mmu_mode() do {} while (0) | 181 | #define arch_enter_lazy_mmu_mode() do {} while (0) |
| 182 | #define arch_leave_lazy_mmu_mode() do {} while (0) | 182 | #define arch_leave_lazy_mmu_mode() do {} while (0) |
| 183 | #define arch_flush_lazy_mmu_mode() do {} while (0) | ||
| 183 | #endif | 184 | #endif |
| 184 | 185 | ||
| 185 | /* | 186 | /* |
| @@ -193,6 +194,7 @@ static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addres | |||
| 193 | #ifndef __HAVE_ARCH_ENTER_LAZY_CPU_MODE | 194 | #ifndef __HAVE_ARCH_ENTER_LAZY_CPU_MODE |
| 194 | #define arch_enter_lazy_cpu_mode() do {} while (0) | 195 | #define arch_enter_lazy_cpu_mode() do {} while (0) |
| 195 | #define arch_leave_lazy_cpu_mode() do {} while (0) | 196 | #define arch_leave_lazy_cpu_mode() do {} while (0) |
| 197 | #define arch_flush_lazy_cpu_mode() do {} while (0) | ||
| 196 | #endif | 198 | #endif |
| 197 | 199 | ||
| 198 | /* | 200 | /* |
diff --git a/include/asm-i386/paravirt.h b/include/asm-i386/paravirt.h index 46dc34ca887a..e63f1e444fcf 100644 --- a/include/asm-i386/paravirt.h +++ b/include/asm-i386/paravirt.h | |||
| @@ -421,14 +421,17 @@ static inline void pmd_clear(pmd_t *pmdp) | |||
| 421 | #define PARAVIRT_LAZY_NONE 0 | 421 | #define PARAVIRT_LAZY_NONE 0 |
| 422 | #define PARAVIRT_LAZY_MMU 1 | 422 | #define PARAVIRT_LAZY_MMU 1 |
| 423 | #define PARAVIRT_LAZY_CPU 2 | 423 | #define PARAVIRT_LAZY_CPU 2 |
| 424 | #define PARAVIRT_LAZY_FLUSH 3 | ||
| 424 | 425 | ||
| 425 | #define __HAVE_ARCH_ENTER_LAZY_CPU_MODE | 426 | #define __HAVE_ARCH_ENTER_LAZY_CPU_MODE |
| 426 | #define arch_enter_lazy_cpu_mode() paravirt_ops.set_lazy_mode(PARAVIRT_LAZY_CPU) | 427 | #define arch_enter_lazy_cpu_mode() paravirt_ops.set_lazy_mode(PARAVIRT_LAZY_CPU) |
| 427 | #define arch_leave_lazy_cpu_mode() paravirt_ops.set_lazy_mode(PARAVIRT_LAZY_NONE) | 428 | #define arch_leave_lazy_cpu_mode() paravirt_ops.set_lazy_mode(PARAVIRT_LAZY_NONE) |
| 429 | #define arch_flush_lazy_cpu_mode() paravirt_ops.set_lazy_mode(PARAVIRT_LAZY_FLUSH) | ||
| 428 | 430 | ||
| 429 | #define __HAVE_ARCH_ENTER_LAZY_MMU_MODE | 431 | #define __HAVE_ARCH_ENTER_LAZY_MMU_MODE |
| 430 | #define arch_enter_lazy_mmu_mode() paravirt_ops.set_lazy_mode(PARAVIRT_LAZY_MMU) | 432 | #define arch_enter_lazy_mmu_mode() paravirt_ops.set_lazy_mode(PARAVIRT_LAZY_MMU) |
| 431 | #define arch_leave_lazy_mmu_mode() paravirt_ops.set_lazy_mode(PARAVIRT_LAZY_NONE) | 433 | #define arch_leave_lazy_mmu_mode() paravirt_ops.set_lazy_mode(PARAVIRT_LAZY_NONE) |
| 434 | #define arch_flush_lazy_mmu_mode() paravirt_ops.set_lazy_mode(PARAVIRT_LAZY_FLUSH) | ||
| 432 | 435 | ||
| 433 | /* These all sit in the .parainstructions section to tell us what to patch. */ | 436 | /* These all sit in the .parainstructions section to tell us what to patch. */ |
| 434 | struct paravirt_patch { | 437 | struct paravirt_patch { |
diff --git a/include/asm-ia64/sn/pcibr_provider.h b/include/asm-ia64/sn/pcibr_provider.h index 17cb6cc3f21a..da205b7cdaac 100644 --- a/include/asm-ia64/sn/pcibr_provider.h +++ b/include/asm-ia64/sn/pcibr_provider.h | |||
| @@ -21,6 +21,7 @@ | |||
| 21 | #define IS_PCI_BRIDGE_ASIC(asic) (asic == PCIIO_ASIC_TYPE_PIC || \ | 21 | #define IS_PCI_BRIDGE_ASIC(asic) (asic == PCIIO_ASIC_TYPE_PIC || \ |
| 22 | asic == PCIIO_ASIC_TYPE_TIOCP) | 22 | asic == PCIIO_ASIC_TYPE_TIOCP) |
| 23 | #define IS_PIC_SOFT(ps) (ps->pbi_bridge_type == PCIBR_BRIDGETYPE_PIC) | 23 | #define IS_PIC_SOFT(ps) (ps->pbi_bridge_type == PCIBR_BRIDGETYPE_PIC) |
| 24 | #define IS_TIOCP_SOFT(ps) (ps->pbi_bridge_type == PCIBR_BRIDGETYPE_TIOCP) | ||
| 24 | 25 | ||
| 25 | 26 | ||
| 26 | /* | 27 | /* |
| @@ -53,8 +54,8 @@ | |||
| 53 | * Bridge PMU Address Transaltion Entry Attibutes | 54 | * Bridge PMU Address Transaltion Entry Attibutes |
| 54 | */ | 55 | */ |
| 55 | #define PCI32_ATE_V (0x1 << 0) | 56 | #define PCI32_ATE_V (0x1 << 0) |
| 56 | #define PCI32_ATE_CO (0x1 << 1) | 57 | #define PCI32_ATE_CO (0x1 << 1) /* PIC ASIC ONLY */ |
| 57 | #define PCI32_ATE_PREC (0x1 << 2) | 58 | #define PCI32_ATE_PIO (0x1 << 1) /* TIOCP ASIC ONLY */ |
| 58 | #define PCI32_ATE_MSI (0x1 << 2) | 59 | #define PCI32_ATE_MSI (0x1 << 2) |
| 59 | #define PCI32_ATE_PREF (0x1 << 3) | 60 | #define PCI32_ATE_PREF (0x1 << 3) |
| 60 | #define PCI32_ATE_BAR (0x1 << 4) | 61 | #define PCI32_ATE_BAR (0x1 << 4) |
diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h index 5bdbc744e773..17c29dca8354 100644 --- a/include/linux/hrtimer.h +++ b/include/linux/hrtimer.h | |||
| @@ -206,6 +206,7 @@ struct hrtimer_cpu_base { | |||
| 206 | struct clock_event_device; | 206 | struct clock_event_device; |
| 207 | 207 | ||
| 208 | extern void clock_was_set(void); | 208 | extern void clock_was_set(void); |
| 209 | extern void hres_timers_resume(void); | ||
| 209 | extern void hrtimer_interrupt(struct clock_event_device *dev); | 210 | extern void hrtimer_interrupt(struct clock_event_device *dev); |
| 210 | 211 | ||
| 211 | /* | 212 | /* |
| @@ -236,6 +237,8 @@ static inline ktime_t hrtimer_cb_get_time(struct hrtimer *timer) | |||
| 236 | */ | 237 | */ |
| 237 | static inline void clock_was_set(void) { } | 238 | static inline void clock_was_set(void) { } |
| 238 | 239 | ||
| 240 | static inline void hres_timers_resume(void) { } | ||
| 241 | |||
| 239 | /* | 242 | /* |
| 240 | * In non high resolution mode the time reference is taken from | 243 | * In non high resolution mode the time reference is taken from |
| 241 | * the base softirq time variable. | 244 | * the base softirq time variable. |
diff --git a/include/linux/ide.h b/include/linux/ide.h index 58564a199862..d3bbc7188b6a 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
| @@ -861,6 +861,8 @@ typedef struct hwgroup_s { | |||
| 861 | int (*expiry)(ide_drive_t *); | 861 | int (*expiry)(ide_drive_t *); |
| 862 | /* ide_system_bus_speed */ | 862 | /* ide_system_bus_speed */ |
| 863 | int pio_clock; | 863 | int pio_clock; |
| 864 | int req_gen; | ||
| 865 | int req_gen_timer; | ||
| 864 | 866 | ||
| 865 | unsigned char cmd_buf[4]; | 867 | unsigned char cmd_buf[4]; |
| 866 | } ide_hwgroup_t; | 868 | } ide_hwgroup_t; |
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c index 067ba2c05328..b74860aaf5f1 100644 --- a/kernel/hrtimer.c +++ b/kernel/hrtimer.c | |||
| @@ -459,6 +459,18 @@ void clock_was_set(void) | |||
| 459 | } | 459 | } |
| 460 | 460 | ||
| 461 | /* | 461 | /* |
| 462 | * During resume we might have to reprogram the high resolution timer | ||
| 463 | * interrupt (on the local CPU): | ||
| 464 | */ | ||
| 465 | void hres_timers_resume(void) | ||
| 466 | { | ||
| 467 | WARN_ON_ONCE(num_online_cpus() > 1); | ||
| 468 | |||
| 469 | /* Retrigger the CPU local events: */ | ||
| 470 | retrigger_next_event(NULL); | ||
| 471 | } | ||
| 472 | |||
| 473 | /* | ||
| 462 | * Check, whether the timer is on the callback pending list | 474 | * Check, whether the timer is on the callback pending list |
| 463 | */ | 475 | */ |
| 464 | static inline int hrtimer_cb_pending(const struct hrtimer *timer) | 476 | static inline int hrtimer_cb_pending(const struct hrtimer *timer) |
diff --git a/kernel/irq/devres.c b/kernel/irq/devres.c index 85a430da0fb6..d8ee241115f5 100644 --- a/kernel/irq/devres.c +++ b/kernel/irq/devres.c | |||
| @@ -54,7 +54,7 @@ int devm_request_irq(struct device *dev, unsigned int irq, | |||
| 54 | 54 | ||
| 55 | rc = request_irq(irq, handler, irqflags, devname, dev_id); | 55 | rc = request_irq(irq, handler, irqflags, devname, dev_id); |
| 56 | if (rc) { | 56 | if (rc) { |
| 57 | kfree(dr); | 57 | devres_free(dr); |
| 58 | return rc; | 58 | return rc; |
| 59 | } | 59 | } |
| 60 | 60 | ||
diff --git a/kernel/sched.c b/kernel/sched.c index a4ca632c477c..b9a683730148 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
| @@ -4687,32 +4687,10 @@ out_unlock: | |||
| 4687 | return retval; | 4687 | return retval; |
| 4688 | } | 4688 | } |
| 4689 | 4689 | ||
| 4690 | static inline struct task_struct *eldest_child(struct task_struct *p) | ||
| 4691 | { | ||
| 4692 | if (list_empty(&p->children)) | ||
| 4693 | return NULL; | ||
| 4694 | return list_entry(p->children.next,struct task_struct,sibling); | ||
| 4695 | } | ||
| 4696 | |||
| 4697 | static inline struct task_struct *older_sibling(struct task_struct *p) | ||
| 4698 | { | ||
| 4699 | if (p->sibling.prev==&p->parent->children) | ||
| 4700 | return NULL; | ||
| 4701 | return list_entry(p->sibling.prev,struct task_struct,sibling); | ||
| 4702 | } | ||
| 4703 | |||
| 4704 | static inline struct task_struct *younger_sibling(struct task_struct *p) | ||
| 4705 | { | ||
| 4706 | if (p->sibling.next==&p->parent->children) | ||
| 4707 | return NULL; | ||
| 4708 | return list_entry(p->sibling.next,struct task_struct,sibling); | ||
| 4709 | } | ||
| 4710 | |||
| 4711 | static const char stat_nam[] = "RSDTtZX"; | 4690 | static const char stat_nam[] = "RSDTtZX"; |
| 4712 | 4691 | ||
| 4713 | static void show_task(struct task_struct *p) | 4692 | static void show_task(struct task_struct *p) |
| 4714 | { | 4693 | { |
| 4715 | struct task_struct *relative; | ||
| 4716 | unsigned long free = 0; | 4694 | unsigned long free = 0; |
| 4717 | unsigned state; | 4695 | unsigned state; |
| 4718 | 4696 | ||
| @@ -4738,19 +4716,7 @@ static void show_task(struct task_struct *p) | |||
| 4738 | free = (unsigned long)n - (unsigned long)end_of_stack(p); | 4716 | free = (unsigned long)n - (unsigned long)end_of_stack(p); |
| 4739 | } | 4717 | } |
| 4740 | #endif | 4718 | #endif |
| 4741 | printk("%5lu %5d %6d ", free, p->pid, p->parent->pid); | 4719 | printk("%5lu %5d %6d", free, p->pid, p->parent->pid); |
| 4742 | if ((relative = eldest_child(p))) | ||
| 4743 | printk("%5d ", relative->pid); | ||
| 4744 | else | ||
| 4745 | printk(" "); | ||
| 4746 | if ((relative = younger_sibling(p))) | ||
| 4747 | printk("%7d", relative->pid); | ||
| 4748 | else | ||
| 4749 | printk(" "); | ||
| 4750 | if ((relative = older_sibling(p))) | ||
| 4751 | printk(" %5d", relative->pid); | ||
| 4752 | else | ||
| 4753 | printk(" "); | ||
| 4754 | if (!p->mm) | 4720 | if (!p->mm) |
| 4755 | printk(" (L-TLB)\n"); | 4721 | printk(" (L-TLB)\n"); |
| 4756 | else | 4722 | else |
diff --git a/kernel/timer.c b/kernel/timer.c index 440048acaea1..dd6c2c1c561b 100644 --- a/kernel/timer.c +++ b/kernel/timer.c | |||
| @@ -1016,7 +1016,7 @@ static int timekeeping_resume(struct sys_device *dev) | |||
| 1016 | clockevents_notify(CLOCK_EVT_NOTIFY_RESUME, NULL); | 1016 | clockevents_notify(CLOCK_EVT_NOTIFY_RESUME, NULL); |
| 1017 | 1017 | ||
| 1018 | /* Resume hrtimers */ | 1018 | /* Resume hrtimers */ |
| 1019 | clock_was_set(); | 1019 | hres_timers_resume(); |
| 1020 | 1020 | ||
| 1021 | return 0; | 1021 | return 0; |
| 1022 | } | 1022 | } |
diff --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c index 113c175f1715..c8b7dc2c3257 100644 --- a/net/appletalk/ddp.c +++ b/net/appletalk/ddp.c | |||
| @@ -1417,10 +1417,13 @@ static int atalk_rcv(struct sk_buff *skb, struct net_device *dev, | |||
| 1417 | /* | 1417 | /* |
| 1418 | * Size check to see if ddp->deh_len was crap | 1418 | * Size check to see if ddp->deh_len was crap |
| 1419 | * (Otherwise we'll detonate most spectacularly | 1419 | * (Otherwise we'll detonate most spectacularly |
| 1420 | * in the middle of recvmsg()). | 1420 | * in the middle of atalk_checksum() or recvmsg()). |
| 1421 | */ | 1421 | */ |
| 1422 | if (skb->len < sizeof(*ddp)) | 1422 | if (skb->len < sizeof(*ddp) || skb->len < (len_hops & 1023)) { |
| 1423 | pr_debug("AppleTalk: dropping corrupted frame (deh_len=%u, " | ||
| 1424 | "skb->len=%u)\n", len_hops & 1023, skb->len); | ||
| 1423 | goto freeit; | 1425 | goto freeit; |
| 1426 | } | ||
| 1424 | 1427 | ||
| 1425 | /* | 1428 | /* |
| 1426 | * Any checksums. Note we don't do htons() on this == is assumed to be | 1429 | * Any checksums. Note we don't do htons() on this == is assumed to be |
diff --git a/net/ipv4/netfilter/ipt_CLUSTERIP.c b/net/ipv4/netfilter/ipt_CLUSTERIP.c index e965b333c997..42b08029e867 100644 --- a/net/ipv4/netfilter/ipt_CLUSTERIP.c +++ b/net/ipv4/netfilter/ipt_CLUSTERIP.c | |||
| @@ -411,12 +411,10 @@ checkentry(const char *tablename, | |||
| 411 | "has invalid config pointer!\n"); | 411 | "has invalid config pointer!\n"); |
| 412 | return 0; | 412 | return 0; |
| 413 | } | 413 | } |
| 414 | clusterip_config_entry_get(cipinfo->config); | ||
| 415 | } else { | 414 | } else { |
| 416 | /* Case B: This is a new rule referring to an existing | 415 | /* Case B: This is a new rule referring to an existing |
| 417 | * clusterip config. */ | 416 | * clusterip config. */ |
| 418 | cipinfo->config = config; | 417 | cipinfo->config = config; |
| 419 | clusterip_config_entry_get(cipinfo->config); | ||
| 420 | } | 418 | } |
| 421 | } else { | 419 | } else { |
| 422 | /* Case C: This is a completely new clusterip config */ | 420 | /* Case C: This is a completely new clusterip config */ |
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 688b95594f2e..3c24881f2a65 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c | |||
| @@ -943,7 +943,8 @@ static void tcp_cwnd_validate(struct sock *sk, struct tcp_sock *tp) | |||
| 943 | if (tp->packets_out > tp->snd_cwnd_used) | 943 | if (tp->packets_out > tp->snd_cwnd_used) |
| 944 | tp->snd_cwnd_used = tp->packets_out; | 944 | tp->snd_cwnd_used = tp->packets_out; |
| 945 | 945 | ||
| 946 | if ((s32)(tcp_time_stamp - tp->snd_cwnd_stamp) >= inet_csk(sk)->icsk_rto) | 946 | if (sysctl_tcp_slow_start_after_idle && |
| 947 | (s32)(tcp_time_stamp - tp->snd_cwnd_stamp) >= inet_csk(sk)->icsk_rto) | ||
| 947 | tcp_cwnd_application_limited(sk); | 948 | tcp_cwnd_application_limited(sk); |
| 948 | } | 949 | } |
| 949 | } | 950 | } |
diff --git a/net/ipv4/xfrm4_mode_beet.c b/net/ipv4/xfrm4_mode_beet.c index 89cf59ea7bbe..f68dfd8a0f5c 100644 --- a/net/ipv4/xfrm4_mode_beet.c +++ b/net/ipv4/xfrm4_mode_beet.c | |||
| @@ -42,10 +42,9 @@ static int xfrm4_beet_output(struct xfrm_state *x, struct sk_buff *skb) | |||
| 42 | 42 | ||
| 43 | skb->nh.raw = skb_push(skb, x->props.header_len + hdrlen); | 43 | skb->nh.raw = skb_push(skb, x->props.header_len + hdrlen); |
| 44 | top_iph = skb->nh.iph; | 44 | top_iph = skb->nh.iph; |
| 45 | hdrlen = iph->ihl * 4 - optlen; | 45 | skb->h.raw += sizeof(*iph) - hdrlen; |
| 46 | skb->h.raw += hdrlen; | ||
| 47 | 46 | ||
| 48 | memmove(top_iph, iph, hdrlen); | 47 | memmove(top_iph, iph, sizeof(*iph)); |
| 49 | if (unlikely(optlen)) { | 48 | if (unlikely(optlen)) { |
| 50 | struct ip_beet_phdr *ph; | 49 | struct ip_beet_phdr *ph; |
| 51 | 50 | ||
| @@ -55,6 +54,8 @@ static int xfrm4_beet_output(struct xfrm_state *x, struct sk_buff *skb) | |||
| 55 | ph->padlen = 4 - (optlen & 4); | 54 | ph->padlen = 4 - (optlen & 4); |
| 56 | ph->hdrlen = (optlen + ph->padlen + sizeof(*ph)) / 8; | 55 | ph->hdrlen = (optlen + ph->padlen + sizeof(*ph)) / 8; |
| 57 | ph->nexthdr = top_iph->protocol; | 56 | ph->nexthdr = top_iph->protocol; |
| 57 | if (ph->padlen) | ||
| 58 | memset(ph + 1, IPOPT_NOP, ph->padlen); | ||
| 58 | 59 | ||
| 59 | top_iph->protocol = IPPROTO_BEETPH; | 60 | top_iph->protocol = IPPROTO_BEETPH; |
| 60 | top_iph->ihl = sizeof(struct iphdr) / 4; | 61 | top_iph->ihl = sizeof(struct iphdr) / 4; |
| @@ -77,29 +78,32 @@ static int xfrm4_beet_input(struct xfrm_state *x, struct sk_buff *skb) | |||
| 77 | protocol = iph->protocol; | 78 | protocol = iph->protocol; |
| 78 | 79 | ||
| 79 | if (unlikely(iph->protocol == IPPROTO_BEETPH)) { | 80 | if (unlikely(iph->protocol == IPPROTO_BEETPH)) { |
| 80 | struct ip_beet_phdr *ph = (struct ip_beet_phdr*)(iph + 1); | 81 | struct ip_beet_phdr *ph; |
| 81 | 82 | ||
| 82 | if (!pskb_may_pull(skb, sizeof(*ph))) | 83 | if (!pskb_may_pull(skb, sizeof(*ph))) |
| 83 | goto out; | 84 | goto out; |
| 85 | ph = (struct ip_beet_phdr *)(skb->h.ipiph + 1); | ||
| 84 | 86 | ||
| 85 | phlen = ph->hdrlen * 8; | 87 | phlen = sizeof(*ph) + ph->padlen; |
| 86 | optlen = phlen - ph->padlen - sizeof(*ph); | 88 | optlen = ph->hdrlen * 8 - phlen; |
| 87 | if (optlen < 0 || optlen & 3 || optlen > 250) | 89 | if (optlen < 0 || optlen & 3 || optlen > 250) |
| 88 | goto out; | 90 | goto out; |
| 89 | 91 | ||
| 90 | if (!pskb_may_pull(skb, phlen)) | 92 | if (!pskb_may_pull(skb, phlen + optlen)) |
| 91 | goto out; | 93 | goto out; |
| 94 | skb->len -= phlen + optlen; | ||
| 92 | 95 | ||
| 93 | ph_nexthdr = ph->nexthdr; | 96 | ph_nexthdr = ph->nexthdr; |
| 94 | } | 97 | } |
| 95 | 98 | ||
| 96 | skb_push(skb, sizeof(*iph) - phlen + optlen); | 99 | skb->nh.raw = skb->data + (phlen - sizeof(*iph)); |
| 97 | memmove(skb->data, skb->nh.raw, sizeof(*iph)); | 100 | memmove(skb->nh.raw, iph, sizeof(*iph)); |
| 98 | skb->nh.raw = skb->data; | 101 | skb->h.raw = skb->data + (phlen + optlen); |
| 102 | skb->data = skb->h.raw; | ||
| 99 | 103 | ||
| 100 | iph = skb->nh.iph; | 104 | iph = skb->nh.iph; |
| 101 | iph->ihl = (sizeof(*iph) + optlen) / 4; | 105 | iph->ihl = (sizeof(*iph) + optlen) / 4; |
| 102 | iph->tot_len = htons(skb->len); | 106 | iph->tot_len = htons(skb->len + iph->ihl * 4); |
| 103 | iph->daddr = x->sel.daddr.a4; | 107 | iph->daddr = x->sel.daddr.a4; |
| 104 | iph->saddr = x->sel.saddr.a4; | 108 | iph->saddr = x->sel.saddr.a4; |
| 105 | if (ph_nexthdr) | 109 | if (ph_nexthdr) |
diff --git a/net/ipv6/ip6_input.c b/net/ipv6/ip6_input.c index 11bfc7c43182..61e7a6c8141d 100644 --- a/net/ipv6/ip6_input.c +++ b/net/ipv6/ip6_input.c | |||
| @@ -108,8 +108,10 @@ int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt | |||
| 108 | 108 | ||
| 109 | /* pkt_len may be zero if Jumbo payload option is present */ | 109 | /* pkt_len may be zero if Jumbo payload option is present */ |
| 110 | if (pkt_len || hdr->nexthdr != NEXTHDR_HOP) { | 110 | if (pkt_len || hdr->nexthdr != NEXTHDR_HOP) { |
| 111 | if (pkt_len + sizeof(struct ipv6hdr) > skb->len) | 111 | if (pkt_len + sizeof(struct ipv6hdr) > skb->len) { |
| 112 | goto truncated; | 112 | IP6_INC_STATS_BH(idev, IPSTATS_MIB_INTRUNCATEDPKTS); |
| 113 | goto drop; | ||
| 114 | } | ||
| 113 | if (pskb_trim_rcsum(skb, pkt_len + sizeof(struct ipv6hdr))) { | 115 | if (pskb_trim_rcsum(skb, pkt_len + sizeof(struct ipv6hdr))) { |
| 114 | IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); | 116 | IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); |
| 115 | goto drop; | 117 | goto drop; |
| @@ -128,8 +130,6 @@ int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt | |||
| 128 | rcu_read_unlock(); | 130 | rcu_read_unlock(); |
| 129 | 131 | ||
| 130 | return NF_HOOK(PF_INET6,NF_IP6_PRE_ROUTING, skb, dev, NULL, ip6_rcv_finish); | 132 | return NF_HOOK(PF_INET6,NF_IP6_PRE_ROUTING, skb, dev, NULL, ip6_rcv_finish); |
| 131 | truncated: | ||
| 132 | IP6_INC_STATS_BH(idev, IPSTATS_MIB_INTRUNCATEDPKTS); | ||
| 133 | err: | 133 | err: |
| 134 | IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); | 134 | IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); |
| 135 | drop: | 135 | drop: |
diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 3931b33b25e8..ad9b285692ba 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c | |||
| @@ -311,21 +311,12 @@ static inline void rt6_probe(struct rt6_info *rt) | |||
| 311 | static inline int rt6_check_dev(struct rt6_info *rt, int oif) | 311 | static inline int rt6_check_dev(struct rt6_info *rt, int oif) |
| 312 | { | 312 | { |
| 313 | struct net_device *dev = rt->rt6i_dev; | 313 | struct net_device *dev = rt->rt6i_dev; |
| 314 | int ret = 0; | 314 | if (!oif || dev->ifindex == oif) |
| 315 | |||
| 316 | if (!oif) | ||
| 317 | return 2; | ||
| 318 | if (dev->flags & IFF_LOOPBACK) { | ||
| 319 | if (!WARN_ON(rt->rt6i_idev == NULL) && | ||
| 320 | rt->rt6i_idev->dev->ifindex == oif) | ||
| 321 | ret = 1; | ||
| 322 | else | ||
| 323 | return 0; | ||
| 324 | } | ||
| 325 | if (dev->ifindex == oif) | ||
| 326 | return 2; | 315 | return 2; |
| 327 | 316 | if ((dev->flags & IFF_LOOPBACK) && | |
| 328 | return ret; | 317 | rt->rt6i_idev && rt->rt6i_idev->dev->ifindex == oif) |
| 318 | return 1; | ||
| 319 | return 0; | ||
| 329 | } | 320 | } |
| 330 | 321 | ||
| 331 | static inline int rt6_check_neigh(struct rt6_info *rt) | 322 | static inline int rt6_check_neigh(struct rt6_info *rt) |
diff --git a/net/sched/cls_tcindex.c b/net/sched/cls_tcindex.c index 040e2d2d281a..7563fdcef4b7 100644 --- a/net/sched/cls_tcindex.c +++ b/net/sched/cls_tcindex.c | |||
| @@ -245,9 +245,9 @@ tcindex_set_parms(struct tcf_proto *tp, unsigned long base, u32 handle, | |||
| 245 | } | 245 | } |
| 246 | 246 | ||
| 247 | if (tb[TCA_TCINDEX_SHIFT-1]) { | 247 | if (tb[TCA_TCINDEX_SHIFT-1]) { |
| 248 | if (RTA_PAYLOAD(tb[TCA_TCINDEX_SHIFT-1]) < sizeof(u16)) | 248 | if (RTA_PAYLOAD(tb[TCA_TCINDEX_SHIFT-1]) < sizeof(int)) |
| 249 | goto errout; | 249 | goto errout; |
| 250 | cp.shift = *(u16 *) RTA_DATA(tb[TCA_TCINDEX_SHIFT-1]); | 250 | cp.shift = *(int *) RTA_DATA(tb[TCA_TCINDEX_SHIFT-1]); |
| 251 | } | 251 | } |
| 252 | 252 | ||
| 253 | err = -EBUSY; | 253 | err = -EBUSY; |
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c index 5c5f6dcab974..e3a0bcfa5df1 100644 --- a/net/xfrm/xfrm_state.c +++ b/net/xfrm/xfrm_state.c | |||
| @@ -1371,7 +1371,8 @@ int xfrm_replay_check(struct xfrm_state *x, __be32 net_seq) | |||
| 1371 | return 0; | 1371 | return 0; |
| 1372 | 1372 | ||
| 1373 | diff = x->replay.seq - seq; | 1373 | diff = x->replay.seq - seq; |
| 1374 | if (diff >= x->props.replay_window) { | 1374 | if (diff >= min_t(unsigned int, x->props.replay_window, |
| 1375 | sizeof(x->replay.bitmap) * 8)) { | ||
| 1375 | x->stats.replay_window++; | 1376 | x->stats.replay_window++; |
| 1376 | return -EINVAL; | 1377 | return -EINVAL; |
| 1377 | } | 1378 | } |
