diff options
51 files changed, 398 insertions, 257 deletions
diff --git a/Documentation/ABI/obsolete/dv1394 b/Documentation/ABI/obsolete/dv1394 new file mode 100644 index 000000000000..2ee36864ca10 --- /dev/null +++ b/Documentation/ABI/obsolete/dv1394 | |||
@@ -0,0 +1,9 @@ | |||
1 | What: dv1394 (a.k.a. "OHCI-DV I/O support" for FireWire) | ||
2 | Contact: linux1394-devel@lists.sourceforge.net | ||
3 | Description: | ||
4 | New application development should use raw1394 + userspace libraries | ||
5 | instead, notably libiec61883 which is functionally equivalent. | ||
6 | |||
7 | Users: | ||
8 | ffmpeg/libavformat (used by a variety of media players) | ||
9 | dvgrab v1.x (replaced by dvgrab2 on top of raw1394 and resp. libraries) | ||
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt index 0bc8b0b2e103..19b4c96b2a49 100644 --- a/Documentation/feature-removal-schedule.txt +++ b/Documentation/feature-removal-schedule.txt | |||
@@ -39,17 +39,6 @@ Who: Dan Dennedy <dan@dennedy.org>, Stefan Richter <stefanr@s5r6.in-berlin.de> | |||
39 | 39 | ||
40 | --------------------------- | 40 | --------------------------- |
41 | 41 | ||
42 | What: dv1394 driver (CONFIG_IEEE1394_DV1394) | ||
43 | When: June 2007 | ||
44 | Why: Replaced by raw1394 + userspace libraries, notably libiec61883. This | ||
45 | shift of application support has been indicated on www.linux1394.org | ||
46 | and developers' mailinglists for quite some time. Major applications | ||
47 | have been converted, with the exception of ffmpeg and hence xine. | ||
48 | Piped output of dvgrab2 is a partial equivalent to dv1394. | ||
49 | Who: Dan Dennedy <dan@dennedy.org>, Stefan Richter <stefanr@s5r6.in-berlin.de> | ||
50 | |||
51 | --------------------------- | ||
52 | |||
53 | What: Video4Linux API 1 ioctls and video_decoder.h from Video devices. | 42 | What: Video4Linux API 1 ioctls and video_decoder.h from Video devices. |
54 | When: December 2006 | 43 | When: December 2006 |
55 | Why: V4L1 AP1 was replaced by V4L2 API. during migration from 2.4 to 2.6 | 44 | Why: V4L1 AP1 was replaced by V4L2 API. during migration from 2.4 to 2.6 |
diff --git a/MAINTAINERS b/MAINTAINERS index 829407ff41f1..ef84419ade3a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -1404,7 +1404,7 @@ M: hch@infradead.org | |||
1404 | W: ftp://ftp.openlinux.org/pub/people/hch/vxfs | 1404 | W: ftp://ftp.openlinux.org/pub/people/hch/vxfs |
1405 | S: Maintained | 1405 | S: Maintained |
1406 | 1406 | ||
1407 | FUJITSU FR-V PORT | 1407 | FUJITSU FR-V (FRV) PORT |
1408 | P: David Howells | 1408 | P: David Howells |
1409 | M: dhowells@redhat.com | 1409 | M: dhowells@redhat.com |
1410 | S: Maintained | 1410 | S: Maintained |
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..55392a45a14b 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; |
@@ -428,9 +431,8 @@ static void intel_i830_init_gtt_entries(void) | |||
428 | 431 | ||
429 | if (IS_I965) { | 432 | if (IS_I965) { |
430 | u32 pgetbl_ctl; | 433 | u32 pgetbl_ctl; |
434 | pgetbl_ctl = readl(intel_i830_private.registers+I810_PGETBL_CTL); | ||
431 | 435 | ||
432 | pci_read_config_dword(agp_bridge->dev, I810_PGETBL_CTL, | ||
433 | &pgetbl_ctl); | ||
434 | /* The 965 has a field telling us the size of the GTT, | 436 | /* The 965 has a field telling us the size of the GTT, |
435 | * which may be larger than what is necessary to map the | 437 | * which may be larger than what is necessary to map the |
436 | * aperture. | 438 | * aperture. |
@@ -1921,7 +1923,13 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev, | |||
1921 | bridge->driver = &intel_845_driver; | 1923 | bridge->driver = &intel_845_driver; |
1922 | name = "965G"; | 1924 | name = "965G"; |
1923 | break; | 1925 | break; |
1924 | 1926 | case PCI_DEVICE_ID_INTEL_82965GM_HB: | |
1927 | if (find_i830(PCI_DEVICE_ID_INTEL_82965GM_IG)) | ||
1928 | bridge->driver = &intel_i965_driver; | ||
1929 | else | ||
1930 | bridge->driver = &intel_845_driver; | ||
1931 | name = "965GM"; | ||
1932 | break; | ||
1925 | case PCI_DEVICE_ID_INTEL_7505_0: | 1933 | case PCI_DEVICE_ID_INTEL_7505_0: |
1926 | bridge->driver = &intel_7505_driver; | 1934 | bridge->driver = &intel_7505_driver; |
1927 | name = "E7505"; | 1935 | name = "E7505"; |
@@ -2080,6 +2088,7 @@ static struct pci_device_id agp_intel_pci_table[] = { | |||
2080 | ID(PCI_DEVICE_ID_INTEL_82965G_1_HB), | 2088 | ID(PCI_DEVICE_ID_INTEL_82965G_1_HB), |
2081 | ID(PCI_DEVICE_ID_INTEL_82965Q_HB), | 2089 | ID(PCI_DEVICE_ID_INTEL_82965Q_HB), |
2082 | ID(PCI_DEVICE_ID_INTEL_82965G_HB), | 2090 | ID(PCI_DEVICE_ID_INTEL_82965G_HB), |
2091 | ID(PCI_DEVICE_ID_INTEL_82965GM_HB), | ||
2083 | { } | 2092 | { } |
2084 | }; | 2093 | }; |
2085 | 2094 | ||
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/ieee1394/Kconfig b/drivers/ieee1394/Kconfig index b8a47342cd2c..cd84a55ecf20 100644 --- a/drivers/ieee1394/Kconfig +++ b/drivers/ieee1394/Kconfig | |||
@@ -138,9 +138,9 @@ config IEEE1394_DV1394 | |||
138 | tristate "OHCI-DV I/O support (deprecated)" | 138 | tristate "OHCI-DV I/O support (deprecated)" |
139 | depends on IEEE1394 && IEEE1394_OHCI1394 | 139 | depends on IEEE1394 && IEEE1394_OHCI1394 |
140 | help | 140 | help |
141 | The dv1394 driver will be removed from Linux in a future release. | 141 | The dv1394 driver is unsupported and may be removed from Linux in a |
142 | Its functionality is now provided by raw1394 together with libraries | 142 | future release. Its functionality is now provided by raw1394 together |
143 | such as libiec61883. | 143 | with libraries such as libiec61883. |
144 | 144 | ||
145 | config IEEE1394_RAWIO | 145 | config IEEE1394_RAWIO |
146 | tristate "Raw IEEE1394 I/O support" | 146 | tristate "Raw IEEE1394 I/O support" |
diff --git a/drivers/ieee1394/dv1394.c b/drivers/ieee1394/dv1394.c index dee9529aa8e7..026e38face5c 100644 --- a/drivers/ieee1394/dv1394.c +++ b/drivers/ieee1394/dv1394.c | |||
@@ -2564,8 +2564,8 @@ static int __init dv1394_init_module(void) | |||
2564 | int ret; | 2564 | int ret; |
2565 | 2565 | ||
2566 | printk(KERN_WARNING | 2566 | printk(KERN_WARNING |
2567 | "WARNING: The dv1394 driver is unsupported and will be removed " | 2567 | "NOTE: The dv1394 driver is unsupported and may be removed in a " |
2568 | "from Linux soon. Use raw1394 instead.\n"); | 2568 | "future Linux release. Use raw1394 instead.\n"); |
2569 | 2569 | ||
2570 | cdev_init(&dv1394_cdev, &dv1394_fops); | 2570 | cdev_init(&dv1394_cdev, &dv1394_fops); |
2571 | dv1394_cdev.owner = THIS_MODULE; | 2571 | dv1394_cdev.owner = THIS_MODULE; |
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c index e70492db74f6..2b242a4823f8 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c | |||
@@ -131,7 +131,7 @@ static struct sk_buff *ipoib_cm_alloc_rx_skb(struct net_device *dev, int id, int | |||
131 | skb_fill_page_desc(skb, i, page, 0, PAGE_SIZE); | 131 | skb_fill_page_desc(skb, i, page, 0, PAGE_SIZE); |
132 | 132 | ||
133 | mapping[i + 1] = ib_dma_map_page(priv->ca, skb_shinfo(skb)->frags[i].page, | 133 | mapping[i + 1] = ib_dma_map_page(priv->ca, skb_shinfo(skb)->frags[i].page, |
134 | 0, PAGE_SIZE, DMA_TO_DEVICE); | 134 | 0, PAGE_SIZE, DMA_FROM_DEVICE); |
135 | if (unlikely(ib_dma_mapping_error(priv->ca, mapping[i + 1]))) | 135 | if (unlikely(ib_dma_mapping_error(priv->ca, mapping[i + 1]))) |
136 | goto partial_error; | 136 | goto partial_error; |
137 | } | 137 | } |
diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.h b/drivers/infiniband/ulp/iser/iscsi_iser.h index cae8c96a55f8..8960196ffb0f 100644 --- a/drivers/infiniband/ulp/iser/iscsi_iser.h +++ b/drivers/infiniband/ulp/iser/iscsi_iser.h | |||
@@ -245,7 +245,6 @@ struct iser_conn { | |||
245 | wait_queue_head_t wait; /* waitq for conn/disconn */ | 245 | wait_queue_head_t wait; /* waitq for conn/disconn */ |
246 | atomic_t post_recv_buf_count; /* posted rx count */ | 246 | atomic_t post_recv_buf_count; /* posted rx count */ |
247 | atomic_t post_send_buf_count; /* posted tx count */ | 247 | atomic_t post_send_buf_count; /* posted tx count */ |
248 | struct work_struct comperror_work; /* conn term sleepable ctx*/ | ||
249 | char name[ISER_OBJECT_NAME_SIZE]; | 248 | char name[ISER_OBJECT_NAME_SIZE]; |
250 | struct iser_page_vec *page_vec; /* represents SG to fmr maps* | 249 | struct iser_page_vec *page_vec; /* represents SG to fmr maps* |
251 | * maps serialized as tx is*/ | 250 | * maps serialized as tx is*/ |
diff --git a/drivers/infiniband/ulp/iser/iser_verbs.c b/drivers/infiniband/ulp/iser/iser_verbs.c index 693b77002897..1fc967464a28 100644 --- a/drivers/infiniband/ulp/iser/iser_verbs.c +++ b/drivers/infiniband/ulp/iser/iser_verbs.c | |||
@@ -48,7 +48,6 @@ | |||
48 | 48 | ||
49 | static void iser_cq_tasklet_fn(unsigned long data); | 49 | static void iser_cq_tasklet_fn(unsigned long data); |
50 | static void iser_cq_callback(struct ib_cq *cq, void *cq_context); | 50 | static void iser_cq_callback(struct ib_cq *cq, void *cq_context); |
51 | static void iser_comp_error_worker(struct work_struct *work); | ||
52 | 51 | ||
53 | static void iser_cq_event_callback(struct ib_event *cause, void *context) | 52 | static void iser_cq_event_callback(struct ib_event *cause, void *context) |
54 | { | 53 | { |
@@ -480,7 +479,6 @@ int iser_conn_init(struct iser_conn **ibconn) | |||
480 | init_waitqueue_head(&ib_conn->wait); | 479 | init_waitqueue_head(&ib_conn->wait); |
481 | atomic_set(&ib_conn->post_recv_buf_count, 0); | 480 | atomic_set(&ib_conn->post_recv_buf_count, 0); |
482 | atomic_set(&ib_conn->post_send_buf_count, 0); | 481 | atomic_set(&ib_conn->post_send_buf_count, 0); |
483 | INIT_WORK(&ib_conn->comperror_work, iser_comp_error_worker); | ||
484 | INIT_LIST_HEAD(&ib_conn->conn_list); | 482 | INIT_LIST_HEAD(&ib_conn->conn_list); |
485 | spin_lock_init(&ib_conn->lock); | 483 | spin_lock_init(&ib_conn->lock); |
486 | 484 | ||
@@ -753,26 +751,6 @@ int iser_post_send(struct iser_desc *tx_desc) | |||
753 | return ret_val; | 751 | return ret_val; |
754 | } | 752 | } |
755 | 753 | ||
756 | static void iser_comp_error_worker(struct work_struct *work) | ||
757 | { | ||
758 | struct iser_conn *ib_conn = | ||
759 | container_of(work, struct iser_conn, comperror_work); | ||
760 | |||
761 | /* getting here when the state is UP means that the conn is being * | ||
762 | * terminated asynchronously from the iSCSI layer's perspective. */ | ||
763 | if (iser_conn_state_comp_exch(ib_conn, ISER_CONN_UP, | ||
764 | ISER_CONN_TERMINATING)) | ||
765 | iscsi_conn_failure(ib_conn->iser_conn->iscsi_conn, | ||
766 | ISCSI_ERR_CONN_FAILED); | ||
767 | |||
768 | /* complete the termination process if disconnect event was delivered * | ||
769 | * note there are no more non completed posts to the QP */ | ||
770 | if (ib_conn->disc_evt_flag) { | ||
771 | ib_conn->state = ISER_CONN_DOWN; | ||
772 | wake_up_interruptible(&ib_conn->wait); | ||
773 | } | ||
774 | } | ||
775 | |||
776 | static void iser_handle_comp_error(struct iser_desc *desc) | 754 | static void iser_handle_comp_error(struct iser_desc *desc) |
777 | { | 755 | { |
778 | struct iser_dto *dto = &desc->dto; | 756 | struct iser_dto *dto = &desc->dto; |
@@ -791,8 +769,22 @@ static void iser_handle_comp_error(struct iser_desc *desc) | |||
791 | } | 769 | } |
792 | 770 | ||
793 | if (atomic_read(&ib_conn->post_recv_buf_count) == 0 && | 771 | if (atomic_read(&ib_conn->post_recv_buf_count) == 0 && |
794 | atomic_read(&ib_conn->post_send_buf_count) == 0) | 772 | atomic_read(&ib_conn->post_send_buf_count) == 0) { |
795 | schedule_work(&ib_conn->comperror_work); | 773 | /* getting here when the state is UP means that the conn is * |
774 | * being terminated asynchronously from the iSCSI layer's * | ||
775 | * perspective. */ | ||
776 | if (iser_conn_state_comp_exch(ib_conn, ISER_CONN_UP, | ||
777 | ISER_CONN_TERMINATING)) | ||
778 | iscsi_conn_failure(ib_conn->iser_conn->iscsi_conn, | ||
779 | ISCSI_ERR_CONN_FAILED); | ||
780 | |||
781 | /* complete the termination process if disconnect event was delivered * | ||
782 | * note there are no more non completed posts to the QP */ | ||
783 | if (ib_conn->disc_evt_flag) { | ||
784 | ib_conn->state = ISER_CONN_DOWN; | ||
785 | wake_up_interruptible(&ib_conn->wait); | ||
786 | } | ||
787 | } | ||
796 | } | 788 | } |
797 | 789 | ||
798 | static void iser_cq_tasklet_fn(unsigned long data) | 790 | static void iser_cq_tasklet_fn(unsigned long data) |
diff --git a/drivers/input/touchscreen/ucb1400_ts.c b/drivers/input/touchscreen/ucb1400_ts.c index c7db4032ef02..e8606c48c9c3 100644 --- a/drivers/input/touchscreen/ucb1400_ts.c +++ b/drivers/input/touchscreen/ucb1400_ts.c | |||
@@ -553,6 +553,7 @@ static int ucb1400_ts_remove(struct device *dev) | |||
553 | } | 553 | } |
554 | 554 | ||
555 | static struct device_driver ucb1400_ts_driver = { | 555 | static struct device_driver ucb1400_ts_driver = { |
556 | .name = "ucb1400_ts", | ||
556 | .owner = THIS_MODULE, | 557 | .owner = THIS_MODULE, |
557 | .bus = &ac97_bus_type, | 558 | .bus = &ac97_bus_type, |
558 | .probe = ucb1400_ts_probe, | 559 | .probe = ucb1400_ts_probe, |
diff --git a/drivers/net/cxgb3/common.h b/drivers/net/cxgb3/common.h index 97128d88eaef..8d1379633698 100644 --- a/drivers/net/cxgb3/common.h +++ b/drivers/net/cxgb3/common.h | |||
@@ -478,8 +478,11 @@ struct cmac { | |||
478 | struct adapter *adapter; | 478 | struct adapter *adapter; |
479 | unsigned int offset; | 479 | unsigned int offset; |
480 | unsigned int nucast; /* # of address filters for unicast MACs */ | 480 | unsigned int nucast; /* # of address filters for unicast MACs */ |
481 | unsigned int tcnt; | 481 | unsigned int tx_tcnt; |
482 | unsigned int xcnt; | 482 | unsigned int tx_xcnt; |
483 | u64 tx_mcnt; | ||
484 | unsigned int rx_xcnt; | ||
485 | u64 rx_mcnt; | ||
483 | unsigned int toggle_cnt; | 486 | unsigned int toggle_cnt; |
484 | unsigned int txen; | 487 | unsigned int txen; |
485 | struct mac_stats stats; | 488 | struct mac_stats stats; |
diff --git a/drivers/net/cxgb3/cxgb3_main.c b/drivers/net/cxgb3/cxgb3_main.c index 26240fd5e768..67b4b219d927 100644 --- a/drivers/net/cxgb3/cxgb3_main.c +++ b/drivers/net/cxgb3/cxgb3_main.c | |||
@@ -194,15 +194,13 @@ void t3_os_link_changed(struct adapter *adapter, int port_id, int link_stat, | |||
194 | 194 | ||
195 | if (link_stat != netif_carrier_ok(dev)) { | 195 | if (link_stat != netif_carrier_ok(dev)) { |
196 | if (link_stat) { | 196 | if (link_stat) { |
197 | t3_set_reg_field(adapter, | 197 | t3_mac_enable(mac, MAC_DIRECTION_RX); |
198 | A_XGM_TXFIFO_CFG + mac->offset, | ||
199 | F_ENDROPPKT, 0); | ||
200 | netif_carrier_on(dev); | 198 | netif_carrier_on(dev); |
201 | } else { | 199 | } else { |
202 | netif_carrier_off(dev); | 200 | netif_carrier_off(dev); |
203 | t3_set_reg_field(adapter, | 201 | pi->phy.ops->power_down(&pi->phy, 1); |
204 | A_XGM_TXFIFO_CFG + mac->offset, | 202 | t3_mac_disable(mac, MAC_DIRECTION_RX); |
205 | F_ENDROPPKT, F_ENDROPPKT); | 203 | t3_link_start(&pi->phy, mac, &pi->link_config); |
206 | } | 204 | } |
207 | 205 | ||
208 | link_report(dev); | 206 | link_report(dev); |
@@ -772,6 +770,8 @@ static int cxgb_up(struct adapter *adap) | |||
772 | if (err) | 770 | if (err) |
773 | goto out; | 771 | goto out; |
774 | 772 | ||
773 | t3_write_reg(adap, A_ULPRX_TDDP_PSZ, V_HPZ0(PAGE_SHIFT - 12)); | ||
774 | |||
775 | err = setup_sge_qsets(adap); | 775 | err = setup_sge_qsets(adap); |
776 | if (err) | 776 | if (err) |
777 | goto out; | 777 | goto out; |
@@ -2119,7 +2119,9 @@ static void check_t3b2_mac(struct adapter *adapter) | |||
2119 | { | 2119 | { |
2120 | int i; | 2120 | int i; |
2121 | 2121 | ||
2122 | rtnl_lock(); /* synchronize with ifdown */ | 2122 | if (!rtnl_trylock()) /* synchronize with ifdown */ |
2123 | return; | ||
2124 | |||
2123 | for_each_port(adapter, i) { | 2125 | for_each_port(adapter, i) { |
2124 | struct net_device *dev = adapter->port[i]; | 2126 | struct net_device *dev = adapter->port[i]; |
2125 | struct port_info *p = netdev_priv(dev); | 2127 | struct port_info *p = netdev_priv(dev); |
diff --git a/drivers/net/cxgb3/cxgb3_offload.c b/drivers/net/cxgb3/cxgb3_offload.c index eed7a48e3111..48649244673e 100644 --- a/drivers/net/cxgb3/cxgb3_offload.c +++ b/drivers/net/cxgb3/cxgb3_offload.c | |||
@@ -743,17 +743,6 @@ static int do_act_establish(struct t3cdev *dev, struct sk_buff *skb) | |||
743 | } | 743 | } |
744 | } | 744 | } |
745 | 745 | ||
746 | static int do_set_tcb_rpl(struct t3cdev *dev, struct sk_buff *skb) | ||
747 | { | ||
748 | struct cpl_set_tcb_rpl *rpl = cplhdr(skb); | ||
749 | |||
750 | if (rpl->status != CPL_ERR_NONE) | ||
751 | printk(KERN_ERR | ||
752 | "Unexpected SET_TCB_RPL status %u for tid %u\n", | ||
753 | rpl->status, GET_TID(rpl)); | ||
754 | return CPL_RET_BUF_DONE; | ||
755 | } | ||
756 | |||
757 | static int do_trace(struct t3cdev *dev, struct sk_buff *skb) | 746 | static int do_trace(struct t3cdev *dev, struct sk_buff *skb) |
758 | { | 747 | { |
759 | struct cpl_trace_pkt *p = cplhdr(skb); | 748 | struct cpl_trace_pkt *p = cplhdr(skb); |
@@ -1215,7 +1204,8 @@ void __init cxgb3_offload_init(void) | |||
1215 | t3_register_cpl_handler(CPL_CLOSE_CON_RPL, do_hwtid_rpl); | 1204 | t3_register_cpl_handler(CPL_CLOSE_CON_RPL, do_hwtid_rpl); |
1216 | t3_register_cpl_handler(CPL_ABORT_REQ_RSS, do_abort_req_rss); | 1205 | t3_register_cpl_handler(CPL_ABORT_REQ_RSS, do_abort_req_rss); |
1217 | t3_register_cpl_handler(CPL_ACT_ESTABLISH, do_act_establish); | 1206 | t3_register_cpl_handler(CPL_ACT_ESTABLISH, do_act_establish); |
1218 | t3_register_cpl_handler(CPL_SET_TCB_RPL, do_set_tcb_rpl); | 1207 | t3_register_cpl_handler(CPL_SET_TCB_RPL, do_hwtid_rpl); |
1208 | t3_register_cpl_handler(CPL_GET_TCB_RPL, do_hwtid_rpl); | ||
1219 | t3_register_cpl_handler(CPL_RDMA_TERMINATE, do_term); | 1209 | t3_register_cpl_handler(CPL_RDMA_TERMINATE, do_term); |
1220 | t3_register_cpl_handler(CPL_RDMA_EC_STATUS, do_hwtid_rpl); | 1210 | t3_register_cpl_handler(CPL_RDMA_EC_STATUS, do_hwtid_rpl); |
1221 | t3_register_cpl_handler(CPL_TRACE_PKT, do_trace); | 1211 | t3_register_cpl_handler(CPL_TRACE_PKT, do_trace); |
diff --git a/drivers/net/cxgb3/regs.h b/drivers/net/cxgb3/regs.h index f8be41c5a081..e5a553410e24 100644 --- a/drivers/net/cxgb3/regs.h +++ b/drivers/net/cxgb3/regs.h | |||
@@ -1234,9 +1234,15 @@ | |||
1234 | 1234 | ||
1235 | #define A_ULPRX_ISCSI_TAGMASK 0x514 | 1235 | #define A_ULPRX_ISCSI_TAGMASK 0x514 |
1236 | 1236 | ||
1237 | #define S_HPZ0 0 | ||
1238 | #define M_HPZ0 0xf | ||
1239 | #define V_HPZ0(x) ((x) << S_HPZ0) | ||
1240 | #define G_HPZ0(x) (((x) >> S_HPZ0) & M_HPZ0) | ||
1241 | |||
1237 | #define A_ULPRX_TDDP_LLIMIT 0x51c | 1242 | #define A_ULPRX_TDDP_LLIMIT 0x51c |
1238 | 1243 | ||
1239 | #define A_ULPRX_TDDP_ULIMIT 0x520 | 1244 | #define A_ULPRX_TDDP_ULIMIT 0x520 |
1245 | #define A_ULPRX_TDDP_PSZ 0x528 | ||
1240 | 1246 | ||
1241 | #define A_ULPRX_STAG_LLIMIT 0x52c | 1247 | #define A_ULPRX_STAG_LLIMIT 0x52c |
1242 | 1248 | ||
diff --git a/drivers/net/cxgb3/xgmac.c b/drivers/net/cxgb3/xgmac.c index 94aaff005a35..a506792f9575 100644 --- a/drivers/net/cxgb3/xgmac.c +++ b/drivers/net/cxgb3/xgmac.c | |||
@@ -367,7 +367,8 @@ int t3_mac_enable(struct cmac *mac, int which) | |||
367 | int idx = macidx(mac); | 367 | int idx = macidx(mac); |
368 | struct adapter *adap = mac->adapter; | 368 | struct adapter *adap = mac->adapter; |
369 | unsigned int oft = mac->offset; | 369 | unsigned int oft = mac->offset; |
370 | 370 | struct mac_stats *s = &mac->stats; | |
371 | |||
371 | if (which & MAC_DIRECTION_TX) { | 372 | if (which & MAC_DIRECTION_TX) { |
372 | t3_write_reg(adap, A_XGM_TX_CTRL + oft, F_TXEN); | 373 | t3_write_reg(adap, A_XGM_TX_CTRL + oft, F_TXEN); |
373 | t3_write_reg(adap, A_TP_PIO_ADDR, A_TP_TX_DROP_CFG_CH0 + idx); | 374 | t3_write_reg(adap, A_TP_PIO_ADDR, A_TP_TX_DROP_CFG_CH0 + idx); |
@@ -376,10 +377,16 @@ int t3_mac_enable(struct cmac *mac, int which) | |||
376 | t3_set_reg_field(adap, A_TP_PIO_DATA, 1 << idx, 1 << idx); | 377 | t3_set_reg_field(adap, A_TP_PIO_DATA, 1 << idx, 1 << idx); |
377 | 378 | ||
378 | t3_write_reg(adap, A_TP_PIO_ADDR, A_TP_TX_DROP_CNT_CH0 + idx); | 379 | t3_write_reg(adap, A_TP_PIO_ADDR, A_TP_TX_DROP_CNT_CH0 + idx); |
379 | mac->tcnt = (G_TXDROPCNTCH0RCVD(t3_read_reg(adap, | 380 | mac->tx_mcnt = s->tx_frames; |
380 | A_TP_PIO_DATA))); | 381 | mac->tx_tcnt = (G_TXDROPCNTCH0RCVD(t3_read_reg(adap, |
381 | mac->xcnt = (G_TXSPI4SOPCNT(t3_read_reg(adap, | 382 | A_TP_PIO_DATA))); |
382 | A_XGM_TX_SPI4_SOP_EOP_CNT))); | 383 | mac->tx_xcnt = (G_TXSPI4SOPCNT(t3_read_reg(adap, |
384 | A_XGM_TX_SPI4_SOP_EOP_CNT + | ||
385 | oft))); | ||
386 | mac->rx_mcnt = s->rx_frames; | ||
387 | mac->rx_xcnt = (G_TXSPI4SOPCNT(t3_read_reg(adap, | ||
388 | A_XGM_RX_SPI4_SOP_EOP_CNT + | ||
389 | oft))); | ||
383 | mac->txen = F_TXEN; | 390 | mac->txen = F_TXEN; |
384 | mac->toggle_cnt = 0; | 391 | mac->toggle_cnt = 0; |
385 | } | 392 | } |
@@ -392,6 +399,7 @@ int t3_mac_disable(struct cmac *mac, int which) | |||
392 | { | 399 | { |
393 | int idx = macidx(mac); | 400 | int idx = macidx(mac); |
394 | struct adapter *adap = mac->adapter; | 401 | struct adapter *adap = mac->adapter; |
402 | int val; | ||
395 | 403 | ||
396 | if (which & MAC_DIRECTION_TX) { | 404 | if (which & MAC_DIRECTION_TX) { |
397 | t3_write_reg(adap, A_XGM_TX_CTRL + mac->offset, 0); | 405 | t3_write_reg(adap, A_XGM_TX_CTRL + mac->offset, 0); |
@@ -401,44 +409,89 @@ int t3_mac_disable(struct cmac *mac, int which) | |||
401 | t3_set_reg_field(adap, A_TP_PIO_DATA, 1 << idx, 1 << idx); | 409 | t3_set_reg_field(adap, A_TP_PIO_DATA, 1 << idx, 1 << idx); |
402 | mac->txen = 0; | 410 | mac->txen = 0; |
403 | } | 411 | } |
404 | if (which & MAC_DIRECTION_RX) | 412 | if (which & MAC_DIRECTION_RX) { |
413 | t3_set_reg_field(mac->adapter, A_XGM_RESET_CTRL + mac->offset, | ||
414 | F_PCS_RESET_, 0); | ||
415 | msleep(100); | ||
405 | t3_write_reg(adap, A_XGM_RX_CTRL + mac->offset, 0); | 416 | t3_write_reg(adap, A_XGM_RX_CTRL + mac->offset, 0); |
417 | val = F_MAC_RESET_; | ||
418 | if (is_10G(adap)) | ||
419 | val |= F_PCS_RESET_; | ||
420 | else if (uses_xaui(adap)) | ||
421 | val |= F_PCS_RESET_ | F_XG2G_RESET_; | ||
422 | else | ||
423 | val |= F_RGMII_RESET_ | F_XG2G_RESET_; | ||
424 | t3_write_reg(mac->adapter, A_XGM_RESET_CTRL + mac->offset, val); | ||
425 | } | ||
406 | return 0; | 426 | return 0; |
407 | } | 427 | } |
408 | 428 | ||
409 | int t3b2_mac_watchdog_task(struct cmac *mac) | 429 | int t3b2_mac_watchdog_task(struct cmac *mac) |
410 | { | 430 | { |
411 | struct adapter *adap = mac->adapter; | 431 | struct adapter *adap = mac->adapter; |
412 | unsigned int tcnt, xcnt; | 432 | struct mac_stats *s = &mac->stats; |
433 | unsigned int tx_tcnt, tx_xcnt; | ||
434 | unsigned int tx_mcnt = s->tx_frames; | ||
435 | unsigned int rx_mcnt = s->rx_frames; | ||
436 | unsigned int rx_xcnt; | ||
413 | int status; | 437 | int status; |
414 | 438 | ||
415 | t3_write_reg(adap, A_TP_PIO_ADDR, A_TP_TX_DROP_CNT_CH0 + macidx(mac)); | 439 | if (tx_mcnt == mac->tx_mcnt) { |
416 | tcnt = (G_TXDROPCNTCH0RCVD(t3_read_reg(adap, A_TP_PIO_DATA))); | 440 | tx_xcnt = (G_TXSPI4SOPCNT(t3_read_reg(adap, |
417 | xcnt = (G_TXSPI4SOPCNT(t3_read_reg(adap, | 441 | A_XGM_TX_SPI4_SOP_EOP_CNT + |
418 | A_XGM_TX_SPI4_SOP_EOP_CNT + | 442 | mac->offset))); |
419 | mac->offset))); | 443 | if (tx_xcnt == 0) { |
420 | 444 | t3_write_reg(adap, A_TP_PIO_ADDR, | |
421 | if (tcnt != mac->tcnt && xcnt == 0 && mac->xcnt == 0) { | 445 | A_TP_TX_DROP_CNT_CH0 + macidx(mac)); |
422 | if (mac->toggle_cnt > 4) { | 446 | tx_tcnt = (G_TXDROPCNTCH0RCVD(t3_read_reg(adap, |
423 | t3b2_mac_reset(mac); | 447 | A_TP_PIO_DATA))); |
448 | } else { | ||
424 | mac->toggle_cnt = 0; | 449 | mac->toggle_cnt = 0; |
450 | return 0; | ||
451 | } | ||
452 | } else { | ||
453 | mac->toggle_cnt = 0; | ||
454 | return 0; | ||
455 | } | ||
456 | |||
457 | if (((tx_tcnt != mac->tx_tcnt) && | ||
458 | (tx_xcnt == 0) && (mac->tx_xcnt == 0)) || | ||
459 | ((mac->tx_mcnt == tx_mcnt) && | ||
460 | (tx_xcnt != 0) && (mac->tx_xcnt != 0))) { | ||
461 | if (mac->toggle_cnt > 4) | ||
425 | status = 2; | 462 | status = 2; |
426 | } else { | 463 | else |
427 | t3_write_reg(adap, A_XGM_TX_CTRL + mac->offset, 0); | ||
428 | t3_read_reg(adap, A_XGM_TX_CTRL + mac->offset); | ||
429 | t3_write_reg(adap, A_XGM_TX_CTRL + mac->offset, | ||
430 | mac->txen); | ||
431 | t3_read_reg(adap, A_XGM_TX_CTRL + mac->offset); | ||
432 | mac->toggle_cnt++; | ||
433 | status = 1; | 464 | status = 1; |
434 | } | ||
435 | } else { | 465 | } else { |
436 | mac->toggle_cnt = 0; | 466 | mac->toggle_cnt = 0; |
437 | status = 0; | 467 | return 0; |
438 | } | 468 | } |
439 | mac->tcnt = tcnt; | ||
440 | mac->xcnt = xcnt; | ||
441 | 469 | ||
470 | if (rx_mcnt != mac->rx_mcnt) | ||
471 | rx_xcnt = (G_TXSPI4SOPCNT(t3_read_reg(adap, | ||
472 | A_XGM_RX_SPI4_SOP_EOP_CNT + | ||
473 | mac->offset))); | ||
474 | else | ||
475 | return 0; | ||
476 | |||
477 | if (mac->rx_mcnt != s->rx_frames && rx_xcnt == 0 && mac->rx_xcnt == 0) | ||
478 | status = 2; | ||
479 | |||
480 | mac->tx_tcnt = tx_tcnt; | ||
481 | mac->tx_xcnt = tx_xcnt; | ||
482 | mac->tx_mcnt = s->tx_frames; | ||
483 | mac->rx_xcnt = rx_xcnt; | ||
484 | mac->rx_mcnt = s->rx_frames; | ||
485 | if (status == 1) { | ||
486 | t3_write_reg(adap, A_XGM_TX_CTRL + mac->offset, 0); | ||
487 | t3_read_reg(adap, A_XGM_TX_CTRL + mac->offset); /* flush */ | ||
488 | t3_write_reg(adap, A_XGM_TX_CTRL + mac->offset, mac->txen); | ||
489 | t3_read_reg(adap, A_XGM_TX_CTRL + mac->offset); /* flush */ | ||
490 | mac->toggle_cnt++; | ||
491 | } else if (status == 2) { | ||
492 | t3b2_mac_reset(mac); | ||
493 | mac->toggle_cnt = 0; | ||
494 | } | ||
442 | return status; | 495 | return status; |
443 | } | 496 | } |
444 | 497 | ||
diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c index c216e6a5d235..f8efe0e70a6b 100644 --- a/drivers/net/myri10ge/myri10ge.c +++ b/drivers/net/myri10ge/myri10ge.c | |||
@@ -71,7 +71,7 @@ | |||
71 | #include "myri10ge_mcp.h" | 71 | #include "myri10ge_mcp.h" |
72 | #include "myri10ge_mcp_gen_header.h" | 72 | #include "myri10ge_mcp_gen_header.h" |
73 | 73 | ||
74 | #define MYRI10GE_VERSION_STR "1.3.0-1.227" | 74 | #define MYRI10GE_VERSION_STR "1.3.0-1.233" |
75 | 75 | ||
76 | MODULE_DESCRIPTION("Myricom 10G driver (10GbE)"); | 76 | MODULE_DESCRIPTION("Myricom 10G driver (10GbE)"); |
77 | MODULE_AUTHOR("Maintainer: help@myri.com"); | 77 | MODULE_AUTHOR("Maintainer: help@myri.com"); |
@@ -900,19 +900,9 @@ myri10ge_alloc_rx_pages(struct myri10ge_priv *mgp, struct myri10ge_rx_buf *rx, | |||
900 | /* try to refill entire ring */ | 900 | /* try to refill entire ring */ |
901 | while (rx->fill_cnt != (rx->cnt + rx->mask + 1)) { | 901 | while (rx->fill_cnt != (rx->cnt + rx->mask + 1)) { |
902 | idx = rx->fill_cnt & rx->mask; | 902 | idx = rx->fill_cnt & rx->mask; |
903 | 903 | if (rx->page_offset + bytes <= MYRI10GE_ALLOC_SIZE) { | |
904 | if ((bytes < MYRI10GE_ALLOC_SIZE / 2) && | ||
905 | (rx->page_offset + bytes <= MYRI10GE_ALLOC_SIZE)) { | ||
906 | /* we can use part of previous page */ | 904 | /* we can use part of previous page */ |
907 | get_page(rx->page); | 905 | get_page(rx->page); |
908 | #if MYRI10GE_ALLOC_SIZE > 4096 | ||
909 | /* Firmware cannot cross 4K boundary.. */ | ||
910 | if ((rx->page_offset >> 12) != | ||
911 | ((rx->page_offset + bytes - 1) >> 12)) { | ||
912 | rx->page_offset = | ||
913 | (rx->page_offset + bytes) & ~4095; | ||
914 | } | ||
915 | #endif | ||
916 | } else { | 906 | } else { |
917 | /* we need a new page */ | 907 | /* we need a new page */ |
918 | page = | 908 | page = |
@@ -941,6 +931,13 @@ myri10ge_alloc_rx_pages(struct myri10ge_priv *mgp, struct myri10ge_rx_buf *rx, | |||
941 | 931 | ||
942 | /* start next packet on a cacheline boundary */ | 932 | /* start next packet on a cacheline boundary */ |
943 | rx->page_offset += SKB_DATA_ALIGN(bytes); | 933 | rx->page_offset += SKB_DATA_ALIGN(bytes); |
934 | |||
935 | #if MYRI10GE_ALLOC_SIZE > 4096 | ||
936 | /* don't cross a 4KB boundary */ | ||
937 | if ((rx->page_offset >> 12) != | ||
938 | ((rx->page_offset + bytes - 1) >> 12)) | ||
939 | rx->page_offset = (rx->page_offset + 4096) & ~4095; | ||
940 | #endif | ||
944 | rx->fill_cnt++; | 941 | rx->fill_cnt++; |
945 | 942 | ||
946 | /* copy 8 descriptors to the firmware at a time */ | 943 | /* copy 8 descriptors to the firmware at a time */ |
@@ -2490,6 +2487,10 @@ static void myri10ge_enable_ecrc(struct myri10ge_priv *mgp) | |||
2490 | 2487 | ||
2491 | #define PCI_DEVICE_ID_INTEL_E5000_PCIE23 0x25f7 | 2488 | #define PCI_DEVICE_ID_INTEL_E5000_PCIE23 0x25f7 |
2492 | #define PCI_DEVICE_ID_INTEL_E5000_PCIE47 0x25fa | 2489 | #define PCI_DEVICE_ID_INTEL_E5000_PCIE47 0x25fa |
2490 | #define PCI_DEVICE_ID_INTEL_6300ESB_PCIEE1 0x3510 | ||
2491 | #define PCI_DEVICE_ID_INTEL_6300ESB_PCIEE4 0x351b | ||
2492 | #define PCI_DEVICE_ID_INTEL_E3000_PCIE 0x2779 | ||
2493 | #define PCI_DEVICE_ID_INTEL_E3010_PCIE 0x277a | ||
2493 | #define PCI_DEVICE_ID_SERVERWORKS_HT2100_PCIE_FIRST 0x140 | 2494 | #define PCI_DEVICE_ID_SERVERWORKS_HT2100_PCIE_FIRST 0x140 |
2494 | #define PCI_DEVICE_ID_SERVERWORKS_HT2100_PCIE_LAST 0x142 | 2495 | #define PCI_DEVICE_ID_SERVERWORKS_HT2100_PCIE_LAST 0x142 |
2495 | 2496 | ||
@@ -2529,6 +2530,18 @@ static void myri10ge_select_firmware(struct myri10ge_priv *mgp) | |||
2529 | PCI_DEVICE_ID_SERVERWORKS_HT2100_PCIE_FIRST | 2530 | PCI_DEVICE_ID_SERVERWORKS_HT2100_PCIE_FIRST |
2530 | && bridge->device <= | 2531 | && bridge->device <= |
2531 | PCI_DEVICE_ID_SERVERWORKS_HT2100_PCIE_LAST) | 2532 | PCI_DEVICE_ID_SERVERWORKS_HT2100_PCIE_LAST) |
2533 | /* All Intel E3000/E3010 PCIE ports */ | ||
2534 | || (bridge->vendor == PCI_VENDOR_ID_INTEL | ||
2535 | && (bridge->device == | ||
2536 | PCI_DEVICE_ID_INTEL_E3000_PCIE | ||
2537 | || bridge->device == | ||
2538 | PCI_DEVICE_ID_INTEL_E3010_PCIE)) | ||
2539 | /* All Intel 6310/6311/6321ESB PCIE ports */ | ||
2540 | || (bridge->vendor == PCI_VENDOR_ID_INTEL | ||
2541 | && bridge->device >= | ||
2542 | PCI_DEVICE_ID_INTEL_6300ESB_PCIEE1 | ||
2543 | && bridge->device <= | ||
2544 | PCI_DEVICE_ID_INTEL_6300ESB_PCIEE4) | ||
2532 | /* All Intel E5000 PCIE ports */ | 2545 | /* All Intel E5000 PCIE ports */ |
2533 | || (bridge->vendor == PCI_VENDOR_ID_INTEL | 2546 | || (bridge->vendor == PCI_VENDOR_ID_INTEL |
2534 | && bridge->device >= | 2547 | && bridge->device >= |
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/skge.c b/drivers/net/skge.c index 39c6677dff5e..d476a3cc2e94 100644 --- a/drivers/net/skge.c +++ b/drivers/net/skge.c | |||
@@ -163,27 +163,46 @@ static void skge_wol_init(struct skge_port *skge) | |||
163 | { | 163 | { |
164 | struct skge_hw *hw = skge->hw; | 164 | struct skge_hw *hw = skge->hw; |
165 | int port = skge->port; | 165 | int port = skge->port; |
166 | enum pause_control save_mode; | 166 | u16 ctrl; |
167 | u32 ctrl; | ||
168 | 167 | ||
169 | /* Bring hardware out of reset */ | ||
170 | skge_write16(hw, B0_CTST, CS_RST_CLR); | 168 | skge_write16(hw, B0_CTST, CS_RST_CLR); |
171 | skge_write16(hw, SK_REG(port, GMAC_LINK_CTRL), GMLC_RST_CLR); | 169 | skge_write16(hw, SK_REG(port, GMAC_LINK_CTRL), GMLC_RST_CLR); |
172 | 170 | ||
173 | skge_write8(hw, SK_REG(port, GPHY_CTRL), GPC_RST_CLR); | 171 | /* Turn on Vaux */ |
174 | skge_write8(hw, SK_REG(port, GMAC_CTRL), GMC_RST_CLR); | 172 | skge_write8(hw, B0_POWER_CTRL, |
173 | PC_VAUX_ENA | PC_VCC_ENA | PC_VAUX_ON | PC_VCC_OFF); | ||
175 | 174 | ||
176 | /* Force to 10/100 skge_reset will re-enable on resume */ | 175 | /* WA code for COMA mode -- clear PHY reset */ |
177 | save_mode = skge->flow_control; | 176 | if (hw->chip_id == CHIP_ID_YUKON_LITE && |
178 | skge->flow_control = FLOW_MODE_SYMMETRIC; | 177 | hw->chip_rev >= CHIP_REV_YU_LITE_A3) { |
178 | u32 reg = skge_read32(hw, B2_GP_IO); | ||
179 | reg |= GP_DIR_9; | ||
180 | reg &= ~GP_IO_9; | ||
181 | skge_write32(hw, B2_GP_IO, reg); | ||
182 | } | ||
179 | 183 | ||
180 | ctrl = skge->advertising; | 184 | skge_write32(hw, SK_REG(port, GPHY_CTRL), |
181 | skge->advertising &= ~(ADVERTISED_1000baseT_Half|ADVERTISED_1000baseT_Full); | 185 | GPC_DIS_SLEEP | |
186 | GPC_HWCFG_M_3 | GPC_HWCFG_M_2 | GPC_HWCFG_M_1 | GPC_HWCFG_M_0 | | ||
187 | GPC_ANEG_1 | GPC_RST_SET); | ||
182 | 188 | ||
183 | skge_phy_reset(skge); | 189 | skge_write32(hw, SK_REG(port, GPHY_CTRL), |
190 | GPC_DIS_SLEEP | | ||
191 | GPC_HWCFG_M_3 | GPC_HWCFG_M_2 | GPC_HWCFG_M_1 | GPC_HWCFG_M_0 | | ||
192 | GPC_ANEG_1 | GPC_RST_CLR); | ||
193 | |||
194 | skge_write32(hw, SK_REG(port, GMAC_CTRL), GMC_RST_CLR); | ||
195 | |||
196 | /* Force to 10/100 skge_reset will re-enable on resume */ | ||
197 | gm_phy_write(hw, port, PHY_MARV_AUNE_ADV, | ||
198 | PHY_AN_100FULL | PHY_AN_100HALF | | ||
199 | PHY_AN_10FULL | PHY_AN_10HALF| PHY_AN_CSMA); | ||
200 | /* no 1000 HD/FD */ | ||
201 | gm_phy_write(hw, port, PHY_MARV_1000T_CTRL, 0); | ||
202 | gm_phy_write(hw, port, PHY_MARV_CTRL, | ||
203 | PHY_CT_RESET | PHY_CT_SPS_LSB | PHY_CT_ANE | | ||
204 | PHY_CT_RE_CFG | PHY_CT_DUP_MD); | ||
184 | 205 | ||
185 | skge->flow_control = save_mode; | ||
186 | skge->advertising = ctrl; | ||
187 | 206 | ||
188 | /* Set GMAC to no flow control and auto update for speed/duplex */ | 207 | /* Set GMAC to no flow control and auto update for speed/duplex */ |
189 | gma_write16(hw, port, GM_GP_CTRL, | 208 | gma_write16(hw, port, GM_GP_CTRL, |
@@ -227,12 +246,10 @@ static int skge_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) | |||
227 | struct skge_port *skge = netdev_priv(dev); | 246 | struct skge_port *skge = netdev_priv(dev); |
228 | struct skge_hw *hw = skge->hw; | 247 | struct skge_hw *hw = skge->hw; |
229 | 248 | ||
230 | if (wol->wolopts & wol_supported(hw)) | 249 | if (wol->wolopts & ~wol_supported(hw)) |
231 | return -EOPNOTSUPP; | 250 | return -EOPNOTSUPP; |
232 | 251 | ||
233 | skge->wol = wol->wolopts; | 252 | skge->wol = wol->wolopts; |
234 | if (!netif_running(dev)) | ||
235 | skge_wol_init(skge); | ||
236 | return 0; | 253 | return 0; |
237 | } | 254 | } |
238 | 255 | ||
@@ -2535,10 +2552,12 @@ static int skge_down(struct net_device *dev) | |||
2535 | printk(KERN_INFO PFX "%s: disabling interface\n", dev->name); | 2552 | printk(KERN_INFO PFX "%s: disabling interface\n", dev->name); |
2536 | 2553 | ||
2537 | netif_stop_queue(dev); | 2554 | netif_stop_queue(dev); |
2555 | |||
2538 | if (hw->chip_id == CHIP_ID_GENESIS && hw->phy_type == SK_PHY_XMAC) | 2556 | if (hw->chip_id == CHIP_ID_GENESIS && hw->phy_type == SK_PHY_XMAC) |
2539 | del_timer_sync(&skge->link_timer); | 2557 | del_timer_sync(&skge->link_timer); |
2540 | 2558 | ||
2541 | netif_poll_disable(dev); | 2559 | netif_poll_disable(dev); |
2560 | netif_carrier_off(dev); | ||
2542 | 2561 | ||
2543 | spin_lock_irq(&hw->hw_lock); | 2562 | spin_lock_irq(&hw->hw_lock); |
2544 | hw->intr_mask &= ~portmask[port]; | 2563 | hw->intr_mask &= ~portmask[port]; |
@@ -3765,21 +3784,6 @@ static void __devexit skge_remove(struct pci_dev *pdev) | |||
3765 | } | 3784 | } |
3766 | 3785 | ||
3767 | #ifdef CONFIG_PM | 3786 | #ifdef CONFIG_PM |
3768 | static int vaux_avail(struct pci_dev *pdev) | ||
3769 | { | ||
3770 | int pm_cap; | ||
3771 | |||
3772 | pm_cap = pci_find_capability(pdev, PCI_CAP_ID_PM); | ||
3773 | if (pm_cap) { | ||
3774 | u16 ctl; | ||
3775 | pci_read_config_word(pdev, pm_cap + PCI_PM_PMC, &ctl); | ||
3776 | if (ctl & PCI_PM_CAP_AUX_POWER) | ||
3777 | return 1; | ||
3778 | } | ||
3779 | return 0; | ||
3780 | } | ||
3781 | |||
3782 | |||
3783 | static int skge_suspend(struct pci_dev *pdev, pm_message_t state) | 3787 | static int skge_suspend(struct pci_dev *pdev, pm_message_t state) |
3784 | { | 3788 | { |
3785 | struct skge_hw *hw = pci_get_drvdata(pdev); | 3789 | struct skge_hw *hw = pci_get_drvdata(pdev); |
@@ -3801,10 +3805,6 @@ static int skge_suspend(struct pci_dev *pdev, pm_message_t state) | |||
3801 | wol |= skge->wol; | 3805 | wol |= skge->wol; |
3802 | } | 3806 | } |
3803 | 3807 | ||
3804 | if (wol && vaux_avail(pdev)) | ||
3805 | skge_write8(hw, B0_POWER_CTRL, | ||
3806 | PC_VAUX_ENA | PC_VCC_ENA | PC_VAUX_ON | PC_VCC_OFF); | ||
3807 | |||
3808 | skge_write32(hw, B0_IMSK, 0); | 3808 | skge_write32(hw, B0_IMSK, 0); |
3809 | pci_enable_wake(pdev, pci_choose_state(pdev, state), wol); | 3809 | pci_enable_wake(pdev, pci_choose_state(pdev, state), wol); |
3810 | pci_set_power_state(pdev, pci_choose_state(pdev, state)); | 3810 | pci_set_power_state(pdev, pci_choose_state(pdev, state)); |
@@ -3850,6 +3850,28 @@ out: | |||
3850 | } | 3850 | } |
3851 | #endif | 3851 | #endif |
3852 | 3852 | ||
3853 | static void skge_shutdown(struct pci_dev *pdev) | ||
3854 | { | ||
3855 | struct skge_hw *hw = pci_get_drvdata(pdev); | ||
3856 | int i, wol = 0; | ||
3857 | |||
3858 | for (i = 0; i < hw->ports; i++) { | ||
3859 | struct net_device *dev = hw->dev[i]; | ||
3860 | struct skge_port *skge = netdev_priv(dev); | ||
3861 | |||
3862 | if (skge->wol) | ||
3863 | skge_wol_init(skge); | ||
3864 | wol |= skge->wol; | ||
3865 | } | ||
3866 | |||
3867 | pci_enable_wake(pdev, PCI_D3hot, wol); | ||
3868 | pci_enable_wake(pdev, PCI_D3cold, wol); | ||
3869 | |||
3870 | pci_disable_device(pdev); | ||
3871 | pci_set_power_state(pdev, PCI_D3hot); | ||
3872 | |||
3873 | } | ||
3874 | |||
3853 | static struct pci_driver skge_driver = { | 3875 | static struct pci_driver skge_driver = { |
3854 | .name = DRV_NAME, | 3876 | .name = DRV_NAME, |
3855 | .id_table = skge_id_table, | 3877 | .id_table = skge_id_table, |
@@ -3859,6 +3881,7 @@ static struct pci_driver skge_driver = { | |||
3859 | .suspend = skge_suspend, | 3881 | .suspend = skge_suspend, |
3860 | .resume = skge_resume, | 3882 | .resume = skge_resume, |
3861 | #endif | 3883 | #endif |
3884 | .shutdown = skge_shutdown, | ||
3862 | }; | 3885 | }; |
3863 | 3886 | ||
3864 | static int __init skge_init_module(void) | 3887 | static int __init skge_init_module(void) |
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index ab0ab92583fe..4a009b7b1777 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c | |||
@@ -510,9 +510,9 @@ static void sky2_phy_init(struct sky2_hw *hw, unsigned port) | |||
510 | ledover &= ~PHY_M_LED_MO_RX; | 510 | ledover &= ~PHY_M_LED_MO_RX; |
511 | } | 511 | } |
512 | 512 | ||
513 | if (hw->chip_id == CHIP_ID_YUKON_EC_U && hw->chip_rev == CHIP_REV_YU_EC_A1) { | 513 | if (hw->chip_id == CHIP_ID_YUKON_EC_U && |
514 | hw->chip_rev == CHIP_REV_YU_EC_U_A1) { | ||
514 | /* apply fixes in PHY AFE */ | 515 | /* apply fixes in PHY AFE */ |
515 | pg = gm_phy_read(hw, port, PHY_MARV_EXT_ADR); | ||
516 | gm_phy_write(hw, port, PHY_MARV_EXT_ADR, 255); | 516 | gm_phy_write(hw, port, PHY_MARV_EXT_ADR, 255); |
517 | 517 | ||
518 | /* increase differential signal amplitude in 10BASE-T */ | 518 | /* increase differential signal amplitude in 10BASE-T */ |
@@ -524,7 +524,7 @@ static void sky2_phy_init(struct sky2_hw *hw, unsigned port) | |||
524 | gm_phy_write(hw, port, 0x17, 0x2002); | 524 | gm_phy_write(hw, port, 0x17, 0x2002); |
525 | 525 | ||
526 | /* set page register to 0 */ | 526 | /* set page register to 0 */ |
527 | gm_phy_write(hw, port, PHY_MARV_EXT_ADR, pg); | 527 | gm_phy_write(hw, port, PHY_MARV_EXT_ADR, 0); |
528 | } else if (hw->chip_id != CHIP_ID_YUKON_EX) { | 528 | } else if (hw->chip_id != CHIP_ID_YUKON_EX) { |
529 | gm_phy_write(hw, port, PHY_MARV_LED_CTRL, ledctrl); | 529 | gm_phy_write(hw, port, PHY_MARV_LED_CTRL, ledctrl); |
530 | 530 | ||
@@ -1561,6 +1561,7 @@ static int sky2_down(struct net_device *dev) | |||
1561 | 1561 | ||
1562 | /* Stop more packets from being queued */ | 1562 | /* Stop more packets from being queued */ |
1563 | netif_stop_queue(dev); | 1563 | netif_stop_queue(dev); |
1564 | netif_carrier_off(dev); | ||
1564 | 1565 | ||
1565 | /* Disable port IRQ */ | 1566 | /* Disable port IRQ */ |
1566 | imask = sky2_read32(hw, B0_IMSK); | 1567 | imask = sky2_read32(hw, B0_IMSK); |
@@ -3769,6 +3770,11 @@ static int sky2_resume(struct pci_dev *pdev) | |||
3769 | goto out; | 3770 | goto out; |
3770 | 3771 | ||
3771 | pci_enable_wake(pdev, PCI_D0, 0); | 3772 | pci_enable_wake(pdev, PCI_D0, 0); |
3773 | |||
3774 | /* Re-enable all clocks */ | ||
3775 | if (hw->chip_id == CHIP_ID_YUKON_EX || hw->chip_id == CHIP_ID_YUKON_EC_U) | ||
3776 | sky2_pci_write32(hw, PCI_DEV_REG3, 0); | ||
3777 | |||
3772 | sky2_reset(hw); | 3778 | sky2_reset(hw); |
3773 | 3779 | ||
3774 | sky2_write32(hw, B0_IMSK, Y2_IS_BASE); | 3780 | sky2_write32(hw, B0_IMSK, Y2_IS_BASE); |
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/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/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; |