diff options
436 files changed, 4706 insertions, 3040 deletions
@@ -96,4 +96,6 @@ Tejun Heo <htejun@gmail.com> | |||
96 | Thomas Graf <tgraf@suug.ch> | 96 | Thomas Graf <tgraf@suug.ch> |
97 | Tony Luck <tony.luck@intel.com> | 97 | Tony Luck <tony.luck@intel.com> |
98 | Tsuneo Yoshioka <Tsuneo.Yoshioka@f-secure.com> | 98 | Tsuneo Yoshioka <Tsuneo.Yoshioka@f-secure.com> |
99 | Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com> | ||
100 | Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de> | ||
99 | Valdis Kletnieks <Valdis.Kletnieks@vt.edu> | 101 | Valdis Kletnieks <Valdis.Kletnieks@vt.edu> |
diff --git a/Documentation/ABI/testing/sysfs-gpio b/Documentation/ABI/testing/sysfs-gpio new file mode 100644 index 000000000000..8aab8092ad35 --- /dev/null +++ b/Documentation/ABI/testing/sysfs-gpio | |||
@@ -0,0 +1,26 @@ | |||
1 | What: /sys/class/gpio/ | ||
2 | Date: July 2008 | ||
3 | KernelVersion: 2.6.27 | ||
4 | Contact: David Brownell <dbrownell@users.sourceforge.net> | ||
5 | Description: | ||
6 | |||
7 | As a Kconfig option, individual GPIO signals may be accessed from | ||
8 | userspace. GPIOs are only made available to userspace by an explicit | ||
9 | "export" operation. If a given GPIO is not claimed for use by | ||
10 | kernel code, it may be exported by userspace (and unexported later). | ||
11 | Kernel code may export it for complete or partial access. | ||
12 | |||
13 | GPIOs are identified as they are inside the kernel, using integers in | ||
14 | the range 0..INT_MAX. See Documentation/gpio.txt for more information. | ||
15 | |||
16 | /sys/class/gpio | ||
17 | /export ... asks the kernel to export a GPIO to userspace | ||
18 | /unexport ... to return a GPIO to the kernel | ||
19 | /gpioN ... for each exported GPIO #N | ||
20 | /value ... always readable, writes fail for input GPIOs | ||
21 | /direction ... r/w as: in, out (default low); write: high, low | ||
22 | /gpiochipN ... for each gpiochip; #N is its first GPIO | ||
23 | /base ... (r/o) same as N | ||
24 | /label ... (r/o) descriptive, not necessarily unique | ||
25 | /ngpio ... (r/o) number of GPIOs; numbered N to N + (ngpio - 1) | ||
26 | |||
diff --git a/Documentation/DMA-mapping.txt b/Documentation/DMA-mapping.txt index b463ecd0c7ce..c74fec8c2351 100644 --- a/Documentation/DMA-mapping.txt +++ b/Documentation/DMA-mapping.txt | |||
@@ -740,7 +740,7 @@ failure can be determined by: | |||
740 | dma_addr_t dma_handle; | 740 | dma_addr_t dma_handle; |
741 | 741 | ||
742 | dma_handle = pci_map_single(pdev, addr, size, direction); | 742 | dma_handle = pci_map_single(pdev, addr, size, direction); |
743 | if (pci_dma_mapping_error(dma_handle)) { | 743 | if (pci_dma_mapping_error(pdev, dma_handle)) { |
744 | /* | 744 | /* |
745 | * reduce current DMA mapping usage, | 745 | * reduce current DMA mapping usage, |
746 | * delay and try again later or | 746 | * delay and try again later or |
diff --git a/Documentation/HOWTO b/Documentation/HOWTO index c2371c5a98f9..48a3955f05fc 100644 --- a/Documentation/HOWTO +++ b/Documentation/HOWTO | |||
@@ -77,7 +77,8 @@ documentation files are also added which explain how to use the feature. | |||
77 | When a kernel change causes the interface that the kernel exposes to | 77 | When a kernel change causes the interface that the kernel exposes to |
78 | userspace to change, it is recommended that you send the information or | 78 | userspace to change, it is recommended that you send the information or |
79 | a patch to the manual pages explaining the change to the manual pages | 79 | a patch to the manual pages explaining the change to the manual pages |
80 | maintainer at mtk.manpages@gmail.com. | 80 | maintainer at mtk.manpages@gmail.com, and CC the list |
81 | linux-api@vger.kernel.org. | ||
81 | 82 | ||
82 | Here is a list of files that are in the kernel source tree that are | 83 | Here is a list of files that are in the kernel source tree that are |
83 | required reading: | 84 | required reading: |
diff --git a/Documentation/SubmitChecklist b/Documentation/SubmitChecklist index da10e0714241..21f0795af20f 100644 --- a/Documentation/SubmitChecklist +++ b/Documentation/SubmitChecklist | |||
@@ -67,6 +67,8 @@ kernel patches. | |||
67 | 67 | ||
68 | 19: All new userspace interfaces are documented in Documentation/ABI/. | 68 | 19: All new userspace interfaces are documented in Documentation/ABI/. |
69 | See Documentation/ABI/README for more information. | 69 | See Documentation/ABI/README for more information. |
70 | Patches that change userspace interfaces should be CCed to | ||
71 | linux-api@vger.kernel.org. | ||
70 | 72 | ||
71 | 20: Check that it all passes `make headers_check'. | 73 | 20: Check that it all passes `make headers_check'. |
72 | 74 | ||
diff --git a/Documentation/cpu-freq/index.txt b/Documentation/cpu-freq/index.txt index ffdb5323df37..3d0b915035b9 100644 --- a/Documentation/cpu-freq/index.txt +++ b/Documentation/cpu-freq/index.txt | |||
@@ -35,11 +35,9 @@ Mailing List | |||
35 | ------------ | 35 | ------------ |
36 | There is a CPU frequency changing CVS commit and general list where | 36 | There is a CPU frequency changing CVS commit and general list where |
37 | you can report bugs, problems or submit patches. To post a message, | 37 | you can report bugs, problems or submit patches. To post a message, |
38 | send an email to cpufreq@lists.linux.org.uk, to subscribe go to | 38 | send an email to cpufreq@vger.kernel.org, to subscribe go to |
39 | http://lists.linux.org.uk/mailman/listinfo/cpufreq. Previous post to the | 39 | http://vger.kernel.org/vger-lists.html#cpufreq and follow the |
40 | mailing list are available to subscribers at | 40 | instructions there. |
41 | http://lists.linux.org.uk/mailman/private/cpufreq/. | ||
42 | |||
43 | 41 | ||
44 | Links | 42 | Links |
45 | ----- | 43 | ----- |
@@ -50,7 +48,7 @@ how to access the CVS repository: | |||
50 | * http://cvs.arm.linux.org.uk/ | 48 | * http://cvs.arm.linux.org.uk/ |
51 | 49 | ||
52 | the CPUFreq Mailing list: | 50 | the CPUFreq Mailing list: |
53 | * http://lists.linux.org.uk/mailman/listinfo/cpufreq | 51 | * http://vger.kernel.org/vger-lists.html#cpufreq |
54 | 52 | ||
55 | Clock and voltage scaling for the SA-1100: | 53 | Clock and voltage scaling for the SA-1100: |
56 | * http://www.lartmaker.nl/projects/scaling | 54 | * http://www.lartmaker.nl/projects/scaling |
diff --git a/Documentation/cpusets.txt b/Documentation/cpusets.txt index 1f5a924d1e56..47e568a9370a 100644 --- a/Documentation/cpusets.txt +++ b/Documentation/cpusets.txt | |||
@@ -635,14 +635,16 @@ prior 'mems' setting, will not be moved. | |||
635 | 635 | ||
636 | There is an exception to the above. If hotplug functionality is used | 636 | There is an exception to the above. If hotplug functionality is used |
637 | to remove all the CPUs that are currently assigned to a cpuset, | 637 | to remove all the CPUs that are currently assigned to a cpuset, |
638 | then the kernel will automatically update the cpus_allowed of all | 638 | then all the tasks in that cpuset will be moved to the nearest ancestor |
639 | tasks attached to CPUs in that cpuset to allow all CPUs. When memory | 639 | with non-empty cpus. But the moving of some (or all) tasks might fail if |
640 | hotplug functionality for removing Memory Nodes is available, a | 640 | cpuset is bound with another cgroup subsystem which has some restrictions |
641 | similar exception is expected to apply there as well. In general, | 641 | on task attaching. In this failing case, those tasks will stay |
642 | the kernel prefers to violate cpuset placement, over starving a task | 642 | in the original cpuset, and the kernel will automatically update |
643 | that has had all its allowed CPUs or Memory Nodes taken offline. User | 643 | their cpus_allowed to allow all online CPUs. When memory hotplug |
644 | code should reconfigure cpusets to only refer to online CPUs and Memory | 644 | functionality for removing Memory Nodes is available, a similar exception |
645 | Nodes when using hotplug to add or remove such resources. | 645 | is expected to apply there as well. In general, the kernel prefers to |
646 | violate cpuset placement, over starving a task that has had all | ||
647 | its allowed CPUs or Memory Nodes taken offline. | ||
646 | 648 | ||
647 | There is a second exception to the above. GFP_ATOMIC requests are | 649 | There is a second exception to the above. GFP_ATOMIC requests are |
648 | kernel internal allocations that must be satisfied, immediately. | 650 | kernel internal allocations that must be satisfied, immediately. |
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt index eb1a47b97427..83c88cae1eda 100644 --- a/Documentation/feature-removal-schedule.txt +++ b/Documentation/feature-removal-schedule.txt | |||
@@ -322,3 +322,11 @@ Why: Accounting can now be enabled/disabled without kernel recompilation. | |||
322 | controlled by a kernel/module/sysfs/sysctl parameter. | 322 | controlled by a kernel/module/sysfs/sysctl parameter. |
323 | Who: Krzysztof Piotr Oledzki <ole@ans.pl> | 323 | Who: Krzysztof Piotr Oledzki <ole@ans.pl> |
324 | 324 | ||
325 | --------------------------- | ||
326 | |||
327 | What: ide-scsi (BLK_DEV_IDESCSI) | ||
328 | When: 2.6.29 | ||
329 | Why: The 2.6 kernel supports direct writing to ide CD drives, which | ||
330 | eliminates the need for ide-scsi. The new method is more | ||
331 | efficient in every way. | ||
332 | Who: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | ||
diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt index 394eb2cc1c39..f566ad9bcb7b 100644 --- a/Documentation/filesystems/proc.txt +++ b/Documentation/filesystems/proc.txt | |||
@@ -2413,6 +2413,8 @@ The following 4 memory types are supported: | |||
2413 | - (bit 1) anonymous shared memory | 2413 | - (bit 1) anonymous shared memory |
2414 | - (bit 2) file-backed private memory | 2414 | - (bit 2) file-backed private memory |
2415 | - (bit 3) file-backed shared memory | 2415 | - (bit 3) file-backed shared memory |
2416 | - (bit 4) ELF header pages in file-backed private memory areas (it is | ||
2417 | effective only if the bit 2 is cleared) | ||
2416 | 2418 | ||
2417 | Note that MMIO pages such as frame buffer are never dumped and vDSO pages | 2419 | Note that MMIO pages such as frame buffer are never dumped and vDSO pages |
2418 | are always dumped regardless of the bitmask status. | 2420 | are always dumped regardless of the bitmask status. |
diff --git a/Documentation/hwmon/adt7473 b/Documentation/hwmon/adt7473 index 2126de34c711..1cbf671822e2 100644 --- a/Documentation/hwmon/adt7473 +++ b/Documentation/hwmon/adt7473 | |||
@@ -14,14 +14,14 @@ Description | |||
14 | 14 | ||
15 | This driver implements support for the Analog Devices ADT7473 chip family. | 15 | This driver implements support for the Analog Devices ADT7473 chip family. |
16 | 16 | ||
17 | The LM85 uses the 2-wire interface compatible with the SMBUS 2.0 | 17 | The ADT7473 uses the 2-wire interface compatible with the SMBUS 2.0 |
18 | specification. Using an analog to digital converter it measures three (3) | 18 | specification. Using an analog to digital converter it measures three (3) |
19 | temperatures and two (2) voltages. It has three (3) 16-bit counters for | 19 | temperatures and two (2) voltages. It has four (4) 16-bit counters for |
20 | measuring fan speed. There are three (3) PWM outputs that can be used | 20 | measuring fan speed. There are three (3) PWM outputs that can be used |
21 | to control fan speed. | 21 | to control fan speed. |
22 | 22 | ||
23 | A sophisticated control system for the PWM outputs is designed into the | 23 | A sophisticated control system for the PWM outputs is designed into the |
24 | LM85 that allows fan speed to be adjusted automatically based on any of the | 24 | ADT7473 that allows fan speed to be adjusted automatically based on any of the |
25 | three temperature sensors. Each PWM output is individually adjustable and | 25 | three temperature sensors. Each PWM output is individually adjustable and |
26 | programmable. Once configured, the ADT7473 will adjust the PWM outputs in | 26 | programmable. Once configured, the ADT7473 will adjust the PWM outputs in |
27 | response to the measured temperatures without further host intervention. | 27 | response to the measured temperatures without further host intervention. |
@@ -46,14 +46,6 @@ from the raw value to get the temperature value. | |||
46 | The Analog Devices datasheet is very detailed and describes a procedure for | 46 | The Analog Devices datasheet is very detailed and describes a procedure for |
47 | determining an optimal configuration for the automatic PWM control. | 47 | determining an optimal configuration for the automatic PWM control. |
48 | 48 | ||
49 | Hardware Configurations | ||
50 | ----------------------- | ||
51 | |||
52 | The ADT7473 chips have an optional SMBALERT output that can be used to | ||
53 | signal the chipset in case a limit is exceeded or the temperature sensors | ||
54 | fail. Individual sensor interrupts can be masked so they won't trigger | ||
55 | SMBALERT. The SMBALERT output if configured replaces the PWM2 function. | ||
56 | |||
57 | Configuration Notes | 49 | Configuration Notes |
58 | ------------------- | 50 | ------------------- |
59 | 51 | ||
@@ -61,8 +53,8 @@ Besides standard interfaces driver adds the following: | |||
61 | 53 | ||
62 | * PWM Control | 54 | * PWM Control |
63 | 55 | ||
64 | * pwm#_auto_point1_pwm and pwm#_auto_point1_temp and | 56 | * pwm#_auto_point1_pwm and temp#_auto_point1_temp and |
65 | * pwm#_auto_point2_pwm and pwm#_auto_point2_temp - | 57 | * pwm#_auto_point2_pwm and temp#_auto_point2_temp - |
66 | 58 | ||
67 | point1: Set the pwm speed at a lower temperature bound. | 59 | point1: Set the pwm speed at a lower temperature bound. |
68 | point2: Set the pwm speed at a higher temperature bound. | 60 | point2: Set the pwm speed at a higher temperature bound. |
diff --git a/Documentation/hwmon/sysfs-interface b/Documentation/hwmon/sysfs-interface index 2d845730d4e0..6dbfd5efd991 100644 --- a/Documentation/hwmon/sysfs-interface +++ b/Documentation/hwmon/sysfs-interface | |||
@@ -329,6 +329,10 @@ power[1-*]_average Average power use | |||
329 | Unit: microWatt | 329 | Unit: microWatt |
330 | RO | 330 | RO |
331 | 331 | ||
332 | power[1-*]_average_interval Power use averaging interval | ||
333 | Unit: milliseconds | ||
334 | RW | ||
335 | |||
332 | power[1-*]_average_highest Historical average maximum power use | 336 | power[1-*]_average_highest Historical average maximum power use |
333 | Unit: microWatt | 337 | Unit: microWatt |
334 | RO | 338 | RO |
@@ -354,6 +358,14 @@ power[1-*]_reset_history Reset input_highest, input_lowest, | |||
354 | WO | 358 | WO |
355 | 359 | ||
356 | ********** | 360 | ********** |
361 | * Energy * | ||
362 | ********** | ||
363 | |||
364 | energy[1-*]_input Cumulative energy use | ||
365 | Unit: microJoule | ||
366 | RO | ||
367 | |||
368 | ********** | ||
357 | * Alarms * | 369 | * Alarms * |
358 | ********** | 370 | ********** |
359 | 371 | ||
diff --git a/Documentation/ioctl/cdrom.txt b/Documentation/ioctl/cdrom.txt index 62d4af44ec4a..59df81c8da2b 100644 --- a/Documentation/ioctl/cdrom.txt +++ b/Documentation/ioctl/cdrom.txt | |||
@@ -271,14 +271,14 @@ CDROMCLOSETRAY pendant of CDROMEJECT | |||
271 | 271 | ||
272 | usage: | 272 | usage: |
273 | 273 | ||
274 | ioctl(fd, CDROMEJECT, 0); | 274 | ioctl(fd, CDROMCLOSETRAY, 0); |
275 | 275 | ||
276 | inputs: none | 276 | inputs: none |
277 | 277 | ||
278 | outputs: none | 278 | outputs: none |
279 | 279 | ||
280 | error returns: | 280 | error returns: |
281 | ENOSYS cd drive not capable of ejecting | 281 | ENOSYS cd drive not capable of closing the tray |
282 | EBUSY other processes are accessing drive, or door is locked | 282 | EBUSY other processes are accessing drive, or door is locked |
283 | 283 | ||
284 | notes: | 284 | notes: |
diff --git a/Documentation/sysctl/kernel.txt b/Documentation/sysctl/kernel.txt index 276a7e637822..e1ff0d920a5c 100644 --- a/Documentation/sysctl/kernel.txt +++ b/Documentation/sysctl/kernel.txt | |||
@@ -351,9 +351,10 @@ kernel. This value defaults to SHMMAX. | |||
351 | 351 | ||
352 | softlockup_thresh: | 352 | softlockup_thresh: |
353 | 353 | ||
354 | This value can be used to lower the softlockup tolerance | 354 | This value can be used to lower the softlockup tolerance threshold. The |
355 | threshold. The default threshold is 10s. If a cpu is locked up | 355 | default threshold is 60 seconds. If a cpu is locked up for 60 seconds, |
356 | for 10s, the kernel complains. Valid values are 1-60s. | 356 | the kernel complains. Valid values are 1-60 seconds. Setting this |
357 | tunable to zero will disable the softlockup detection altogether. | ||
357 | 358 | ||
358 | ============================================================== | 359 | ============================================================== |
359 | 360 | ||
diff --git a/Documentation/usb/anchors.txt b/Documentation/usb/anchors.txt index 7304bcf5a306..5e6b64c20d25 100644 --- a/Documentation/usb/anchors.txt +++ b/Documentation/usb/anchors.txt | |||
@@ -42,9 +42,21 @@ This function kills all URBs associated with an anchor. The URBs | |||
42 | are called in the reverse temporal order they were submitted. | 42 | are called in the reverse temporal order they were submitted. |
43 | This way no data can be reordered. | 43 | This way no data can be reordered. |
44 | 44 | ||
45 | usb_unlink_anchored_urbs() | ||
46 | -------------------------- | ||
47 | |||
48 | This function unlinks all URBs associated with an anchor. The URBs | ||
49 | are processed in the reverse temporal order they were submitted. | ||
50 | This is similar to usb_kill_anchored_urbs(), but it will not sleep. | ||
51 | Therefore no guarantee is made that the URBs have been unlinked when | ||
52 | the call returns. They may be unlinked later but will be unlinked in | ||
53 | finite time. | ||
54 | |||
45 | usb_wait_anchor_empty_timeout() | 55 | usb_wait_anchor_empty_timeout() |
46 | ------------------------------- | 56 | ------------------------------- |
47 | 57 | ||
48 | This function waits for all URBs associated with an anchor to finish | 58 | This function waits for all URBs associated with an anchor to finish |
49 | or a timeout, whichever comes first. Its return value will tell you | 59 | or a timeout, whichever comes first. Its return value will tell you |
50 | whether the timeout was reached. | 60 | whether the timeout was reached. |
61 | |||
62 | |||
diff --git a/Documentation/video4linux/CARDLIST.em28xx b/Documentation/video4linux/CARDLIST.em28xx index 89c7f32abf9f..53449cb99b17 100644 --- a/Documentation/video4linux/CARDLIST.em28xx +++ b/Documentation/video4linux/CARDLIST.em28xx | |||
@@ -46,7 +46,7 @@ | |||
46 | 45 -> Pinnacle PCTV DVB-T (em2870) | 46 | 45 -> Pinnacle PCTV DVB-T (em2870) |
47 | 46 -> Compro, VideoMate U3 (em2870) [185b:2870] | 47 | 46 -> Compro, VideoMate U3 (em2870) [185b:2870] |
48 | 47 -> KWorld DVB-T 305U (em2880) [eb1a:e305] | 48 | 47 -> KWorld DVB-T 305U (em2880) [eb1a:e305] |
49 | 48 -> KWorld DVB-T 310U (em2880) | 49 | 48 -> KWorld DVB-T 310U (em2880) [eb1a:e310] |
50 | 49 -> MSI DigiVox A/D (em2880) [eb1a:e310] | 50 | 49 -> MSI DigiVox A/D (em2880) [eb1a:e310] |
51 | 50 -> MSI DigiVox A/D II (em2880) [eb1a:e320] | 51 | 50 -> MSI DigiVox A/D II (em2880) [eb1a:e320] |
52 | 51 -> Terratec Hybrid XS Secam (em2880) [0ccd:004c] | 52 | 51 -> Terratec Hybrid XS Secam (em2880) [0ccd:004c] |
diff --git a/Documentation/video4linux/gspca.txt b/Documentation/video4linux/gspca.txt index 0f03900c48fb..9a3e4d797fa8 100644 --- a/Documentation/video4linux/gspca.txt +++ b/Documentation/video4linux/gspca.txt | |||
@@ -190,6 +190,7 @@ pac7311 093a:260f SnakeCam | |||
190 | pac7311 093a:2621 PAC731x | 190 | pac7311 093a:2621 PAC731x |
191 | pac7311 093a:2624 PAC7302 | 191 | pac7311 093a:2624 PAC7302 |
192 | pac7311 093a:2626 Labtec 2200 | 192 | pac7311 093a:2626 Labtec 2200 |
193 | pac7311 093a:262a Webcam 300k | ||
193 | zc3xx 0ac8:0302 Z-star Vimicro zc0302 | 194 | zc3xx 0ac8:0302 Z-star Vimicro zc0302 |
194 | vc032x 0ac8:0321 Vimicro generic vc0321 | 195 | vc032x 0ac8:0321 Vimicro generic vc0321 |
195 | vc032x 0ac8:0323 Vimicro Vc0323 | 196 | vc032x 0ac8:0323 Vimicro Vc0323 |
diff --git a/MAINTAINERS b/MAINTAINERS index 186be3ba5069..8dae4555f10e 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -271,20 +271,20 @@ W: http://www.lesswatts.org/projects/acpi/ | |||
271 | S: Supported | 271 | S: Supported |
272 | 272 | ||
273 | ACPI WMI DRIVER | 273 | ACPI WMI DRIVER |
274 | P: Carlos Corbacho | 274 | P: Carlos Corbacho |
275 | M: carlos@strangeworlds.co.uk | 275 | M: carlos@strangeworlds.co.uk |
276 | L: linux-acpi@vger.kernel.org | 276 | L: linux-acpi@vger.kernel.org |
277 | W: http://www.lesswatts.org/projects/acpi/ | 277 | W: http://www.lesswatts.org/projects/acpi/ |
278 | S: Maintained | 278 | S: Maintained |
279 | 279 | ||
280 | AD1889 ALSA SOUND DRIVER | 280 | AD1889 ALSA SOUND DRIVER |
281 | P: Kyle McMartin | 281 | P: Kyle McMartin |
282 | M: kyle@mcmartin.ca | 282 | M: kyle@mcmartin.ca |
283 | P: Thibaut Varene | 283 | P: Thibaut Varene |
284 | M: T-Bone@parisc-linux.org | 284 | M: T-Bone@parisc-linux.org |
285 | W: http://wiki.parisc-linux.org/AD1889 | 285 | W: http://wiki.parisc-linux.org/AD1889 |
286 | L: linux-parisc@vger.kernel.org | 286 | L: linux-parisc@vger.kernel.org |
287 | S: Maintained | 287 | S: Maintained |
288 | 288 | ||
289 | ADM1025 HARDWARE MONITOR DRIVER | 289 | ADM1025 HARDWARE MONITOR DRIVER |
290 | P: Jean Delvare | 290 | P: Jean Delvare |
@@ -473,11 +473,11 @@ L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) | |||
473 | S: Maintained | 473 | S: Maintained |
474 | 474 | ||
475 | ARM/ATMEL AT91RM9200 ARM ARCHITECTURE | 475 | ARM/ATMEL AT91RM9200 ARM ARCHITECTURE |
476 | P: Andrew Victor | 476 | P: Andrew Victor |
477 | M: linux@maxim.org.za | 477 | M: linux@maxim.org.za |
478 | L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) | 478 | L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) |
479 | W: http://maxim.org.za/at91_26.html | 479 | W: http://maxim.org.za/at91_26.html |
480 | S: Maintained | 480 | S: Maintained |
481 | 481 | ||
482 | ARM/CIRRUS LOGIC EP93XX ARM ARCHITECTURE | 482 | ARM/CIRRUS LOGIC EP93XX ARM ARCHITECTURE |
483 | P: Lennert Buytenhek | 483 | P: Lennert Buytenhek |
@@ -532,10 +532,10 @@ L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) | |||
532 | S: Maintained | 532 | S: Maintained |
533 | 533 | ||
534 | ARM/HP JORNADA 7XX MACHINE SUPPORT | 534 | ARM/HP JORNADA 7XX MACHINE SUPPORT |
535 | P: Kristoffer Ericson | 535 | P: Kristoffer Ericson |
536 | M: kristoffer.ericson@gmail.com | 536 | M: kristoffer.ericson@gmail.com |
537 | W: www.jlime.com | 537 | W: www.jlime.com |
538 | S: Maintained | 538 | S: Maintained |
539 | 539 | ||
540 | ARM/INTEL IOP32X ARM ARCHITECTURE | 540 | ARM/INTEL IOP32X ARM ARCHITECTURE |
541 | P: Lennert Buytenhek | 541 | P: Lennert Buytenhek |
@@ -1017,7 +1017,7 @@ T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb.git | |||
1017 | S: Maintained | 1017 | S: Maintained |
1018 | 1018 | ||
1019 | CAFE CMOS INTEGRATED CAMERA CONTROLLER DRIVER | 1019 | CAFE CMOS INTEGRATED CAMERA CONTROLLER DRIVER |
1020 | P: Jonathan Corbet | 1020 | P: Jonathan Corbet |
1021 | M: corbet@lwn.net | 1021 | M: corbet@lwn.net |
1022 | L: video4linux-list@redhat.com | 1022 | L: video4linux-list@redhat.com |
1023 | S: Maintained | 1023 | S: Maintained |
@@ -1198,9 +1198,7 @@ M: hpa@zytor.com | |||
1198 | S: Maintained | 1198 | S: Maintained |
1199 | 1199 | ||
1200 | CPUSETS | 1200 | CPUSETS |
1201 | P: Paul Jackson | ||
1202 | P: Paul Menage | 1201 | P: Paul Menage |
1203 | M: pj@sgi.com | ||
1204 | M: menage@google.com | 1202 | M: menage@google.com |
1205 | L: linux-kernel@vger.kernel.org | 1203 | L: linux-kernel@vger.kernel.org |
1206 | W: http://www.bullopensource.org/cpuset/ | 1204 | W: http://www.bullopensource.org/cpuset/ |
@@ -1359,7 +1357,7 @@ P: Digi International, Inc | |||
1359 | M: Eng.Linux@digi.com | 1357 | M: Eng.Linux@digi.com |
1360 | L: Eng.Linux@digi.com | 1358 | L: Eng.Linux@digi.com |
1361 | W: http://www.digi.com | 1359 | W: http://www.digi.com |
1362 | S: Orphaned | 1360 | S: Orphan |
1363 | 1361 | ||
1364 | DIRECTORY NOTIFICATION | 1362 | DIRECTORY NOTIFICATION |
1365 | P: Stephen Rothwell | 1363 | P: Stephen Rothwell |
@@ -1423,12 +1421,12 @@ L: linux-acpi@vger.kernel.org | |||
1423 | S: Supported | 1421 | S: Supported |
1424 | 1422 | ||
1425 | DOCUMENTATION (/Documentation directory) | 1423 | DOCUMENTATION (/Documentation directory) |
1426 | P: Michael Kerrisk | 1424 | P: Michael Kerrisk |
1427 | M: mtk.manpages@gmail.com | 1425 | M: mtk.manpages@gmail.com |
1428 | P: Randy Dunlap | 1426 | P: Randy Dunlap |
1429 | M: rdunlap@xenotime.net | 1427 | M: rdunlap@xenotime.net |
1430 | L: linux-doc@vger.kernel.org | 1428 | L: linux-doc@vger.kernel.org |
1431 | S: Maintained | 1429 | S: Maintained |
1432 | 1430 | ||
1433 | DOUBLETALK DRIVER | 1431 | DOUBLETALK DRIVER |
1434 | P: James R. Van Zandt | 1432 | P: James R. Van Zandt |
@@ -1459,7 +1457,7 @@ S: Maintained | |||
1459 | DVB SUBSYSTEM AND DRIVERS | 1457 | DVB SUBSYSTEM AND DRIVERS |
1460 | P: LinuxTV.org Project | 1458 | P: LinuxTV.org Project |
1461 | M: v4l-dvb-maintainer@linuxtv.org | 1459 | M: v4l-dvb-maintainer@linuxtv.org |
1462 | L: linux-dvb@linuxtv.org (subscription required) | 1460 | L: linux-dvb@linuxtv.org (subscription required) |
1463 | W: http://linuxtv.org/ | 1461 | W: http://linuxtv.org/ |
1464 | T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb.git | 1462 | T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb.git |
1465 | S: Maintained | 1463 | S: Maintained |
@@ -1797,7 +1795,7 @@ FUTURE DOMAIN TMC-16x0 SCSI DRIVER (16-bit) | |||
1797 | P: Rik Faith | 1795 | P: Rik Faith |
1798 | M: faith@cs.unc.edu | 1796 | M: faith@cs.unc.edu |
1799 | L: linux-scsi@vger.kernel.org | 1797 | L: linux-scsi@vger.kernel.org |
1800 | S: Odd fixes (e.g., new signatures) | 1798 | S: Odd Fixes (e.g., new signatures) |
1801 | 1799 | ||
1802 | GDT SCSI DISK ARRAY CONTROLLER DRIVER | 1800 | GDT SCSI DISK ARRAY CONTROLLER DRIVER |
1803 | P: Achim Leubner | 1801 | P: Achim Leubner |
@@ -1838,10 +1836,10 @@ S: Maintained | |||
1838 | HARDWARE MONITORING | 1836 | HARDWARE MONITORING |
1839 | L: lm-sensors@lm-sensors.org | 1837 | L: lm-sensors@lm-sensors.org |
1840 | W: http://www.lm-sensors.org/ | 1838 | W: http://www.lm-sensors.org/ |
1841 | S: Orphaned | 1839 | S: Orphan |
1842 | 1840 | ||
1843 | HARDWARE RANDOM NUMBER GENERATOR CORE | 1841 | HARDWARE RANDOM NUMBER GENERATOR CORE |
1844 | S: Orphaned | 1842 | S: Orphan |
1845 | 1843 | ||
1846 | HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER | 1844 | HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER |
1847 | P: Robert Love | 1845 | P: Robert Love |
@@ -1984,7 +1982,7 @@ S: Maintained | |||
1984 | I2C/SMBUS STUB DRIVER | 1982 | I2C/SMBUS STUB DRIVER |
1985 | P: Mark M. Hoffman | 1983 | P: Mark M. Hoffman |
1986 | M: mhoffman@lightlink.com | 1984 | M: mhoffman@lightlink.com |
1987 | L: lm-sensors@lm-sensors.org | 1985 | L: i2c@lm-sensors.org |
1988 | S: Maintained | 1986 | S: Maintained |
1989 | 1987 | ||
1990 | I2C SUBSYSTEM | 1988 | I2C SUBSYSTEM |
@@ -2108,7 +2106,7 @@ M: rolandd@cisco.com | |||
2108 | P: Sean Hefty | 2106 | P: Sean Hefty |
2109 | M: sean.hefty@intel.com | 2107 | M: sean.hefty@intel.com |
2110 | P: Hal Rosenstock | 2108 | P: Hal Rosenstock |
2111 | M: hal.rosenstock@gmail.com | 2109 | M: hal.rosenstock@gmail.com |
2112 | L: general@lists.openfabrics.org | 2110 | L: general@lists.openfabrics.org |
2113 | W: http://www.openib.org/ | 2111 | W: http://www.openib.org/ |
2114 | T: git kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git | 2112 | T: git kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git |
@@ -2696,17 +2694,18 @@ S: Maintained | |||
2696 | 2694 | ||
2697 | MARVELL YUKON / SYSKONNECT DRIVER | 2695 | MARVELL YUKON / SYSKONNECT DRIVER |
2698 | P: Mirko Lindner | 2696 | P: Mirko Lindner |
2699 | M: mlindner@syskonnect.de | 2697 | M: mlindner@syskonnect.de |
2700 | P: Ralph Roesler | 2698 | P: Ralph Roesler |
2701 | M: rroesler@syskonnect.de | 2699 | M: rroesler@syskonnect.de |
2702 | W: http://www.syskonnect.com | 2700 | W: http://www.syskonnect.com |
2703 | S: Supported | 2701 | S: Supported |
2704 | 2702 | ||
2705 | MAN-PAGES: MANUAL PAGES FOR LINUX -- Sections 2, 3, 4, 5, and 7 | 2703 | MAN-PAGES: MANUAL PAGES FOR LINUX -- Sections 2, 3, 4, 5, and 7 |
2706 | P: Michael Kerrisk | 2704 | P: Michael Kerrisk |
2707 | M: mtk.manpages@gmail.com | 2705 | M: mtk.manpages@gmail.com |
2708 | W: http://www.kernel.org/doc/man-pages | 2706 | W: http://www.kernel.org/doc/man-pages |
2709 | S: Supported | 2707 | L: linux-man@vger.kernel.org |
2708 | S: Supported | ||
2710 | 2709 | ||
2711 | MARVELL LIBERTAS WIRELESS DRIVER | 2710 | MARVELL LIBERTAS WIRELESS DRIVER |
2712 | P: Dan Williams | 2711 | P: Dan Williams |
@@ -2735,7 +2734,7 @@ S: Maintained | |||
2735 | MEGARAID SCSI DRIVERS | 2734 | MEGARAID SCSI DRIVERS |
2736 | P: Neela Syam Kolli | 2735 | P: Neela Syam Kolli |
2737 | M: megaraidlinux@lsi.com | 2736 | M: megaraidlinux@lsi.com |
2738 | S: linux-scsi@vger.kernel.org | 2737 | L: linux-scsi@vger.kernel.org |
2739 | W: http://megaraid.lsilogic.com | 2738 | W: http://megaraid.lsilogic.com |
2740 | S: Maintained | 2739 | S: Maintained |
2741 | 2740 | ||
@@ -2853,7 +2852,7 @@ MULTIMEDIA CARD (MMC) ETC. OVER SPI | |||
2853 | P: David Brownell | 2852 | P: David Brownell |
2854 | M: dbrownell@users.sourceforge.net | 2853 | M: dbrownell@users.sourceforge.net |
2855 | L: linux-kernel@vger.kernel.org | 2854 | L: linux-kernel@vger.kernel.org |
2856 | S: Odd fixes | 2855 | S: Odd Fixes |
2857 | 2856 | ||
2858 | MULTISOUND SOUND DRIVER | 2857 | MULTISOUND SOUND DRIVER |
2859 | P: Andrew Veliath | 2858 | P: Andrew Veliath |
@@ -2867,10 +2866,10 @@ L: linux-kernel@vger.kernel.org | |||
2867 | S: Maintained | 2866 | S: Maintained |
2868 | 2867 | ||
2869 | MUSB MULTIPOINT HIGH SPEED DUAL-ROLE CONTROLLER | 2868 | MUSB MULTIPOINT HIGH SPEED DUAL-ROLE CONTROLLER |
2870 | P: Felipe Balbi | 2869 | P: Felipe Balbi |
2871 | M: felipe.balbi@nokia.com | 2870 | M: felipe.balbi@nokia.com |
2872 | L: linux-usb@vger.kernel.org | 2871 | L: linux-usb@vger.kernel.org |
2873 | S: Maintained | 2872 | S: Maintained |
2874 | 2873 | ||
2875 | MYRICOM MYRI-10G 10GbE DRIVER (MYRI10GE) | 2874 | MYRICOM MYRI-10G 10GbE DRIVER (MYRI10GE) |
2876 | P: Andrew Gallatin | 2875 | P: Andrew Gallatin |
@@ -2882,7 +2881,7 @@ W: http://www.myri.com/scs/download-Myri10GE.html | |||
2882 | S: Supported | 2881 | S: Supported |
2883 | 2882 | ||
2884 | NATSEMI ETHERNET DRIVER (DP8381x) | 2883 | NATSEMI ETHERNET DRIVER (DP8381x) |
2885 | P: Tim Hockin | 2884 | P: Tim Hockin |
2886 | M: thockin@hockin.org | 2885 | M: thockin@hockin.org |
2887 | S: Maintained | 2886 | S: Maintained |
2888 | 2887 | ||
@@ -3101,7 +3100,7 @@ M: laforge@gnumonks.org | |||
3101 | S: Maintained | 3100 | S: Maintained |
3102 | 3101 | ||
3103 | OMNIVISION OV7670 SENSOR DRIVER | 3102 | OMNIVISION OV7670 SENSOR DRIVER |
3104 | P: Jonathan Corbet | 3103 | P: Jonathan Corbet |
3105 | M: corbet@lwn.net | 3104 | M: corbet@lwn.net |
3106 | L: video4linux-list@redhat.com | 3105 | L: video4linux-list@redhat.com |
3107 | S: Maintained | 3106 | S: Maintained |
@@ -3211,7 +3210,7 @@ T: git kernel.org:/pub/scm/linux/kernel/git/jbarnes/pci-2.6.git | |||
3211 | S: Supported | 3210 | S: Supported |
3212 | 3211 | ||
3213 | PCI HOTPLUG CORE | 3212 | PCI HOTPLUG CORE |
3214 | P: Kristen Carlson Accardi | 3213 | P: Kristen Carlson Accardi |
3215 | M: kristen.c.accardi@intel.com | 3214 | M: kristen.c.accardi@intel.com |
3216 | S: Supported | 3215 | S: Supported |
3217 | 3216 | ||
@@ -3650,7 +3649,7 @@ M: jmorris@namei.org | |||
3650 | P: Eric Paris | 3649 | P: Eric Paris |
3651 | M: eparis@parisplace.org | 3650 | M: eparis@parisplace.org |
3652 | L: linux-kernel@vger.kernel.org (kernel issues) | 3651 | L: linux-kernel@vger.kernel.org (kernel issues) |
3653 | L: selinux@tycho.nsa.gov (subscribers-only, general discussion) | 3652 | L: selinux@tycho.nsa.gov (subscribers-only, general discussion) |
3654 | W: http://www.nsa.gov/selinux | 3653 | W: http://www.nsa.gov/selinux |
3655 | S: Supported | 3654 | S: Supported |
3656 | 3655 | ||
@@ -3726,7 +3725,7 @@ S: Maintained | |||
3726 | SIS 96X I2C/SMBUS DRIVER | 3725 | SIS 96X I2C/SMBUS DRIVER |
3727 | P: Mark M. Hoffman | 3726 | P: Mark M. Hoffman |
3728 | M: mhoffman@lightlink.com | 3727 | M: mhoffman@lightlink.com |
3729 | L: lm-sensors@lm-sensors.org | 3728 | L: i2c@lm-sensors.org |
3730 | S: Maintained | 3729 | S: Maintained |
3731 | 3730 | ||
3732 | SIS FRAMEBUFFER DRIVER | 3731 | SIS FRAMEBUFFER DRIVER |
@@ -3768,10 +3767,10 @@ M: bn@niasdigital.com | |||
3768 | S: Maintained | 3767 | S: Maintained |
3769 | 3768 | ||
3770 | SOC-CAMERA V4L2 SUBSYSTEM | 3769 | SOC-CAMERA V4L2 SUBSYSTEM |
3771 | P: Guennadi Liakhovetski | 3770 | P: Guennadi Liakhovetski |
3772 | M: g.liakhovetski@gmx.de | 3771 | M: g.liakhovetski@gmx.de |
3773 | L: video4linux-list@redhat.com | 3772 | L: video4linux-list@redhat.com |
3774 | S: Maintained | 3773 | S: Maintained |
3775 | 3774 | ||
3776 | SOFTWARE RAID (Multiple Disks) SUPPORT | 3775 | SOFTWARE RAID (Multiple Disks) SUPPORT |
3777 | P: Ingo Molnar | 3776 | P: Ingo Molnar |
@@ -3833,11 +3832,12 @@ S: Maintained | |||
3833 | 3832 | ||
3834 | SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEMENT | 3833 | SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEMENT |
3835 | P: Liam Girdwood | 3834 | P: Liam Girdwood |
3836 | M: liam.girdwood@wolfsonmicro.com | 3835 | M: lrg@slimlogic.co.uk |
3837 | P: Mark Brown | 3836 | P: Mark Brown |
3838 | M: broonie@opensource.wolfsonmicro.com | 3837 | M: broonie@opensource.wolfsonmicro.com |
3839 | T: git opensource.wolfsonmicro.com/linux-2.6-asoc | 3838 | T: git opensource.wolfsonmicro.com/linux-2.6-asoc |
3840 | L: alsa-devel@alsa-project.org (subscribers-only) | 3839 | L: alsa-devel@alsa-project.org (subscribers-only) |
3840 | W: http://alsa-project.org/main/index.php/ASoC | ||
3841 | S: Supported | 3841 | S: Supported |
3842 | 3842 | ||
3843 | SPI SUBSYSTEM | 3843 | SPI SUBSYSTEM |
@@ -3925,7 +3925,7 @@ S: Maintained | |||
3925 | 3925 | ||
3926 | STARMODE RADIO IP (STRIP) PROTOCOL DRIVER | 3926 | STARMODE RADIO IP (STRIP) PROTOCOL DRIVER |
3927 | W: http://mosquitonet.Stanford.EDU/strip.html | 3927 | W: http://mosquitonet.Stanford.EDU/strip.html |
3928 | S: Unsupported ? | 3928 | S: Orphan |
3929 | 3929 | ||
3930 | STRADIS MPEG-2 DECODER DRIVER | 3930 | STRADIS MPEG-2 DECODER DRIVER |
3931 | P: Nathan Laredo | 3931 | P: Nathan Laredo |
@@ -4006,9 +4006,9 @@ T: git repo.or.cz/linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git | |||
4006 | S: Maintained | 4006 | S: Maintained |
4007 | 4007 | ||
4008 | TI FLASH MEDIA INTERFACE DRIVER | 4008 | TI FLASH MEDIA INTERFACE DRIVER |
4009 | P: Alex Dubov | 4009 | P: Alex Dubov |
4010 | M: oakad@yahoo.com | 4010 | M: oakad@yahoo.com |
4011 | S: Maintained | 4011 | S: Maintained |
4012 | 4012 | ||
4013 | TI OMAP MMC INTERFACE DRIVER | 4013 | TI OMAP MMC INTERFACE DRIVER |
4014 | P: Carlos Aguiar, Anderson Briglia and Syed Khasim | 4014 | P: Carlos Aguiar, Anderson Briglia and Syed Khasim |
@@ -4154,13 +4154,13 @@ USB BLOCK DRIVER (UB ub) | |||
4154 | P: Pete Zaitcev | 4154 | P: Pete Zaitcev |
4155 | M: zaitcev@redhat.com | 4155 | M: zaitcev@redhat.com |
4156 | L: linux-kernel@vger.kernel.org | 4156 | L: linux-kernel@vger.kernel.org |
4157 | L: linux-usb@vger.kernel.org | 4157 | L: linux-usb@vger.kernel.org |
4158 | S: Supported | 4158 | S: Supported |
4159 | 4159 | ||
4160 | USB CDC ETHERNET DRIVER | 4160 | USB CDC ETHERNET DRIVER |
4161 | P: Greg Kroah-Hartman | 4161 | P: Greg Kroah-Hartman |
4162 | M: greg@kroah.com | 4162 | M: greg@kroah.com |
4163 | L: linux-usb@vger.kernel.org | 4163 | L: linux-usb@vger.kernel.org |
4164 | S: Maintained | 4164 | S: Maintained |
4165 | W: http://www.kroah.com/linux-usb/ | 4165 | W: http://www.kroah.com/linux-usb/ |
4166 | 4166 | ||
@@ -4187,13 +4187,13 @@ S: Maintained | |||
4187 | USB EHCI DRIVER | 4187 | USB EHCI DRIVER |
4188 | P: David Brownell | 4188 | P: David Brownell |
4189 | M: dbrownell@users.sourceforge.net | 4189 | M: dbrownell@users.sourceforge.net |
4190 | L: linux-usb@vger.kernel.org | 4190 | L: linux-usb@vger.kernel.org |
4191 | S: Odd Fixes | 4191 | S: Odd Fixes |
4192 | 4192 | ||
4193 | USB ET61X[12]51 DRIVER | 4193 | USB ET61X[12]51 DRIVER |
4194 | P: Luca Risolia | 4194 | P: Luca Risolia |
4195 | M: luca.risolia@studio.unibo.it | 4195 | M: luca.risolia@studio.unibo.it |
4196 | L: linux-usb@vger.kernel.org | 4196 | L: linux-usb@vger.kernel.org |
4197 | L: video4linux-list@redhat.com | 4197 | L: video4linux-list@redhat.com |
4198 | W: http://www.linux-projects.org | 4198 | W: http://www.linux-projects.org |
4199 | S: Maintained | 4199 | S: Maintained |
@@ -4201,33 +4201,33 @@ S: Maintained | |||
4201 | USB GADGET/PERIPHERAL SUBSYSTEM | 4201 | USB GADGET/PERIPHERAL SUBSYSTEM |
4202 | P: David Brownell | 4202 | P: David Brownell |
4203 | M: dbrownell@users.sourceforge.net | 4203 | M: dbrownell@users.sourceforge.net |
4204 | L: linux-usb@vger.kernel.org | 4204 | L: linux-usb@vger.kernel.org |
4205 | W: http://www.linux-usb.org/gadget | 4205 | W: http://www.linux-usb.org/gadget |
4206 | S: Maintained | 4206 | S: Maintained |
4207 | 4207 | ||
4208 | USB HID/HIDBP DRIVERS (USB KEYBOARDS, MICE, REMOTE CONTROLS, ...) | 4208 | USB HID/HIDBP DRIVERS (USB KEYBOARDS, MICE, REMOTE CONTROLS, ...) |
4209 | P: Jiri Kosina | 4209 | P: Jiri Kosina |
4210 | M: jkosina@suse.cz | 4210 | M: jkosina@suse.cz |
4211 | L: linux-usb@vger.kernel.org | 4211 | L: linux-usb@vger.kernel.org |
4212 | T: git kernel.org:/pub/scm/linux/kernel/git/jikos/hid.git | 4212 | T: git kernel.org:/pub/scm/linux/kernel/git/jikos/hid.git |
4213 | S: Maintained | 4213 | S: Maintained |
4214 | 4214 | ||
4215 | USB ISP116X DRIVER | 4215 | USB ISP116X DRIVER |
4216 | P: Olav Kongas | 4216 | P: Olav Kongas |
4217 | M: ok@artecdesign.ee | 4217 | M: ok@artecdesign.ee |
4218 | L: linux-usb@vger.kernel.org | 4218 | L: linux-usb@vger.kernel.org |
4219 | S: Maintained | 4219 | S: Maintained |
4220 | 4220 | ||
4221 | USB KAWASAKI LSI DRIVER | 4221 | USB KAWASAKI LSI DRIVER |
4222 | P: Oliver Neukum | 4222 | P: Oliver Neukum |
4223 | M: oliver@neukum.name | 4223 | M: oliver@neukum.name |
4224 | L: linux-usb@vger.kernel.org | 4224 | L: linux-usb@vger.kernel.org |
4225 | S: Maintained | 4225 | S: Maintained |
4226 | 4226 | ||
4227 | USB MASS STORAGE DRIVER | 4227 | USB MASS STORAGE DRIVER |
4228 | P: Matthew Dharm | 4228 | P: Matthew Dharm |
4229 | M: mdharm-usb@one-eyed-alien.net | 4229 | M: mdharm-usb@one-eyed-alien.net |
4230 | L: linux-usb@vger.kernel.org | 4230 | L: linux-usb@vger.kernel.org |
4231 | L: usb-storage@lists.one-eyed-alien.net | 4231 | L: usb-storage@lists.one-eyed-alien.net |
4232 | S: Maintained | 4232 | S: Maintained |
4233 | W: http://www.one-eyed-alien.net/~mdharm/linux-usb/ | 4233 | W: http://www.one-eyed-alien.net/~mdharm/linux-usb/ |
@@ -4235,26 +4235,26 @@ W: http://www.one-eyed-alien.net/~mdharm/linux-usb/ | |||
4235 | USB OHCI DRIVER | 4235 | USB OHCI DRIVER |
4236 | P: David Brownell | 4236 | P: David Brownell |
4237 | M: dbrownell@users.sourceforge.net | 4237 | M: dbrownell@users.sourceforge.net |
4238 | L: linux-usb@vger.kernel.org | 4238 | L: linux-usb@vger.kernel.org |
4239 | S: Odd Fixes | 4239 | S: Odd Fixes |
4240 | 4240 | ||
4241 | USB OPTION-CARD DRIVER | 4241 | USB OPTION-CARD DRIVER |
4242 | P: Matthias Urlichs | 4242 | P: Matthias Urlichs |
4243 | M: smurf@smurf.noris.de | 4243 | M: smurf@smurf.noris.de |
4244 | L: linux-usb@vger.kernel.org | 4244 | L: linux-usb@vger.kernel.org |
4245 | S: Maintained | 4245 | S: Maintained |
4246 | 4246 | ||
4247 | USB OV511 DRIVER | 4247 | USB OV511 DRIVER |
4248 | P: Mark McClelland | 4248 | P: Mark McClelland |
4249 | M: mmcclell@bigfoot.com | 4249 | M: mmcclell@bigfoot.com |
4250 | L: linux-usb@vger.kernel.org | 4250 | L: linux-usb@vger.kernel.org |
4251 | W: http://alpha.dyndns.org/ov511/ | 4251 | W: http://alpha.dyndns.org/ov511/ |
4252 | S: Maintained | 4252 | S: Maintained |
4253 | 4253 | ||
4254 | USB PEGASUS DRIVER | 4254 | USB PEGASUS DRIVER |
4255 | P: Petko Manolov | 4255 | P: Petko Manolov |
4256 | M: petkan@users.sourceforge.net | 4256 | M: petkan@users.sourceforge.net |
4257 | L: linux-usb@vger.kernel.org | 4257 | L: linux-usb@vger.kernel.org |
4258 | L: netdev@vger.kernel.org | 4258 | L: netdev@vger.kernel.org |
4259 | W: http://pegasus2.sourceforge.net/ | 4259 | W: http://pegasus2.sourceforge.net/ |
4260 | S: Maintained | 4260 | S: Maintained |
@@ -4262,13 +4262,13 @@ S: Maintained | |||
4262 | USB PRINTER DRIVER (usblp) | 4262 | USB PRINTER DRIVER (usblp) |
4263 | P: Pete Zaitcev | 4263 | P: Pete Zaitcev |
4264 | M: zaitcev@redhat.com | 4264 | M: zaitcev@redhat.com |
4265 | L: linux-usb@vger.kernel.org | 4265 | L: linux-usb@vger.kernel.org |
4266 | S: Supported | 4266 | S: Supported |
4267 | 4267 | ||
4268 | USB RTL8150 DRIVER | 4268 | USB RTL8150 DRIVER |
4269 | P: Petko Manolov | 4269 | P: Petko Manolov |
4270 | M: petkan@users.sourceforge.net | 4270 | M: petkan@users.sourceforge.net |
4271 | L: linux-usb@vger.kernel.org | 4271 | L: linux-usb@vger.kernel.org |
4272 | L: netdev@vger.kernel.org | 4272 | L: netdev@vger.kernel.org |
4273 | W: http://pegasus2.sourceforge.net/ | 4273 | W: http://pegasus2.sourceforge.net/ |
4274 | S: Maintained | 4274 | S: Maintained |
@@ -4276,20 +4276,20 @@ S: Maintained | |||
4276 | USB SE401 DRIVER | 4276 | USB SE401 DRIVER |
4277 | P: Jeroen Vreeken | 4277 | P: Jeroen Vreeken |
4278 | M: pe1rxq@amsat.org | 4278 | M: pe1rxq@amsat.org |
4279 | L: linux-usb@vger.kernel.org | 4279 | L: linux-usb@vger.kernel.org |
4280 | W: http://www.chello.nl/~j.vreeken/se401/ | 4280 | W: http://www.chello.nl/~j.vreeken/se401/ |
4281 | S: Maintained | 4281 | S: Maintained |
4282 | 4282 | ||
4283 | USB SERIAL BELKIN F5U103 DRIVER | 4283 | USB SERIAL BELKIN F5U103 DRIVER |
4284 | P: William Greathouse | 4284 | P: William Greathouse |
4285 | M: wgreathouse@smva.com | 4285 | M: wgreathouse@smva.com |
4286 | L: linux-usb@vger.kernel.org | 4286 | L: linux-usb@vger.kernel.org |
4287 | S: Maintained | 4287 | S: Maintained |
4288 | 4288 | ||
4289 | USB SERIAL CYPRESS M8 DRIVER | 4289 | USB SERIAL CYPRESS M8 DRIVER |
4290 | P: Lonnie Mendez | 4290 | P: Lonnie Mendez |
4291 | M: dignome@gmail.com | 4291 | M: dignome@gmail.com |
4292 | L: linux-usb@vger.kernel.org | 4292 | L: linux-usb@vger.kernel.org |
4293 | S: Maintained | 4293 | S: Maintained |
4294 | W: http://geocities.com/i0xox0i | 4294 | W: http://geocities.com/i0xox0i |
4295 | W: http://firstlight.net/cvs | 4295 | W: http://firstlight.net/cvs |
@@ -4304,39 +4304,39 @@ USB SERIAL DIGI ACCELEPORT DRIVER | |||
4304 | P: Peter Berger and Al Borchers | 4304 | P: Peter Berger and Al Borchers |
4305 | M: pberger@brimson.com | 4305 | M: pberger@brimson.com |
4306 | M: alborchers@steinerpoint.com | 4306 | M: alborchers@steinerpoint.com |
4307 | L: linux-usb@vger.kernel.org | 4307 | L: linux-usb@vger.kernel.org |
4308 | S: Maintained | 4308 | S: Maintained |
4309 | 4309 | ||
4310 | USB SERIAL DRIVER | 4310 | USB SERIAL DRIVER |
4311 | P: Greg Kroah-Hartman | 4311 | P: Greg Kroah-Hartman |
4312 | M: gregkh@suse.de | 4312 | M: gregkh@suse.de |
4313 | L: linux-usb@vger.kernel.org | 4313 | L: linux-usb@vger.kernel.org |
4314 | S: Supported | 4314 | S: Supported |
4315 | 4315 | ||
4316 | USB SERIAL EMPEG EMPEG-CAR MARK I/II DRIVER | 4316 | USB SERIAL EMPEG EMPEG-CAR MARK I/II DRIVER |
4317 | P: Gary Brubaker | 4317 | P: Gary Brubaker |
4318 | M: xavyer@ix.netcom.com | 4318 | M: xavyer@ix.netcom.com |
4319 | L: linux-usb@vger.kernel.org | 4319 | L: linux-usb@vger.kernel.org |
4320 | S: Maintained | 4320 | S: Maintained |
4321 | 4321 | ||
4322 | USB SERIAL KEYSPAN DRIVER | 4322 | USB SERIAL KEYSPAN DRIVER |
4323 | P: Greg Kroah-Hartman | 4323 | P: Greg Kroah-Hartman |
4324 | M: greg@kroah.com | 4324 | M: greg@kroah.com |
4325 | L: linux-usb@vger.kernel.org | 4325 | L: linux-usb@vger.kernel.org |
4326 | W: http://www.kroah.com/linux/ | 4326 | W: http://www.kroah.com/linux/ |
4327 | S: Maintained | 4327 | S: Maintained |
4328 | 4328 | ||
4329 | USB SERIAL WHITEHEAT DRIVER | 4329 | USB SERIAL WHITEHEAT DRIVER |
4330 | P: Support Department | 4330 | P: Support Department |
4331 | M: support@connecttech.com | 4331 | M: support@connecttech.com |
4332 | L: linux-usb@vger.kernel.org | 4332 | L: linux-usb@vger.kernel.org |
4333 | W: http://www.connecttech.com | 4333 | W: http://www.connecttech.com |
4334 | S: Supported | 4334 | S: Supported |
4335 | 4335 | ||
4336 | USB SN9C1xx DRIVER | 4336 | USB SN9C1xx DRIVER |
4337 | P: Luca Risolia | 4337 | P: Luca Risolia |
4338 | M: luca.risolia@studio.unibo.it | 4338 | M: luca.risolia@studio.unibo.it |
4339 | L: linux-usb@vger.kernel.org | 4339 | L: linux-usb@vger.kernel.org |
4340 | L: video4linux-list@redhat.com | 4340 | L: video4linux-list@redhat.com |
4341 | W: http://www.linux-projects.org | 4341 | W: http://www.linux-projects.org |
4342 | S: Maintained | 4342 | S: Maintained |
@@ -4344,7 +4344,7 @@ S: Maintained | |||
4344 | USB SUBSYSTEM | 4344 | USB SUBSYSTEM |
4345 | P: Greg Kroah-Hartman | 4345 | P: Greg Kroah-Hartman |
4346 | M: gregkh@suse.de | 4346 | M: gregkh@suse.de |
4347 | L: linux-usb@vger.kernel.org | 4347 | L: linux-usb@vger.kernel.org |
4348 | W: http://www.linux-usb.org | 4348 | W: http://www.linux-usb.org |
4349 | T: quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/ | 4349 | T: quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/ |
4350 | S: Supported | 4350 | S: Supported |
@@ -4352,7 +4352,7 @@ S: Supported | |||
4352 | USB UHCI DRIVER | 4352 | USB UHCI DRIVER |
4353 | P: Alan Stern | 4353 | P: Alan Stern |
4354 | M: stern@rowland.harvard.edu | 4354 | M: stern@rowland.harvard.edu |
4355 | L: linux-usb@vger.kernel.org | 4355 | L: linux-usb@vger.kernel.org |
4356 | S: Maintained | 4356 | S: Maintained |
4357 | 4357 | ||
4358 | USB "USBNET" DRIVER FRAMEWORK | 4358 | USB "USBNET" DRIVER FRAMEWORK |
@@ -4365,7 +4365,7 @@ S: Maintained | |||
4365 | USB VIDEO CLASS | 4365 | USB VIDEO CLASS |
4366 | P: Laurent Pinchart | 4366 | P: Laurent Pinchart |
4367 | M: laurent.pinchart@skynet.be | 4367 | M: laurent.pinchart@skynet.be |
4368 | L: linx-uvc-devel@berlios.de | 4368 | L: linux-uvc-devel@lists.berlios.de |
4369 | L: video4linux-list@redhat.com | 4369 | L: video4linux-list@redhat.com |
4370 | W: http://linux-uvc.berlios.de | 4370 | W: http://linux-uvc.berlios.de |
4371 | S: Maintained | 4371 | S: Maintained |
@@ -4373,7 +4373,7 @@ S: Maintained | |||
4373 | USB W996[87]CF DRIVER | 4373 | USB W996[87]CF DRIVER |
4374 | P: Luca Risolia | 4374 | P: Luca Risolia |
4375 | M: luca.risolia@studio.unibo.it | 4375 | M: luca.risolia@studio.unibo.it |
4376 | L: linux-usb@vger.kernel.org | 4376 | L: linux-usb@vger.kernel.org |
4377 | L: video4linux-list@redhat.com | 4377 | L: video4linux-list@redhat.com |
4378 | W: http://www.linux-projects.org | 4378 | W: http://www.linux-projects.org |
4379 | S: Maintained | 4379 | S: Maintained |
@@ -4387,7 +4387,7 @@ S: Maintained | |||
4387 | USB ZC0301 DRIVER | 4387 | USB ZC0301 DRIVER |
4388 | P: Luca Risolia | 4388 | P: Luca Risolia |
4389 | M: luca.risolia@studio.unibo.it | 4389 | M: luca.risolia@studio.unibo.it |
4390 | L: linux-usb@vger.kernel.org | 4390 | L: linux-usb@vger.kernel.org |
4391 | L: video4linux-list@redhat.com | 4391 | L: video4linux-list@redhat.com |
4392 | W: http://www.linux-projects.org | 4392 | W: http://www.linux-projects.org |
4393 | S: Maintained | 4393 | S: Maintained |
@@ -4395,14 +4395,14 @@ S: Maintained | |||
4395 | USB ZD1201 DRIVER | 4395 | USB ZD1201 DRIVER |
4396 | P: Jeroen Vreeken | 4396 | P: Jeroen Vreeken |
4397 | M: pe1rxq@amsat.org | 4397 | M: pe1rxq@amsat.org |
4398 | L: linux-usb@vger.kernel.org | 4398 | L: linux-usb@vger.kernel.org |
4399 | W: http://linux-lc100020.sourceforge.net | 4399 | W: http://linux-lc100020.sourceforge.net |
4400 | S: Maintained | 4400 | S: Maintained |
4401 | 4401 | ||
4402 | USB ZR364XX DRIVER | 4402 | USB ZR364XX DRIVER |
4403 | P: Antoine Jacquet | 4403 | P: Antoine Jacquet |
4404 | M: royale@zerezo.com | 4404 | M: royale@zerezo.com |
4405 | L: linux-usb@vger.kernel.org | 4405 | L: linux-usb@vger.kernel.org |
4406 | L: video4linux-list@redhat.com | 4406 | L: video4linux-list@redhat.com |
4407 | W: http://royale.zerezo.com/zr364xx/ | 4407 | W: http://royale.zerezo.com/zr364xx/ |
4408 | S: Maintained | 4408 | S: Maintained |
@@ -1,7 +1,7 @@ | |||
1 | VERSION = 2 | 1 | VERSION = 2 |
2 | PATCHLEVEL = 6 | 2 | PATCHLEVEL = 6 |
3 | SUBLEVEL = 27 | 3 | SUBLEVEL = 27 |
4 | EXTRAVERSION = -rc6 | 4 | EXTRAVERSION = |
5 | NAME = Rotary Wombat | 5 | NAME = Rotary Wombat |
6 | 6 | ||
7 | # *DOCUMENTATION* | 7 | # *DOCUMENTATION* |
diff --git a/arch/arm/include/asm/pci.h b/arch/arm/include/asm/pci.h index 721c03d53f4b..918d0cbbf064 100644 --- a/arch/arm/include/asm/pci.h +++ b/arch/arm/include/asm/pci.h | |||
@@ -30,7 +30,7 @@ static inline void pcibios_penalize_isa_irq(int irq, int active) | |||
30 | * The networking and block device layers use this boolean for bounce | 30 | * The networking and block device layers use this boolean for bounce |
31 | * buffer decisions. | 31 | * buffer decisions. |
32 | */ | 32 | */ |
33 | #define PCI_DMA_BUS_IS_PHYS (0) | 33 | #define PCI_DMA_BUS_IS_PHYS (1) |
34 | 34 | ||
35 | /* | 35 | /* |
36 | * Whether pci_unmap_{single,page} is a nop depends upon the | 36 | * Whether pci_unmap_{single,page} is a nop depends upon the |
diff --git a/arch/arm/kernel/kgdb.c b/arch/arm/kernel/kgdb.c index aaffaecffcd1..ba8ccfede964 100644 --- a/arch/arm/kernel/kgdb.c +++ b/arch/arm/kernel/kgdb.c | |||
@@ -111,8 +111,6 @@ int kgdb_arch_handle_exception(int exception_vector, int signo, | |||
111 | case 'D': | 111 | case 'D': |
112 | case 'k': | 112 | case 'k': |
113 | case 'c': | 113 | case 'c': |
114 | kgdb_contthread = NULL; | ||
115 | |||
116 | /* | 114 | /* |
117 | * Try to read optional parameter, pc unchanged if no parm. | 115 | * Try to read optional parameter, pc unchanged if no parm. |
118 | * If this was a compiled breakpoint, we need to move | 116 | * If this was a compiled breakpoint, we need to move |
diff --git a/arch/arm/mach-davinci/psc.c b/arch/arm/mach-davinci/psc.c index 720c48b9ee04..aa2fc375a325 100644 --- a/arch/arm/mach-davinci/psc.c +++ b/arch/arm/mach-davinci/psc.c | |||
@@ -70,9 +70,6 @@ void davinci_psc_config(unsigned int domain, unsigned int id, char enable) | |||
70 | { | 70 | { |
71 | u32 epcpr, ptcmd, ptstat, pdstat, pdctl1, mdstat, mdctl, mdstat_mask; | 71 | u32 epcpr, ptcmd, ptstat, pdstat, pdctl1, mdstat, mdctl, mdstat_mask; |
72 | 72 | ||
73 | if (id < 0) | ||
74 | return; | ||
75 | |||
76 | mdctl = davinci_readl(DAVINCI_PWR_SLEEP_CNTRL_BASE + MDCTL + 4 * id); | 73 | mdctl = davinci_readl(DAVINCI_PWR_SLEEP_CNTRL_BASE + MDCTL + 4 * id); |
77 | if (enable) | 74 | if (enable) |
78 | mdctl |= 0x00000003; /* Enable Module */ | 75 | mdctl |= 0x00000003; /* Enable Module */ |
diff --git a/arch/arm/mach-mx3/pcm037.c b/arch/arm/mach-mx3/pcm037.c index 0a152ed15a85..df8582a6231b 100644 --- a/arch/arm/mach-mx3/pcm037.c +++ b/arch/arm/mach-mx3/pcm037.c | |||
@@ -54,7 +54,7 @@ static struct platform_device pcm037_flash = { | |||
54 | }; | 54 | }; |
55 | 55 | ||
56 | static struct imxuart_platform_data uart_pdata = { | 56 | static struct imxuart_platform_data uart_pdata = { |
57 | .flags = 0, | 57 | .flags = IMXUART_HAVE_RTSCTS, |
58 | }; | 58 | }; |
59 | 59 | ||
60 | static struct platform_device *devices[] __initdata = { | 60 | static struct platform_device *devices[] __initdata = { |
diff --git a/arch/arm/mach-pxa/time.c b/arch/arm/mach-pxa/time.c index 67e18509d7bf..b0d6b32654cf 100644 --- a/arch/arm/mach-pxa/time.c +++ b/arch/arm/mach-pxa/time.c | |||
@@ -17,9 +17,9 @@ | |||
17 | #include <linux/interrupt.h> | 17 | #include <linux/interrupt.h> |
18 | #include <linux/clockchips.h> | 18 | #include <linux/clockchips.h> |
19 | #include <linux/sched.h> | 19 | #include <linux/sched.h> |
20 | #include <linux/cnt32_to_63.h> | ||
20 | 21 | ||
21 | #include <asm/div64.h> | 22 | #include <asm/div64.h> |
22 | #include <asm/cnt32_to_63.h> | ||
23 | #include <asm/mach/irq.h> | 23 | #include <asm/mach/irq.h> |
24 | #include <asm/mach/time.h> | 24 | #include <asm/mach/time.h> |
25 | #include <mach/pxa-regs.h> | 25 | #include <mach/pxa-regs.h> |
diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c index 5dab30eafddc..9f3ef9eb32e3 100644 --- a/arch/arm/mach-pxa/tosa.c +++ b/arch/arm/mach-pxa/tosa.c | |||
@@ -50,6 +50,7 @@ | |||
50 | #include <asm/mach/sharpsl_param.h> | 50 | #include <asm/mach/sharpsl_param.h> |
51 | 51 | ||
52 | #include "generic.h" | 52 | #include "generic.h" |
53 | #include "clock.h" | ||
53 | #include "devices.h" | 54 | #include "devices.h" |
54 | 55 | ||
55 | static unsigned long tosa_pin_config[] = { | 56 | static unsigned long tosa_pin_config[] = { |
@@ -521,6 +522,14 @@ static struct gpio_keys_button tosa_gpio_keys[] = { | |||
521 | .wakeup = 1, | 522 | .wakeup = 1, |
522 | .active_low = 1, | 523 | .active_low = 1, |
523 | }, | 524 | }, |
525 | { | ||
526 | .type = EV_SW, | ||
527 | .code = SW_HEADPHONE_INSERT, | ||
528 | .gpio = TOSA_GPIO_EAR_IN, | ||
529 | .desc = "HeadPhone insert", | ||
530 | .active_low = 1, | ||
531 | .debounce_interval = 300, | ||
532 | }, | ||
524 | }; | 533 | }; |
525 | 534 | ||
526 | static struct gpio_keys_platform_data tosa_gpio_keys_platform_data = { | 535 | static struct gpio_keys_platform_data tosa_gpio_keys_platform_data = { |
@@ -792,6 +801,8 @@ static void __init tosa_init(void) | |||
792 | pxa_set_i2c_info(NULL); | 801 | pxa_set_i2c_info(NULL); |
793 | platform_scoop_config = &tosa_pcmcia_config; | 802 | platform_scoop_config = &tosa_pcmcia_config; |
794 | 803 | ||
804 | clk_add_alias("CLK_CK3P6MI", &tc6393xb_device.dev, "GPIO11_CLK", NULL); | ||
805 | |||
795 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 806 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
796 | } | 807 | } |
797 | 808 | ||
diff --git a/arch/arm/mach-sa1100/generic.c b/arch/arm/mach-sa1100/generic.c index 1362994c78aa..b422526f6d8b 100644 --- a/arch/arm/mach-sa1100/generic.c +++ b/arch/arm/mach-sa1100/generic.c | |||
@@ -18,9 +18,9 @@ | |||
18 | #include <linux/ioport.h> | 18 | #include <linux/ioport.h> |
19 | #include <linux/sched.h> /* just for sched_clock() - funny that */ | 19 | #include <linux/sched.h> /* just for sched_clock() - funny that */ |
20 | #include <linux/platform_device.h> | 20 | #include <linux/platform_device.h> |
21 | #include <linux/cnt32_to_63.h> | ||
21 | 22 | ||
22 | #include <asm/div64.h> | 23 | #include <asm/div64.h> |
23 | #include <asm/cnt32_to_63.h> | ||
24 | #include <mach/hardware.h> | 24 | #include <mach/hardware.h> |
25 | #include <asm/system.h> | 25 | #include <asm/system.h> |
26 | #include <asm/pgtable.h> | 26 | #include <asm/pgtable.h> |
diff --git a/arch/arm/mach-sa1100/include/mach/jornada720.h b/arch/arm/mach-sa1100/include/mach/jornada720.h index bc120850d313..cc6b4bfcecf6 100644 --- a/arch/arm/mach-sa1100/include/mach/jornada720.h +++ b/arch/arm/mach-sa1100/include/mach/jornada720.h | |||
@@ -1,10 +1,10 @@ | |||
1 | /* | 1 | /* |
2 | * arch/arm/mach-sa1100/include/mach/jornada720.h | 2 | * arch/arm/mach-sa1100/include/mach/jornada720.h |
3 | * | 3 | * |
4 | * This file contains SSP/MCU communication definitions for HP Jornada 710/720/728 | 4 | * SSP/MCU communication definitions for HP Jornada 710/720/728 |
5 | * | 5 | * |
6 | * Copyright (C) 2007 Kristoffer Ericson <Kristoffer.Ericson@gmail.com> | 6 | * Copyright 2007,2008 Kristoffer Ericson <Kristoffer.Ericson@gmail.com> |
7 | * Copyright (C) 2000 John Ankcorn <jca@lcs.mit.edu> | 7 | * Copyright 2000 John Ankcorn <jca@lcs.mit.edu> |
8 | * | 8 | * |
9 | * This program is free software; you can redistribute it and/or modify | 9 | * This program is free software; you can redistribute it and/or modify |
10 | * it under the terms of the GNU General Public License version 2 as | 10 | * it under the terms of the GNU General Public License version 2 as |
@@ -25,3 +25,8 @@ | |||
25 | #define PWMOFF 0xDF | 25 | #define PWMOFF 0xDF |
26 | #define TXDUMMY 0x11 | 26 | #define TXDUMMY 0x11 |
27 | #define ERRORCODE 0x00 | 27 | #define ERRORCODE 0x00 |
28 | |||
29 | extern void jornada_ssp_start(void); | ||
30 | extern void jornada_ssp_end(void); | ||
31 | extern int jornada_ssp_inout(u8 byte); | ||
32 | extern int jornada_ssp_byte(u8 byte); | ||
diff --git a/arch/arm/mach-sa1100/jornada720_ssp.c b/arch/arm/mach-sa1100/jornada720_ssp.c index 06ea7abd9170..28cf36967977 100644 --- a/arch/arm/mach-sa1100/jornada720_ssp.c +++ b/arch/arm/mach-sa1100/jornada720_ssp.c | |||
@@ -21,8 +21,8 @@ | |||
21 | #include <linux/slab.h> | 21 | #include <linux/slab.h> |
22 | 22 | ||
23 | #include <mach/hardware.h> | 23 | #include <mach/hardware.h> |
24 | #include <asm/hardware/ssp.h> | ||
25 | #include <mach/jornada720.h> | 24 | #include <mach/jornada720.h> |
25 | #include <asm/hardware/ssp.h> | ||
26 | 26 | ||
27 | static DEFINE_SPINLOCK(jornada_ssp_lock); | 27 | static DEFINE_SPINLOCK(jornada_ssp_lock); |
28 | static unsigned long jornada_ssp_flags; | 28 | static unsigned long jornada_ssp_flags; |
@@ -109,12 +109,12 @@ EXPORT_SYMBOL(jornada_ssp_inout); | |||
109 | * jornada_ssp_start - enable mcu | 109 | * jornada_ssp_start - enable mcu |
110 | * | 110 | * |
111 | */ | 111 | */ |
112 | int jornada_ssp_start() | 112 | void jornada_ssp_start(void) |
113 | { | 113 | { |
114 | spin_lock_irqsave(&jornada_ssp_lock, jornada_ssp_flags); | 114 | spin_lock_irqsave(&jornada_ssp_lock, jornada_ssp_flags); |
115 | GPCR = GPIO_GPIO25; | 115 | GPCR = GPIO_GPIO25; |
116 | udelay(50); | 116 | udelay(50); |
117 | return 0; | 117 | return; |
118 | }; | 118 | }; |
119 | EXPORT_SYMBOL(jornada_ssp_start); | 119 | EXPORT_SYMBOL(jornada_ssp_start); |
120 | 120 | ||
@@ -122,11 +122,11 @@ EXPORT_SYMBOL(jornada_ssp_start); | |||
122 | * jornada_ssp_end - disable mcu and turn off lock | 122 | * jornada_ssp_end - disable mcu and turn off lock |
123 | * | 123 | * |
124 | */ | 124 | */ |
125 | int jornada_ssp_end() | 125 | void jornada_ssp_end(void) |
126 | { | 126 | { |
127 | GPSR = GPIO_GPIO25; | 127 | GPSR = GPIO_GPIO25; |
128 | spin_unlock_irqrestore(&jornada_ssp_lock, jornada_ssp_flags); | 128 | spin_unlock_irqrestore(&jornada_ssp_lock, jornada_ssp_flags); |
129 | return 0; | 129 | return; |
130 | }; | 130 | }; |
131 | EXPORT_SYMBOL(jornada_ssp_end); | 131 | EXPORT_SYMBOL(jornada_ssp_end); |
132 | 132 | ||
diff --git a/arch/arm/mach-versatile/core.c b/arch/arm/mach-versatile/core.c index d75e795c893e..b638f10411e8 100644 --- a/arch/arm/mach-versatile/core.c +++ b/arch/arm/mach-versatile/core.c | |||
@@ -28,8 +28,8 @@ | |||
28 | #include <linux/amba/clcd.h> | 28 | #include <linux/amba/clcd.h> |
29 | #include <linux/clocksource.h> | 29 | #include <linux/clocksource.h> |
30 | #include <linux/clockchips.h> | 30 | #include <linux/clockchips.h> |
31 | #include <linux/cnt32_to_63.h> | ||
31 | 32 | ||
32 | #include <asm/cnt32_to_63.h> | ||
33 | #include <asm/system.h> | 33 | #include <asm/system.h> |
34 | #include <mach/hardware.h> | 34 | #include <mach/hardware.h> |
35 | #include <asm/io.h> | 35 | #include <asm/io.h> |
diff --git a/arch/arm/plat-omap/devices.c b/arch/arm/plat-omap/devices.c index 187e3d8bfdfe..01da719a7453 100644 --- a/arch/arm/plat-omap/devices.c +++ b/arch/arm/plat-omap/devices.c | |||
@@ -21,6 +21,7 @@ | |||
21 | 21 | ||
22 | #include <mach/tc.h> | 22 | #include <mach/tc.h> |
23 | #include <mach/board.h> | 23 | #include <mach/board.h> |
24 | #include <mach/mmc.h> | ||
24 | #include <mach/mux.h> | 25 | #include <mach/mux.h> |
25 | #include <mach/gpio.h> | 26 | #include <mach/gpio.h> |
26 | #include <mach/menelaus.h> | 27 | #include <mach/menelaus.h> |
@@ -194,25 +195,38 @@ void omap_mcbsp_register_board_cfg(struct omap_mcbsp_platform_data *config, | |||
194 | 195 | ||
195 | /*-------------------------------------------------------------------------*/ | 196 | /*-------------------------------------------------------------------------*/ |
196 | 197 | ||
197 | #if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE) | 198 | #if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE) || \ |
199 | defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE) | ||
198 | 200 | ||
199 | #ifdef CONFIG_ARCH_OMAP24XX | 201 | #if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX) |
200 | #define OMAP_MMC1_BASE 0x4809c000 | 202 | #define OMAP_MMC1_BASE 0x4809c000 |
201 | #define OMAP_MMC1_INT INT_24XX_MMC_IRQ | 203 | #define OMAP_MMC1_END (OMAP_MMC1_BASE + 0x1fc) |
204 | #define OMAP_MMC1_INT INT_24XX_MMC_IRQ | ||
205 | |||
206 | #define OMAP_MMC2_BASE 0x480b4000 | ||
207 | #define OMAP_MMC2_END (OMAP_MMC2_BASE + 0x1fc) | ||
208 | #define OMAP_MMC2_INT INT_24XX_MMC2_IRQ | ||
209 | |||
202 | #else | 210 | #else |
211 | |||
203 | #define OMAP_MMC1_BASE 0xfffb7800 | 212 | #define OMAP_MMC1_BASE 0xfffb7800 |
213 | #define OMAP_MMC1_END (OMAP_MMC1_BASE + 0x7f) | ||
204 | #define OMAP_MMC1_INT INT_MMC | 214 | #define OMAP_MMC1_INT INT_MMC |
205 | #endif | 215 | |
206 | #define OMAP_MMC2_BASE 0xfffb7c00 /* omap16xx only */ | 216 | #define OMAP_MMC2_BASE 0xfffb7c00 /* omap16xx only */ |
217 | #define OMAP_MMC2_END (OMAP_MMC2_BASE + 0x7f) | ||
218 | #define OMAP_MMC2_INT INT_1610_MMC2 | ||
219 | |||
220 | #endif | ||
207 | 221 | ||
208 | static struct omap_mmc_conf mmc1_conf; | 222 | static struct omap_mmc_platform_data mmc1_data; |
209 | 223 | ||
210 | static u64 mmc1_dmamask = 0xffffffff; | 224 | static u64 mmc1_dmamask = 0xffffffff; |
211 | 225 | ||
212 | static struct resource mmc1_resources[] = { | 226 | static struct resource mmc1_resources[] = { |
213 | { | 227 | { |
214 | .start = OMAP_MMC1_BASE, | 228 | .start = OMAP_MMC1_BASE, |
215 | .end = OMAP_MMC1_BASE + 0x7f, | 229 | .end = OMAP_MMC1_END, |
216 | .flags = IORESOURCE_MEM, | 230 | .flags = IORESOURCE_MEM, |
217 | }, | 231 | }, |
218 | { | 232 | { |
@@ -226,26 +240,27 @@ static struct platform_device mmc_omap_device1 = { | |||
226 | .id = 1, | 240 | .id = 1, |
227 | .dev = { | 241 | .dev = { |
228 | .dma_mask = &mmc1_dmamask, | 242 | .dma_mask = &mmc1_dmamask, |
229 | .platform_data = &mmc1_conf, | 243 | .platform_data = &mmc1_data, |
230 | }, | 244 | }, |
231 | .num_resources = ARRAY_SIZE(mmc1_resources), | 245 | .num_resources = ARRAY_SIZE(mmc1_resources), |
232 | .resource = mmc1_resources, | 246 | .resource = mmc1_resources, |
233 | }; | 247 | }; |
234 | 248 | ||
235 | #ifdef CONFIG_ARCH_OMAP16XX | 249 | #if defined(CONFIG_ARCH_OMAP16XX) || defined(CONFIG_ARCH_OMAP2430) || \ |
250 | defined(CONFIG_ARCH_OMAP34XX) | ||
236 | 251 | ||
237 | static struct omap_mmc_conf mmc2_conf; | 252 | static struct omap_mmc_platform_data mmc2_data; |
238 | 253 | ||
239 | static u64 mmc2_dmamask = 0xffffffff; | 254 | static u64 mmc2_dmamask = 0xffffffff; |
240 | 255 | ||
241 | static struct resource mmc2_resources[] = { | 256 | static struct resource mmc2_resources[] = { |
242 | { | 257 | { |
243 | .start = OMAP_MMC2_BASE, | 258 | .start = OMAP_MMC2_BASE, |
244 | .end = OMAP_MMC2_BASE + 0x7f, | 259 | .end = OMAP_MMC2_END, |
245 | .flags = IORESOURCE_MEM, | 260 | .flags = IORESOURCE_MEM, |
246 | }, | 261 | }, |
247 | { | 262 | { |
248 | .start = INT_1610_MMC2, | 263 | .start = OMAP_MMC2_INT, |
249 | .flags = IORESOURCE_IRQ, | 264 | .flags = IORESOURCE_IRQ, |
250 | }, | 265 | }, |
251 | }; | 266 | }; |
@@ -255,26 +270,19 @@ static struct platform_device mmc_omap_device2 = { | |||
255 | .id = 2, | 270 | .id = 2, |
256 | .dev = { | 271 | .dev = { |
257 | .dma_mask = &mmc2_dmamask, | 272 | .dma_mask = &mmc2_dmamask, |
258 | .platform_data = &mmc2_conf, | 273 | .platform_data = &mmc2_data, |
259 | }, | 274 | }, |
260 | .num_resources = ARRAY_SIZE(mmc2_resources), | 275 | .num_resources = ARRAY_SIZE(mmc2_resources), |
261 | .resource = mmc2_resources, | 276 | .resource = mmc2_resources, |
262 | }; | 277 | }; |
263 | #endif | 278 | #endif |
264 | 279 | ||
265 | static void __init omap_init_mmc(void) | 280 | static inline void omap_init_mmc_conf(const struct omap_mmc_config *mmc_conf) |
266 | { | 281 | { |
267 | const struct omap_mmc_config *mmc_conf; | 282 | if (cpu_is_omap2430() || cpu_is_omap34xx()) |
268 | const struct omap_mmc_conf *mmc; | ||
269 | |||
270 | /* NOTE: assumes MMC was never (wrongly) enabled */ | ||
271 | mmc_conf = omap_get_config(OMAP_TAG_MMC, struct omap_mmc_config); | ||
272 | if (!mmc_conf) | ||
273 | return; | 283 | return; |
274 | 284 | ||
275 | /* block 1 is always available and has just one pinout option */ | 285 | if (mmc_conf->mmc[0].enabled) { |
276 | mmc = &mmc_conf->mmc[0]; | ||
277 | if (mmc->enabled) { | ||
278 | if (cpu_is_omap24xx()) { | 286 | if (cpu_is_omap24xx()) { |
279 | omap_cfg_reg(H18_24XX_MMC_CMD); | 287 | omap_cfg_reg(H18_24XX_MMC_CMD); |
280 | omap_cfg_reg(H15_24XX_MMC_CLKI); | 288 | omap_cfg_reg(H15_24XX_MMC_CLKI); |
@@ -292,7 +300,7 @@ static void __init omap_init_mmc(void) | |||
292 | omap_cfg_reg(P20_1710_MMC_DATDIR0); | 300 | omap_cfg_reg(P20_1710_MMC_DATDIR0); |
293 | } | 301 | } |
294 | } | 302 | } |
295 | if (mmc->wire4) { | 303 | if (mmc_conf->mmc[0].wire4) { |
296 | if (cpu_is_omap24xx()) { | 304 | if (cpu_is_omap24xx()) { |
297 | omap_cfg_reg(H14_24XX_MMC_DAT1); | 305 | omap_cfg_reg(H14_24XX_MMC_DAT1); |
298 | omap_cfg_reg(E19_24XX_MMC_DAT2); | 306 | omap_cfg_reg(E19_24XX_MMC_DAT2); |
@@ -303,25 +311,22 @@ static void __init omap_init_mmc(void) | |||
303 | } else { | 311 | } else { |
304 | omap_cfg_reg(MMC_DAT1); | 312 | omap_cfg_reg(MMC_DAT1); |
305 | /* NOTE: DAT2 can be on W10 (here) or M15 */ | 313 | /* NOTE: DAT2 can be on W10 (here) or M15 */ |
306 | if (!mmc->nomux) | 314 | if (!mmc_conf->mmc[0].nomux) |
307 | omap_cfg_reg(MMC_DAT2); | 315 | omap_cfg_reg(MMC_DAT2); |
308 | omap_cfg_reg(MMC_DAT3); | 316 | omap_cfg_reg(MMC_DAT3); |
309 | } | 317 | } |
310 | } | 318 | } |
311 | mmc1_conf = *mmc; | ||
312 | (void) platform_device_register(&mmc_omap_device1); | ||
313 | } | 319 | } |
314 | 320 | ||
315 | #ifdef CONFIG_ARCH_OMAP16XX | 321 | #ifdef CONFIG_ARCH_OMAP16XX |
316 | /* block 2 is on newer chips, and has many pinout options */ | 322 | /* block 2 is on newer chips, and has many pinout options */ |
317 | mmc = &mmc_conf->mmc[1]; | 323 | if (mmc_conf->mmc[1].enabled) { |
318 | if (mmc->enabled) { | 324 | if (!mmc_conf->mmc[1].nomux) { |
319 | if (!mmc->nomux) { | ||
320 | omap_cfg_reg(Y8_1610_MMC2_CMD); | 325 | omap_cfg_reg(Y8_1610_MMC2_CMD); |
321 | omap_cfg_reg(Y10_1610_MMC2_CLK); | 326 | omap_cfg_reg(Y10_1610_MMC2_CLK); |
322 | omap_cfg_reg(R18_1610_MMC2_CLKIN); | 327 | omap_cfg_reg(R18_1610_MMC2_CLKIN); |
323 | omap_cfg_reg(W8_1610_MMC2_DAT0); | 328 | omap_cfg_reg(W8_1610_MMC2_DAT0); |
324 | if (mmc->wire4) { | 329 | if (mmc_conf->mmc[1].wire4) { |
325 | omap_cfg_reg(V8_1610_MMC2_DAT1); | 330 | omap_cfg_reg(V8_1610_MMC2_DAT1); |
326 | omap_cfg_reg(W15_1610_MMC2_DAT2); | 331 | omap_cfg_reg(W15_1610_MMC2_DAT2); |
327 | omap_cfg_reg(R10_1610_MMC2_DAT3); | 332 | omap_cfg_reg(R10_1610_MMC2_DAT3); |
@@ -337,14 +342,55 @@ static void __init omap_init_mmc(void) | |||
337 | if (cpu_is_omap1710()) | 342 | if (cpu_is_omap1710()) |
338 | omap_writel(omap_readl(MOD_CONF_CTRL_1) | (1 << 24), | 343 | omap_writel(omap_readl(MOD_CONF_CTRL_1) | (1 << 24), |
339 | MOD_CONF_CTRL_1); | 344 | MOD_CONF_CTRL_1); |
340 | mmc2_conf = *mmc; | 345 | } |
346 | #endif | ||
347 | } | ||
348 | |||
349 | static void __init omap_init_mmc(void) | ||
350 | { | ||
351 | const struct omap_mmc_config *mmc_conf; | ||
352 | |||
353 | /* NOTE: assumes MMC was never (wrongly) enabled */ | ||
354 | mmc_conf = omap_get_config(OMAP_TAG_MMC, struct omap_mmc_config); | ||
355 | if (!mmc_conf) | ||
356 | return; | ||
357 | |||
358 | omap_init_mmc_conf(mmc_conf); | ||
359 | |||
360 | if (mmc_conf->mmc[0].enabled) { | ||
361 | mmc1_data.conf = mmc_conf->mmc[0]; | ||
362 | (void) platform_device_register(&mmc_omap_device1); | ||
363 | } | ||
364 | |||
365 | #if defined(CONFIG_ARCH_OMAP16XX) || defined(CONFIG_ARCH_OMAP2430) || \ | ||
366 | defined(CONFIG_ARCH_OMAP34XX) | ||
367 | if (mmc_conf->mmc[1].enabled) { | ||
368 | mmc2_data.conf = mmc_conf->mmc[1]; | ||
341 | (void) platform_device_register(&mmc_omap_device2); | 369 | (void) platform_device_register(&mmc_omap_device2); |
342 | } | 370 | } |
343 | #endif | 371 | #endif |
344 | return; | ||
345 | } | 372 | } |
373 | |||
374 | void omap_set_mmc_info(int host, const struct omap_mmc_platform_data *info) | ||
375 | { | ||
376 | switch (host) { | ||
377 | case 1: | ||
378 | mmc1_data = *info; | ||
379 | break; | ||
380 | #if defined(CONFIG_ARCH_OMAP16XX) || defined(CONFIG_ARCH_OMAP2430) || \ | ||
381 | defined(CONFIG_ARCH_OMAP34XX) | ||
382 | case 2: | ||
383 | mmc2_data = *info; | ||
384 | break; | ||
385 | #endif | ||
386 | default: | ||
387 | BUG(); | ||
388 | } | ||
389 | } | ||
390 | |||
346 | #else | 391 | #else |
347 | static inline void omap_init_mmc(void) {} | 392 | static inline void omap_init_mmc(void) {} |
393 | void omap_set_mmc_info(int host, const struct omap_mmc_platform_data *info) {} | ||
348 | #endif | 394 | #endif |
349 | 395 | ||
350 | /*-------------------------------------------------------------------------*/ | 396 | /*-------------------------------------------------------------------------*/ |
diff --git a/arch/avr32/boards/atstk1000/atstk1002.c b/arch/avr32/boards/atstk1000/atstk1002.c index ee4c292683e1..dfc3443e23aa 100644 --- a/arch/avr32/boards/atstk1000/atstk1002.c +++ b/arch/avr32/boards/atstk1000/atstk1002.c | |||
@@ -325,7 +325,7 @@ static int __init atstk1002_init(void) | |||
325 | #ifdef CONFIG_BOARD_ATSTK100X_SPI1 | 325 | #ifdef CONFIG_BOARD_ATSTK100X_SPI1 |
326 | at32_add_device_spi(1, spi1_board_info, ARRAY_SIZE(spi1_board_info)); | 326 | at32_add_device_spi(1, spi1_board_info, ARRAY_SIZE(spi1_board_info)); |
327 | #endif | 327 | #endif |
328 | #ifndef CONFIG_BOARD_ATSTK1002_SW2_CUSTOM | 328 | #ifndef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM |
329 | at32_add_device_mci(0, MCI_PDATA); | 329 | at32_add_device_mci(0, MCI_PDATA); |
330 | #endif | 330 | #endif |
331 | #ifdef CONFIG_BOARD_ATSTK1002_SW5_CUSTOM | 331 | #ifdef CONFIG_BOARD_ATSTK1002_SW5_CUSTOM |
diff --git a/arch/avr32/boot/images/.gitignore b/arch/avr32/boot/images/.gitignore new file mode 100644 index 000000000000..64ea9d0141d2 --- /dev/null +++ b/arch/avr32/boot/images/.gitignore | |||
@@ -0,0 +1,4 @@ | |||
1 | uImage | ||
2 | uImage.srec | ||
3 | vmlinux.cso | ||
4 | sfdwarf.log | ||
diff --git a/arch/avr32/kernel/.gitignore b/arch/avr32/kernel/.gitignore new file mode 100644 index 000000000000..c5f676c3c224 --- /dev/null +++ b/arch/avr32/kernel/.gitignore | |||
@@ -0,0 +1 @@ | |||
vmlinux.lds | |||
diff --git a/arch/avr32/kernel/avr32_ksyms.c b/arch/avr32/kernel/avr32_ksyms.c index 84a7d44edc67..11e310c567a9 100644 --- a/arch/avr32/kernel/avr32_ksyms.c +++ b/arch/avr32/kernel/avr32_ksyms.c | |||
@@ -58,6 +58,7 @@ EXPORT_SYMBOL(find_first_zero_bit); | |||
58 | EXPORT_SYMBOL(find_next_zero_bit); | 58 | EXPORT_SYMBOL(find_next_zero_bit); |
59 | EXPORT_SYMBOL(find_first_bit); | 59 | EXPORT_SYMBOL(find_first_bit); |
60 | EXPORT_SYMBOL(find_next_bit); | 60 | EXPORT_SYMBOL(find_next_bit); |
61 | EXPORT_SYMBOL(generic_find_next_le_bit); | ||
61 | EXPORT_SYMBOL(generic_find_next_zero_le_bit); | 62 | EXPORT_SYMBOL(generic_find_next_zero_le_bit); |
62 | 63 | ||
63 | /* I/O primitives (lib/io-*.S) */ | 64 | /* I/O primitives (lib/io-*.S) */ |
diff --git a/arch/avr32/kernel/syscall-stubs.S b/arch/avr32/kernel/syscall-stubs.S index 890286a1e62b..673178e235f3 100644 --- a/arch/avr32/kernel/syscall-stubs.S +++ b/arch/avr32/kernel/syscall-stubs.S | |||
@@ -109,3 +109,12 @@ __sys_epoll_pwait: | |||
109 | rcall sys_epoll_pwait | 109 | rcall sys_epoll_pwait |
110 | sub sp, -4 | 110 | sub sp, -4 |
111 | popm pc | 111 | popm pc |
112 | |||
113 | .global __sys_sync_file_range | ||
114 | .type __sys_sync_file_range,@function | ||
115 | __sys_sync_file_range: | ||
116 | pushm lr | ||
117 | st.w --sp, ARG6 | ||
118 | rcall sys_sync_file_range | ||
119 | sub sp, -4 | ||
120 | popm pc | ||
diff --git a/arch/avr32/kernel/syscall_table.S b/arch/avr32/kernel/syscall_table.S index 478bda4c4a09..7ee0057613b3 100644 --- a/arch/avr32/kernel/syscall_table.S +++ b/arch/avr32/kernel/syscall_table.S | |||
@@ -275,7 +275,7 @@ sys_call_table: | |||
275 | .long sys_set_robust_list | 275 | .long sys_set_robust_list |
276 | .long sys_get_robust_list /* 260 */ | 276 | .long sys_get_robust_list /* 260 */ |
277 | .long __sys_splice | 277 | .long __sys_splice |
278 | .long sys_sync_file_range | 278 | .long __sys_sync_file_range |
279 | .long sys_tee | 279 | .long sys_tee |
280 | .long sys_vmsplice | 280 | .long sys_vmsplice |
281 | .long __sys_epoll_pwait /* 265 */ | 281 | .long __sys_epoll_pwait /* 265 */ |
diff --git a/arch/avr32/kernel/traps.c b/arch/avr32/kernel/traps.c index b835c4c01368..0d987373bc01 100644 --- a/arch/avr32/kernel/traps.c +++ b/arch/avr32/kernel/traps.c | |||
@@ -116,15 +116,15 @@ asmlinkage void do_nmi(unsigned long ecr, struct pt_regs *regs) | |||
116 | switch (ret) { | 116 | switch (ret) { |
117 | case NOTIFY_OK: | 117 | case NOTIFY_OK: |
118 | case NOTIFY_STOP: | 118 | case NOTIFY_STOP: |
119 | return; | 119 | break; |
120 | case NOTIFY_BAD: | 120 | case NOTIFY_BAD: |
121 | die("Fatal Non-Maskable Interrupt", regs, SIGINT); | 121 | die("Fatal Non-Maskable Interrupt", regs, SIGINT); |
122 | default: | 122 | default: |
123 | printk(KERN_ALERT "Got NMI, but nobody cared. Disabling...\n"); | ||
124 | nmi_disable(); | ||
123 | break; | 125 | break; |
124 | } | 126 | } |
125 | 127 | nmi_exit(); | |
126 | printk(KERN_ALERT "Got NMI, but nobody cared. Disabling...\n"); | ||
127 | nmi_disable(); | ||
128 | } | 128 | } |
129 | 129 | ||
130 | asmlinkage void do_critical_exception(unsigned long ecr, struct pt_regs *regs) | 130 | asmlinkage void do_critical_exception(unsigned long ecr, struct pt_regs *regs) |
diff --git a/arch/avr32/lib/findbit.S b/arch/avr32/lib/findbit.S index c6b91dee857c..997b33b2288a 100644 --- a/arch/avr32/lib/findbit.S +++ b/arch/avr32/lib/findbit.S | |||
@@ -123,6 +123,36 @@ ENTRY(find_next_bit) | |||
123 | brgt 1b | 123 | brgt 1b |
124 | retal r11 | 124 | retal r11 |
125 | 125 | ||
126 | ENTRY(generic_find_next_le_bit) | ||
127 | lsr r8, r10, 5 | ||
128 | sub r9, r11, r10 | ||
129 | retle r11 | ||
130 | |||
131 | lsl r8, 2 | ||
132 | add r12, r8 | ||
133 | andl r10, 31, COH | ||
134 | breq 1f | ||
135 | |||
136 | /* offset is not word-aligned. Handle the first (32 - r10) bits */ | ||
137 | ldswp.w r8, r12[0] | ||
138 | sub r12, -4 | ||
139 | lsr r8, r8, r10 | ||
140 | brne .L_found | ||
141 | |||
142 | /* r9 = r9 - (32 - r10) = r9 + r10 - 32 */ | ||
143 | add r9, r10 | ||
144 | sub r9, 32 | ||
145 | retle r11 | ||
146 | |||
147 | /* Main loop. offset must be word-aligned */ | ||
148 | 1: ldswp.w r8, r12[0] | ||
149 | cp.w r8, 0 | ||
150 | brne .L_found | ||
151 | sub r12, -4 | ||
152 | sub r9, 32 | ||
153 | brgt 1b | ||
154 | retal r11 | ||
155 | |||
126 | ENTRY(generic_find_next_zero_le_bit) | 156 | ENTRY(generic_find_next_zero_le_bit) |
127 | lsr r8, r10, 5 | 157 | lsr r8, r10, 5 |
128 | sub r9, r11, r10 | 158 | sub r9, r11, r10 |
diff --git a/arch/ia64/include/asm/elf.h b/arch/ia64/include/asm/elf.h index 5e0c1a6bce8d..2acb6b6543c9 100644 --- a/arch/ia64/include/asm/elf.h +++ b/arch/ia64/include/asm/elf.h | |||
@@ -266,4 +266,19 @@ do { \ | |||
266 | } \ | 266 | } \ |
267 | } while (0) | 267 | } while (0) |
268 | 268 | ||
269 | /* | ||
270 | * format for entries in the Global Offset Table | ||
271 | */ | ||
272 | struct got_entry { | ||
273 | uint64_t val; | ||
274 | }; | ||
275 | |||
276 | /* | ||
277 | * Layout of the Function Descriptor | ||
278 | */ | ||
279 | struct fdesc { | ||
280 | uint64_t ip; | ||
281 | uint64_t gp; | ||
282 | }; | ||
283 | |||
269 | #endif /* _ASM_IA64_ELF_H */ | 284 | #endif /* _ASM_IA64_ELF_H */ |
diff --git a/arch/ia64/include/asm/sections.h b/arch/ia64/include/asm/sections.h index a7acad2bc2f0..1a873b36a4a1 100644 --- a/arch/ia64/include/asm/sections.h +++ b/arch/ia64/include/asm/sections.h | |||
@@ -6,9 +6,14 @@ | |||
6 | * David Mosberger-Tang <davidm@hpl.hp.com> | 6 | * David Mosberger-Tang <davidm@hpl.hp.com> |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <linux/elf.h> | ||
10 | #include <linux/uaccess.h> | ||
9 | #include <asm-generic/sections.h> | 11 | #include <asm-generic/sections.h> |
10 | 12 | ||
11 | extern char __per_cpu_start[], __per_cpu_end[], __phys_per_cpu_start[]; | 13 | extern char __per_cpu_start[], __per_cpu_end[], __phys_per_cpu_start[]; |
14 | #ifdef CONFIG_SMP | ||
15 | extern char __cpu0_per_cpu[]; | ||
16 | #endif | ||
12 | extern char __start___vtop_patchlist[], __end___vtop_patchlist[]; | 17 | extern char __start___vtop_patchlist[], __end___vtop_patchlist[]; |
13 | extern char __start___rse_patchlist[], __end___rse_patchlist[]; | 18 | extern char __start___rse_patchlist[], __end___rse_patchlist[]; |
14 | extern char __start___mckinley_e9_bundles[], __end___mckinley_e9_bundles[]; | 19 | extern char __start___mckinley_e9_bundles[], __end___mckinley_e9_bundles[]; |
@@ -22,7 +27,16 @@ extern char __start_unwind[], __end_unwind[]; | |||
22 | extern char __start_ivt_text[], __end_ivt_text[]; | 27 | extern char __start_ivt_text[], __end_ivt_text[]; |
23 | 28 | ||
24 | #undef dereference_function_descriptor | 29 | #undef dereference_function_descriptor |
25 | void *dereference_function_descriptor(void *); | 30 | static inline void *dereference_function_descriptor(void *ptr) |
31 | { | ||
32 | struct fdesc *desc = ptr; | ||
33 | void *p; | ||
34 | |||
35 | if (!probe_kernel_address(&desc->ip, p)) | ||
36 | ptr = p; | ||
37 | return ptr; | ||
38 | } | ||
39 | |||
26 | 40 | ||
27 | #endif /* _ASM_IA64_SECTIONS_H */ | 41 | #endif /* _ASM_IA64_SECTIONS_H */ |
28 | 42 | ||
diff --git a/arch/ia64/include/asm/sn/bte.h b/arch/ia64/include/asm/sn/bte.h index a0d214f43115..5efecf06c9a4 100644 --- a/arch/ia64/include/asm/sn/bte.h +++ b/arch/ia64/include/asm/sn/bte.h | |||
@@ -223,10 +223,11 @@ extern void bte_error_handler(unsigned long); | |||
223 | * until the transfer is complete. In order to get the asynch | 223 | * until the transfer is complete. In order to get the asynch |
224 | * version of bte_copy, you must perform this check yourself. | 224 | * version of bte_copy, you must perform this check yourself. |
225 | */ | 225 | */ |
226 | #define BTE_UNALIGNED_COPY(src, dest, len, mode) \ | 226 | #define BTE_UNALIGNED_COPY(src, dest, len, mode) \ |
227 | (((len & L1_CACHE_MASK) || (src & L1_CACHE_MASK) || \ | 227 | (((len & (L1_CACHE_BYTES - 1)) || \ |
228 | (dest & L1_CACHE_MASK)) ? \ | 228 | (src & (L1_CACHE_BYTES - 1)) || \ |
229 | bte_unaligned_copy(src, dest, len, mode) : \ | 229 | (dest & (L1_CACHE_BYTES - 1))) ? \ |
230 | bte_unaligned_copy(src, dest, len, mode) : \ | ||
230 | bte_copy(src, dest, len, mode, NULL)) | 231 | bte_copy(src, dest, len, mode, NULL)) |
231 | 232 | ||
232 | 233 | ||
diff --git a/arch/ia64/kernel/efi.c b/arch/ia64/kernel/efi.c index d45f215bc8fc..51b75cea7018 100644 --- a/arch/ia64/kernel/efi.c +++ b/arch/ia64/kernel/efi.c | |||
@@ -1232,9 +1232,10 @@ efi_initialize_iomem_resources(struct resource *code_resource, | |||
1232 | if (md->attribute & EFI_MEMORY_WP) { | 1232 | if (md->attribute & EFI_MEMORY_WP) { |
1233 | name = "System ROM"; | 1233 | name = "System ROM"; |
1234 | flags |= IORESOURCE_READONLY; | 1234 | flags |= IORESOURCE_READONLY; |
1235 | } else { | 1235 | } else if (md->attribute == EFI_MEMORY_UC) |
1236 | name = "Uncached RAM"; | ||
1237 | else | ||
1236 | name = "System RAM"; | 1238 | name = "System RAM"; |
1237 | } | ||
1238 | break; | 1239 | break; |
1239 | 1240 | ||
1240 | case EFI_ACPI_MEMORY_NVS: | 1241 | case EFI_ACPI_MEMORY_NVS: |
diff --git a/arch/ia64/kernel/head.S b/arch/ia64/kernel/head.S index 8bdea8eb62e3..66e491d8baac 100644 --- a/arch/ia64/kernel/head.S +++ b/arch/ia64/kernel/head.S | |||
@@ -367,16 +367,17 @@ start_ap: | |||
367 | ;; | 367 | ;; |
368 | #else | 368 | #else |
369 | (isAP) br.few 2f | 369 | (isAP) br.few 2f |
370 | mov r20=r19 | 370 | movl r20=__cpu0_per_cpu |
371 | sub r19=r19,r18 | ||
372 | ;; | 371 | ;; |
373 | shr.u r18=r18,3 | 372 | shr.u r18=r18,3 |
374 | 1: | 373 | 1: |
375 | ld8 r21=[r20],8;; | 374 | ld8 r21=[r19],8;; |
376 | st8[r19]=r21,8 | 375 | st8[r20]=r21,8 |
377 | adds r18=-1,r18;; | 376 | adds r18=-1,r18;; |
378 | cmp4.lt p7,p6=0,r18 | 377 | cmp4.lt p7,p6=0,r18 |
379 | (p7) br.cond.dptk.few 1b | 378 | (p7) br.cond.dptk.few 1b |
379 | mov r19=r20 | ||
380 | ;; | ||
380 | 2: | 381 | 2: |
381 | #endif | 382 | #endif |
382 | tpa r19=r19 | 383 | tpa r19=r19 |
diff --git a/arch/ia64/kernel/module.c b/arch/ia64/kernel/module.c index 545626f66a4c..aaa7d901521f 100644 --- a/arch/ia64/kernel/module.c +++ b/arch/ia64/kernel/module.c | |||
@@ -31,11 +31,9 @@ | |||
31 | #include <linux/elf.h> | 31 | #include <linux/elf.h> |
32 | #include <linux/moduleloader.h> | 32 | #include <linux/moduleloader.h> |
33 | #include <linux/string.h> | 33 | #include <linux/string.h> |
34 | #include <linux/uaccess.h> | ||
35 | #include <linux/vmalloc.h> | 34 | #include <linux/vmalloc.h> |
36 | 35 | ||
37 | #include <asm/patch.h> | 36 | #include <asm/patch.h> |
38 | #include <asm/sections.h> | ||
39 | #include <asm/unaligned.h> | 37 | #include <asm/unaligned.h> |
40 | 38 | ||
41 | #define ARCH_MODULE_DEBUG 0 | 39 | #define ARCH_MODULE_DEBUG 0 |
@@ -137,15 +135,6 @@ static const char *reloc_name[256] = { | |||
137 | 135 | ||
138 | #undef N | 136 | #undef N |
139 | 137 | ||
140 | struct got_entry { | ||
141 | uint64_t val; | ||
142 | }; | ||
143 | |||
144 | struct fdesc { | ||
145 | uint64_t ip; | ||
146 | uint64_t gp; | ||
147 | }; | ||
148 | |||
149 | /* Opaque struct for insns, to protect against derefs. */ | 138 | /* Opaque struct for insns, to protect against derefs. */ |
150 | struct insn; | 139 | struct insn; |
151 | 140 | ||
@@ -943,13 +932,3 @@ module_arch_cleanup (struct module *mod) | |||
943 | if (mod->arch.core_unw_table) | 932 | if (mod->arch.core_unw_table) |
944 | unw_remove_unwind_table(mod->arch.core_unw_table); | 933 | unw_remove_unwind_table(mod->arch.core_unw_table); |
945 | } | 934 | } |
946 | |||
947 | void *dereference_function_descriptor(void *ptr) | ||
948 | { | ||
949 | struct fdesc *desc = ptr; | ||
950 | void *p; | ||
951 | |||
952 | if (!probe_kernel_address(&desc->ip, p)) | ||
953 | ptr = p; | ||
954 | return ptr; | ||
955 | } | ||
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c index c27d5b2c182b..de636b215677 100644 --- a/arch/ia64/kernel/setup.c +++ b/arch/ia64/kernel/setup.c | |||
@@ -616,7 +616,9 @@ setup_arch (char **cmdline_p) | |||
616 | ia64_mca_init(); | 616 | ia64_mca_init(); |
617 | 617 | ||
618 | platform_setup(cmdline_p); | 618 | platform_setup(cmdline_p); |
619 | #ifndef CONFIG_IA64_HP_SIM | ||
619 | check_sal_cache_flush(); | 620 | check_sal_cache_flush(); |
621 | #endif | ||
620 | paging_init(); | 622 | paging_init(); |
621 | } | 623 | } |
622 | 624 | ||
diff --git a/arch/ia64/kernel/smpboot.c b/arch/ia64/kernel/smpboot.c index bcea81e432fd..d8f05e504fbf 100644 --- a/arch/ia64/kernel/smpboot.c +++ b/arch/ia64/kernel/smpboot.c | |||
@@ -741,16 +741,14 @@ int __cpu_disable(void) | |||
741 | return -EBUSY; | 741 | return -EBUSY; |
742 | } | 742 | } |
743 | 743 | ||
744 | cpu_clear(cpu, cpu_online_map); | ||
745 | |||
746 | if (migrate_platform_irqs(cpu)) { | 744 | if (migrate_platform_irqs(cpu)) { |
747 | cpu_set(cpu, cpu_online_map); | 745 | cpu_set(cpu, cpu_online_map); |
748 | return (-EBUSY); | 746 | return (-EBUSY); |
749 | } | 747 | } |
750 | 748 | ||
751 | remove_siblinginfo(cpu); | 749 | remove_siblinginfo(cpu); |
752 | cpu_clear(cpu, cpu_online_map); | ||
753 | fixup_irqs(); | 750 | fixup_irqs(); |
751 | cpu_clear(cpu, cpu_online_map); | ||
754 | local_flush_tlb_all(); | 752 | local_flush_tlb_all(); |
755 | cpu_clear(cpu, cpu_callin_map); | 753 | cpu_clear(cpu, cpu_callin_map); |
756 | return 0; | 754 | return 0; |
diff --git a/arch/ia64/kernel/vmlinux.lds.S b/arch/ia64/kernel/vmlinux.lds.S index de71da811cd6..10a7d47e8510 100644 --- a/arch/ia64/kernel/vmlinux.lds.S +++ b/arch/ia64/kernel/vmlinux.lds.S | |||
@@ -215,9 +215,6 @@ SECTIONS | |||
215 | /* Per-cpu data: */ | 215 | /* Per-cpu data: */ |
216 | percpu : { } :percpu | 216 | percpu : { } :percpu |
217 | . = ALIGN(PERCPU_PAGE_SIZE); | 217 | . = ALIGN(PERCPU_PAGE_SIZE); |
218 | #ifdef CONFIG_SMP | ||
219 | . = . + PERCPU_PAGE_SIZE; /* cpu0 per-cpu space */ | ||
220 | #endif | ||
221 | __phys_per_cpu_start = .; | 218 | __phys_per_cpu_start = .; |
222 | .data.percpu PERCPU_ADDR : AT(__phys_per_cpu_start - LOAD_OFFSET) | 219 | .data.percpu PERCPU_ADDR : AT(__phys_per_cpu_start - LOAD_OFFSET) |
223 | { | 220 | { |
@@ -233,6 +230,11 @@ SECTIONS | |||
233 | data : { } :data | 230 | data : { } :data |
234 | .data : AT(ADDR(.data) - LOAD_OFFSET) | 231 | .data : AT(ADDR(.data) - LOAD_OFFSET) |
235 | { | 232 | { |
233 | #ifdef CONFIG_SMP | ||
234 | . = ALIGN(PERCPU_PAGE_SIZE); | ||
235 | __cpu0_per_cpu = .; | ||
236 | . = . + PERCPU_PAGE_SIZE; /* cpu0 per-cpu space */ | ||
237 | #endif | ||
236 | DATA_DATA | 238 | DATA_DATA |
237 | *(.data1) | 239 | *(.data1) |
238 | *(.gnu.linkonce.d*) | 240 | *(.gnu.linkonce.d*) |
diff --git a/arch/ia64/kvm/kvm-ia64.c b/arch/ia64/kvm/kvm-ia64.c index 7a37d06376be..cd0d1a7284b7 100644 --- a/arch/ia64/kvm/kvm-ia64.c +++ b/arch/ia64/kvm/kvm-ia64.c | |||
@@ -38,6 +38,7 @@ | |||
38 | #include <asm/cacheflush.h> | 38 | #include <asm/cacheflush.h> |
39 | #include <asm/div64.h> | 39 | #include <asm/div64.h> |
40 | #include <asm/tlb.h> | 40 | #include <asm/tlb.h> |
41 | #include <asm/elf.h> | ||
41 | 42 | ||
42 | #include "misc.h" | 43 | #include "misc.h" |
43 | #include "vti.h" | 44 | #include "vti.h" |
@@ -61,12 +62,6 @@ struct kvm_stats_debugfs_item debugfs_entries[] = { | |||
61 | { NULL } | 62 | { NULL } |
62 | }; | 63 | }; |
63 | 64 | ||
64 | |||
65 | struct fdesc{ | ||
66 | unsigned long ip; | ||
67 | unsigned long gp; | ||
68 | }; | ||
69 | |||
70 | static void kvm_flush_icache(unsigned long start, unsigned long len) | 65 | static void kvm_flush_icache(unsigned long start, unsigned long len) |
71 | { | 66 | { |
72 | int l; | 67 | int l; |
diff --git a/arch/ia64/mm/contig.c b/arch/ia64/mm/contig.c index e566ff43884a..0ee085efbe29 100644 --- a/arch/ia64/mm/contig.c +++ b/arch/ia64/mm/contig.c | |||
@@ -163,7 +163,7 @@ per_cpu_init (void) | |||
163 | * get_zeroed_page(). | 163 | * get_zeroed_page(). |
164 | */ | 164 | */ |
165 | if (first_time) { | 165 | if (first_time) { |
166 | void *cpu0_data = __phys_per_cpu_start - PERCPU_PAGE_SIZE; | 166 | void *cpu0_data = __cpu0_per_cpu; |
167 | 167 | ||
168 | first_time=0; | 168 | first_time=0; |
169 | 169 | ||
diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c index 78026aabaa7f..d8c5fcd89e5b 100644 --- a/arch/ia64/mm/discontig.c +++ b/arch/ia64/mm/discontig.c | |||
@@ -144,7 +144,7 @@ static void *per_cpu_node_setup(void *cpu_data, int node) | |||
144 | 144 | ||
145 | for_each_possible_early_cpu(cpu) { | 145 | for_each_possible_early_cpu(cpu) { |
146 | if (cpu == 0) { | 146 | if (cpu == 0) { |
147 | void *cpu0_data = __phys_per_cpu_start - PERCPU_PAGE_SIZE; | 147 | void *cpu0_data = __cpu0_per_cpu; |
148 | __per_cpu_offset[cpu] = (char*)cpu0_data - | 148 | __per_cpu_offset[cpu] = (char*)cpu0_data - |
149 | __per_cpu_start; | 149 | __per_cpu_start; |
150 | } else if (node == node_cpuid[cpu].nid) { | 150 | } else if (node == node_cpuid[cpu].nid) { |
diff --git a/arch/ia64/sn/pci/tioca_provider.c b/arch/ia64/sn/pci/tioca_provider.c index 529462c01570..79165122501c 100644 --- a/arch/ia64/sn/pci/tioca_provider.c +++ b/arch/ia64/sn/pci/tioca_provider.c | |||
@@ -420,8 +420,10 @@ tioca_dma_mapped(struct pci_dev *pdev, u64 paddr, size_t req_size) | |||
420 | entry = find_next_zero_bit(map, mapsize, last_entry); | 420 | entry = find_next_zero_bit(map, mapsize, last_entry); |
421 | } | 421 | } |
422 | 422 | ||
423 | if (entry > mapsize) | 423 | if (entry > mapsize) { |
424 | kfree(ca_dmamap); | ||
424 | goto map_return; | 425 | goto map_return; |
426 | } | ||
425 | 427 | ||
426 | for (i = 0; i < entries; i++) | 428 | for (i = 0; i < entries; i++) |
427 | set_bit(entry + i, map); | 429 | set_bit(entry + i, map); |
diff --git a/arch/m32r/Kconfig b/arch/m32r/Kconfig index a5f864c445b2..f57113f1f892 100644 --- a/arch/m32r/Kconfig +++ b/arch/m32r/Kconfig | |||
@@ -216,10 +216,6 @@ config MEMORY_SIZE | |||
216 | default "01000000" if PLAT_M32104UT | 216 | default "01000000" if PLAT_M32104UT |
217 | default "00800000" if PLAT_OAKS32R | 217 | default "00800000" if PLAT_OAKS32R |
218 | 218 | ||
219 | config NOHIGHMEM | ||
220 | bool | ||
221 | default y | ||
222 | |||
223 | config ARCH_DISCONTIGMEM_ENABLE | 219 | config ARCH_DISCONTIGMEM_ENABLE |
224 | bool "Internal RAM Support" | 220 | bool "Internal RAM Support" |
225 | depends on CHIP_M32700 || CHIP_M32102 || CHIP_VDEC2 || CHIP_OPSP || CHIP_M32104 | 221 | depends on CHIP_M32700 || CHIP_M32102 || CHIP_VDEC2 || CHIP_OPSP || CHIP_M32104 |
@@ -410,11 +406,7 @@ config PCI_DIRECT | |||
410 | source "drivers/pci/Kconfig" | 406 | source "drivers/pci/Kconfig" |
411 | 407 | ||
412 | config ISA | 408 | config ISA |
413 | bool "ISA support" | 409 | bool |
414 | help | ||
415 | Find out whether you have ISA slots on your motherboard. ISA is the | ||
416 | name of a bus system, i.e. the way the CPU talks to the other stuff | ||
417 | inside your box. If you have ISA, say Y, otherwise N. | ||
418 | 410 | ||
419 | source "drivers/pcmcia/Kconfig" | 411 | source "drivers/pcmcia/Kconfig" |
420 | 412 | ||
diff --git a/arch/m32r/kernel/entry.S b/arch/m32r/kernel/entry.S index d4eaa2fd1818..612d35b082a6 100644 --- a/arch/m32r/kernel/entry.S +++ b/arch/m32r/kernel/entry.S | |||
@@ -143,7 +143,7 @@ ret_from_intr: | |||
143 | and3 r4, r4, #0x8000 ; check BSM bit | 143 | and3 r4, r4, #0x8000 ; check BSM bit |
144 | #endif | 144 | #endif |
145 | beqz r4, resume_kernel | 145 | beqz r4, resume_kernel |
146 | ENTRY(resume_userspace) | 146 | resume_userspace: |
147 | DISABLE_INTERRUPTS(r4) ; make sure we don't miss an interrupt | 147 | DISABLE_INTERRUPTS(r4) ; make sure we don't miss an interrupt |
148 | ; setting need_resched or sigpending | 148 | ; setting need_resched or sigpending |
149 | ; between sampling and the iret | 149 | ; between sampling and the iret |
diff --git a/arch/m32r/kernel/head.S b/arch/m32r/kernel/head.S index dab7436d7bbe..40180778a5c7 100644 --- a/arch/m32r/kernel/head.S +++ b/arch/m32r/kernel/head.S | |||
@@ -29,7 +29,6 @@ __INITDATA | |||
29 | .global _end | 29 | .global _end |
30 | ENTRY(stext) | 30 | ENTRY(stext) |
31 | ENTRY(_stext) | 31 | ENTRY(_stext) |
32 | ENTRY(startup_32) | ||
33 | /* Setup up the stack pointer */ | 32 | /* Setup up the stack pointer */ |
34 | LDIMM (r0, spi_stack_top) | 33 | LDIMM (r0, spi_stack_top) |
35 | LDIMM (r1, spu_stack_top) | 34 | LDIMM (r1, spu_stack_top) |
diff --git a/arch/m32r/kernel/irq.c b/arch/m32r/kernel/irq.c index d0c5b0b7da2f..2aeae4670098 100644 --- a/arch/m32r/kernel/irq.c +++ b/arch/m32r/kernel/irq.c | |||
@@ -22,9 +22,6 @@ | |||
22 | #include <linux/module.h> | 22 | #include <linux/module.h> |
23 | #include <asm/uaccess.h> | 23 | #include <asm/uaccess.h> |
24 | 24 | ||
25 | atomic_t irq_err_count; | ||
26 | atomic_t irq_mis_count; | ||
27 | |||
28 | /* | 25 | /* |
29 | * Generic, controller-independent functions: | 26 | * Generic, controller-independent functions: |
30 | */ | 27 | */ |
@@ -63,9 +60,6 @@ int show_interrupts(struct seq_file *p, void *v) | |||
63 | seq_putc(p, '\n'); | 60 | seq_putc(p, '\n'); |
64 | skip: | 61 | skip: |
65 | spin_unlock_irqrestore(&irq_desc[i].lock, flags); | 62 | spin_unlock_irqrestore(&irq_desc[i].lock, flags); |
66 | } else if (i == NR_IRQS) { | ||
67 | seq_printf(p, "ERR: %10u\n", atomic_read(&irq_err_count)); | ||
68 | seq_printf(p, "MIS: %10u\n", atomic_read(&irq_mis_count)); | ||
69 | } | 63 | } |
70 | return 0; | 64 | return 0; |
71 | } | 65 | } |
diff --git a/arch/m32r/kernel/m32r_ksyms.c b/arch/m32r/kernel/m32r_ksyms.c index 16bcb189a383..22624b51d4d3 100644 --- a/arch/m32r/kernel/m32r_ksyms.c +++ b/arch/m32r/kernel/m32r_ksyms.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <asm/delay.h> | 14 | #include <asm/delay.h> |
15 | #include <asm/irq.h> | 15 | #include <asm/irq.h> |
16 | #include <asm/tlbflush.h> | 16 | #include <asm/tlbflush.h> |
17 | #include <asm/pgtable.h> | ||
17 | 18 | ||
18 | /* platform dependent support */ | 19 | /* platform dependent support */ |
19 | EXPORT_SYMBOL(boot_cpu_data); | 20 | EXPORT_SYMBOL(boot_cpu_data); |
@@ -65,6 +66,7 @@ EXPORT_SYMBOL(memset); | |||
65 | EXPORT_SYMBOL(copy_page); | 66 | EXPORT_SYMBOL(copy_page); |
66 | EXPORT_SYMBOL(clear_page); | 67 | EXPORT_SYMBOL(clear_page); |
67 | EXPORT_SYMBOL(strlen); | 68 | EXPORT_SYMBOL(strlen); |
69 | EXPORT_SYMBOL(empty_zero_page); | ||
68 | 70 | ||
69 | EXPORT_SYMBOL(_inb); | 71 | EXPORT_SYMBOL(_inb); |
70 | EXPORT_SYMBOL(_inw); | 72 | EXPORT_SYMBOL(_inw); |
diff --git a/arch/m32r/kernel/process.c b/arch/m32r/kernel/process.c index a689e2978b6e..5be4faaf5b1c 100644 --- a/arch/m32r/kernel/process.c +++ b/arch/m32r/kernel/process.c | |||
@@ -35,8 +35,6 @@ | |||
35 | 35 | ||
36 | #include <linux/err.h> | 36 | #include <linux/err.h> |
37 | 37 | ||
38 | static int hlt_counter=0; | ||
39 | |||
40 | /* | 38 | /* |
41 | * Return saved PC of a blocked thread. | 39 | * Return saved PC of a blocked thread. |
42 | */ | 40 | */ |
@@ -48,31 +46,16 @@ unsigned long thread_saved_pc(struct task_struct *tsk) | |||
48 | /* | 46 | /* |
49 | * Powermanagement idle function, if any.. | 47 | * Powermanagement idle function, if any.. |
50 | */ | 48 | */ |
51 | void (*pm_idle)(void) = NULL; | 49 | static void (*pm_idle)(void) = NULL; |
52 | EXPORT_SYMBOL(pm_idle); | ||
53 | 50 | ||
54 | void (*pm_power_off)(void) = NULL; | 51 | void (*pm_power_off)(void) = NULL; |
55 | EXPORT_SYMBOL(pm_power_off); | 52 | EXPORT_SYMBOL(pm_power_off); |
56 | 53 | ||
57 | void disable_hlt(void) | ||
58 | { | ||
59 | hlt_counter++; | ||
60 | } | ||
61 | |||
62 | EXPORT_SYMBOL(disable_hlt); | ||
63 | |||
64 | void enable_hlt(void) | ||
65 | { | ||
66 | hlt_counter--; | ||
67 | } | ||
68 | |||
69 | EXPORT_SYMBOL(enable_hlt); | ||
70 | |||
71 | /* | 54 | /* |
72 | * We use this is we don't have any better | 55 | * We use this is we don't have any better |
73 | * idle routine.. | 56 | * idle routine.. |
74 | */ | 57 | */ |
75 | void default_idle(void) | 58 | static void default_idle(void) |
76 | { | 59 | { |
77 | /* M32R_FIXME: Please use "cpu_sleep" mode. */ | 60 | /* M32R_FIXME: Please use "cpu_sleep" mode. */ |
78 | cpu_relax(); | 61 | cpu_relax(); |
@@ -260,15 +243,6 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long spu, | |||
260 | return 0; | 243 | return 0; |
261 | } | 244 | } |
262 | 245 | ||
263 | /* | ||
264 | * Capture the user space registers if the task is not running (in user space) | ||
265 | */ | ||
266 | int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs) | ||
267 | { | ||
268 | /* M32R_FIXME */ | ||
269 | return 1; | ||
270 | } | ||
271 | |||
272 | asmlinkage int sys_fork(unsigned long r0, unsigned long r1, unsigned long r2, | 246 | asmlinkage int sys_fork(unsigned long r0, unsigned long r1, unsigned long r2, |
273 | unsigned long r3, unsigned long r4, unsigned long r5, unsigned long r6, | 247 | unsigned long r3, unsigned long r4, unsigned long r5, unsigned long r6, |
274 | struct pt_regs regs) | 248 | struct pt_regs regs) |
diff --git a/arch/m32r/kernel/smp.c b/arch/m32r/kernel/smp.c index 7577f971ea4e..929e5c9d3ad9 100644 --- a/arch/m32r/kernel/smp.c +++ b/arch/m32r/kernel/smp.c | |||
@@ -84,7 +84,7 @@ void smp_send_timer(void); | |||
84 | void smp_ipi_timer_interrupt(struct pt_regs *); | 84 | void smp_ipi_timer_interrupt(struct pt_regs *); |
85 | void smp_local_timer_interrupt(void); | 85 | void smp_local_timer_interrupt(void); |
86 | 86 | ||
87 | void send_IPI_allbutself(int, int); | 87 | static void send_IPI_allbutself(int, int); |
88 | static void send_IPI_mask(cpumask_t, int, int); | 88 | static void send_IPI_mask(cpumask_t, int, int); |
89 | unsigned long send_IPI_mask_phys(cpumask_t, int, int); | 89 | unsigned long send_IPI_mask_phys(cpumask_t, int, int); |
90 | 90 | ||
@@ -722,7 +722,7 @@ void smp_local_timer_interrupt(void) | |||
722 | * ---------- --- -------------------------------------------------------- | 722 | * ---------- --- -------------------------------------------------------- |
723 | * | 723 | * |
724 | *==========================================================================*/ | 724 | *==========================================================================*/ |
725 | void send_IPI_allbutself(int ipi_num, int try) | 725 | static void send_IPI_allbutself(int ipi_num, int try) |
726 | { | 726 | { |
727 | cpumask_t cpumask; | 727 | cpumask_t cpumask; |
728 | 728 | ||
diff --git a/arch/m32r/kernel/time.c b/arch/m32r/kernel/time.c index 994cc1556355..6ea017727cce 100644 --- a/arch/m32r/kernel/time.c +++ b/arch/m32r/kernel/time.c | |||
@@ -34,7 +34,6 @@ | |||
34 | #include <asm/hw_irq.h> | 34 | #include <asm/hw_irq.h> |
35 | 35 | ||
36 | #ifdef CONFIG_SMP | 36 | #ifdef CONFIG_SMP |
37 | extern void send_IPI_allbutself(int, int); | ||
38 | extern void smp_local_timer_interrupt(void); | 37 | extern void smp_local_timer_interrupt(void); |
39 | #endif | 38 | #endif |
40 | 39 | ||
@@ -188,7 +187,7 @@ static long last_rtc_update = 0; | |||
188 | * timer_interrupt() needs to keep up the real-time clock, | 187 | * timer_interrupt() needs to keep up the real-time clock, |
189 | * as well as call the "do_timer()" routine every clocktick | 188 | * as well as call the "do_timer()" routine every clocktick |
190 | */ | 189 | */ |
191 | irqreturn_t timer_interrupt(int irq, void *dev_id) | 190 | static irqreturn_t timer_interrupt(int irq, void *dev_id) |
192 | { | 191 | { |
193 | #ifndef CONFIG_SMP | 192 | #ifndef CONFIG_SMP |
194 | profile_tick(CPU_PROFILING); | 193 | profile_tick(CPU_PROFILING); |
@@ -228,7 +227,7 @@ irqreturn_t timer_interrupt(int irq, void *dev_id) | |||
228 | return IRQ_HANDLED; | 227 | return IRQ_HANDLED; |
229 | } | 228 | } |
230 | 229 | ||
231 | struct irqaction irq0 = { | 230 | static struct irqaction irq0 = { |
232 | .handler = timer_interrupt, | 231 | .handler = timer_interrupt, |
233 | .flags = IRQF_DISABLED, | 232 | .flags = IRQF_DISABLED, |
234 | .mask = CPU_MASK_NONE, | 233 | .mask = CPU_MASK_NONE, |
diff --git a/arch/m32r/kernel/traps.c b/arch/m32r/kernel/traps.c index 46159a4e644b..03b14e55cd89 100644 --- a/arch/m32r/kernel/traps.c +++ b/arch/m32r/kernel/traps.c | |||
@@ -61,7 +61,7 @@ extern unsigned long eit_vector[]; | |||
61 | ((unsigned long)func - (unsigned long)eit_vector - entry*4)/4 \ | 61 | ((unsigned long)func - (unsigned long)eit_vector - entry*4)/4 \ |
62 | + 0xff000000UL | 62 | + 0xff000000UL |
63 | 63 | ||
64 | void set_eit_vector_entries(void) | 64 | static void set_eit_vector_entries(void) |
65 | { | 65 | { |
66 | extern void default_eit_handler(void); | 66 | extern void default_eit_handler(void); |
67 | extern void system_call(void); | 67 | extern void system_call(void); |
@@ -121,9 +121,9 @@ void __init trap_init(void) | |||
121 | cpu_init(); | 121 | cpu_init(); |
122 | } | 122 | } |
123 | 123 | ||
124 | int kstack_depth_to_print = 24; | 124 | static int kstack_depth_to_print = 24; |
125 | 125 | ||
126 | void show_trace(struct task_struct *task, unsigned long *stack) | 126 | static void show_trace(struct task_struct *task, unsigned long *stack) |
127 | { | 127 | { |
128 | unsigned long addr; | 128 | unsigned long addr; |
129 | 129 | ||
@@ -224,7 +224,7 @@ bad: | |||
224 | printk("\n"); | 224 | printk("\n"); |
225 | } | 225 | } |
226 | 226 | ||
227 | DEFINE_SPINLOCK(die_lock); | 227 | static DEFINE_SPINLOCK(die_lock); |
228 | 228 | ||
229 | void die(const char * str, struct pt_regs * regs, long err) | 229 | void die(const char * str, struct pt_regs * regs, long err) |
230 | { | 230 | { |
diff --git a/arch/m32r/lib/delay.c b/arch/m32r/lib/delay.c index 59bfc34e0d9f..ced549be80f5 100644 --- a/arch/m32r/lib/delay.c +++ b/arch/m32r/lib/delay.c | |||
@@ -6,6 +6,7 @@ | |||
6 | */ | 6 | */ |
7 | 7 | ||
8 | #include <linux/param.h> | 8 | #include <linux/param.h> |
9 | #include <linux/module.h> | ||
9 | #ifdef CONFIG_SMP | 10 | #ifdef CONFIG_SMP |
10 | #include <linux/sched.h> | 11 | #include <linux/sched.h> |
11 | #include <asm/current.h> | 12 | #include <asm/current.h> |
@@ -121,3 +122,4 @@ void __ndelay(unsigned long nsecs) | |||
121 | { | 122 | { |
122 | __const_udelay(nsecs * 0x00005); /* 2**32 / 1000000000 (rounded up) */ | 123 | __const_udelay(nsecs * 0x00005); /* 2**32 / 1000000000 (rounded up) */ |
123 | } | 124 | } |
125 | EXPORT_SYMBOL(__ndelay); | ||
diff --git a/arch/m68k/configs/amiga_defconfig b/arch/m68k/configs/amiga_defconfig index 8e2a0f5faf53..8bd61a640fc9 100644 --- a/arch/m68k/configs/amiga_defconfig +++ b/arch/m68k/configs/amiga_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.26-rc4 | 3 | # Linux kernel version: 2.6.27-rc6 |
4 | # Wed May 28 22:47:35 2008 | 4 | # Wed Sep 10 09:02:00 2008 |
5 | # | 5 | # |
6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -52,7 +52,6 @@ CONFIG_SYSCTL=y | |||
52 | # CONFIG_EMBEDDED is not set | 52 | # CONFIG_EMBEDDED is not set |
53 | CONFIG_UID16=y | 53 | CONFIG_UID16=y |
54 | CONFIG_SYSCTL_SYSCALL=y | 54 | CONFIG_SYSCTL_SYSCALL=y |
55 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
56 | CONFIG_KALLSYMS=y | 55 | CONFIG_KALLSYMS=y |
57 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 56 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
58 | CONFIG_HOTPLUG=y | 57 | CONFIG_HOTPLUG=y |
@@ -75,10 +74,16 @@ CONFIG_SLAB=y | |||
75 | # CONFIG_PROFILING is not set | 74 | # CONFIG_PROFILING is not set |
76 | # CONFIG_MARKERS is not set | 75 | # CONFIG_MARKERS is not set |
77 | # CONFIG_HAVE_OPROFILE is not set | 76 | # CONFIG_HAVE_OPROFILE is not set |
77 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
78 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
78 | # CONFIG_HAVE_KPROBES is not set | 79 | # CONFIG_HAVE_KPROBES is not set |
79 | # CONFIG_HAVE_KRETPROBES is not set | 80 | # CONFIG_HAVE_KRETPROBES is not set |
81 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
80 | # CONFIG_HAVE_DMA_ATTRS is not set | 82 | # CONFIG_HAVE_DMA_ATTRS is not set |
83 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
84 | # CONFIG_HAVE_CLK is not set | ||
81 | CONFIG_PROC_PAGE_MONITOR=y | 85 | CONFIG_PROC_PAGE_MONITOR=y |
86 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||
82 | CONFIG_SLABINFO=y | 87 | CONFIG_SLABINFO=y |
83 | CONFIG_RT_MUTEXES=y | 88 | CONFIG_RT_MUTEXES=y |
84 | # CONFIG_TINY_SHMEM is not set | 89 | # CONFIG_TINY_SHMEM is not set |
@@ -95,6 +100,7 @@ CONFIG_BLOCK=y | |||
95 | # CONFIG_BLK_DEV_IO_TRACE is not set | 100 | # CONFIG_BLK_DEV_IO_TRACE is not set |
96 | # CONFIG_LSF is not set | 101 | # CONFIG_LSF is not set |
97 | CONFIG_BLK_DEV_BSG=y | 102 | CONFIG_BLK_DEV_BSG=y |
103 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
98 | 104 | ||
99 | # | 105 | # |
100 | # IO Schedulers | 106 | # IO Schedulers |
@@ -166,10 +172,6 @@ CONFIG_GENERIC_ISA_DMA=y | |||
166 | CONFIG_ZONE_DMA=y | 172 | CONFIG_ZONE_DMA=y |
167 | # CONFIG_ARCH_SUPPORTS_MSI is not set | 173 | # CONFIG_ARCH_SUPPORTS_MSI is not set |
168 | CONFIG_ZORRO_NAMES=y | 174 | CONFIG_ZORRO_NAMES=y |
169 | |||
170 | # | ||
171 | # Networking | ||
172 | # | ||
173 | CONFIG_NET=y | 175 | CONFIG_NET=y |
174 | 176 | ||
175 | # | 177 | # |
@@ -183,6 +185,7 @@ CONFIG_XFRM=y | |||
183 | # CONFIG_XFRM_SUB_POLICY is not set | 185 | # CONFIG_XFRM_SUB_POLICY is not set |
184 | CONFIG_XFRM_MIGRATE=y | 186 | CONFIG_XFRM_MIGRATE=y |
185 | # CONFIG_XFRM_STATISTICS is not set | 187 | # CONFIG_XFRM_STATISTICS is not set |
188 | CONFIG_XFRM_IPCOMP=m | ||
186 | CONFIG_NET_KEY=y | 189 | CONFIG_NET_KEY=y |
187 | CONFIG_NET_KEY_MIGRATE=y | 190 | CONFIG_NET_KEY_MIGRATE=y |
188 | CONFIG_INET=y | 191 | CONFIG_INET=y |
@@ -413,6 +416,7 @@ CONFIG_NET_CLS_ROUTE=y | |||
413 | # | 416 | # |
414 | # CONFIG_CFG80211 is not set | 417 | # CONFIG_CFG80211 is not set |
415 | CONFIG_WIRELESS_EXT=y | 418 | CONFIG_WIRELESS_EXT=y |
419 | # CONFIG_WIRELESS_EXT_SYSFS is not set | ||
416 | # CONFIG_MAC80211 is not set | 420 | # CONFIG_MAC80211 is not set |
417 | CONFIG_IEEE80211=m | 421 | CONFIG_IEEE80211=m |
418 | # CONFIG_IEEE80211_DEBUG is not set | 422 | # CONFIG_IEEE80211_DEBUG is not set |
@@ -432,7 +436,9 @@ CONFIG_IEEE80211_CRYPT_TKIP=m | |||
432 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 436 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
433 | CONFIG_STANDALONE=y | 437 | CONFIG_STANDALONE=y |
434 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 438 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
435 | CONFIG_FW_LOADER=m | 439 | CONFIG_FW_LOADER=y |
440 | # CONFIG_FIRMWARE_IN_KERNEL is not set | ||
441 | CONFIG_EXTRA_FIRMWARE="" | ||
436 | # CONFIG_SYS_HYPERVISOR is not set | 442 | # CONFIG_SYS_HYPERVISOR is not set |
437 | CONFIG_CONNECTOR=m | 443 | CONFIG_CONNECTOR=m |
438 | # CONFIG_MTD is not set | 444 | # CONFIG_MTD is not set |
@@ -460,6 +466,7 @@ CONFIG_CDROM_PKTCDVD=m | |||
460 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 | 466 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 |
461 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set | 467 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set |
462 | CONFIG_ATA_OVER_ETH=m | 468 | CONFIG_ATA_OVER_ETH=m |
469 | # CONFIG_BLK_DEV_HD is not set | ||
463 | CONFIG_MISC_DEVICES=y | 470 | CONFIG_MISC_DEVICES=y |
464 | # CONFIG_EEPROM_93CX6 is not set | 471 | # CONFIG_EEPROM_93CX6 is not set |
465 | # CONFIG_ENCLOSURE_SERVICES is not set | 472 | # CONFIG_ENCLOSURE_SERVICES is not set |
@@ -470,6 +477,7 @@ CONFIG_BLK_DEV_IDE=y | |||
470 | # | 477 | # |
471 | # Please see Documentation/ide/ide.txt for help/info on IDE drives | 478 | # Please see Documentation/ide/ide.txt for help/info on IDE drives |
472 | # | 479 | # |
480 | CONFIG_IDE_ATAPI=y | ||
473 | # CONFIG_BLK_DEV_IDE_SATA is not set | 481 | # CONFIG_BLK_DEV_IDE_SATA is not set |
474 | CONFIG_BLK_DEV_IDEDISK=y | 482 | CONFIG_BLK_DEV_IDEDISK=y |
475 | # CONFIG_IDEDISK_MULTI_MODE is not set | 483 | # CONFIG_IDEDISK_MULTI_MODE is not set |
@@ -489,8 +497,6 @@ CONFIG_BLK_DEV_GAYLE=y | |||
489 | CONFIG_BLK_DEV_IDEDOUBLER=y | 497 | CONFIG_BLK_DEV_IDEDOUBLER=y |
490 | CONFIG_BLK_DEV_BUDDHA=y | 498 | CONFIG_BLK_DEV_BUDDHA=y |
491 | # CONFIG_BLK_DEV_IDEDMA is not set | 499 | # CONFIG_BLK_DEV_IDEDMA is not set |
492 | # CONFIG_BLK_DEV_HD_ONLY is not set | ||
493 | # CONFIG_BLK_DEV_HD is not set | ||
494 | 500 | ||
495 | # | 501 | # |
496 | # SCSI device support | 502 | # SCSI device support |
@@ -556,6 +562,7 @@ CONFIG_A2091_SCSI=y | |||
556 | CONFIG_GVP11_SCSI=y | 562 | CONFIG_GVP11_SCSI=y |
557 | CONFIG_SCSI_A4000T=y | 563 | CONFIG_SCSI_A4000T=y |
558 | CONFIG_SCSI_ZORRO7XX=y | 564 | CONFIG_SCSI_ZORRO7XX=y |
565 | # CONFIG_SCSI_DH is not set | ||
559 | CONFIG_MD=y | 566 | CONFIG_MD=y |
560 | CONFIG_BLK_DEV_MD=m | 567 | CONFIG_BLK_DEV_MD=m |
561 | CONFIG_MD_LINEAR=m | 568 | CONFIG_MD_LINEAR=m |
@@ -564,7 +571,7 @@ CONFIG_MD_RAID1=m | |||
564 | # CONFIG_MD_RAID10 is not set | 571 | # CONFIG_MD_RAID10 is not set |
565 | CONFIG_MD_RAID456=m | 572 | CONFIG_MD_RAID456=m |
566 | CONFIG_MD_RAID5_RESHAPE=y | 573 | CONFIG_MD_RAID5_RESHAPE=y |
567 | CONFIG_MD_MULTIPATH=m | 574 | # CONFIG_MD_MULTIPATH is not set |
568 | # CONFIG_MD_FAULTY is not set | 575 | # CONFIG_MD_FAULTY is not set |
569 | CONFIG_BLK_DEV_DM=m | 576 | CONFIG_BLK_DEV_DM=m |
570 | # CONFIG_DM_DEBUG is not set | 577 | # CONFIG_DM_DEBUG is not set |
@@ -573,13 +580,9 @@ CONFIG_DM_SNAPSHOT=m | |||
573 | CONFIG_DM_MIRROR=m | 580 | CONFIG_DM_MIRROR=m |
574 | CONFIG_DM_ZERO=m | 581 | CONFIG_DM_ZERO=m |
575 | CONFIG_DM_MULTIPATH=m | 582 | CONFIG_DM_MULTIPATH=m |
576 | CONFIG_DM_MULTIPATH_EMC=m | ||
577 | CONFIG_DM_MULTIPATH_RDAC=m | ||
578 | CONFIG_DM_MULTIPATH_HP=m | ||
579 | # CONFIG_DM_DELAY is not set | 583 | # CONFIG_DM_DELAY is not set |
580 | CONFIG_DM_UEVENT=y | 584 | CONFIG_DM_UEVENT=y |
581 | CONFIG_NETDEVICES=y | 585 | CONFIG_NETDEVICES=y |
582 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
583 | CONFIG_DUMMY=m | 586 | CONFIG_DUMMY=m |
584 | # CONFIG_BONDING is not set | 587 | # CONFIG_BONDING is not set |
585 | CONFIG_MACVLAN=m | 588 | CONFIG_MACVLAN=m |
@@ -722,6 +725,7 @@ CONFIG_INPUT_M68K_BEEP=m | |||
722 | # Character devices | 725 | # Character devices |
723 | # | 726 | # |
724 | CONFIG_VT=y | 727 | CONFIG_VT=y |
728 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
725 | CONFIG_VT_CONSOLE=y | 729 | CONFIG_VT_CONSOLE=y |
726 | CONFIG_HW_CONSOLE=y | 730 | CONFIG_HW_CONSOLE=y |
727 | CONFIG_VT_HW_CONSOLE_BINDING=y | 731 | CONFIG_VT_HW_CONSOLE_BINDING=y |
@@ -757,6 +761,7 @@ CONFIG_GEN_RTC_X=y | |||
757 | # CONFIG_POWER_SUPPLY is not set | 761 | # CONFIG_POWER_SUPPLY is not set |
758 | # CONFIG_HWMON is not set | 762 | # CONFIG_HWMON is not set |
759 | # CONFIG_THERMAL is not set | 763 | # CONFIG_THERMAL is not set |
764 | # CONFIG_THERMAL_HWMON is not set | ||
760 | # CONFIG_WATCHDOG is not set | 765 | # CONFIG_WATCHDOG is not set |
761 | 766 | ||
762 | # | 767 | # |
@@ -768,8 +773,10 @@ CONFIG_SSB_POSSIBLE=y | |||
768 | # | 773 | # |
769 | # Multifunction device drivers | 774 | # Multifunction device drivers |
770 | # | 775 | # |
776 | # CONFIG_MFD_CORE is not set | ||
771 | # CONFIG_MFD_SM501 is not set | 777 | # CONFIG_MFD_SM501 is not set |
772 | # CONFIG_HTC_PASIC3 is not set | 778 | # CONFIG_HTC_PASIC3 is not set |
779 | # CONFIG_MFD_TMIO is not set | ||
773 | 780 | ||
774 | # | 781 | # |
775 | # Multimedia devices | 782 | # Multimedia devices |
@@ -844,10 +851,6 @@ CONFIG_LOGO=y | |||
844 | CONFIG_LOGO_LINUX_MONO=y | 851 | CONFIG_LOGO_LINUX_MONO=y |
845 | CONFIG_LOGO_LINUX_VGA16=y | 852 | CONFIG_LOGO_LINUX_VGA16=y |
846 | CONFIG_LOGO_LINUX_CLUT224=y | 853 | CONFIG_LOGO_LINUX_CLUT224=y |
847 | |||
848 | # | ||
849 | # Sound | ||
850 | # | ||
851 | CONFIG_SOUND=m | 854 | CONFIG_SOUND=m |
852 | CONFIG_DMASOUND_PAULA=m | 855 | CONFIG_DMASOUND_PAULA=m |
853 | CONFIG_DMASOUND=m | 856 | CONFIG_DMASOUND=m |
@@ -861,6 +864,7 @@ CONFIG_HIDRAW=y | |||
861 | # CONFIG_NEW_LEDS is not set | 864 | # CONFIG_NEW_LEDS is not set |
862 | # CONFIG_ACCESSIBILITY is not set | 865 | # CONFIG_ACCESSIBILITY is not set |
863 | # CONFIG_RTC_CLASS is not set | 866 | # CONFIG_RTC_CLASS is not set |
867 | # CONFIG_DMADEVICES is not set | ||
864 | # CONFIG_AUXDISPLAY is not set | 868 | # CONFIG_AUXDISPLAY is not set |
865 | # CONFIG_UIO is not set | 869 | # CONFIG_UIO is not set |
866 | 870 | ||
@@ -899,6 +903,7 @@ CONFIG_XFS_FS=m | |||
899 | CONFIG_OCFS2_FS=m | 903 | CONFIG_OCFS2_FS=m |
900 | CONFIG_OCFS2_FS_O2CB=m | 904 | CONFIG_OCFS2_FS_O2CB=m |
901 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m | 905 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m |
906 | # CONFIG_OCFS2_FS_STATS is not set | ||
902 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 907 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
903 | # CONFIG_OCFS2_DEBUG_FS is not set | 908 | # CONFIG_OCFS2_DEBUG_FS is not set |
904 | CONFIG_DNOTIFY=y | 909 | CONFIG_DNOTIFY=y |
@@ -958,6 +963,7 @@ CONFIG_HFSPLUS_FS=m | |||
958 | CONFIG_CRAMFS=m | 963 | CONFIG_CRAMFS=m |
959 | # CONFIG_VXFS_FS is not set | 964 | # CONFIG_VXFS_FS is not set |
960 | CONFIG_MINIX_FS=y | 965 | CONFIG_MINIX_FS=y |
966 | # CONFIG_OMFS_FS is not set | ||
961 | CONFIG_HPFS_FS=m | 967 | CONFIG_HPFS_FS=m |
962 | # CONFIG_QNX4FS_FS is not set | 968 | # CONFIG_QNX4FS_FS is not set |
963 | # CONFIG_ROMFS_FS is not set | 969 | # CONFIG_ROMFS_FS is not set |
@@ -980,7 +986,6 @@ CONFIG_EXPORTFS=m | |||
980 | CONFIG_NFS_COMMON=y | 986 | CONFIG_NFS_COMMON=y |
981 | CONFIG_SUNRPC=m | 987 | CONFIG_SUNRPC=m |
982 | CONFIG_SUNRPC_GSS=m | 988 | CONFIG_SUNRPC_GSS=m |
983 | CONFIG_SUNRPC_BIND34=y | ||
984 | CONFIG_RPCSEC_GSS_KRB5=m | 989 | CONFIG_RPCSEC_GSS_KRB5=m |
985 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 990 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
986 | CONFIG_SMB_FS=m | 991 | CONFIG_SMB_FS=m |
@@ -989,7 +994,6 @@ CONFIG_SMB_NLS_REMOTE="cp437" | |||
989 | # CONFIG_CIFS is not set | 994 | # CONFIG_CIFS is not set |
990 | # CONFIG_NCP_FS is not set | 995 | # CONFIG_NCP_FS is not set |
991 | CONFIG_CODA_FS=m | 996 | CONFIG_CODA_FS=m |
992 | # CONFIG_CODA_FS_OLD_API is not set | ||
993 | # CONFIG_AFS_FS is not set | 997 | # CONFIG_AFS_FS is not set |
994 | 998 | ||
995 | # | 999 | # |
@@ -1054,6 +1058,8 @@ CONFIG_MAGIC_SYSRQ=y | |||
1054 | # CONFIG_HEADERS_CHECK is not set | 1058 | # CONFIG_HEADERS_CHECK is not set |
1055 | # CONFIG_DEBUG_KERNEL is not set | 1059 | # CONFIG_DEBUG_KERNEL is not set |
1056 | CONFIG_DEBUG_BUGVERBOSE=y | 1060 | CONFIG_DEBUG_BUGVERBOSE=y |
1061 | CONFIG_DEBUG_MEMORY_INIT=y | ||
1062 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
1057 | # CONFIG_SAMPLES is not set | 1063 | # CONFIG_SAMPLES is not set |
1058 | 1064 | ||
1059 | # | 1065 | # |
@@ -1113,6 +1119,10 @@ CONFIG_CRYPTO_CRC32C=m | |||
1113 | CONFIG_CRYPTO_MD4=m | 1119 | CONFIG_CRYPTO_MD4=m |
1114 | CONFIG_CRYPTO_MD5=m | 1120 | CONFIG_CRYPTO_MD5=m |
1115 | CONFIG_CRYPTO_MICHAEL_MIC=m | 1121 | CONFIG_CRYPTO_MICHAEL_MIC=m |
1122 | CONFIG_CRYPTO_RMD128=m | ||
1123 | CONFIG_CRYPTO_RMD160=m | ||
1124 | CONFIG_CRYPTO_RMD256=m | ||
1125 | CONFIG_CRYPTO_RMD320=m | ||
1116 | CONFIG_CRYPTO_SHA1=m | 1126 | CONFIG_CRYPTO_SHA1=m |
1117 | CONFIG_CRYPTO_SHA256=m | 1127 | CONFIG_CRYPTO_SHA256=m |
1118 | CONFIG_CRYPTO_SHA512=m | 1128 | CONFIG_CRYPTO_SHA512=m |
@@ -1154,6 +1164,7 @@ CONFIG_BITREVERSE=y | |||
1154 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | 1164 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set |
1155 | CONFIG_CRC_CCITT=m | 1165 | CONFIG_CRC_CCITT=m |
1156 | CONFIG_CRC16=m | 1166 | CONFIG_CRC16=m |
1167 | CONFIG_CRC_T10DIF=y | ||
1157 | CONFIG_CRC_ITU_T=m | 1168 | CONFIG_CRC_ITU_T=m |
1158 | CONFIG_CRC32=y | 1169 | CONFIG_CRC32=y |
1159 | # CONFIG_CRC7 is not set | 1170 | # CONFIG_CRC7 is not set |
diff --git a/arch/m68k/configs/apollo_defconfig b/arch/m68k/configs/apollo_defconfig index e2d511e2a1d1..c41b854c0284 100644 --- a/arch/m68k/configs/apollo_defconfig +++ b/arch/m68k/configs/apollo_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.26-rc4 | 3 | # Linux kernel version: 2.6.27-rc6 |
4 | # Wed May 28 22:47:35 2008 | 4 | # Wed Sep 10 09:02:01 2008 |
5 | # | 5 | # |
6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -52,7 +52,6 @@ CONFIG_SYSCTL=y | |||
52 | # CONFIG_EMBEDDED is not set | 52 | # CONFIG_EMBEDDED is not set |
53 | CONFIG_UID16=y | 53 | CONFIG_UID16=y |
54 | CONFIG_SYSCTL_SYSCALL=y | 54 | CONFIG_SYSCTL_SYSCALL=y |
55 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
56 | CONFIG_KALLSYMS=y | 55 | CONFIG_KALLSYMS=y |
57 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 56 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
58 | CONFIG_HOTPLUG=y | 57 | CONFIG_HOTPLUG=y |
@@ -75,10 +74,16 @@ CONFIG_SLAB=y | |||
75 | # CONFIG_PROFILING is not set | 74 | # CONFIG_PROFILING is not set |
76 | # CONFIG_MARKERS is not set | 75 | # CONFIG_MARKERS is not set |
77 | # CONFIG_HAVE_OPROFILE is not set | 76 | # CONFIG_HAVE_OPROFILE is not set |
77 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
78 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
78 | # CONFIG_HAVE_KPROBES is not set | 79 | # CONFIG_HAVE_KPROBES is not set |
79 | # CONFIG_HAVE_KRETPROBES is not set | 80 | # CONFIG_HAVE_KRETPROBES is not set |
81 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
80 | # CONFIG_HAVE_DMA_ATTRS is not set | 82 | # CONFIG_HAVE_DMA_ATTRS is not set |
83 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
84 | # CONFIG_HAVE_CLK is not set | ||
81 | CONFIG_PROC_PAGE_MONITOR=y | 85 | CONFIG_PROC_PAGE_MONITOR=y |
86 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||
82 | CONFIG_SLABINFO=y | 87 | CONFIG_SLABINFO=y |
83 | CONFIG_RT_MUTEXES=y | 88 | CONFIG_RT_MUTEXES=y |
84 | # CONFIG_TINY_SHMEM is not set | 89 | # CONFIG_TINY_SHMEM is not set |
@@ -95,6 +100,7 @@ CONFIG_BLOCK=y | |||
95 | # CONFIG_BLK_DEV_IO_TRACE is not set | 100 | # CONFIG_BLK_DEV_IO_TRACE is not set |
96 | # CONFIG_LSF is not set | 101 | # CONFIG_LSF is not set |
97 | CONFIG_BLK_DEV_BSG=y | 102 | CONFIG_BLK_DEV_BSG=y |
103 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
98 | 104 | ||
99 | # | 105 | # |
100 | # IO Schedulers | 106 | # IO Schedulers |
@@ -161,10 +167,6 @@ CONFIG_HEARTBEAT=y | |||
161 | CONFIG_PROC_HARDWARE=y | 167 | CONFIG_PROC_HARDWARE=y |
162 | CONFIG_ZONE_DMA=y | 168 | CONFIG_ZONE_DMA=y |
163 | # CONFIG_ARCH_SUPPORTS_MSI is not set | 169 | # CONFIG_ARCH_SUPPORTS_MSI is not set |
164 | |||
165 | # | ||
166 | # Networking | ||
167 | # | ||
168 | CONFIG_NET=y | 170 | CONFIG_NET=y |
169 | 171 | ||
170 | # | 172 | # |
@@ -178,6 +180,7 @@ CONFIG_XFRM=y | |||
178 | # CONFIG_XFRM_SUB_POLICY is not set | 180 | # CONFIG_XFRM_SUB_POLICY is not set |
179 | CONFIG_XFRM_MIGRATE=y | 181 | CONFIG_XFRM_MIGRATE=y |
180 | # CONFIG_XFRM_STATISTICS is not set | 182 | # CONFIG_XFRM_STATISTICS is not set |
183 | CONFIG_XFRM_IPCOMP=m | ||
181 | CONFIG_NET_KEY=y | 184 | CONFIG_NET_KEY=y |
182 | CONFIG_NET_KEY_MIGRATE=y | 185 | CONFIG_NET_KEY_MIGRATE=y |
183 | CONFIG_INET=y | 186 | CONFIG_INET=y |
@@ -411,6 +414,7 @@ CONFIG_NET_CLS_ROUTE=y | |||
411 | # | 414 | # |
412 | # CONFIG_CFG80211 is not set | 415 | # CONFIG_CFG80211 is not set |
413 | CONFIG_WIRELESS_EXT=y | 416 | CONFIG_WIRELESS_EXT=y |
417 | # CONFIG_WIRELESS_EXT_SYSFS is not set | ||
414 | # CONFIG_MAC80211 is not set | 418 | # CONFIG_MAC80211 is not set |
415 | CONFIG_IEEE80211=m | 419 | CONFIG_IEEE80211=m |
416 | # CONFIG_IEEE80211_DEBUG is not set | 420 | # CONFIG_IEEE80211_DEBUG is not set |
@@ -430,7 +434,9 @@ CONFIG_IEEE80211_CRYPT_TKIP=m | |||
430 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 434 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
431 | CONFIG_STANDALONE=y | 435 | CONFIG_STANDALONE=y |
432 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 436 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
433 | CONFIG_FW_LOADER=m | 437 | CONFIG_FW_LOADER=y |
438 | # CONFIG_FIRMWARE_IN_KERNEL is not set | ||
439 | CONFIG_EXTRA_FIRMWARE="" | ||
434 | # CONFIG_SYS_HYPERVISOR is not set | 440 | # CONFIG_SYS_HYPERVISOR is not set |
435 | CONFIG_CONNECTOR=m | 441 | CONFIG_CONNECTOR=m |
436 | # CONFIG_MTD is not set | 442 | # CONFIG_MTD is not set |
@@ -448,6 +454,7 @@ CONFIG_CDROM_PKTCDVD=m | |||
448 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 | 454 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 |
449 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set | 455 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set |
450 | CONFIG_ATA_OVER_ETH=m | 456 | CONFIG_ATA_OVER_ETH=m |
457 | # CONFIG_BLK_DEV_HD is not set | ||
451 | CONFIG_MISC_DEVICES=y | 458 | CONFIG_MISC_DEVICES=y |
452 | # CONFIG_EEPROM_93CX6 is not set | 459 | # CONFIG_EEPROM_93CX6 is not set |
453 | # CONFIG_ENCLOSURE_SERVICES is not set | 460 | # CONFIG_ENCLOSURE_SERVICES is not set |
@@ -499,6 +506,7 @@ CONFIG_SCSI_SRP_TGT_ATTRS=y | |||
499 | CONFIG_SCSI_LOWLEVEL=y | 506 | CONFIG_SCSI_LOWLEVEL=y |
500 | CONFIG_ISCSI_TCP=m | 507 | CONFIG_ISCSI_TCP=m |
501 | # CONFIG_SCSI_DEBUG is not set | 508 | # CONFIG_SCSI_DEBUG is not set |
509 | # CONFIG_SCSI_DH is not set | ||
502 | CONFIG_MD=y | 510 | CONFIG_MD=y |
503 | CONFIG_BLK_DEV_MD=m | 511 | CONFIG_BLK_DEV_MD=m |
504 | CONFIG_MD_LINEAR=m | 512 | CONFIG_MD_LINEAR=m |
@@ -507,7 +515,7 @@ CONFIG_MD_RAID1=m | |||
507 | # CONFIG_MD_RAID10 is not set | 515 | # CONFIG_MD_RAID10 is not set |
508 | CONFIG_MD_RAID456=m | 516 | CONFIG_MD_RAID456=m |
509 | CONFIG_MD_RAID5_RESHAPE=y | 517 | CONFIG_MD_RAID5_RESHAPE=y |
510 | CONFIG_MD_MULTIPATH=m | 518 | # CONFIG_MD_MULTIPATH is not set |
511 | # CONFIG_MD_FAULTY is not set | 519 | # CONFIG_MD_FAULTY is not set |
512 | CONFIG_BLK_DEV_DM=m | 520 | CONFIG_BLK_DEV_DM=m |
513 | # CONFIG_DM_DEBUG is not set | 521 | # CONFIG_DM_DEBUG is not set |
@@ -516,13 +524,9 @@ CONFIG_DM_SNAPSHOT=m | |||
516 | CONFIG_DM_MIRROR=m | 524 | CONFIG_DM_MIRROR=m |
517 | CONFIG_DM_ZERO=m | 525 | CONFIG_DM_ZERO=m |
518 | CONFIG_DM_MULTIPATH=m | 526 | CONFIG_DM_MULTIPATH=m |
519 | CONFIG_DM_MULTIPATH_EMC=m | ||
520 | CONFIG_DM_MULTIPATH_RDAC=m | ||
521 | CONFIG_DM_MULTIPATH_HP=m | ||
522 | # CONFIG_DM_DELAY is not set | 527 | # CONFIG_DM_DELAY is not set |
523 | CONFIG_DM_UEVENT=y | 528 | CONFIG_DM_UEVENT=y |
524 | CONFIG_NETDEVICES=y | 529 | CONFIG_NETDEVICES=y |
525 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
526 | CONFIG_DUMMY=m | 530 | CONFIG_DUMMY=m |
527 | # CONFIG_BONDING is not set | 531 | # CONFIG_BONDING is not set |
528 | CONFIG_MACVLAN=m | 532 | CONFIG_MACVLAN=m |
@@ -532,7 +536,6 @@ CONFIG_VETH=m | |||
532 | # CONFIG_PHYLIB is not set | 536 | # CONFIG_PHYLIB is not set |
533 | CONFIG_NET_ETHERNET=y | 537 | CONFIG_NET_ETHERNET=y |
534 | # CONFIG_MII is not set | 538 | # CONFIG_MII is not set |
535 | CONFIG_APOLLO_ELPLUS=y | ||
536 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | 539 | # CONFIG_IBM_NEW_EMAC_ZMII is not set |
537 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | 540 | # CONFIG_IBM_NEW_EMAC_RGMII is not set |
538 | # CONFIG_IBM_NEW_EMAC_TAH is not set | 541 | # CONFIG_IBM_NEW_EMAC_TAH is not set |
@@ -627,6 +630,7 @@ CONFIG_SERIO_LIBPS2=m | |||
627 | # Character devices | 630 | # Character devices |
628 | # | 631 | # |
629 | CONFIG_VT=y | 632 | CONFIG_VT=y |
633 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
630 | CONFIG_VT_CONSOLE=y | 634 | CONFIG_VT_CONSOLE=y |
631 | CONFIG_HW_CONSOLE=y | 635 | CONFIG_HW_CONSOLE=y |
632 | CONFIG_VT_HW_CONSOLE_BINDING=y | 636 | CONFIG_VT_HW_CONSOLE_BINDING=y |
@@ -657,6 +661,7 @@ CONFIG_GEN_RTC_X=y | |||
657 | # CONFIG_POWER_SUPPLY is not set | 661 | # CONFIG_POWER_SUPPLY is not set |
658 | # CONFIG_HWMON is not set | 662 | # CONFIG_HWMON is not set |
659 | # CONFIG_THERMAL is not set | 663 | # CONFIG_THERMAL is not set |
664 | # CONFIG_THERMAL_HWMON is not set | ||
660 | # CONFIG_WATCHDOG is not set | 665 | # CONFIG_WATCHDOG is not set |
661 | 666 | ||
662 | # | 667 | # |
@@ -668,8 +673,10 @@ CONFIG_SSB_POSSIBLE=y | |||
668 | # | 673 | # |
669 | # Multifunction device drivers | 674 | # Multifunction device drivers |
670 | # | 675 | # |
676 | # CONFIG_MFD_CORE is not set | ||
671 | # CONFIG_MFD_SM501 is not set | 677 | # CONFIG_MFD_SM501 is not set |
672 | # CONFIG_HTC_PASIC3 is not set | 678 | # CONFIG_HTC_PASIC3 is not set |
679 | # CONFIG_MFD_TMIO is not set | ||
673 | 680 | ||
674 | # | 681 | # |
675 | # Multimedia devices | 682 | # Multimedia devices |
@@ -738,10 +745,6 @@ CONFIG_LOGO=y | |||
738 | CONFIG_LOGO_LINUX_MONO=y | 745 | CONFIG_LOGO_LINUX_MONO=y |
739 | # CONFIG_LOGO_LINUX_VGA16 is not set | 746 | # CONFIG_LOGO_LINUX_VGA16 is not set |
740 | # CONFIG_LOGO_LINUX_CLUT224 is not set | 747 | # CONFIG_LOGO_LINUX_CLUT224 is not set |
741 | |||
742 | # | ||
743 | # Sound | ||
744 | # | ||
745 | # CONFIG_SOUND is not set | 748 | # CONFIG_SOUND is not set |
746 | CONFIG_HID_SUPPORT=y | 749 | CONFIG_HID_SUPPORT=y |
747 | CONFIG_HID=m | 750 | CONFIG_HID=m |
@@ -753,6 +756,7 @@ CONFIG_HIDRAW=y | |||
753 | # CONFIG_NEW_LEDS is not set | 756 | # CONFIG_NEW_LEDS is not set |
754 | # CONFIG_ACCESSIBILITY is not set | 757 | # CONFIG_ACCESSIBILITY is not set |
755 | # CONFIG_RTC_CLASS is not set | 758 | # CONFIG_RTC_CLASS is not set |
759 | # CONFIG_DMADEVICES is not set | ||
756 | # CONFIG_UIO is not set | 760 | # CONFIG_UIO is not set |
757 | 761 | ||
758 | # | 762 | # |
@@ -789,6 +793,7 @@ CONFIG_XFS_FS=m | |||
789 | CONFIG_OCFS2_FS=m | 793 | CONFIG_OCFS2_FS=m |
790 | CONFIG_OCFS2_FS_O2CB=m | 794 | CONFIG_OCFS2_FS_O2CB=m |
791 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m | 795 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m |
796 | # CONFIG_OCFS2_FS_STATS is not set | ||
792 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 797 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
793 | # CONFIG_OCFS2_DEBUG_FS is not set | 798 | # CONFIG_OCFS2_DEBUG_FS is not set |
794 | CONFIG_DNOTIFY=y | 799 | CONFIG_DNOTIFY=y |
@@ -848,6 +853,7 @@ CONFIG_HFSPLUS_FS=m | |||
848 | CONFIG_CRAMFS=m | 853 | CONFIG_CRAMFS=m |
849 | # CONFIG_VXFS_FS is not set | 854 | # CONFIG_VXFS_FS is not set |
850 | CONFIG_MINIX_FS=y | 855 | CONFIG_MINIX_FS=y |
856 | # CONFIG_OMFS_FS is not set | ||
851 | CONFIG_HPFS_FS=m | 857 | CONFIG_HPFS_FS=m |
852 | # CONFIG_QNX4FS_FS is not set | 858 | # CONFIG_QNX4FS_FS is not set |
853 | # CONFIG_ROMFS_FS is not set | 859 | # CONFIG_ROMFS_FS is not set |
@@ -860,18 +866,17 @@ CONFIG_NFS_FS=y | |||
860 | CONFIG_NFS_V3=y | 866 | CONFIG_NFS_V3=y |
861 | # CONFIG_NFS_V3_ACL is not set | 867 | # CONFIG_NFS_V3_ACL is not set |
862 | CONFIG_NFS_V4=y | 868 | CONFIG_NFS_V4=y |
869 | CONFIG_ROOT_NFS=y | ||
863 | CONFIG_NFSD=m | 870 | CONFIG_NFSD=m |
864 | CONFIG_NFSD_V3=y | 871 | CONFIG_NFSD_V3=y |
865 | # CONFIG_NFSD_V3_ACL is not set | 872 | # CONFIG_NFSD_V3_ACL is not set |
866 | # CONFIG_NFSD_V4 is not set | 873 | # CONFIG_NFSD_V4 is not set |
867 | CONFIG_ROOT_NFS=y | ||
868 | CONFIG_LOCKD=y | 874 | CONFIG_LOCKD=y |
869 | CONFIG_LOCKD_V4=y | 875 | CONFIG_LOCKD_V4=y |
870 | CONFIG_EXPORTFS=m | 876 | CONFIG_EXPORTFS=m |
871 | CONFIG_NFS_COMMON=y | 877 | CONFIG_NFS_COMMON=y |
872 | CONFIG_SUNRPC=y | 878 | CONFIG_SUNRPC=y |
873 | CONFIG_SUNRPC_GSS=y | 879 | CONFIG_SUNRPC_GSS=y |
874 | CONFIG_SUNRPC_BIND34=y | ||
875 | CONFIG_RPCSEC_GSS_KRB5=y | 880 | CONFIG_RPCSEC_GSS_KRB5=y |
876 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 881 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
877 | CONFIG_SMB_FS=m | 882 | CONFIG_SMB_FS=m |
@@ -880,7 +885,6 @@ CONFIG_SMB_NLS_REMOTE="cp437" | |||
880 | # CONFIG_CIFS is not set | 885 | # CONFIG_CIFS is not set |
881 | # CONFIG_NCP_FS is not set | 886 | # CONFIG_NCP_FS is not set |
882 | CONFIG_CODA_FS=m | 887 | CONFIG_CODA_FS=m |
883 | # CONFIG_CODA_FS_OLD_API is not set | ||
884 | # CONFIG_AFS_FS is not set | 888 | # CONFIG_AFS_FS is not set |
885 | 889 | ||
886 | # | 890 | # |
@@ -944,6 +948,8 @@ CONFIG_MAGIC_SYSRQ=y | |||
944 | # CONFIG_HEADERS_CHECK is not set | 948 | # CONFIG_HEADERS_CHECK is not set |
945 | # CONFIG_DEBUG_KERNEL is not set | 949 | # CONFIG_DEBUG_KERNEL is not set |
946 | CONFIG_DEBUG_BUGVERBOSE=y | 950 | CONFIG_DEBUG_BUGVERBOSE=y |
951 | CONFIG_DEBUG_MEMORY_INIT=y | ||
952 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
947 | # CONFIG_SAMPLES is not set | 953 | # CONFIG_SAMPLES is not set |
948 | 954 | ||
949 | # | 955 | # |
@@ -1003,6 +1009,10 @@ CONFIG_CRYPTO_CRC32C=m | |||
1003 | CONFIG_CRYPTO_MD4=m | 1009 | CONFIG_CRYPTO_MD4=m |
1004 | CONFIG_CRYPTO_MD5=y | 1010 | CONFIG_CRYPTO_MD5=y |
1005 | CONFIG_CRYPTO_MICHAEL_MIC=m | 1011 | CONFIG_CRYPTO_MICHAEL_MIC=m |
1012 | CONFIG_CRYPTO_RMD128=m | ||
1013 | CONFIG_CRYPTO_RMD160=m | ||
1014 | CONFIG_CRYPTO_RMD256=m | ||
1015 | CONFIG_CRYPTO_RMD320=m | ||
1006 | CONFIG_CRYPTO_SHA1=m | 1016 | CONFIG_CRYPTO_SHA1=m |
1007 | CONFIG_CRYPTO_SHA256=m | 1017 | CONFIG_CRYPTO_SHA256=m |
1008 | CONFIG_CRYPTO_SHA512=m | 1018 | CONFIG_CRYPTO_SHA512=m |
@@ -1044,6 +1054,7 @@ CONFIG_BITREVERSE=y | |||
1044 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | 1054 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set |
1045 | CONFIG_CRC_CCITT=m | 1055 | CONFIG_CRC_CCITT=m |
1046 | CONFIG_CRC16=m | 1056 | CONFIG_CRC16=m |
1057 | CONFIG_CRC_T10DIF=y | ||
1047 | CONFIG_CRC_ITU_T=m | 1058 | CONFIG_CRC_ITU_T=m |
1048 | CONFIG_CRC32=y | 1059 | CONFIG_CRC32=y |
1049 | # CONFIG_CRC7 is not set | 1060 | # CONFIG_CRC7 is not set |
diff --git a/arch/m68k/configs/atari_defconfig b/arch/m68k/configs/atari_defconfig index 6e20d656adaf..654c5acb9e86 100644 --- a/arch/m68k/configs/atari_defconfig +++ b/arch/m68k/configs/atari_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.26-rc4 | 3 | # Linux kernel version: 2.6.27-rc6 |
4 | # Wed May 28 22:47:35 2008 | 4 | # Wed Sep 10 09:02:02 2008 |
5 | # | 5 | # |
6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -52,7 +52,6 @@ CONFIG_SYSCTL=y | |||
52 | # CONFIG_EMBEDDED is not set | 52 | # CONFIG_EMBEDDED is not set |
53 | CONFIG_UID16=y | 53 | CONFIG_UID16=y |
54 | CONFIG_SYSCTL_SYSCALL=y | 54 | CONFIG_SYSCTL_SYSCALL=y |
55 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
56 | CONFIG_KALLSYMS=y | 55 | CONFIG_KALLSYMS=y |
57 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 56 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
58 | CONFIG_HOTPLUG=y | 57 | CONFIG_HOTPLUG=y |
@@ -75,10 +74,16 @@ CONFIG_SLAB=y | |||
75 | # CONFIG_PROFILING is not set | 74 | # CONFIG_PROFILING is not set |
76 | # CONFIG_MARKERS is not set | 75 | # CONFIG_MARKERS is not set |
77 | # CONFIG_HAVE_OPROFILE is not set | 76 | # CONFIG_HAVE_OPROFILE is not set |
77 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
78 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
78 | # CONFIG_HAVE_KPROBES is not set | 79 | # CONFIG_HAVE_KPROBES is not set |
79 | # CONFIG_HAVE_KRETPROBES is not set | 80 | # CONFIG_HAVE_KRETPROBES is not set |
81 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
80 | # CONFIG_HAVE_DMA_ATTRS is not set | 82 | # CONFIG_HAVE_DMA_ATTRS is not set |
83 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
84 | # CONFIG_HAVE_CLK is not set | ||
81 | CONFIG_PROC_PAGE_MONITOR=y | 85 | CONFIG_PROC_PAGE_MONITOR=y |
86 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||
82 | CONFIG_SLABINFO=y | 87 | CONFIG_SLABINFO=y |
83 | CONFIG_RT_MUTEXES=y | 88 | CONFIG_RT_MUTEXES=y |
84 | # CONFIG_TINY_SHMEM is not set | 89 | # CONFIG_TINY_SHMEM is not set |
@@ -95,6 +100,7 @@ CONFIG_BLOCK=y | |||
95 | # CONFIG_BLK_DEV_IO_TRACE is not set | 100 | # CONFIG_BLK_DEV_IO_TRACE is not set |
96 | # CONFIG_LSF is not set | 101 | # CONFIG_LSF is not set |
97 | CONFIG_BLK_DEV_BSG=y | 102 | CONFIG_BLK_DEV_BSG=y |
103 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
98 | 104 | ||
99 | # | 105 | # |
100 | # IO Schedulers | 106 | # IO Schedulers |
@@ -162,10 +168,6 @@ CONFIG_HEARTBEAT=y | |||
162 | CONFIG_PROC_HARDWARE=y | 168 | CONFIG_PROC_HARDWARE=y |
163 | CONFIG_ZONE_DMA=y | 169 | CONFIG_ZONE_DMA=y |
164 | # CONFIG_ARCH_SUPPORTS_MSI is not set | 170 | # CONFIG_ARCH_SUPPORTS_MSI is not set |
165 | |||
166 | # | ||
167 | # Networking | ||
168 | # | ||
169 | CONFIG_NET=y | 171 | CONFIG_NET=y |
170 | 172 | ||
171 | # | 173 | # |
@@ -179,6 +181,7 @@ CONFIG_XFRM=y | |||
179 | # CONFIG_XFRM_SUB_POLICY is not set | 181 | # CONFIG_XFRM_SUB_POLICY is not set |
180 | CONFIG_XFRM_MIGRATE=y | 182 | CONFIG_XFRM_MIGRATE=y |
181 | # CONFIG_XFRM_STATISTICS is not set | 183 | # CONFIG_XFRM_STATISTICS is not set |
184 | CONFIG_XFRM_IPCOMP=m | ||
182 | CONFIG_NET_KEY=y | 185 | CONFIG_NET_KEY=y |
183 | CONFIG_NET_KEY_MIGRATE=y | 186 | CONFIG_NET_KEY_MIGRATE=y |
184 | CONFIG_INET=y | 187 | CONFIG_INET=y |
@@ -409,6 +412,7 @@ CONFIG_NET_CLS_ROUTE=y | |||
409 | # | 412 | # |
410 | # CONFIG_CFG80211 is not set | 413 | # CONFIG_CFG80211 is not set |
411 | CONFIG_WIRELESS_EXT=y | 414 | CONFIG_WIRELESS_EXT=y |
415 | # CONFIG_WIRELESS_EXT_SYSFS is not set | ||
412 | # CONFIG_MAC80211 is not set | 416 | # CONFIG_MAC80211 is not set |
413 | CONFIG_IEEE80211=m | 417 | CONFIG_IEEE80211=m |
414 | # CONFIG_IEEE80211_DEBUG is not set | 418 | # CONFIG_IEEE80211_DEBUG is not set |
@@ -428,7 +432,9 @@ CONFIG_IEEE80211_CRYPT_TKIP=m | |||
428 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 432 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
429 | CONFIG_STANDALONE=y | 433 | CONFIG_STANDALONE=y |
430 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 434 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
431 | CONFIG_FW_LOADER=m | 435 | CONFIG_FW_LOADER=y |
436 | # CONFIG_FIRMWARE_IN_KERNEL is not set | ||
437 | CONFIG_EXTRA_FIRMWARE="" | ||
432 | # CONFIG_SYS_HYPERVISOR is not set | 438 | # CONFIG_SYS_HYPERVISOR is not set |
433 | CONFIG_CONNECTOR=m | 439 | CONFIG_CONNECTOR=m |
434 | # CONFIG_MTD is not set | 440 | # CONFIG_MTD is not set |
@@ -452,6 +458,7 @@ CONFIG_CDROM_PKTCDVD=m | |||
452 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 | 458 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 |
453 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set | 459 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set |
454 | CONFIG_ATA_OVER_ETH=m | 460 | CONFIG_ATA_OVER_ETH=m |
461 | # CONFIG_BLK_DEV_HD is not set | ||
455 | CONFIG_MISC_DEVICES=y | 462 | CONFIG_MISC_DEVICES=y |
456 | # CONFIG_EEPROM_93CX6 is not set | 463 | # CONFIG_EEPROM_93CX6 is not set |
457 | # CONFIG_ENCLOSURE_SERVICES is not set | 464 | # CONFIG_ENCLOSURE_SERVICES is not set |
@@ -462,6 +469,7 @@ CONFIG_BLK_DEV_IDE=y | |||
462 | # | 469 | # |
463 | # Please see Documentation/ide/ide.txt for help/info on IDE drives | 470 | # Please see Documentation/ide/ide.txt for help/info on IDE drives |
464 | # | 471 | # |
472 | CONFIG_IDE_ATAPI=y | ||
465 | # CONFIG_BLK_DEV_IDE_SATA is not set | 473 | # CONFIG_BLK_DEV_IDE_SATA is not set |
466 | CONFIG_BLK_DEV_IDEDISK=y | 474 | CONFIG_BLK_DEV_IDEDISK=y |
467 | # CONFIG_IDEDISK_MULTI_MODE is not set | 475 | # CONFIG_IDEDISK_MULTI_MODE is not set |
@@ -479,8 +487,6 @@ CONFIG_IDE_PROC_FS=y | |||
479 | # CONFIG_BLK_DEV_PLATFORM is not set | 487 | # CONFIG_BLK_DEV_PLATFORM is not set |
480 | CONFIG_BLK_DEV_FALCON_IDE=y | 488 | CONFIG_BLK_DEV_FALCON_IDE=y |
481 | # CONFIG_BLK_DEV_IDEDMA is not set | 489 | # CONFIG_BLK_DEV_IDEDMA is not set |
482 | # CONFIG_BLK_DEV_HD_ONLY is not set | ||
483 | # CONFIG_BLK_DEV_HD is not set | ||
484 | 490 | ||
485 | # | 491 | # |
486 | # SCSI device support | 492 | # SCSI device support |
@@ -530,6 +536,7 @@ CONFIG_ISCSI_TCP=m | |||
530 | CONFIG_ATARI_SCSI=y | 536 | CONFIG_ATARI_SCSI=y |
531 | # CONFIG_ATARI_SCSI_TOSHIBA_DELAY is not set | 537 | # CONFIG_ATARI_SCSI_TOSHIBA_DELAY is not set |
532 | # CONFIG_ATARI_SCSI_RESET_BOOT is not set | 538 | # CONFIG_ATARI_SCSI_RESET_BOOT is not set |
539 | # CONFIG_SCSI_DH is not set | ||
533 | CONFIG_MD=y | 540 | CONFIG_MD=y |
534 | CONFIG_BLK_DEV_MD=m | 541 | CONFIG_BLK_DEV_MD=m |
535 | CONFIG_MD_LINEAR=m | 542 | CONFIG_MD_LINEAR=m |
@@ -538,7 +545,7 @@ CONFIG_MD_RAID1=m | |||
538 | # CONFIG_MD_RAID10 is not set | 545 | # CONFIG_MD_RAID10 is not set |
539 | CONFIG_MD_RAID456=m | 546 | CONFIG_MD_RAID456=m |
540 | CONFIG_MD_RAID5_RESHAPE=y | 547 | CONFIG_MD_RAID5_RESHAPE=y |
541 | CONFIG_MD_MULTIPATH=m | 548 | # CONFIG_MD_MULTIPATH is not set |
542 | # CONFIG_MD_FAULTY is not set | 549 | # CONFIG_MD_FAULTY is not set |
543 | CONFIG_BLK_DEV_DM=m | 550 | CONFIG_BLK_DEV_DM=m |
544 | # CONFIG_DM_DEBUG is not set | 551 | # CONFIG_DM_DEBUG is not set |
@@ -547,13 +554,9 @@ CONFIG_DM_SNAPSHOT=m | |||
547 | CONFIG_DM_MIRROR=m | 554 | CONFIG_DM_MIRROR=m |
548 | CONFIG_DM_ZERO=m | 555 | CONFIG_DM_ZERO=m |
549 | CONFIG_DM_MULTIPATH=m | 556 | CONFIG_DM_MULTIPATH=m |
550 | CONFIG_DM_MULTIPATH_EMC=m | ||
551 | CONFIG_DM_MULTIPATH_RDAC=m | ||
552 | CONFIG_DM_MULTIPATH_HP=m | ||
553 | # CONFIG_DM_DELAY is not set | 557 | # CONFIG_DM_DELAY is not set |
554 | CONFIG_DM_UEVENT=y | 558 | CONFIG_DM_UEVENT=y |
555 | CONFIG_NETDEVICES=y | 559 | CONFIG_NETDEVICES=y |
556 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
557 | CONFIG_DUMMY=m | 560 | CONFIG_DUMMY=m |
558 | # CONFIG_BONDING is not set | 561 | # CONFIG_BONDING is not set |
559 | CONFIG_MACVLAN=m | 562 | CONFIG_MACVLAN=m |
@@ -666,6 +669,7 @@ CONFIG_SERIO_LIBPS2=y | |||
666 | # Character devices | 669 | # Character devices |
667 | # | 670 | # |
668 | CONFIG_VT=y | 671 | CONFIG_VT=y |
672 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
669 | CONFIG_VT_CONSOLE=y | 673 | CONFIG_VT_CONSOLE=y |
670 | CONFIG_HW_CONSOLE=y | 674 | CONFIG_HW_CONSOLE=y |
671 | CONFIG_VT_HW_CONSOLE_BINDING=y | 675 | CONFIG_VT_HW_CONSOLE_BINDING=y |
@@ -700,6 +704,7 @@ CONFIG_GEN_RTC_X=y | |||
700 | # CONFIG_POWER_SUPPLY is not set | 704 | # CONFIG_POWER_SUPPLY is not set |
701 | # CONFIG_HWMON is not set | 705 | # CONFIG_HWMON is not set |
702 | # CONFIG_THERMAL is not set | 706 | # CONFIG_THERMAL is not set |
707 | # CONFIG_THERMAL_HWMON is not set | ||
703 | # CONFIG_WATCHDOG is not set | 708 | # CONFIG_WATCHDOG is not set |
704 | 709 | ||
705 | # | 710 | # |
@@ -711,8 +716,10 @@ CONFIG_SSB_POSSIBLE=y | |||
711 | # | 716 | # |
712 | # Multifunction device drivers | 717 | # Multifunction device drivers |
713 | # | 718 | # |
719 | # CONFIG_MFD_CORE is not set | ||
714 | # CONFIG_MFD_SM501 is not set | 720 | # CONFIG_MFD_SM501 is not set |
715 | # CONFIG_HTC_PASIC3 is not set | 721 | # CONFIG_HTC_PASIC3 is not set |
722 | # CONFIG_MFD_TMIO is not set | ||
716 | 723 | ||
717 | # | 724 | # |
718 | # Multimedia devices | 725 | # Multimedia devices |
@@ -782,10 +789,6 @@ CONFIG_LOGO=y | |||
782 | CONFIG_LOGO_LINUX_MONO=y | 789 | CONFIG_LOGO_LINUX_MONO=y |
783 | CONFIG_LOGO_LINUX_VGA16=y | 790 | CONFIG_LOGO_LINUX_VGA16=y |
784 | CONFIG_LOGO_LINUX_CLUT224=y | 791 | CONFIG_LOGO_LINUX_CLUT224=y |
785 | |||
786 | # | ||
787 | # Sound | ||
788 | # | ||
789 | CONFIG_SOUND=m | 792 | CONFIG_SOUND=m |
790 | CONFIG_DMASOUND_ATARI=m | 793 | CONFIG_DMASOUND_ATARI=m |
791 | CONFIG_DMASOUND=m | 794 | CONFIG_DMASOUND=m |
@@ -799,6 +802,7 @@ CONFIG_HIDRAW=y | |||
799 | # CONFIG_NEW_LEDS is not set | 802 | # CONFIG_NEW_LEDS is not set |
800 | # CONFIG_ACCESSIBILITY is not set | 803 | # CONFIG_ACCESSIBILITY is not set |
801 | # CONFIG_RTC_CLASS is not set | 804 | # CONFIG_RTC_CLASS is not set |
805 | # CONFIG_DMADEVICES is not set | ||
802 | # CONFIG_AUXDISPLAY is not set | 806 | # CONFIG_AUXDISPLAY is not set |
803 | # CONFIG_UIO is not set | 807 | # CONFIG_UIO is not set |
804 | 808 | ||
@@ -806,11 +810,8 @@ CONFIG_HIDRAW=y | |||
806 | # Character devices | 810 | # Character devices |
807 | # | 811 | # |
808 | CONFIG_ATARI_MFPSER=m | 812 | CONFIG_ATARI_MFPSER=m |
809 | CONFIG_ATARI_SCC=y | ||
810 | CONFIG_ATARI_SCC_DMA=y | ||
811 | CONFIG_ATARI_MIDI=m | 813 | CONFIG_ATARI_MIDI=m |
812 | CONFIG_ATARI_DSP56K=m | 814 | CONFIG_ATARI_DSP56K=m |
813 | # CONFIG_SERIAL_CONSOLE is not set | ||
814 | 815 | ||
815 | # | 816 | # |
816 | # File systems | 817 | # File systems |
@@ -820,8 +821,10 @@ CONFIG_EXT2_FS=y | |||
820 | # CONFIG_EXT2_FS_XIP is not set | 821 | # CONFIG_EXT2_FS_XIP is not set |
821 | CONFIG_EXT3_FS=y | 822 | CONFIG_EXT3_FS=y |
822 | # CONFIG_EXT3_FS_XATTR is not set | 823 | # CONFIG_EXT3_FS_XATTR is not set |
823 | # CONFIG_EXT4DEV_FS is not set | 824 | CONFIG_EXT4DEV_FS=y |
825 | # CONFIG_EXT4DEV_FS_XATTR is not set | ||
824 | CONFIG_JBD=y | 826 | CONFIG_JBD=y |
827 | CONFIG_JBD2=y | ||
825 | CONFIG_REISERFS_FS=m | 828 | CONFIG_REISERFS_FS=m |
826 | # CONFIG_REISERFS_CHECK is not set | 829 | # CONFIG_REISERFS_CHECK is not set |
827 | # CONFIG_REISERFS_PROC_INFO is not set | 830 | # CONFIG_REISERFS_PROC_INFO is not set |
@@ -840,6 +843,7 @@ CONFIG_XFS_FS=m | |||
840 | CONFIG_OCFS2_FS=m | 843 | CONFIG_OCFS2_FS=m |
841 | CONFIG_OCFS2_FS_O2CB=m | 844 | CONFIG_OCFS2_FS_O2CB=m |
842 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m | 845 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m |
846 | # CONFIG_OCFS2_FS_STATS is not set | ||
843 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 847 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
844 | # CONFIG_OCFS2_DEBUG_FS is not set | 848 | # CONFIG_OCFS2_DEBUG_FS is not set |
845 | CONFIG_DNOTIFY=y | 849 | CONFIG_DNOTIFY=y |
@@ -899,6 +903,7 @@ CONFIG_HFSPLUS_FS=m | |||
899 | CONFIG_CRAMFS=m | 903 | CONFIG_CRAMFS=m |
900 | # CONFIG_VXFS_FS is not set | 904 | # CONFIG_VXFS_FS is not set |
901 | CONFIG_MINIX_FS=y | 905 | CONFIG_MINIX_FS=y |
906 | # CONFIG_OMFS_FS is not set | ||
902 | CONFIG_HPFS_FS=m | 907 | CONFIG_HPFS_FS=m |
903 | # CONFIG_QNX4FS_FS is not set | 908 | # CONFIG_QNX4FS_FS is not set |
904 | # CONFIG_ROMFS_FS is not set | 909 | # CONFIG_ROMFS_FS is not set |
@@ -920,7 +925,6 @@ CONFIG_LOCKD_V4=y | |||
920 | CONFIG_EXPORTFS=m | 925 | CONFIG_EXPORTFS=m |
921 | CONFIG_NFS_COMMON=y | 926 | CONFIG_NFS_COMMON=y |
922 | CONFIG_SUNRPC=m | 927 | CONFIG_SUNRPC=m |
923 | CONFIG_SUNRPC_BIND34=y | ||
924 | # CONFIG_RPCSEC_GSS_KRB5 is not set | 928 | # CONFIG_RPCSEC_GSS_KRB5 is not set |
925 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 929 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
926 | CONFIG_SMB_FS=m | 930 | CONFIG_SMB_FS=m |
@@ -929,7 +933,6 @@ CONFIG_SMB_NLS_REMOTE="cp437" | |||
929 | # CONFIG_CIFS is not set | 933 | # CONFIG_CIFS is not set |
930 | # CONFIG_NCP_FS is not set | 934 | # CONFIG_NCP_FS is not set |
931 | CONFIG_CODA_FS=m | 935 | CONFIG_CODA_FS=m |
932 | # CONFIG_CODA_FS_OLD_API is not set | ||
933 | # CONFIG_AFS_FS is not set | 936 | # CONFIG_AFS_FS is not set |
934 | 937 | ||
935 | # | 938 | # |
@@ -994,6 +997,8 @@ CONFIG_MAGIC_SYSRQ=y | |||
994 | # CONFIG_HEADERS_CHECK is not set | 997 | # CONFIG_HEADERS_CHECK is not set |
995 | # CONFIG_DEBUG_KERNEL is not set | 998 | # CONFIG_DEBUG_KERNEL is not set |
996 | CONFIG_DEBUG_BUGVERBOSE=y | 999 | CONFIG_DEBUG_BUGVERBOSE=y |
1000 | CONFIG_DEBUG_MEMORY_INIT=y | ||
1001 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
997 | # CONFIG_SAMPLES is not set | 1002 | # CONFIG_SAMPLES is not set |
998 | 1003 | ||
999 | # | 1004 | # |
@@ -1053,6 +1058,10 @@ CONFIG_CRYPTO_CRC32C=m | |||
1053 | CONFIG_CRYPTO_MD4=m | 1058 | CONFIG_CRYPTO_MD4=m |
1054 | CONFIG_CRYPTO_MD5=m | 1059 | CONFIG_CRYPTO_MD5=m |
1055 | CONFIG_CRYPTO_MICHAEL_MIC=m | 1060 | CONFIG_CRYPTO_MICHAEL_MIC=m |
1061 | CONFIG_CRYPTO_RMD128=m | ||
1062 | CONFIG_CRYPTO_RMD160=m | ||
1063 | CONFIG_CRYPTO_RMD256=m | ||
1064 | CONFIG_CRYPTO_RMD320=m | ||
1056 | CONFIG_CRYPTO_SHA1=m | 1065 | CONFIG_CRYPTO_SHA1=m |
1057 | CONFIG_CRYPTO_SHA256=m | 1066 | CONFIG_CRYPTO_SHA256=m |
1058 | CONFIG_CRYPTO_SHA512=m | 1067 | CONFIG_CRYPTO_SHA512=m |
@@ -1094,6 +1103,7 @@ CONFIG_BITREVERSE=y | |||
1094 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | 1103 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set |
1095 | CONFIG_CRC_CCITT=m | 1104 | CONFIG_CRC_CCITT=m |
1096 | CONFIG_CRC16=y | 1105 | CONFIG_CRC16=y |
1106 | CONFIG_CRC_T10DIF=y | ||
1097 | CONFIG_CRC_ITU_T=m | 1107 | CONFIG_CRC_ITU_T=m |
1098 | CONFIG_CRC32=y | 1108 | CONFIG_CRC32=y |
1099 | # CONFIG_CRC7 is not set | 1109 | # CONFIG_CRC7 is not set |
diff --git a/arch/m68k/configs/bvme6000_defconfig b/arch/m68k/configs/bvme6000_defconfig index a0a9b30bb502..2e44af0fe54a 100644 --- a/arch/m68k/configs/bvme6000_defconfig +++ b/arch/m68k/configs/bvme6000_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.26-rc4 | 3 | # Linux kernel version: 2.6.27-rc6 |
4 | # Wed May 28 22:47:35 2008 | 4 | # Wed Sep 10 09:02:03 2008 |
5 | # | 5 | # |
6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -52,7 +52,6 @@ CONFIG_SYSCTL=y | |||
52 | # CONFIG_EMBEDDED is not set | 52 | # CONFIG_EMBEDDED is not set |
53 | CONFIG_UID16=y | 53 | CONFIG_UID16=y |
54 | CONFIG_SYSCTL_SYSCALL=y | 54 | CONFIG_SYSCTL_SYSCALL=y |
55 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
56 | CONFIG_KALLSYMS=y | 55 | CONFIG_KALLSYMS=y |
57 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 56 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
58 | CONFIG_HOTPLUG=y | 57 | CONFIG_HOTPLUG=y |
@@ -75,10 +74,16 @@ CONFIG_SLAB=y | |||
75 | # CONFIG_PROFILING is not set | 74 | # CONFIG_PROFILING is not set |
76 | # CONFIG_MARKERS is not set | 75 | # CONFIG_MARKERS is not set |
77 | # CONFIG_HAVE_OPROFILE is not set | 76 | # CONFIG_HAVE_OPROFILE is not set |
77 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
78 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
78 | # CONFIG_HAVE_KPROBES is not set | 79 | # CONFIG_HAVE_KPROBES is not set |
79 | # CONFIG_HAVE_KRETPROBES is not set | 80 | # CONFIG_HAVE_KRETPROBES is not set |
81 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
80 | # CONFIG_HAVE_DMA_ATTRS is not set | 82 | # CONFIG_HAVE_DMA_ATTRS is not set |
83 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
84 | # CONFIG_HAVE_CLK is not set | ||
81 | CONFIG_PROC_PAGE_MONITOR=y | 85 | CONFIG_PROC_PAGE_MONITOR=y |
86 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||
82 | CONFIG_SLABINFO=y | 87 | CONFIG_SLABINFO=y |
83 | CONFIG_RT_MUTEXES=y | 88 | CONFIG_RT_MUTEXES=y |
84 | # CONFIG_TINY_SHMEM is not set | 89 | # CONFIG_TINY_SHMEM is not set |
@@ -95,6 +100,7 @@ CONFIG_BLOCK=y | |||
95 | # CONFIG_BLK_DEV_IO_TRACE is not set | 100 | # CONFIG_BLK_DEV_IO_TRACE is not set |
96 | # CONFIG_LSF is not set | 101 | # CONFIG_LSF is not set |
97 | CONFIG_BLK_DEV_BSG=y | 102 | CONFIG_BLK_DEV_BSG=y |
103 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
98 | 104 | ||
99 | # | 105 | # |
100 | # IO Schedulers | 106 | # IO Schedulers |
@@ -163,10 +169,6 @@ CONFIG_BINFMT_MISC=m | |||
163 | CONFIG_PROC_HARDWARE=y | 169 | CONFIG_PROC_HARDWARE=y |
164 | CONFIG_ZONE_DMA=y | 170 | CONFIG_ZONE_DMA=y |
165 | # CONFIG_ARCH_SUPPORTS_MSI is not set | 171 | # CONFIG_ARCH_SUPPORTS_MSI is not set |
166 | |||
167 | # | ||
168 | # Networking | ||
169 | # | ||
170 | CONFIG_NET=y | 172 | CONFIG_NET=y |
171 | 173 | ||
172 | # | 174 | # |
@@ -180,6 +182,7 @@ CONFIG_XFRM=y | |||
180 | # CONFIG_XFRM_SUB_POLICY is not set | 182 | # CONFIG_XFRM_SUB_POLICY is not set |
181 | CONFIG_XFRM_MIGRATE=y | 183 | CONFIG_XFRM_MIGRATE=y |
182 | # CONFIG_XFRM_STATISTICS is not set | 184 | # CONFIG_XFRM_STATISTICS is not set |
185 | CONFIG_XFRM_IPCOMP=m | ||
183 | CONFIG_NET_KEY=y | 186 | CONFIG_NET_KEY=y |
184 | CONFIG_NET_KEY_MIGRATE=y | 187 | CONFIG_NET_KEY_MIGRATE=y |
185 | CONFIG_INET=y | 188 | CONFIG_INET=y |
@@ -413,6 +416,7 @@ CONFIG_NET_CLS_ROUTE=y | |||
413 | # | 416 | # |
414 | # CONFIG_CFG80211 is not set | 417 | # CONFIG_CFG80211 is not set |
415 | CONFIG_WIRELESS_EXT=y | 418 | CONFIG_WIRELESS_EXT=y |
419 | # CONFIG_WIRELESS_EXT_SYSFS is not set | ||
416 | # CONFIG_MAC80211 is not set | 420 | # CONFIG_MAC80211 is not set |
417 | CONFIG_IEEE80211=m | 421 | CONFIG_IEEE80211=m |
418 | # CONFIG_IEEE80211_DEBUG is not set | 422 | # CONFIG_IEEE80211_DEBUG is not set |
@@ -432,7 +436,9 @@ CONFIG_IEEE80211_CRYPT_TKIP=m | |||
432 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 436 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
433 | CONFIG_STANDALONE=y | 437 | CONFIG_STANDALONE=y |
434 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 438 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
435 | CONFIG_FW_LOADER=m | 439 | CONFIG_FW_LOADER=y |
440 | # CONFIG_FIRMWARE_IN_KERNEL is not set | ||
441 | CONFIG_EXTRA_FIRMWARE="" | ||
436 | # CONFIG_SYS_HYPERVISOR is not set | 442 | # CONFIG_SYS_HYPERVISOR is not set |
437 | CONFIG_CONNECTOR=m | 443 | CONFIG_CONNECTOR=m |
438 | # CONFIG_MTD is not set | 444 | # CONFIG_MTD is not set |
@@ -450,6 +456,7 @@ CONFIG_CDROM_PKTCDVD=m | |||
450 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 | 456 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 |
451 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set | 457 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set |
452 | CONFIG_ATA_OVER_ETH=m | 458 | CONFIG_ATA_OVER_ETH=m |
459 | # CONFIG_BLK_DEV_HD is not set | ||
453 | CONFIG_MISC_DEVICES=y | 460 | CONFIG_MISC_DEVICES=y |
454 | # CONFIG_EEPROM_93CX6 is not set | 461 | # CONFIG_EEPROM_93CX6 is not set |
455 | # CONFIG_ENCLOSURE_SERVICES is not set | 462 | # CONFIG_ENCLOSURE_SERVICES is not set |
@@ -503,6 +510,7 @@ CONFIG_ISCSI_TCP=m | |||
503 | CONFIG_53C700_BE_BUS=y | 510 | CONFIG_53C700_BE_BUS=y |
504 | # CONFIG_SCSI_DEBUG is not set | 511 | # CONFIG_SCSI_DEBUG is not set |
505 | CONFIG_BVME6000_SCSI=y | 512 | CONFIG_BVME6000_SCSI=y |
513 | # CONFIG_SCSI_DH is not set | ||
506 | CONFIG_MD=y | 514 | CONFIG_MD=y |
507 | CONFIG_BLK_DEV_MD=m | 515 | CONFIG_BLK_DEV_MD=m |
508 | CONFIG_MD_LINEAR=m | 516 | CONFIG_MD_LINEAR=m |
@@ -511,7 +519,7 @@ CONFIG_MD_RAID1=m | |||
511 | # CONFIG_MD_RAID10 is not set | 519 | # CONFIG_MD_RAID10 is not set |
512 | CONFIG_MD_RAID456=m | 520 | CONFIG_MD_RAID456=m |
513 | CONFIG_MD_RAID5_RESHAPE=y | 521 | CONFIG_MD_RAID5_RESHAPE=y |
514 | CONFIG_MD_MULTIPATH=m | 522 | # CONFIG_MD_MULTIPATH is not set |
515 | # CONFIG_MD_FAULTY is not set | 523 | # CONFIG_MD_FAULTY is not set |
516 | CONFIG_BLK_DEV_DM=m | 524 | CONFIG_BLK_DEV_DM=m |
517 | # CONFIG_DM_DEBUG is not set | 525 | # CONFIG_DM_DEBUG is not set |
@@ -520,13 +528,9 @@ CONFIG_DM_SNAPSHOT=m | |||
520 | CONFIG_DM_MIRROR=m | 528 | CONFIG_DM_MIRROR=m |
521 | CONFIG_DM_ZERO=m | 529 | CONFIG_DM_ZERO=m |
522 | CONFIG_DM_MULTIPATH=m | 530 | CONFIG_DM_MULTIPATH=m |
523 | CONFIG_DM_MULTIPATH_EMC=m | ||
524 | CONFIG_DM_MULTIPATH_RDAC=m | ||
525 | CONFIG_DM_MULTIPATH_HP=m | ||
526 | # CONFIG_DM_DELAY is not set | 531 | # CONFIG_DM_DELAY is not set |
527 | CONFIG_DM_UEVENT=y | 532 | CONFIG_DM_UEVENT=y |
528 | CONFIG_NETDEVICES=y | 533 | CONFIG_NETDEVICES=y |
529 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
530 | CONFIG_DUMMY=m | 534 | CONFIG_DUMMY=m |
531 | # CONFIG_BONDING is not set | 535 | # CONFIG_BONDING is not set |
532 | CONFIG_MACVLAN=m | 536 | CONFIG_MACVLAN=m |
@@ -631,6 +635,7 @@ CONFIG_SERIO_LIBPS2=m | |||
631 | # Character devices | 635 | # Character devices |
632 | # | 636 | # |
633 | CONFIG_VT=y | 637 | CONFIG_VT=y |
638 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
634 | CONFIG_VT_CONSOLE=y | 639 | CONFIG_VT_CONSOLE=y |
635 | CONFIG_HW_CONSOLE=y | 640 | CONFIG_HW_CONSOLE=y |
636 | CONFIG_VT_HW_CONSOLE_BINDING=y | 641 | CONFIG_VT_HW_CONSOLE_BINDING=y |
@@ -661,6 +666,7 @@ CONFIG_GEN_RTC_X=y | |||
661 | # CONFIG_POWER_SUPPLY is not set | 666 | # CONFIG_POWER_SUPPLY is not set |
662 | # CONFIG_HWMON is not set | 667 | # CONFIG_HWMON is not set |
663 | # CONFIG_THERMAL is not set | 668 | # CONFIG_THERMAL is not set |
669 | # CONFIG_THERMAL_HWMON is not set | ||
664 | # CONFIG_WATCHDOG is not set | 670 | # CONFIG_WATCHDOG is not set |
665 | 671 | ||
666 | # | 672 | # |
@@ -672,8 +678,10 @@ CONFIG_SSB_POSSIBLE=y | |||
672 | # | 678 | # |
673 | # Multifunction device drivers | 679 | # Multifunction device drivers |
674 | # | 680 | # |
681 | # CONFIG_MFD_CORE is not set | ||
675 | # CONFIG_MFD_SM501 is not set | 682 | # CONFIG_MFD_SM501 is not set |
676 | # CONFIG_HTC_PASIC3 is not set | 683 | # CONFIG_HTC_PASIC3 is not set |
684 | # CONFIG_MFD_TMIO is not set | ||
677 | 685 | ||
678 | # | 686 | # |
679 | # Multimedia devices | 687 | # Multimedia devices |
@@ -708,10 +716,6 @@ CONFIG_SSB_POSSIBLE=y | |||
708 | # Console display driver support | 716 | # Console display driver support |
709 | # | 717 | # |
710 | CONFIG_DUMMY_CONSOLE=y | 718 | CONFIG_DUMMY_CONSOLE=y |
711 | |||
712 | # | ||
713 | # Sound | ||
714 | # | ||
715 | # CONFIG_SOUND is not set | 719 | # CONFIG_SOUND is not set |
716 | CONFIG_HID_SUPPORT=y | 720 | CONFIG_HID_SUPPORT=y |
717 | CONFIG_HID=m | 721 | CONFIG_HID=m |
@@ -723,6 +727,7 @@ CONFIG_HIDRAW=y | |||
723 | # CONFIG_NEW_LEDS is not set | 727 | # CONFIG_NEW_LEDS is not set |
724 | # CONFIG_ACCESSIBILITY is not set | 728 | # CONFIG_ACCESSIBILITY is not set |
725 | # CONFIG_RTC_CLASS is not set | 729 | # CONFIG_RTC_CLASS is not set |
730 | # CONFIG_DMADEVICES is not set | ||
726 | # CONFIG_UIO is not set | 731 | # CONFIG_UIO is not set |
727 | 732 | ||
728 | # | 733 | # |
@@ -759,6 +764,7 @@ CONFIG_XFS_FS=m | |||
759 | CONFIG_OCFS2_FS=m | 764 | CONFIG_OCFS2_FS=m |
760 | CONFIG_OCFS2_FS_O2CB=m | 765 | CONFIG_OCFS2_FS_O2CB=m |
761 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m | 766 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m |
767 | # CONFIG_OCFS2_FS_STATS is not set | ||
762 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 768 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
763 | # CONFIG_OCFS2_DEBUG_FS is not set | 769 | # CONFIG_OCFS2_DEBUG_FS is not set |
764 | CONFIG_DNOTIFY=y | 770 | CONFIG_DNOTIFY=y |
@@ -818,6 +824,7 @@ CONFIG_HFSPLUS_FS=m | |||
818 | CONFIG_CRAMFS=m | 824 | CONFIG_CRAMFS=m |
819 | # CONFIG_VXFS_FS is not set | 825 | # CONFIG_VXFS_FS is not set |
820 | CONFIG_MINIX_FS=y | 826 | CONFIG_MINIX_FS=y |
827 | # CONFIG_OMFS_FS is not set | ||
821 | CONFIG_HPFS_FS=m | 828 | CONFIG_HPFS_FS=m |
822 | # CONFIG_QNX4FS_FS is not set | 829 | # CONFIG_QNX4FS_FS is not set |
823 | # CONFIG_ROMFS_FS is not set | 830 | # CONFIG_ROMFS_FS is not set |
@@ -830,18 +837,17 @@ CONFIG_NFS_FS=y | |||
830 | CONFIG_NFS_V3=y | 837 | CONFIG_NFS_V3=y |
831 | # CONFIG_NFS_V3_ACL is not set | 838 | # CONFIG_NFS_V3_ACL is not set |
832 | CONFIG_NFS_V4=y | 839 | CONFIG_NFS_V4=y |
840 | CONFIG_ROOT_NFS=y | ||
833 | CONFIG_NFSD=m | 841 | CONFIG_NFSD=m |
834 | CONFIG_NFSD_V3=y | 842 | CONFIG_NFSD_V3=y |
835 | # CONFIG_NFSD_V3_ACL is not set | 843 | # CONFIG_NFSD_V3_ACL is not set |
836 | # CONFIG_NFSD_V4 is not set | 844 | # CONFIG_NFSD_V4 is not set |
837 | CONFIG_ROOT_NFS=y | ||
838 | CONFIG_LOCKD=y | 845 | CONFIG_LOCKD=y |
839 | CONFIG_LOCKD_V4=y | 846 | CONFIG_LOCKD_V4=y |
840 | CONFIG_EXPORTFS=m | 847 | CONFIG_EXPORTFS=m |
841 | CONFIG_NFS_COMMON=y | 848 | CONFIG_NFS_COMMON=y |
842 | CONFIG_SUNRPC=y | 849 | CONFIG_SUNRPC=y |
843 | CONFIG_SUNRPC_GSS=y | 850 | CONFIG_SUNRPC_GSS=y |
844 | CONFIG_SUNRPC_BIND34=y | ||
845 | CONFIG_RPCSEC_GSS_KRB5=y | 851 | CONFIG_RPCSEC_GSS_KRB5=y |
846 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 852 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
847 | CONFIG_SMB_FS=m | 853 | CONFIG_SMB_FS=m |
@@ -850,7 +856,6 @@ CONFIG_SMB_NLS_REMOTE="cp437" | |||
850 | # CONFIG_CIFS is not set | 856 | # CONFIG_CIFS is not set |
851 | # CONFIG_NCP_FS is not set | 857 | # CONFIG_NCP_FS is not set |
852 | CONFIG_CODA_FS=m | 858 | CONFIG_CODA_FS=m |
853 | # CONFIG_CODA_FS_OLD_API is not set | ||
854 | # CONFIG_AFS_FS is not set | 859 | # CONFIG_AFS_FS is not set |
855 | 860 | ||
856 | # | 861 | # |
@@ -915,6 +920,8 @@ CONFIG_MAGIC_SYSRQ=y | |||
915 | # CONFIG_HEADERS_CHECK is not set | 920 | # CONFIG_HEADERS_CHECK is not set |
916 | # CONFIG_DEBUG_KERNEL is not set | 921 | # CONFIG_DEBUG_KERNEL is not set |
917 | CONFIG_DEBUG_BUGVERBOSE=y | 922 | CONFIG_DEBUG_BUGVERBOSE=y |
923 | CONFIG_DEBUG_MEMORY_INIT=y | ||
924 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
918 | # CONFIG_SAMPLES is not set | 925 | # CONFIG_SAMPLES is not set |
919 | 926 | ||
920 | # | 927 | # |
@@ -974,6 +981,10 @@ CONFIG_CRYPTO_CRC32C=m | |||
974 | CONFIG_CRYPTO_MD4=m | 981 | CONFIG_CRYPTO_MD4=m |
975 | CONFIG_CRYPTO_MD5=y | 982 | CONFIG_CRYPTO_MD5=y |
976 | CONFIG_CRYPTO_MICHAEL_MIC=m | 983 | CONFIG_CRYPTO_MICHAEL_MIC=m |
984 | CONFIG_CRYPTO_RMD128=m | ||
985 | CONFIG_CRYPTO_RMD160=m | ||
986 | CONFIG_CRYPTO_RMD256=m | ||
987 | CONFIG_CRYPTO_RMD320=m | ||
977 | CONFIG_CRYPTO_SHA1=m | 988 | CONFIG_CRYPTO_SHA1=m |
978 | CONFIG_CRYPTO_SHA256=m | 989 | CONFIG_CRYPTO_SHA256=m |
979 | CONFIG_CRYPTO_SHA512=m | 990 | CONFIG_CRYPTO_SHA512=m |
@@ -1015,6 +1026,7 @@ CONFIG_BITREVERSE=m | |||
1015 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | 1026 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set |
1016 | CONFIG_CRC_CCITT=m | 1027 | CONFIG_CRC_CCITT=m |
1017 | CONFIG_CRC16=m | 1028 | CONFIG_CRC16=m |
1029 | CONFIG_CRC_T10DIF=y | ||
1018 | CONFIG_CRC_ITU_T=m | 1030 | CONFIG_CRC_ITU_T=m |
1019 | CONFIG_CRC32=m | 1031 | CONFIG_CRC32=m |
1020 | # CONFIG_CRC7 is not set | 1032 | # CONFIG_CRC7 is not set |
diff --git a/arch/m68k/configs/hp300_defconfig b/arch/m68k/configs/hp300_defconfig index 6778041de262..3570fc89b089 100644 --- a/arch/m68k/configs/hp300_defconfig +++ b/arch/m68k/configs/hp300_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.26-rc4 | 3 | # Linux kernel version: 2.6.27-rc6 |
4 | # Wed May 28 22:47:35 2008 | 4 | # Wed Sep 10 09:02:04 2008 |
5 | # | 5 | # |
6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -52,7 +52,6 @@ CONFIG_SYSCTL=y | |||
52 | # CONFIG_EMBEDDED is not set | 52 | # CONFIG_EMBEDDED is not set |
53 | CONFIG_UID16=y | 53 | CONFIG_UID16=y |
54 | CONFIG_SYSCTL_SYSCALL=y | 54 | CONFIG_SYSCTL_SYSCALL=y |
55 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
56 | CONFIG_KALLSYMS=y | 55 | CONFIG_KALLSYMS=y |
57 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 56 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
58 | CONFIG_HOTPLUG=y | 57 | CONFIG_HOTPLUG=y |
@@ -75,10 +74,16 @@ CONFIG_SLAB=y | |||
75 | # CONFIG_PROFILING is not set | 74 | # CONFIG_PROFILING is not set |
76 | # CONFIG_MARKERS is not set | 75 | # CONFIG_MARKERS is not set |
77 | # CONFIG_HAVE_OPROFILE is not set | 76 | # CONFIG_HAVE_OPROFILE is not set |
77 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
78 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
78 | # CONFIG_HAVE_KPROBES is not set | 79 | # CONFIG_HAVE_KPROBES is not set |
79 | # CONFIG_HAVE_KRETPROBES is not set | 80 | # CONFIG_HAVE_KRETPROBES is not set |
81 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
80 | # CONFIG_HAVE_DMA_ATTRS is not set | 82 | # CONFIG_HAVE_DMA_ATTRS is not set |
83 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
84 | # CONFIG_HAVE_CLK is not set | ||
81 | CONFIG_PROC_PAGE_MONITOR=y | 85 | CONFIG_PROC_PAGE_MONITOR=y |
86 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||
82 | CONFIG_SLABINFO=y | 87 | CONFIG_SLABINFO=y |
83 | CONFIG_RT_MUTEXES=y | 88 | CONFIG_RT_MUTEXES=y |
84 | # CONFIG_TINY_SHMEM is not set | 89 | # CONFIG_TINY_SHMEM is not set |
@@ -95,6 +100,7 @@ CONFIG_BLOCK=y | |||
95 | # CONFIG_BLK_DEV_IO_TRACE is not set | 100 | # CONFIG_BLK_DEV_IO_TRACE is not set |
96 | # CONFIG_LSF is not set | 101 | # CONFIG_LSF is not set |
97 | CONFIG_BLK_DEV_BSG=y | 102 | CONFIG_BLK_DEV_BSG=y |
103 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
98 | 104 | ||
99 | # | 105 | # |
100 | # IO Schedulers | 106 | # IO Schedulers |
@@ -162,10 +168,6 @@ CONFIG_HEARTBEAT=y | |||
162 | CONFIG_PROC_HARDWARE=y | 168 | CONFIG_PROC_HARDWARE=y |
163 | CONFIG_ZONE_DMA=y | 169 | CONFIG_ZONE_DMA=y |
164 | # CONFIG_ARCH_SUPPORTS_MSI is not set | 170 | # CONFIG_ARCH_SUPPORTS_MSI is not set |
165 | |||
166 | # | ||
167 | # Networking | ||
168 | # | ||
169 | CONFIG_NET=y | 171 | CONFIG_NET=y |
170 | 172 | ||
171 | # | 173 | # |
@@ -179,6 +181,7 @@ CONFIG_XFRM=y | |||
179 | # CONFIG_XFRM_SUB_POLICY is not set | 181 | # CONFIG_XFRM_SUB_POLICY is not set |
180 | CONFIG_XFRM_MIGRATE=y | 182 | CONFIG_XFRM_MIGRATE=y |
181 | # CONFIG_XFRM_STATISTICS is not set | 183 | # CONFIG_XFRM_STATISTICS is not set |
184 | CONFIG_XFRM_IPCOMP=m | ||
182 | CONFIG_NET_KEY=y | 185 | CONFIG_NET_KEY=y |
183 | CONFIG_NET_KEY_MIGRATE=y | 186 | CONFIG_NET_KEY_MIGRATE=y |
184 | CONFIG_INET=y | 187 | CONFIG_INET=y |
@@ -412,6 +415,7 @@ CONFIG_NET_CLS_ROUTE=y | |||
412 | # | 415 | # |
413 | # CONFIG_CFG80211 is not set | 416 | # CONFIG_CFG80211 is not set |
414 | CONFIG_WIRELESS_EXT=y | 417 | CONFIG_WIRELESS_EXT=y |
418 | # CONFIG_WIRELESS_EXT_SYSFS is not set | ||
415 | # CONFIG_MAC80211 is not set | 419 | # CONFIG_MAC80211 is not set |
416 | CONFIG_IEEE80211=m | 420 | CONFIG_IEEE80211=m |
417 | # CONFIG_IEEE80211_DEBUG is not set | 421 | # CONFIG_IEEE80211_DEBUG is not set |
@@ -431,7 +435,9 @@ CONFIG_IEEE80211_CRYPT_TKIP=m | |||
431 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 435 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
432 | CONFIG_STANDALONE=y | 436 | CONFIG_STANDALONE=y |
433 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 437 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
434 | CONFIG_FW_LOADER=m | 438 | CONFIG_FW_LOADER=y |
439 | # CONFIG_FIRMWARE_IN_KERNEL is not set | ||
440 | CONFIG_EXTRA_FIRMWARE="" | ||
435 | # CONFIG_SYS_HYPERVISOR is not set | 441 | # CONFIG_SYS_HYPERVISOR is not set |
436 | CONFIG_CONNECTOR=m | 442 | CONFIG_CONNECTOR=m |
437 | # CONFIG_MTD is not set | 443 | # CONFIG_MTD is not set |
@@ -449,6 +455,7 @@ CONFIG_CDROM_PKTCDVD=m | |||
449 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 | 455 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 |
450 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set | 456 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set |
451 | CONFIG_ATA_OVER_ETH=m | 457 | CONFIG_ATA_OVER_ETH=m |
458 | # CONFIG_BLK_DEV_HD is not set | ||
452 | CONFIG_MISC_DEVICES=y | 459 | CONFIG_MISC_DEVICES=y |
453 | # CONFIG_EEPROM_93CX6 is not set | 460 | # CONFIG_EEPROM_93CX6 is not set |
454 | # CONFIG_ENCLOSURE_SERVICES is not set | 461 | # CONFIG_ENCLOSURE_SERVICES is not set |
@@ -500,6 +507,7 @@ CONFIG_SCSI_SRP_TGT_ATTRS=y | |||
500 | CONFIG_SCSI_LOWLEVEL=y | 507 | CONFIG_SCSI_LOWLEVEL=y |
501 | CONFIG_ISCSI_TCP=m | 508 | CONFIG_ISCSI_TCP=m |
502 | # CONFIG_SCSI_DEBUG is not set | 509 | # CONFIG_SCSI_DEBUG is not set |
510 | # CONFIG_SCSI_DH is not set | ||
503 | CONFIG_MD=y | 511 | CONFIG_MD=y |
504 | CONFIG_BLK_DEV_MD=m | 512 | CONFIG_BLK_DEV_MD=m |
505 | CONFIG_MD_LINEAR=m | 513 | CONFIG_MD_LINEAR=m |
@@ -508,7 +516,7 @@ CONFIG_MD_RAID1=m | |||
508 | # CONFIG_MD_RAID10 is not set | 516 | # CONFIG_MD_RAID10 is not set |
509 | CONFIG_MD_RAID456=m | 517 | CONFIG_MD_RAID456=m |
510 | CONFIG_MD_RAID5_RESHAPE=y | 518 | CONFIG_MD_RAID5_RESHAPE=y |
511 | CONFIG_MD_MULTIPATH=m | 519 | # CONFIG_MD_MULTIPATH is not set |
512 | # CONFIG_MD_FAULTY is not set | 520 | # CONFIG_MD_FAULTY is not set |
513 | CONFIG_BLK_DEV_DM=m | 521 | CONFIG_BLK_DEV_DM=m |
514 | # CONFIG_DM_DEBUG is not set | 522 | # CONFIG_DM_DEBUG is not set |
@@ -517,13 +525,9 @@ CONFIG_DM_SNAPSHOT=m | |||
517 | CONFIG_DM_MIRROR=m | 525 | CONFIG_DM_MIRROR=m |
518 | CONFIG_DM_ZERO=m | 526 | CONFIG_DM_ZERO=m |
519 | CONFIG_DM_MULTIPATH=m | 527 | CONFIG_DM_MULTIPATH=m |
520 | CONFIG_DM_MULTIPATH_EMC=m | ||
521 | CONFIG_DM_MULTIPATH_RDAC=m | ||
522 | CONFIG_DM_MULTIPATH_HP=m | ||
523 | # CONFIG_DM_DELAY is not set | 528 | # CONFIG_DM_DELAY is not set |
524 | CONFIG_DM_UEVENT=y | 529 | CONFIG_DM_UEVENT=y |
525 | CONFIG_NETDEVICES=y | 530 | CONFIG_NETDEVICES=y |
526 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
527 | CONFIG_DUMMY=m | 531 | CONFIG_DUMMY=m |
528 | # CONFIG_BONDING is not set | 532 | # CONFIG_BONDING is not set |
529 | CONFIG_MACVLAN=m | 533 | CONFIG_MACVLAN=m |
@@ -636,6 +640,7 @@ CONFIG_SERIO_LIBPS2=m | |||
636 | # Character devices | 640 | # Character devices |
637 | # | 641 | # |
638 | CONFIG_VT=y | 642 | CONFIG_VT=y |
643 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
639 | CONFIG_VT_CONSOLE=y | 644 | CONFIG_VT_CONSOLE=y |
640 | CONFIG_HW_CONSOLE=y | 645 | CONFIG_HW_CONSOLE=y |
641 | CONFIG_VT_HW_CONSOLE_BINDING=y | 646 | CONFIG_VT_HW_CONSOLE_BINDING=y |
@@ -666,6 +671,7 @@ CONFIG_GEN_RTC_X=y | |||
666 | # CONFIG_POWER_SUPPLY is not set | 671 | # CONFIG_POWER_SUPPLY is not set |
667 | # CONFIG_HWMON is not set | 672 | # CONFIG_HWMON is not set |
668 | # CONFIG_THERMAL is not set | 673 | # CONFIG_THERMAL is not set |
674 | # CONFIG_THERMAL_HWMON is not set | ||
669 | # CONFIG_WATCHDOG is not set | 675 | # CONFIG_WATCHDOG is not set |
670 | 676 | ||
671 | # | 677 | # |
@@ -677,8 +683,10 @@ CONFIG_SSB_POSSIBLE=y | |||
677 | # | 683 | # |
678 | # Multifunction device drivers | 684 | # Multifunction device drivers |
679 | # | 685 | # |
686 | # CONFIG_MFD_CORE is not set | ||
680 | # CONFIG_MFD_SM501 is not set | 687 | # CONFIG_MFD_SM501 is not set |
681 | # CONFIG_HTC_PASIC3 is not set | 688 | # CONFIG_HTC_PASIC3 is not set |
689 | # CONFIG_MFD_TMIO is not set | ||
682 | 690 | ||
683 | # | 691 | # |
684 | # Multimedia devices | 692 | # Multimedia devices |
@@ -747,10 +755,6 @@ CONFIG_LOGO=y | |||
747 | # CONFIG_LOGO_LINUX_MONO is not set | 755 | # CONFIG_LOGO_LINUX_MONO is not set |
748 | # CONFIG_LOGO_LINUX_VGA16 is not set | 756 | # CONFIG_LOGO_LINUX_VGA16 is not set |
749 | CONFIG_LOGO_LINUX_CLUT224=y | 757 | CONFIG_LOGO_LINUX_CLUT224=y |
750 | |||
751 | # | ||
752 | # Sound | ||
753 | # | ||
754 | # CONFIG_SOUND is not set | 758 | # CONFIG_SOUND is not set |
755 | CONFIG_HID_SUPPORT=y | 759 | CONFIG_HID_SUPPORT=y |
756 | CONFIG_HID=m | 760 | CONFIG_HID=m |
@@ -762,6 +766,7 @@ CONFIG_HIDRAW=y | |||
762 | # CONFIG_NEW_LEDS is not set | 766 | # CONFIG_NEW_LEDS is not set |
763 | # CONFIG_ACCESSIBILITY is not set | 767 | # CONFIG_ACCESSIBILITY is not set |
764 | # CONFIG_RTC_CLASS is not set | 768 | # CONFIG_RTC_CLASS is not set |
769 | # CONFIG_DMADEVICES is not set | ||
765 | # CONFIG_UIO is not set | 770 | # CONFIG_UIO is not set |
766 | 771 | ||
767 | # | 772 | # |
@@ -796,6 +801,7 @@ CONFIG_XFS_FS=m | |||
796 | CONFIG_OCFS2_FS=m | 801 | CONFIG_OCFS2_FS=m |
797 | CONFIG_OCFS2_FS_O2CB=m | 802 | CONFIG_OCFS2_FS_O2CB=m |
798 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m | 803 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m |
804 | # CONFIG_OCFS2_FS_STATS is not set | ||
799 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 805 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
800 | # CONFIG_OCFS2_DEBUG_FS is not set | 806 | # CONFIG_OCFS2_DEBUG_FS is not set |
801 | CONFIG_DNOTIFY=y | 807 | CONFIG_DNOTIFY=y |
@@ -855,6 +861,7 @@ CONFIG_HFSPLUS_FS=m | |||
855 | CONFIG_CRAMFS=m | 861 | CONFIG_CRAMFS=m |
856 | # CONFIG_VXFS_FS is not set | 862 | # CONFIG_VXFS_FS is not set |
857 | CONFIG_MINIX_FS=y | 863 | CONFIG_MINIX_FS=y |
864 | # CONFIG_OMFS_FS is not set | ||
858 | CONFIG_HPFS_FS=m | 865 | CONFIG_HPFS_FS=m |
859 | # CONFIG_QNX4FS_FS is not set | 866 | # CONFIG_QNX4FS_FS is not set |
860 | # CONFIG_ROMFS_FS is not set | 867 | # CONFIG_ROMFS_FS is not set |
@@ -867,18 +874,17 @@ CONFIG_NFS_FS=y | |||
867 | CONFIG_NFS_V3=y | 874 | CONFIG_NFS_V3=y |
868 | # CONFIG_NFS_V3_ACL is not set | 875 | # CONFIG_NFS_V3_ACL is not set |
869 | CONFIG_NFS_V4=y | 876 | CONFIG_NFS_V4=y |
877 | CONFIG_ROOT_NFS=y | ||
870 | CONFIG_NFSD=m | 878 | CONFIG_NFSD=m |
871 | CONFIG_NFSD_V3=y | 879 | CONFIG_NFSD_V3=y |
872 | # CONFIG_NFSD_V3_ACL is not set | 880 | # CONFIG_NFSD_V3_ACL is not set |
873 | # CONFIG_NFSD_V4 is not set | 881 | # CONFIG_NFSD_V4 is not set |
874 | CONFIG_ROOT_NFS=y | ||
875 | CONFIG_LOCKD=y | 882 | CONFIG_LOCKD=y |
876 | CONFIG_LOCKD_V4=y | 883 | CONFIG_LOCKD_V4=y |
877 | CONFIG_EXPORTFS=m | 884 | CONFIG_EXPORTFS=m |
878 | CONFIG_NFS_COMMON=y | 885 | CONFIG_NFS_COMMON=y |
879 | CONFIG_SUNRPC=y | 886 | CONFIG_SUNRPC=y |
880 | CONFIG_SUNRPC_GSS=y | 887 | CONFIG_SUNRPC_GSS=y |
881 | CONFIG_SUNRPC_BIND34=y | ||
882 | CONFIG_RPCSEC_GSS_KRB5=y | 888 | CONFIG_RPCSEC_GSS_KRB5=y |
883 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 889 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
884 | CONFIG_SMB_FS=m | 890 | CONFIG_SMB_FS=m |
@@ -887,7 +893,6 @@ CONFIG_SMB_NLS_REMOTE="cp437" | |||
887 | # CONFIG_CIFS is not set | 893 | # CONFIG_CIFS is not set |
888 | # CONFIG_NCP_FS is not set | 894 | # CONFIG_NCP_FS is not set |
889 | CONFIG_CODA_FS=m | 895 | CONFIG_CODA_FS=m |
890 | # CONFIG_CODA_FS_OLD_API is not set | ||
891 | # CONFIG_AFS_FS is not set | 896 | # CONFIG_AFS_FS is not set |
892 | 897 | ||
893 | # | 898 | # |
@@ -951,6 +956,8 @@ CONFIG_MAGIC_SYSRQ=y | |||
951 | # CONFIG_HEADERS_CHECK is not set | 956 | # CONFIG_HEADERS_CHECK is not set |
952 | # CONFIG_DEBUG_KERNEL is not set | 957 | # CONFIG_DEBUG_KERNEL is not set |
953 | CONFIG_DEBUG_BUGVERBOSE=y | 958 | CONFIG_DEBUG_BUGVERBOSE=y |
959 | CONFIG_DEBUG_MEMORY_INIT=y | ||
960 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
954 | # CONFIG_SAMPLES is not set | 961 | # CONFIG_SAMPLES is not set |
955 | 962 | ||
956 | # | 963 | # |
@@ -1010,6 +1017,10 @@ CONFIG_CRYPTO_CRC32C=m | |||
1010 | CONFIG_CRYPTO_MD4=m | 1017 | CONFIG_CRYPTO_MD4=m |
1011 | CONFIG_CRYPTO_MD5=y | 1018 | CONFIG_CRYPTO_MD5=y |
1012 | CONFIG_CRYPTO_MICHAEL_MIC=m | 1019 | CONFIG_CRYPTO_MICHAEL_MIC=m |
1020 | CONFIG_CRYPTO_RMD128=m | ||
1021 | CONFIG_CRYPTO_RMD160=m | ||
1022 | CONFIG_CRYPTO_RMD256=m | ||
1023 | CONFIG_CRYPTO_RMD320=m | ||
1013 | CONFIG_CRYPTO_SHA1=m | 1024 | CONFIG_CRYPTO_SHA1=m |
1014 | CONFIG_CRYPTO_SHA256=m | 1025 | CONFIG_CRYPTO_SHA256=m |
1015 | CONFIG_CRYPTO_SHA512=m | 1026 | CONFIG_CRYPTO_SHA512=m |
@@ -1051,6 +1062,7 @@ CONFIG_BITREVERSE=y | |||
1051 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | 1062 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set |
1052 | CONFIG_CRC_CCITT=m | 1063 | CONFIG_CRC_CCITT=m |
1053 | CONFIG_CRC16=m | 1064 | CONFIG_CRC16=m |
1065 | CONFIG_CRC_T10DIF=y | ||
1054 | CONFIG_CRC_ITU_T=m | 1066 | CONFIG_CRC_ITU_T=m |
1055 | CONFIG_CRC32=y | 1067 | CONFIG_CRC32=y |
1056 | # CONFIG_CRC7 is not set | 1068 | # CONFIG_CRC7 is not set |
diff --git a/arch/m68k/configs/mac_defconfig b/arch/m68k/configs/mac_defconfig index 7cd375740348..db6e8822594a 100644 --- a/arch/m68k/configs/mac_defconfig +++ b/arch/m68k/configs/mac_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.26-rc4 | 3 | # Linux kernel version: 2.6.27-rc6 |
4 | # Wed May 28 22:47:35 2008 | 4 | # Wed Sep 10 09:02:06 2008 |
5 | # | 5 | # |
6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -52,7 +52,6 @@ CONFIG_SYSCTL=y | |||
52 | # CONFIG_EMBEDDED is not set | 52 | # CONFIG_EMBEDDED is not set |
53 | CONFIG_UID16=y | 53 | CONFIG_UID16=y |
54 | CONFIG_SYSCTL_SYSCALL=y | 54 | CONFIG_SYSCTL_SYSCALL=y |
55 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
56 | CONFIG_KALLSYMS=y | 55 | CONFIG_KALLSYMS=y |
57 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 56 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
58 | CONFIG_HOTPLUG=y | 57 | CONFIG_HOTPLUG=y |
@@ -75,10 +74,16 @@ CONFIG_SLAB=y | |||
75 | # CONFIG_PROFILING is not set | 74 | # CONFIG_PROFILING is not set |
76 | # CONFIG_MARKERS is not set | 75 | # CONFIG_MARKERS is not set |
77 | # CONFIG_HAVE_OPROFILE is not set | 76 | # CONFIG_HAVE_OPROFILE is not set |
77 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
78 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
78 | # CONFIG_HAVE_KPROBES is not set | 79 | # CONFIG_HAVE_KPROBES is not set |
79 | # CONFIG_HAVE_KRETPROBES is not set | 80 | # CONFIG_HAVE_KRETPROBES is not set |
81 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
80 | # CONFIG_HAVE_DMA_ATTRS is not set | 82 | # CONFIG_HAVE_DMA_ATTRS is not set |
83 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
84 | # CONFIG_HAVE_CLK is not set | ||
81 | CONFIG_PROC_PAGE_MONITOR=y | 85 | CONFIG_PROC_PAGE_MONITOR=y |
86 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||
82 | CONFIG_SLABINFO=y | 87 | CONFIG_SLABINFO=y |
83 | CONFIG_RT_MUTEXES=y | 88 | CONFIG_RT_MUTEXES=y |
84 | # CONFIG_TINY_SHMEM is not set | 89 | # CONFIG_TINY_SHMEM is not set |
@@ -95,6 +100,7 @@ CONFIG_BLOCK=y | |||
95 | # CONFIG_BLK_DEV_IO_TRACE is not set | 100 | # CONFIG_BLK_DEV_IO_TRACE is not set |
96 | # CONFIG_LSF is not set | 101 | # CONFIG_LSF is not set |
97 | CONFIG_BLK_DEV_BSG=y | 102 | CONFIG_BLK_DEV_BSG=y |
103 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
98 | 104 | ||
99 | # | 105 | # |
100 | # IO Schedulers | 106 | # IO Schedulers |
@@ -163,10 +169,6 @@ CONFIG_BINFMT_MISC=m | |||
163 | CONFIG_PROC_HARDWARE=y | 169 | CONFIG_PROC_HARDWARE=y |
164 | CONFIG_ZONE_DMA=y | 170 | CONFIG_ZONE_DMA=y |
165 | # CONFIG_ARCH_SUPPORTS_MSI is not set | 171 | # CONFIG_ARCH_SUPPORTS_MSI is not set |
166 | |||
167 | # | ||
168 | # Networking | ||
169 | # | ||
170 | CONFIG_NET=y | 172 | CONFIG_NET=y |
171 | 173 | ||
172 | # | 174 | # |
@@ -180,6 +182,7 @@ CONFIG_XFRM=y | |||
180 | # CONFIG_XFRM_SUB_POLICY is not set | 182 | # CONFIG_XFRM_SUB_POLICY is not set |
181 | CONFIG_XFRM_MIGRATE=y | 183 | CONFIG_XFRM_MIGRATE=y |
182 | # CONFIG_XFRM_STATISTICS is not set | 184 | # CONFIG_XFRM_STATISTICS is not set |
185 | CONFIG_XFRM_IPCOMP=m | ||
183 | CONFIG_NET_KEY=y | 186 | CONFIG_NET_KEY=y |
184 | CONFIG_NET_KEY_MIGRATE=y | 187 | CONFIG_NET_KEY_MIGRATE=y |
185 | CONFIG_INET=y | 188 | CONFIG_INET=y |
@@ -413,6 +416,7 @@ CONFIG_NET_CLS_ROUTE=y | |||
413 | # | 416 | # |
414 | # CONFIG_CFG80211 is not set | 417 | # CONFIG_CFG80211 is not set |
415 | CONFIG_WIRELESS_EXT=y | 418 | CONFIG_WIRELESS_EXT=y |
419 | # CONFIG_WIRELESS_EXT_SYSFS is not set | ||
416 | # CONFIG_MAC80211 is not set | 420 | # CONFIG_MAC80211 is not set |
417 | CONFIG_IEEE80211=m | 421 | CONFIG_IEEE80211=m |
418 | # CONFIG_IEEE80211_DEBUG is not set | 422 | # CONFIG_IEEE80211_DEBUG is not set |
@@ -432,7 +436,9 @@ CONFIG_IEEE80211_CRYPT_TKIP=m | |||
432 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 436 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
433 | CONFIG_STANDALONE=y | 437 | CONFIG_STANDALONE=y |
434 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 438 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
435 | CONFIG_FW_LOADER=m | 439 | CONFIG_FW_LOADER=y |
440 | # CONFIG_FIRMWARE_IN_KERNEL is not set | ||
441 | CONFIG_EXTRA_FIRMWARE="" | ||
436 | # CONFIG_SYS_HYPERVISOR is not set | 442 | # CONFIG_SYS_HYPERVISOR is not set |
437 | CONFIG_CONNECTOR=m | 443 | CONFIG_CONNECTOR=m |
438 | # CONFIG_MTD is not set | 444 | # CONFIG_MTD is not set |
@@ -450,6 +456,7 @@ CONFIG_CDROM_PKTCDVD=m | |||
450 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 | 456 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 |
451 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set | 457 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set |
452 | CONFIG_ATA_OVER_ETH=m | 458 | CONFIG_ATA_OVER_ETH=m |
459 | # CONFIG_BLK_DEV_HD is not set | ||
453 | CONFIG_MISC_DEVICES=y | 460 | CONFIG_MISC_DEVICES=y |
454 | # CONFIG_EEPROM_93CX6 is not set | 461 | # CONFIG_EEPROM_93CX6 is not set |
455 | # CONFIG_ENCLOSURE_SERVICES is not set | 462 | # CONFIG_ENCLOSURE_SERVICES is not set |
@@ -460,6 +467,7 @@ CONFIG_BLK_DEV_IDE=y | |||
460 | # | 467 | # |
461 | # Please see Documentation/ide/ide.txt for help/info on IDE drives | 468 | # Please see Documentation/ide/ide.txt for help/info on IDE drives |
462 | # | 469 | # |
470 | CONFIG_IDE_ATAPI=y | ||
463 | # CONFIG_BLK_DEV_IDE_SATA is not set | 471 | # CONFIG_BLK_DEV_IDE_SATA is not set |
464 | CONFIG_BLK_DEV_IDEDISK=y | 472 | CONFIG_BLK_DEV_IDEDISK=y |
465 | # CONFIG_IDEDISK_MULTI_MODE is not set | 473 | # CONFIG_IDEDISK_MULTI_MODE is not set |
@@ -477,8 +485,6 @@ CONFIG_IDE_PROC_FS=y | |||
477 | # CONFIG_BLK_DEV_PLATFORM is not set | 485 | # CONFIG_BLK_DEV_PLATFORM is not set |
478 | CONFIG_BLK_DEV_MAC_IDE=y | 486 | CONFIG_BLK_DEV_MAC_IDE=y |
479 | # CONFIG_BLK_DEV_IDEDMA is not set | 487 | # CONFIG_BLK_DEV_IDEDMA is not set |
480 | # CONFIG_BLK_DEV_HD_ONLY is not set | ||
481 | # CONFIG_BLK_DEV_HD is not set | ||
482 | 488 | ||
483 | # | 489 | # |
484 | # SCSI device support | 490 | # SCSI device support |
@@ -527,6 +533,7 @@ CONFIG_ISCSI_TCP=m | |||
527 | # CONFIG_SCSI_DEBUG is not set | 533 | # CONFIG_SCSI_DEBUG is not set |
528 | CONFIG_MAC_SCSI=y | 534 | CONFIG_MAC_SCSI=y |
529 | CONFIG_SCSI_MAC_ESP=y | 535 | CONFIG_SCSI_MAC_ESP=y |
536 | # CONFIG_SCSI_DH is not set | ||
530 | CONFIG_MD=y | 537 | CONFIG_MD=y |
531 | CONFIG_BLK_DEV_MD=m | 538 | CONFIG_BLK_DEV_MD=m |
532 | CONFIG_MD_LINEAR=m | 539 | CONFIG_MD_LINEAR=m |
@@ -535,7 +542,7 @@ CONFIG_MD_RAID1=m | |||
535 | # CONFIG_MD_RAID10 is not set | 542 | # CONFIG_MD_RAID10 is not set |
536 | CONFIG_MD_RAID456=m | 543 | CONFIG_MD_RAID456=m |
537 | CONFIG_MD_RAID5_RESHAPE=y | 544 | CONFIG_MD_RAID5_RESHAPE=y |
538 | CONFIG_MD_MULTIPATH=m | 545 | # CONFIG_MD_MULTIPATH is not set |
539 | # CONFIG_MD_FAULTY is not set | 546 | # CONFIG_MD_FAULTY is not set |
540 | CONFIG_BLK_DEV_DM=m | 547 | CONFIG_BLK_DEV_DM=m |
541 | # CONFIG_DM_DEBUG is not set | 548 | # CONFIG_DM_DEBUG is not set |
@@ -544,9 +551,6 @@ CONFIG_DM_SNAPSHOT=m | |||
544 | CONFIG_DM_MIRROR=m | 551 | CONFIG_DM_MIRROR=m |
545 | CONFIG_DM_ZERO=m | 552 | CONFIG_DM_ZERO=m |
546 | CONFIG_DM_MULTIPATH=m | 553 | CONFIG_DM_MULTIPATH=m |
547 | CONFIG_DM_MULTIPATH_EMC=m | ||
548 | CONFIG_DM_MULTIPATH_RDAC=m | ||
549 | CONFIG_DM_MULTIPATH_HP=m | ||
550 | # CONFIG_DM_DELAY is not set | 554 | # CONFIG_DM_DELAY is not set |
551 | CONFIG_DM_UEVENT=y | 555 | CONFIG_DM_UEVENT=y |
552 | CONFIG_MACINTOSH_DRIVERS=y | 556 | CONFIG_MACINTOSH_DRIVERS=y |
@@ -559,7 +563,6 @@ CONFIG_ADB_CUDA=y | |||
559 | CONFIG_INPUT_ADBHID=y | 563 | CONFIG_INPUT_ADBHID=y |
560 | CONFIG_MAC_EMUMOUSEBTN=y | 564 | CONFIG_MAC_EMUMOUSEBTN=y |
561 | CONFIG_NETDEVICES=y | 565 | CONFIG_NETDEVICES=y |
562 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
563 | CONFIG_DUMMY=m | 566 | CONFIG_DUMMY=m |
564 | # CONFIG_BONDING is not set | 567 | # CONFIG_BONDING is not set |
565 | CONFIG_MACVLAN=m | 568 | CONFIG_MACVLAN=m |
@@ -670,6 +673,7 @@ CONFIG_SERIO_LIBPS2=m | |||
670 | # Character devices | 673 | # Character devices |
671 | # | 674 | # |
672 | CONFIG_VT=y | 675 | CONFIG_VT=y |
676 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
673 | CONFIG_VT_CONSOLE=y | 677 | CONFIG_VT_CONSOLE=y |
674 | CONFIG_HW_CONSOLE=y | 678 | CONFIG_HW_CONSOLE=y |
675 | CONFIG_VT_HW_CONSOLE_BINDING=y | 679 | CONFIG_VT_HW_CONSOLE_BINDING=y |
@@ -700,6 +704,7 @@ CONFIG_GEN_RTC_X=y | |||
700 | # CONFIG_POWER_SUPPLY is not set | 704 | # CONFIG_POWER_SUPPLY is not set |
701 | # CONFIG_HWMON is not set | 705 | # CONFIG_HWMON is not set |
702 | # CONFIG_THERMAL is not set | 706 | # CONFIG_THERMAL is not set |
707 | # CONFIG_THERMAL_HWMON is not set | ||
703 | # CONFIG_WATCHDOG is not set | 708 | # CONFIG_WATCHDOG is not set |
704 | 709 | ||
705 | # | 710 | # |
@@ -711,8 +716,10 @@ CONFIG_SSB_POSSIBLE=y | |||
711 | # | 716 | # |
712 | # Multifunction device drivers | 717 | # Multifunction device drivers |
713 | # | 718 | # |
719 | # CONFIG_MFD_CORE is not set | ||
714 | # CONFIG_MFD_SM501 is not set | 720 | # CONFIG_MFD_SM501 is not set |
715 | # CONFIG_HTC_PASIC3 is not set | 721 | # CONFIG_HTC_PASIC3 is not set |
722 | # CONFIG_MFD_TMIO is not set | ||
716 | 723 | ||
717 | # | 724 | # |
718 | # Multimedia devices | 725 | # Multimedia devices |
@@ -784,10 +791,6 @@ CONFIG_LOGO_LINUX_MONO=y | |||
784 | CONFIG_LOGO_LINUX_VGA16=y | 791 | CONFIG_LOGO_LINUX_VGA16=y |
785 | CONFIG_LOGO_LINUX_CLUT224=y | 792 | CONFIG_LOGO_LINUX_CLUT224=y |
786 | CONFIG_LOGO_MAC_CLUT224=y | 793 | CONFIG_LOGO_MAC_CLUT224=y |
787 | |||
788 | # | ||
789 | # Sound | ||
790 | # | ||
791 | # CONFIG_SOUND is not set | 794 | # CONFIG_SOUND is not set |
792 | CONFIG_HID_SUPPORT=y | 795 | CONFIG_HID_SUPPORT=y |
793 | CONFIG_HID=m | 796 | CONFIG_HID=m |
@@ -799,6 +802,7 @@ CONFIG_HIDRAW=y | |||
799 | # CONFIG_NEW_LEDS is not set | 802 | # CONFIG_NEW_LEDS is not set |
800 | # CONFIG_ACCESSIBILITY is not set | 803 | # CONFIG_ACCESSIBILITY is not set |
801 | # CONFIG_RTC_CLASS is not set | 804 | # CONFIG_RTC_CLASS is not set |
805 | # CONFIG_DMADEVICES is not set | ||
802 | # CONFIG_UIO is not set | 806 | # CONFIG_UIO is not set |
803 | 807 | ||
804 | # | 808 | # |
@@ -836,6 +840,7 @@ CONFIG_XFS_FS=m | |||
836 | CONFIG_OCFS2_FS=m | 840 | CONFIG_OCFS2_FS=m |
837 | CONFIG_OCFS2_FS_O2CB=m | 841 | CONFIG_OCFS2_FS_O2CB=m |
838 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m | 842 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m |
843 | # CONFIG_OCFS2_FS_STATS is not set | ||
839 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 844 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
840 | # CONFIG_OCFS2_DEBUG_FS is not set | 845 | # CONFIG_OCFS2_DEBUG_FS is not set |
841 | CONFIG_DNOTIFY=y | 846 | CONFIG_DNOTIFY=y |
@@ -895,6 +900,7 @@ CONFIG_HFSPLUS_FS=y | |||
895 | CONFIG_CRAMFS=m | 900 | CONFIG_CRAMFS=m |
896 | # CONFIG_VXFS_FS is not set | 901 | # CONFIG_VXFS_FS is not set |
897 | CONFIG_MINIX_FS=y | 902 | CONFIG_MINIX_FS=y |
903 | # CONFIG_OMFS_FS is not set | ||
898 | CONFIG_HPFS_FS=m | 904 | CONFIG_HPFS_FS=m |
899 | # CONFIG_QNX4FS_FS is not set | 905 | # CONFIG_QNX4FS_FS is not set |
900 | # CONFIG_ROMFS_FS is not set | 906 | # CONFIG_ROMFS_FS is not set |
@@ -917,7 +923,6 @@ CONFIG_EXPORTFS=m | |||
917 | CONFIG_NFS_COMMON=y | 923 | CONFIG_NFS_COMMON=y |
918 | CONFIG_SUNRPC=m | 924 | CONFIG_SUNRPC=m |
919 | CONFIG_SUNRPC_GSS=m | 925 | CONFIG_SUNRPC_GSS=m |
920 | CONFIG_SUNRPC_BIND34=y | ||
921 | CONFIG_RPCSEC_GSS_KRB5=m | 926 | CONFIG_RPCSEC_GSS_KRB5=m |
922 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 927 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
923 | CONFIG_SMB_FS=m | 928 | CONFIG_SMB_FS=m |
@@ -926,7 +931,6 @@ CONFIG_SMB_NLS_REMOTE="cp437" | |||
926 | # CONFIG_CIFS is not set | 931 | # CONFIG_CIFS is not set |
927 | # CONFIG_NCP_FS is not set | 932 | # CONFIG_NCP_FS is not set |
928 | CONFIG_CODA_FS=m | 933 | CONFIG_CODA_FS=m |
929 | # CONFIG_CODA_FS_OLD_API is not set | ||
930 | # CONFIG_AFS_FS is not set | 934 | # CONFIG_AFS_FS is not set |
931 | 935 | ||
932 | # | 936 | # |
@@ -991,6 +995,8 @@ CONFIG_MAGIC_SYSRQ=y | |||
991 | # CONFIG_HEADERS_CHECK is not set | 995 | # CONFIG_HEADERS_CHECK is not set |
992 | # CONFIG_DEBUG_KERNEL is not set | 996 | # CONFIG_DEBUG_KERNEL is not set |
993 | CONFIG_DEBUG_BUGVERBOSE=y | 997 | CONFIG_DEBUG_BUGVERBOSE=y |
998 | CONFIG_DEBUG_MEMORY_INIT=y | ||
999 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
994 | # CONFIG_SAMPLES is not set | 1000 | # CONFIG_SAMPLES is not set |
995 | 1001 | ||
996 | # | 1002 | # |
@@ -1050,6 +1056,10 @@ CONFIG_CRYPTO_CRC32C=m | |||
1050 | CONFIG_CRYPTO_MD4=m | 1056 | CONFIG_CRYPTO_MD4=m |
1051 | CONFIG_CRYPTO_MD5=m | 1057 | CONFIG_CRYPTO_MD5=m |
1052 | CONFIG_CRYPTO_MICHAEL_MIC=m | 1058 | CONFIG_CRYPTO_MICHAEL_MIC=m |
1059 | CONFIG_CRYPTO_RMD128=m | ||
1060 | CONFIG_CRYPTO_RMD160=m | ||
1061 | CONFIG_CRYPTO_RMD256=m | ||
1062 | CONFIG_CRYPTO_RMD320=m | ||
1053 | CONFIG_CRYPTO_SHA1=m | 1063 | CONFIG_CRYPTO_SHA1=m |
1054 | CONFIG_CRYPTO_SHA256=m | 1064 | CONFIG_CRYPTO_SHA256=m |
1055 | CONFIG_CRYPTO_SHA512=m | 1065 | CONFIG_CRYPTO_SHA512=m |
@@ -1091,6 +1101,7 @@ CONFIG_BITREVERSE=y | |||
1091 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | 1101 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set |
1092 | CONFIG_CRC_CCITT=m | 1102 | CONFIG_CRC_CCITT=m |
1093 | CONFIG_CRC16=m | 1103 | CONFIG_CRC16=m |
1104 | CONFIG_CRC_T10DIF=y | ||
1094 | CONFIG_CRC_ITU_T=m | 1105 | CONFIG_CRC_ITU_T=m |
1095 | CONFIG_CRC32=y | 1106 | CONFIG_CRC32=y |
1096 | # CONFIG_CRC7 is not set | 1107 | # CONFIG_CRC7 is not set |
diff --git a/arch/m68k/configs/multi_defconfig b/arch/m68k/configs/multi_defconfig index 0747fa3984df..1a806102b999 100644 --- a/arch/m68k/configs/multi_defconfig +++ b/arch/m68k/configs/multi_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.26-rc4 | 3 | # Linux kernel version: 2.6.27-rc6 |
4 | # Wed May 28 22:47:35 2008 | 4 | # Wed Sep 10 09:02:07 2008 |
5 | # | 5 | # |
6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -52,7 +52,6 @@ CONFIG_SYSCTL=y | |||
52 | # CONFIG_EMBEDDED is not set | 52 | # CONFIG_EMBEDDED is not set |
53 | CONFIG_UID16=y | 53 | CONFIG_UID16=y |
54 | CONFIG_SYSCTL_SYSCALL=y | 54 | CONFIG_SYSCTL_SYSCALL=y |
55 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
56 | CONFIG_KALLSYMS=y | 55 | CONFIG_KALLSYMS=y |
57 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 56 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
58 | CONFIG_HOTPLUG=y | 57 | CONFIG_HOTPLUG=y |
@@ -75,10 +74,16 @@ CONFIG_SLAB=y | |||
75 | # CONFIG_PROFILING is not set | 74 | # CONFIG_PROFILING is not set |
76 | # CONFIG_MARKERS is not set | 75 | # CONFIG_MARKERS is not set |
77 | # CONFIG_HAVE_OPROFILE is not set | 76 | # CONFIG_HAVE_OPROFILE is not set |
77 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
78 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
78 | # CONFIG_HAVE_KPROBES is not set | 79 | # CONFIG_HAVE_KPROBES is not set |
79 | # CONFIG_HAVE_KRETPROBES is not set | 80 | # CONFIG_HAVE_KRETPROBES is not set |
81 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
80 | # CONFIG_HAVE_DMA_ATTRS is not set | 82 | # CONFIG_HAVE_DMA_ATTRS is not set |
83 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
84 | # CONFIG_HAVE_CLK is not set | ||
81 | CONFIG_PROC_PAGE_MONITOR=y | 85 | CONFIG_PROC_PAGE_MONITOR=y |
86 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||
82 | CONFIG_SLABINFO=y | 87 | CONFIG_SLABINFO=y |
83 | CONFIG_RT_MUTEXES=y | 88 | CONFIG_RT_MUTEXES=y |
84 | # CONFIG_TINY_SHMEM is not set | 89 | # CONFIG_TINY_SHMEM is not set |
@@ -95,6 +100,7 @@ CONFIG_BLOCK=y | |||
95 | # CONFIG_BLK_DEV_IO_TRACE is not set | 100 | # CONFIG_BLK_DEV_IO_TRACE is not set |
96 | # CONFIG_LSF is not set | 101 | # CONFIG_LSF is not set |
97 | CONFIG_BLK_DEV_BSG=y | 102 | CONFIG_BLK_DEV_BSG=y |
103 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
98 | 104 | ||
99 | # | 105 | # |
100 | # IO Schedulers | 106 | # IO Schedulers |
@@ -173,10 +179,6 @@ CONFIG_GENERIC_ISA_DMA=y | |||
173 | CONFIG_ZONE_DMA=y | 179 | CONFIG_ZONE_DMA=y |
174 | # CONFIG_ARCH_SUPPORTS_MSI is not set | 180 | # CONFIG_ARCH_SUPPORTS_MSI is not set |
175 | CONFIG_ZORRO_NAMES=y | 181 | CONFIG_ZORRO_NAMES=y |
176 | |||
177 | # | ||
178 | # Networking | ||
179 | # | ||
180 | CONFIG_NET=y | 182 | CONFIG_NET=y |
181 | 183 | ||
182 | # | 184 | # |
@@ -190,6 +192,7 @@ CONFIG_XFRM=y | |||
190 | # CONFIG_XFRM_SUB_POLICY is not set | 192 | # CONFIG_XFRM_SUB_POLICY is not set |
191 | CONFIG_XFRM_MIGRATE=y | 193 | CONFIG_XFRM_MIGRATE=y |
192 | # CONFIG_XFRM_STATISTICS is not set | 194 | # CONFIG_XFRM_STATISTICS is not set |
195 | CONFIG_XFRM_IPCOMP=m | ||
193 | CONFIG_NET_KEY=y | 196 | CONFIG_NET_KEY=y |
194 | CONFIG_NET_KEY_MIGRATE=y | 197 | CONFIG_NET_KEY_MIGRATE=y |
195 | CONFIG_INET=y | 198 | CONFIG_INET=y |
@@ -427,6 +430,7 @@ CONFIG_NET_CLS_ROUTE=y | |||
427 | # | 430 | # |
428 | # CONFIG_CFG80211 is not set | 431 | # CONFIG_CFG80211 is not set |
429 | CONFIG_WIRELESS_EXT=y | 432 | CONFIG_WIRELESS_EXT=y |
433 | # CONFIG_WIRELESS_EXT_SYSFS is not set | ||
430 | # CONFIG_MAC80211 is not set | 434 | # CONFIG_MAC80211 is not set |
431 | CONFIG_IEEE80211=m | 435 | CONFIG_IEEE80211=m |
432 | # CONFIG_IEEE80211_DEBUG is not set | 436 | # CONFIG_IEEE80211_DEBUG is not set |
@@ -446,7 +450,9 @@ CONFIG_IEEE80211_CRYPT_TKIP=m | |||
446 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 450 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
447 | CONFIG_STANDALONE=y | 451 | CONFIG_STANDALONE=y |
448 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 452 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
449 | CONFIG_FW_LOADER=m | 453 | CONFIG_FW_LOADER=y |
454 | # CONFIG_FIRMWARE_IN_KERNEL is not set | ||
455 | CONFIG_EXTRA_FIRMWARE="" | ||
450 | # CONFIG_SYS_HYPERVISOR is not set | 456 | # CONFIG_SYS_HYPERVISOR is not set |
451 | CONFIG_CONNECTOR=m | 457 | CONFIG_CONNECTOR=m |
452 | # CONFIG_MTD is not set | 458 | # CONFIG_MTD is not set |
@@ -476,6 +482,7 @@ CONFIG_CDROM_PKTCDVD=m | |||
476 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 | 482 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 |
477 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set | 483 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set |
478 | CONFIG_ATA_OVER_ETH=m | 484 | CONFIG_ATA_OVER_ETH=m |
485 | # CONFIG_BLK_DEV_HD is not set | ||
479 | CONFIG_MISC_DEVICES=y | 486 | CONFIG_MISC_DEVICES=y |
480 | # CONFIG_EEPROM_93CX6 is not set | 487 | # CONFIG_EEPROM_93CX6 is not set |
481 | # CONFIG_ENCLOSURE_SERVICES is not set | 488 | # CONFIG_ENCLOSURE_SERVICES is not set |
@@ -486,6 +493,7 @@ CONFIG_BLK_DEV_IDE=y | |||
486 | # | 493 | # |
487 | # Please see Documentation/ide/ide.txt for help/info on IDE drives | 494 | # Please see Documentation/ide/ide.txt for help/info on IDE drives |
488 | # | 495 | # |
496 | CONFIG_IDE_ATAPI=y | ||
489 | # CONFIG_BLK_DEV_IDE_SATA is not set | 497 | # CONFIG_BLK_DEV_IDE_SATA is not set |
490 | CONFIG_BLK_DEV_IDEDISK=y | 498 | CONFIG_BLK_DEV_IDEDISK=y |
491 | # CONFIG_IDEDISK_MULTI_MODE is not set | 499 | # CONFIG_IDEDISK_MULTI_MODE is not set |
@@ -508,8 +516,6 @@ CONFIG_BLK_DEV_FALCON_IDE=y | |||
508 | CONFIG_BLK_DEV_MAC_IDE=y | 516 | CONFIG_BLK_DEV_MAC_IDE=y |
509 | CONFIG_BLK_DEV_Q40IDE=y | 517 | CONFIG_BLK_DEV_Q40IDE=y |
510 | # CONFIG_BLK_DEV_IDEDMA is not set | 518 | # CONFIG_BLK_DEV_IDEDMA is not set |
511 | # CONFIG_BLK_DEV_HD_ONLY is not set | ||
512 | # CONFIG_BLK_DEV_HD is not set | ||
513 | 519 | ||
514 | # | 520 | # |
515 | # SCSI device support | 521 | # SCSI device support |
@@ -584,6 +590,7 @@ CONFIG_MVME147_SCSI=y | |||
584 | CONFIG_MVME16x_SCSI=y | 590 | CONFIG_MVME16x_SCSI=y |
585 | CONFIG_BVME6000_SCSI=y | 591 | CONFIG_BVME6000_SCSI=y |
586 | CONFIG_SUN3X_ESP=y | 592 | CONFIG_SUN3X_ESP=y |
593 | # CONFIG_SCSI_DH is not set | ||
587 | CONFIG_MD=y | 594 | CONFIG_MD=y |
588 | CONFIG_BLK_DEV_MD=m | 595 | CONFIG_BLK_DEV_MD=m |
589 | CONFIG_MD_LINEAR=m | 596 | CONFIG_MD_LINEAR=m |
@@ -592,7 +599,7 @@ CONFIG_MD_RAID1=m | |||
592 | # CONFIG_MD_RAID10 is not set | 599 | # CONFIG_MD_RAID10 is not set |
593 | CONFIG_MD_RAID456=m | 600 | CONFIG_MD_RAID456=m |
594 | CONFIG_MD_RAID5_RESHAPE=y | 601 | CONFIG_MD_RAID5_RESHAPE=y |
595 | CONFIG_MD_MULTIPATH=m | 602 | # CONFIG_MD_MULTIPATH is not set |
596 | # CONFIG_MD_FAULTY is not set | 603 | # CONFIG_MD_FAULTY is not set |
597 | CONFIG_BLK_DEV_DM=m | 604 | CONFIG_BLK_DEV_DM=m |
598 | # CONFIG_DM_DEBUG is not set | 605 | # CONFIG_DM_DEBUG is not set |
@@ -601,9 +608,6 @@ CONFIG_DM_SNAPSHOT=m | |||
601 | CONFIG_DM_MIRROR=m | 608 | CONFIG_DM_MIRROR=m |
602 | CONFIG_DM_ZERO=m | 609 | CONFIG_DM_ZERO=m |
603 | CONFIG_DM_MULTIPATH=m | 610 | CONFIG_DM_MULTIPATH=m |
604 | CONFIG_DM_MULTIPATH_EMC=m | ||
605 | CONFIG_DM_MULTIPATH_RDAC=m | ||
606 | CONFIG_DM_MULTIPATH_HP=m | ||
607 | # CONFIG_DM_DELAY is not set | 611 | # CONFIG_DM_DELAY is not set |
608 | CONFIG_DM_UEVENT=y | 612 | CONFIG_DM_UEVENT=y |
609 | CONFIG_MACINTOSH_DRIVERS=y | 613 | CONFIG_MACINTOSH_DRIVERS=y |
@@ -616,7 +620,6 @@ CONFIG_ADB_CUDA=y | |||
616 | CONFIG_INPUT_ADBHID=y | 620 | CONFIG_INPUT_ADBHID=y |
617 | CONFIG_MAC_EMUMOUSEBTN=y | 621 | CONFIG_MAC_EMUMOUSEBTN=y |
618 | CONFIG_NETDEVICES=y | 622 | CONFIG_NETDEVICES=y |
619 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
620 | CONFIG_DUMMY=m | 623 | CONFIG_DUMMY=m |
621 | # CONFIG_BONDING is not set | 624 | # CONFIG_BONDING is not set |
622 | CONFIG_MACVLAN=m | 625 | CONFIG_MACVLAN=m |
@@ -632,7 +635,6 @@ CONFIG_A2065=m | |||
632 | CONFIG_HYDRA=m | 635 | CONFIG_HYDRA=m |
633 | CONFIG_ZORRO8390=m | 636 | CONFIG_ZORRO8390=m |
634 | CONFIG_APNE=m | 637 | CONFIG_APNE=m |
635 | CONFIG_APOLLO_ELPLUS=y | ||
636 | CONFIG_MAC8390=y | 638 | CONFIG_MAC8390=y |
637 | CONFIG_MAC89x0=m | 639 | CONFIG_MAC89x0=m |
638 | CONFIG_MACSONIC=m | 640 | CONFIG_MACSONIC=m |
@@ -791,6 +793,7 @@ CONFIG_SERIO_LIBPS2=y | |||
791 | # Character devices | 793 | # Character devices |
792 | # | 794 | # |
793 | CONFIG_VT=y | 795 | CONFIG_VT=y |
796 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
794 | CONFIG_VT_CONSOLE=y | 797 | CONFIG_VT_CONSOLE=y |
795 | CONFIG_HW_CONSOLE=y | 798 | CONFIG_HW_CONSOLE=y |
796 | CONFIG_VT_HW_CONSOLE_BINDING=y | 799 | CONFIG_VT_HW_CONSOLE_BINDING=y |
@@ -827,6 +830,7 @@ CONFIG_GEN_RTC_X=y | |||
827 | # CONFIG_POWER_SUPPLY is not set | 830 | # CONFIG_POWER_SUPPLY is not set |
828 | # CONFIG_HWMON is not set | 831 | # CONFIG_HWMON is not set |
829 | # CONFIG_THERMAL is not set | 832 | # CONFIG_THERMAL is not set |
833 | # CONFIG_THERMAL_HWMON is not set | ||
830 | # CONFIG_WATCHDOG is not set | 834 | # CONFIG_WATCHDOG is not set |
831 | 835 | ||
832 | # | 836 | # |
@@ -838,8 +842,10 @@ CONFIG_SSB_POSSIBLE=y | |||
838 | # | 842 | # |
839 | # Multifunction device drivers | 843 | # Multifunction device drivers |
840 | # | 844 | # |
845 | # CONFIG_MFD_CORE is not set | ||
841 | # CONFIG_MFD_SM501 is not set | 846 | # CONFIG_MFD_SM501 is not set |
842 | # CONFIG_HTC_PASIC3 is not set | 847 | # CONFIG_HTC_PASIC3 is not set |
848 | # CONFIG_MFD_TMIO is not set | ||
843 | 849 | ||
844 | # | 850 | # |
845 | # Multimedia devices | 851 | # Multimedia devices |
@@ -923,10 +929,6 @@ CONFIG_LOGO_LINUX_MONO=y | |||
923 | CONFIG_LOGO_LINUX_VGA16=y | 929 | CONFIG_LOGO_LINUX_VGA16=y |
924 | CONFIG_LOGO_LINUX_CLUT224=y | 930 | CONFIG_LOGO_LINUX_CLUT224=y |
925 | CONFIG_LOGO_MAC_CLUT224=y | 931 | CONFIG_LOGO_MAC_CLUT224=y |
926 | |||
927 | # | ||
928 | # Sound | ||
929 | # | ||
930 | CONFIG_SOUND=m | 932 | CONFIG_SOUND=m |
931 | CONFIG_DMASOUND_ATARI=m | 933 | CONFIG_DMASOUND_ATARI=m |
932 | CONFIG_DMASOUND_PAULA=m | 934 | CONFIG_DMASOUND_PAULA=m |
@@ -942,6 +944,7 @@ CONFIG_HIDRAW=y | |||
942 | # CONFIG_NEW_LEDS is not set | 944 | # CONFIG_NEW_LEDS is not set |
943 | # CONFIG_ACCESSIBILITY is not set | 945 | # CONFIG_ACCESSIBILITY is not set |
944 | # CONFIG_RTC_CLASS is not set | 946 | # CONFIG_RTC_CLASS is not set |
947 | # CONFIG_DMADEVICES is not set | ||
945 | # CONFIG_AUXDISPLAY is not set | 948 | # CONFIG_AUXDISPLAY is not set |
946 | # CONFIG_UIO is not set | 949 | # CONFIG_UIO is not set |
947 | 950 | ||
@@ -949,8 +952,6 @@ CONFIG_HIDRAW=y | |||
949 | # Character devices | 952 | # Character devices |
950 | # | 953 | # |
951 | CONFIG_ATARI_MFPSER=m | 954 | CONFIG_ATARI_MFPSER=m |
952 | CONFIG_ATARI_SCC=y | ||
953 | CONFIG_ATARI_SCC_DMA=y | ||
954 | CONFIG_ATARI_MIDI=m | 955 | CONFIG_ATARI_MIDI=m |
955 | CONFIG_ATARI_DSP56K=m | 956 | CONFIG_ATARI_DSP56K=m |
956 | CONFIG_AMIGA_BUILTIN_SERIAL=y | 957 | CONFIG_AMIGA_BUILTIN_SERIAL=y |
@@ -972,8 +973,10 @@ CONFIG_EXT2_FS=y | |||
972 | # CONFIG_EXT2_FS_XIP is not set | 973 | # CONFIG_EXT2_FS_XIP is not set |
973 | CONFIG_EXT3_FS=y | 974 | CONFIG_EXT3_FS=y |
974 | # CONFIG_EXT3_FS_XATTR is not set | 975 | # CONFIG_EXT3_FS_XATTR is not set |
975 | # CONFIG_EXT4DEV_FS is not set | 976 | CONFIG_EXT4DEV_FS=y |
977 | # CONFIG_EXT4DEV_FS_XATTR is not set | ||
976 | CONFIG_JBD=y | 978 | CONFIG_JBD=y |
979 | CONFIG_JBD2=y | ||
977 | CONFIG_REISERFS_FS=m | 980 | CONFIG_REISERFS_FS=m |
978 | # CONFIG_REISERFS_CHECK is not set | 981 | # CONFIG_REISERFS_CHECK is not set |
979 | # CONFIG_REISERFS_PROC_INFO is not set | 982 | # CONFIG_REISERFS_PROC_INFO is not set |
@@ -992,6 +995,7 @@ CONFIG_XFS_FS=m | |||
992 | CONFIG_OCFS2_FS=m | 995 | CONFIG_OCFS2_FS=m |
993 | CONFIG_OCFS2_FS_O2CB=m | 996 | CONFIG_OCFS2_FS_O2CB=m |
994 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m | 997 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m |
998 | # CONFIG_OCFS2_FS_STATS is not set | ||
995 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 999 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
996 | # CONFIG_OCFS2_DEBUG_FS is not set | 1000 | # CONFIG_OCFS2_DEBUG_FS is not set |
997 | CONFIG_DNOTIFY=y | 1001 | CONFIG_DNOTIFY=y |
@@ -1051,6 +1055,7 @@ CONFIG_HFSPLUS_FS=y | |||
1051 | CONFIG_CRAMFS=m | 1055 | CONFIG_CRAMFS=m |
1052 | # CONFIG_VXFS_FS is not set | 1056 | # CONFIG_VXFS_FS is not set |
1053 | CONFIG_MINIX_FS=y | 1057 | CONFIG_MINIX_FS=y |
1058 | # CONFIG_OMFS_FS is not set | ||
1054 | CONFIG_HPFS_FS=m | 1059 | CONFIG_HPFS_FS=m |
1055 | # CONFIG_QNX4FS_FS is not set | 1060 | # CONFIG_QNX4FS_FS is not set |
1056 | # CONFIG_ROMFS_FS is not set | 1061 | # CONFIG_ROMFS_FS is not set |
@@ -1063,18 +1068,17 @@ CONFIG_NFS_FS=y | |||
1063 | CONFIG_NFS_V3=y | 1068 | CONFIG_NFS_V3=y |
1064 | # CONFIG_NFS_V3_ACL is not set | 1069 | # CONFIG_NFS_V3_ACL is not set |
1065 | CONFIG_NFS_V4=y | 1070 | CONFIG_NFS_V4=y |
1071 | CONFIG_ROOT_NFS=y | ||
1066 | CONFIG_NFSD=m | 1072 | CONFIG_NFSD=m |
1067 | CONFIG_NFSD_V3=y | 1073 | CONFIG_NFSD_V3=y |
1068 | # CONFIG_NFSD_V3_ACL is not set | 1074 | # CONFIG_NFSD_V3_ACL is not set |
1069 | # CONFIG_NFSD_V4 is not set | 1075 | # CONFIG_NFSD_V4 is not set |
1070 | CONFIG_ROOT_NFS=y | ||
1071 | CONFIG_LOCKD=y | 1076 | CONFIG_LOCKD=y |
1072 | CONFIG_LOCKD_V4=y | 1077 | CONFIG_LOCKD_V4=y |
1073 | CONFIG_EXPORTFS=m | 1078 | CONFIG_EXPORTFS=m |
1074 | CONFIG_NFS_COMMON=y | 1079 | CONFIG_NFS_COMMON=y |
1075 | CONFIG_SUNRPC=y | 1080 | CONFIG_SUNRPC=y |
1076 | CONFIG_SUNRPC_GSS=y | 1081 | CONFIG_SUNRPC_GSS=y |
1077 | CONFIG_SUNRPC_BIND34=y | ||
1078 | CONFIG_RPCSEC_GSS_KRB5=y | 1082 | CONFIG_RPCSEC_GSS_KRB5=y |
1079 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 1083 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
1080 | CONFIG_SMB_FS=m | 1084 | CONFIG_SMB_FS=m |
@@ -1083,7 +1087,6 @@ CONFIG_SMB_NLS_REMOTE="cp437" | |||
1083 | # CONFIG_CIFS is not set | 1087 | # CONFIG_CIFS is not set |
1084 | # CONFIG_NCP_FS is not set | 1088 | # CONFIG_NCP_FS is not set |
1085 | CONFIG_CODA_FS=m | 1089 | CONFIG_CODA_FS=m |
1086 | # CONFIG_CODA_FS_OLD_API is not set | ||
1087 | # CONFIG_AFS_FS is not set | 1090 | # CONFIG_AFS_FS is not set |
1088 | 1091 | ||
1089 | # | 1092 | # |
@@ -1152,6 +1155,8 @@ CONFIG_MAGIC_SYSRQ=y | |||
1152 | # CONFIG_HEADERS_CHECK is not set | 1155 | # CONFIG_HEADERS_CHECK is not set |
1153 | # CONFIG_DEBUG_KERNEL is not set | 1156 | # CONFIG_DEBUG_KERNEL is not set |
1154 | CONFIG_DEBUG_BUGVERBOSE=y | 1157 | CONFIG_DEBUG_BUGVERBOSE=y |
1158 | CONFIG_DEBUG_MEMORY_INIT=y | ||
1159 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
1155 | # CONFIG_SAMPLES is not set | 1160 | # CONFIG_SAMPLES is not set |
1156 | 1161 | ||
1157 | # | 1162 | # |
@@ -1211,6 +1216,10 @@ CONFIG_CRYPTO_CRC32C=m | |||
1211 | CONFIG_CRYPTO_MD4=m | 1216 | CONFIG_CRYPTO_MD4=m |
1212 | CONFIG_CRYPTO_MD5=y | 1217 | CONFIG_CRYPTO_MD5=y |
1213 | CONFIG_CRYPTO_MICHAEL_MIC=m | 1218 | CONFIG_CRYPTO_MICHAEL_MIC=m |
1219 | CONFIG_CRYPTO_RMD128=m | ||
1220 | CONFIG_CRYPTO_RMD160=m | ||
1221 | CONFIG_CRYPTO_RMD256=m | ||
1222 | CONFIG_CRYPTO_RMD320=m | ||
1214 | CONFIG_CRYPTO_SHA1=m | 1223 | CONFIG_CRYPTO_SHA1=m |
1215 | CONFIG_CRYPTO_SHA256=m | 1224 | CONFIG_CRYPTO_SHA256=m |
1216 | CONFIG_CRYPTO_SHA512=m | 1225 | CONFIG_CRYPTO_SHA512=m |
@@ -1252,6 +1261,7 @@ CONFIG_BITREVERSE=y | |||
1252 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | 1261 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set |
1253 | CONFIG_CRC_CCITT=m | 1262 | CONFIG_CRC_CCITT=m |
1254 | CONFIG_CRC16=y | 1263 | CONFIG_CRC16=y |
1264 | CONFIG_CRC_T10DIF=y | ||
1255 | CONFIG_CRC_ITU_T=m | 1265 | CONFIG_CRC_ITU_T=m |
1256 | CONFIG_CRC32=y | 1266 | CONFIG_CRC32=y |
1257 | # CONFIG_CRC7 is not set | 1267 | # CONFIG_CRC7 is not set |
diff --git a/arch/m68k/configs/mvme147_defconfig b/arch/m68k/configs/mvme147_defconfig index e7a8246840b5..cacb5aef6a37 100644 --- a/arch/m68k/configs/mvme147_defconfig +++ b/arch/m68k/configs/mvme147_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.26-rc4 | 3 | # Linux kernel version: 2.6.27-rc6 |
4 | # Wed May 28 22:47:35 2008 | 4 | # Wed Sep 10 09:02:08 2008 |
5 | # | 5 | # |
6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -52,7 +52,6 @@ CONFIG_SYSCTL=y | |||
52 | # CONFIG_EMBEDDED is not set | 52 | # CONFIG_EMBEDDED is not set |
53 | CONFIG_UID16=y | 53 | CONFIG_UID16=y |
54 | CONFIG_SYSCTL_SYSCALL=y | 54 | CONFIG_SYSCTL_SYSCALL=y |
55 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
56 | CONFIG_KALLSYMS=y | 55 | CONFIG_KALLSYMS=y |
57 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 56 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
58 | CONFIG_HOTPLUG=y | 57 | CONFIG_HOTPLUG=y |
@@ -75,10 +74,16 @@ CONFIG_SLAB=y | |||
75 | # CONFIG_PROFILING is not set | 74 | # CONFIG_PROFILING is not set |
76 | # CONFIG_MARKERS is not set | 75 | # CONFIG_MARKERS is not set |
77 | # CONFIG_HAVE_OPROFILE is not set | 76 | # CONFIG_HAVE_OPROFILE is not set |
77 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
78 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
78 | # CONFIG_HAVE_KPROBES is not set | 79 | # CONFIG_HAVE_KPROBES is not set |
79 | # CONFIG_HAVE_KRETPROBES is not set | 80 | # CONFIG_HAVE_KRETPROBES is not set |
81 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
80 | # CONFIG_HAVE_DMA_ATTRS is not set | 82 | # CONFIG_HAVE_DMA_ATTRS is not set |
83 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
84 | # CONFIG_HAVE_CLK is not set | ||
81 | CONFIG_PROC_PAGE_MONITOR=y | 85 | CONFIG_PROC_PAGE_MONITOR=y |
86 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||
82 | CONFIG_SLABINFO=y | 87 | CONFIG_SLABINFO=y |
83 | CONFIG_RT_MUTEXES=y | 88 | CONFIG_RT_MUTEXES=y |
84 | # CONFIG_TINY_SHMEM is not set | 89 | # CONFIG_TINY_SHMEM is not set |
@@ -95,6 +100,7 @@ CONFIG_BLOCK=y | |||
95 | # CONFIG_BLK_DEV_IO_TRACE is not set | 100 | # CONFIG_BLK_DEV_IO_TRACE is not set |
96 | # CONFIG_LSF is not set | 101 | # CONFIG_LSF is not set |
97 | CONFIG_BLK_DEV_BSG=y | 102 | CONFIG_BLK_DEV_BSG=y |
103 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
98 | 104 | ||
99 | # | 105 | # |
100 | # IO Schedulers | 106 | # IO Schedulers |
@@ -163,10 +169,6 @@ CONFIG_BINFMT_MISC=m | |||
163 | CONFIG_PROC_HARDWARE=y | 169 | CONFIG_PROC_HARDWARE=y |
164 | CONFIG_ZONE_DMA=y | 170 | CONFIG_ZONE_DMA=y |
165 | # CONFIG_ARCH_SUPPORTS_MSI is not set | 171 | # CONFIG_ARCH_SUPPORTS_MSI is not set |
166 | |||
167 | # | ||
168 | # Networking | ||
169 | # | ||
170 | CONFIG_NET=y | 172 | CONFIG_NET=y |
171 | 173 | ||
172 | # | 174 | # |
@@ -180,6 +182,7 @@ CONFIG_XFRM=y | |||
180 | # CONFIG_XFRM_SUB_POLICY is not set | 182 | # CONFIG_XFRM_SUB_POLICY is not set |
181 | CONFIG_XFRM_MIGRATE=y | 183 | CONFIG_XFRM_MIGRATE=y |
182 | # CONFIG_XFRM_STATISTICS is not set | 184 | # CONFIG_XFRM_STATISTICS is not set |
185 | CONFIG_XFRM_IPCOMP=m | ||
183 | CONFIG_NET_KEY=y | 186 | CONFIG_NET_KEY=y |
184 | CONFIG_NET_KEY_MIGRATE=y | 187 | CONFIG_NET_KEY_MIGRATE=y |
185 | CONFIG_INET=y | 188 | CONFIG_INET=y |
@@ -413,6 +416,7 @@ CONFIG_NET_CLS_ROUTE=y | |||
413 | # | 416 | # |
414 | # CONFIG_CFG80211 is not set | 417 | # CONFIG_CFG80211 is not set |
415 | CONFIG_WIRELESS_EXT=y | 418 | CONFIG_WIRELESS_EXT=y |
419 | # CONFIG_WIRELESS_EXT_SYSFS is not set | ||
416 | # CONFIG_MAC80211 is not set | 420 | # CONFIG_MAC80211 is not set |
417 | CONFIG_IEEE80211=m | 421 | CONFIG_IEEE80211=m |
418 | # CONFIG_IEEE80211_DEBUG is not set | 422 | # CONFIG_IEEE80211_DEBUG is not set |
@@ -432,7 +436,9 @@ CONFIG_IEEE80211_CRYPT_TKIP=m | |||
432 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 436 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
433 | CONFIG_STANDALONE=y | 437 | CONFIG_STANDALONE=y |
434 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 438 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
435 | CONFIG_FW_LOADER=m | 439 | CONFIG_FW_LOADER=y |
440 | # CONFIG_FIRMWARE_IN_KERNEL is not set | ||
441 | CONFIG_EXTRA_FIRMWARE="" | ||
436 | # CONFIG_SYS_HYPERVISOR is not set | 442 | # CONFIG_SYS_HYPERVISOR is not set |
437 | CONFIG_CONNECTOR=m | 443 | CONFIG_CONNECTOR=m |
438 | # CONFIG_MTD is not set | 444 | # CONFIG_MTD is not set |
@@ -450,6 +456,7 @@ CONFIG_CDROM_PKTCDVD=m | |||
450 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 | 456 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 |
451 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set | 457 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set |
452 | CONFIG_ATA_OVER_ETH=m | 458 | CONFIG_ATA_OVER_ETH=m |
459 | # CONFIG_BLK_DEV_HD is not set | ||
453 | CONFIG_MISC_DEVICES=y | 460 | CONFIG_MISC_DEVICES=y |
454 | # CONFIG_EEPROM_93CX6 is not set | 461 | # CONFIG_EEPROM_93CX6 is not set |
455 | # CONFIG_ENCLOSURE_SERVICES is not set | 462 | # CONFIG_ENCLOSURE_SERVICES is not set |
@@ -502,6 +509,7 @@ CONFIG_SCSI_LOWLEVEL=y | |||
502 | CONFIG_ISCSI_TCP=m | 509 | CONFIG_ISCSI_TCP=m |
503 | # CONFIG_SCSI_DEBUG is not set | 510 | # CONFIG_SCSI_DEBUG is not set |
504 | CONFIG_MVME147_SCSI=y | 511 | CONFIG_MVME147_SCSI=y |
512 | # CONFIG_SCSI_DH is not set | ||
505 | CONFIG_MD=y | 513 | CONFIG_MD=y |
506 | CONFIG_BLK_DEV_MD=m | 514 | CONFIG_BLK_DEV_MD=m |
507 | CONFIG_MD_LINEAR=m | 515 | CONFIG_MD_LINEAR=m |
@@ -510,7 +518,7 @@ CONFIG_MD_RAID1=m | |||
510 | # CONFIG_MD_RAID10 is not set | 518 | # CONFIG_MD_RAID10 is not set |
511 | CONFIG_MD_RAID456=m | 519 | CONFIG_MD_RAID456=m |
512 | CONFIG_MD_RAID5_RESHAPE=y | 520 | CONFIG_MD_RAID5_RESHAPE=y |
513 | CONFIG_MD_MULTIPATH=m | 521 | # CONFIG_MD_MULTIPATH is not set |
514 | # CONFIG_MD_FAULTY is not set | 522 | # CONFIG_MD_FAULTY is not set |
515 | CONFIG_BLK_DEV_DM=m | 523 | CONFIG_BLK_DEV_DM=m |
516 | # CONFIG_DM_DEBUG is not set | 524 | # CONFIG_DM_DEBUG is not set |
@@ -519,13 +527,9 @@ CONFIG_DM_SNAPSHOT=m | |||
519 | CONFIG_DM_MIRROR=m | 527 | CONFIG_DM_MIRROR=m |
520 | CONFIG_DM_ZERO=m | 528 | CONFIG_DM_ZERO=m |
521 | CONFIG_DM_MULTIPATH=m | 529 | CONFIG_DM_MULTIPATH=m |
522 | CONFIG_DM_MULTIPATH_EMC=m | ||
523 | CONFIG_DM_MULTIPATH_RDAC=m | ||
524 | CONFIG_DM_MULTIPATH_HP=m | ||
525 | # CONFIG_DM_DELAY is not set | 530 | # CONFIG_DM_DELAY is not set |
526 | CONFIG_DM_UEVENT=y | 531 | CONFIG_DM_UEVENT=y |
527 | CONFIG_NETDEVICES=y | 532 | CONFIG_NETDEVICES=y |
528 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
529 | CONFIG_DUMMY=m | 533 | CONFIG_DUMMY=m |
530 | # CONFIG_BONDING is not set | 534 | # CONFIG_BONDING is not set |
531 | CONFIG_MACVLAN=m | 535 | CONFIG_MACVLAN=m |
@@ -630,6 +634,7 @@ CONFIG_SERIO_LIBPS2=m | |||
630 | # Character devices | 634 | # Character devices |
631 | # | 635 | # |
632 | CONFIG_VT=y | 636 | CONFIG_VT=y |
637 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
633 | CONFIG_VT_CONSOLE=y | 638 | CONFIG_VT_CONSOLE=y |
634 | CONFIG_HW_CONSOLE=y | 639 | CONFIG_HW_CONSOLE=y |
635 | CONFIG_VT_HW_CONSOLE_BINDING=y | 640 | CONFIG_VT_HW_CONSOLE_BINDING=y |
@@ -660,6 +665,7 @@ CONFIG_GEN_RTC_X=y | |||
660 | # CONFIG_POWER_SUPPLY is not set | 665 | # CONFIG_POWER_SUPPLY is not set |
661 | # CONFIG_HWMON is not set | 666 | # CONFIG_HWMON is not set |
662 | # CONFIG_THERMAL is not set | 667 | # CONFIG_THERMAL is not set |
668 | # CONFIG_THERMAL_HWMON is not set | ||
663 | # CONFIG_WATCHDOG is not set | 669 | # CONFIG_WATCHDOG is not set |
664 | 670 | ||
665 | # | 671 | # |
@@ -671,8 +677,10 @@ CONFIG_SSB_POSSIBLE=y | |||
671 | # | 677 | # |
672 | # Multifunction device drivers | 678 | # Multifunction device drivers |
673 | # | 679 | # |
680 | # CONFIG_MFD_CORE is not set | ||
674 | # CONFIG_MFD_SM501 is not set | 681 | # CONFIG_MFD_SM501 is not set |
675 | # CONFIG_HTC_PASIC3 is not set | 682 | # CONFIG_HTC_PASIC3 is not set |
683 | # CONFIG_MFD_TMIO is not set | ||
676 | 684 | ||
677 | # | 685 | # |
678 | # Multimedia devices | 686 | # Multimedia devices |
@@ -707,10 +715,6 @@ CONFIG_SSB_POSSIBLE=y | |||
707 | # Console display driver support | 715 | # Console display driver support |
708 | # | 716 | # |
709 | CONFIG_DUMMY_CONSOLE=y | 717 | CONFIG_DUMMY_CONSOLE=y |
710 | |||
711 | # | ||
712 | # Sound | ||
713 | # | ||
714 | # CONFIG_SOUND is not set | 718 | # CONFIG_SOUND is not set |
715 | CONFIG_HID_SUPPORT=y | 719 | CONFIG_HID_SUPPORT=y |
716 | CONFIG_HID=m | 720 | CONFIG_HID=m |
@@ -722,6 +726,7 @@ CONFIG_HIDRAW=y | |||
722 | # CONFIG_NEW_LEDS is not set | 726 | # CONFIG_NEW_LEDS is not set |
723 | # CONFIG_ACCESSIBILITY is not set | 727 | # CONFIG_ACCESSIBILITY is not set |
724 | # CONFIG_RTC_CLASS is not set | 728 | # CONFIG_RTC_CLASS is not set |
729 | # CONFIG_DMADEVICES is not set | ||
725 | # CONFIG_UIO is not set | 730 | # CONFIG_UIO is not set |
726 | 731 | ||
727 | # | 732 | # |
@@ -758,6 +763,7 @@ CONFIG_XFS_FS=m | |||
758 | CONFIG_OCFS2_FS=m | 763 | CONFIG_OCFS2_FS=m |
759 | CONFIG_OCFS2_FS_O2CB=m | 764 | CONFIG_OCFS2_FS_O2CB=m |
760 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m | 765 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m |
766 | # CONFIG_OCFS2_FS_STATS is not set | ||
761 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 767 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
762 | # CONFIG_OCFS2_DEBUG_FS is not set | 768 | # CONFIG_OCFS2_DEBUG_FS is not set |
763 | CONFIG_DNOTIFY=y | 769 | CONFIG_DNOTIFY=y |
@@ -817,6 +823,7 @@ CONFIG_HFSPLUS_FS=m | |||
817 | CONFIG_CRAMFS=m | 823 | CONFIG_CRAMFS=m |
818 | # CONFIG_VXFS_FS is not set | 824 | # CONFIG_VXFS_FS is not set |
819 | CONFIG_MINIX_FS=y | 825 | CONFIG_MINIX_FS=y |
826 | # CONFIG_OMFS_FS is not set | ||
820 | CONFIG_HPFS_FS=m | 827 | CONFIG_HPFS_FS=m |
821 | # CONFIG_QNX4FS_FS is not set | 828 | # CONFIG_QNX4FS_FS is not set |
822 | # CONFIG_ROMFS_FS is not set | 829 | # CONFIG_ROMFS_FS is not set |
@@ -829,18 +836,17 @@ CONFIG_NFS_FS=y | |||
829 | CONFIG_NFS_V3=y | 836 | CONFIG_NFS_V3=y |
830 | # CONFIG_NFS_V3_ACL is not set | 837 | # CONFIG_NFS_V3_ACL is not set |
831 | CONFIG_NFS_V4=y | 838 | CONFIG_NFS_V4=y |
839 | CONFIG_ROOT_NFS=y | ||
832 | CONFIG_NFSD=m | 840 | CONFIG_NFSD=m |
833 | CONFIG_NFSD_V3=y | 841 | CONFIG_NFSD_V3=y |
834 | # CONFIG_NFSD_V3_ACL is not set | 842 | # CONFIG_NFSD_V3_ACL is not set |
835 | # CONFIG_NFSD_V4 is not set | 843 | # CONFIG_NFSD_V4 is not set |
836 | CONFIG_ROOT_NFS=y | ||
837 | CONFIG_LOCKD=y | 844 | CONFIG_LOCKD=y |
838 | CONFIG_LOCKD_V4=y | 845 | CONFIG_LOCKD_V4=y |
839 | CONFIG_EXPORTFS=m | 846 | CONFIG_EXPORTFS=m |
840 | CONFIG_NFS_COMMON=y | 847 | CONFIG_NFS_COMMON=y |
841 | CONFIG_SUNRPC=y | 848 | CONFIG_SUNRPC=y |
842 | CONFIG_SUNRPC_GSS=y | 849 | CONFIG_SUNRPC_GSS=y |
843 | CONFIG_SUNRPC_BIND34=y | ||
844 | CONFIG_RPCSEC_GSS_KRB5=y | 850 | CONFIG_RPCSEC_GSS_KRB5=y |
845 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 851 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
846 | CONFIG_SMB_FS=m | 852 | CONFIG_SMB_FS=m |
@@ -849,7 +855,6 @@ CONFIG_SMB_NLS_REMOTE="cp437" | |||
849 | # CONFIG_CIFS is not set | 855 | # CONFIG_CIFS is not set |
850 | # CONFIG_NCP_FS is not set | 856 | # CONFIG_NCP_FS is not set |
851 | CONFIG_CODA_FS=m | 857 | CONFIG_CODA_FS=m |
852 | # CONFIG_CODA_FS_OLD_API is not set | ||
853 | # CONFIG_AFS_FS is not set | 858 | # CONFIG_AFS_FS is not set |
854 | 859 | ||
855 | # | 860 | # |
@@ -914,6 +919,8 @@ CONFIG_MAGIC_SYSRQ=y | |||
914 | # CONFIG_HEADERS_CHECK is not set | 919 | # CONFIG_HEADERS_CHECK is not set |
915 | # CONFIG_DEBUG_KERNEL is not set | 920 | # CONFIG_DEBUG_KERNEL is not set |
916 | CONFIG_DEBUG_BUGVERBOSE=y | 921 | CONFIG_DEBUG_BUGVERBOSE=y |
922 | CONFIG_DEBUG_MEMORY_INIT=y | ||
923 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
917 | # CONFIG_SAMPLES is not set | 924 | # CONFIG_SAMPLES is not set |
918 | 925 | ||
919 | # | 926 | # |
@@ -973,6 +980,10 @@ CONFIG_CRYPTO_CRC32C=m | |||
973 | CONFIG_CRYPTO_MD4=m | 980 | CONFIG_CRYPTO_MD4=m |
974 | CONFIG_CRYPTO_MD5=y | 981 | CONFIG_CRYPTO_MD5=y |
975 | CONFIG_CRYPTO_MICHAEL_MIC=m | 982 | CONFIG_CRYPTO_MICHAEL_MIC=m |
983 | CONFIG_CRYPTO_RMD128=m | ||
984 | CONFIG_CRYPTO_RMD160=m | ||
985 | CONFIG_CRYPTO_RMD256=m | ||
986 | CONFIG_CRYPTO_RMD320=m | ||
976 | CONFIG_CRYPTO_SHA1=m | 987 | CONFIG_CRYPTO_SHA1=m |
977 | CONFIG_CRYPTO_SHA256=m | 988 | CONFIG_CRYPTO_SHA256=m |
978 | CONFIG_CRYPTO_SHA512=m | 989 | CONFIG_CRYPTO_SHA512=m |
@@ -1014,6 +1025,7 @@ CONFIG_BITREVERSE=y | |||
1014 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | 1025 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set |
1015 | CONFIG_CRC_CCITT=m | 1026 | CONFIG_CRC_CCITT=m |
1016 | CONFIG_CRC16=m | 1027 | CONFIG_CRC16=m |
1028 | CONFIG_CRC_T10DIF=y | ||
1017 | CONFIG_CRC_ITU_T=m | 1029 | CONFIG_CRC_ITU_T=m |
1018 | CONFIG_CRC32=y | 1030 | CONFIG_CRC32=y |
1019 | # CONFIG_CRC7 is not set | 1031 | # CONFIG_CRC7 is not set |
diff --git a/arch/m68k/configs/mvme16x_defconfig b/arch/m68k/configs/mvme16x_defconfig index ab536eb172bb..a183e25e348d 100644 --- a/arch/m68k/configs/mvme16x_defconfig +++ b/arch/m68k/configs/mvme16x_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.26-rc4 | 3 | # Linux kernel version: 2.6.27-rc6 |
4 | # Wed May 28 22:47:35 2008 | 4 | # Wed Sep 10 09:02:09 2008 |
5 | # | 5 | # |
6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -52,7 +52,6 @@ CONFIG_SYSCTL=y | |||
52 | # CONFIG_EMBEDDED is not set | 52 | # CONFIG_EMBEDDED is not set |
53 | CONFIG_UID16=y | 53 | CONFIG_UID16=y |
54 | CONFIG_SYSCTL_SYSCALL=y | 54 | CONFIG_SYSCTL_SYSCALL=y |
55 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
56 | CONFIG_KALLSYMS=y | 55 | CONFIG_KALLSYMS=y |
57 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 56 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
58 | CONFIG_HOTPLUG=y | 57 | CONFIG_HOTPLUG=y |
@@ -75,10 +74,16 @@ CONFIG_SLAB=y | |||
75 | # CONFIG_PROFILING is not set | 74 | # CONFIG_PROFILING is not set |
76 | # CONFIG_MARKERS is not set | 75 | # CONFIG_MARKERS is not set |
77 | # CONFIG_HAVE_OPROFILE is not set | 76 | # CONFIG_HAVE_OPROFILE is not set |
77 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
78 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
78 | # CONFIG_HAVE_KPROBES is not set | 79 | # CONFIG_HAVE_KPROBES is not set |
79 | # CONFIG_HAVE_KRETPROBES is not set | 80 | # CONFIG_HAVE_KRETPROBES is not set |
81 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
80 | # CONFIG_HAVE_DMA_ATTRS is not set | 82 | # CONFIG_HAVE_DMA_ATTRS is not set |
83 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
84 | # CONFIG_HAVE_CLK is not set | ||
81 | CONFIG_PROC_PAGE_MONITOR=y | 85 | CONFIG_PROC_PAGE_MONITOR=y |
86 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||
82 | CONFIG_SLABINFO=y | 87 | CONFIG_SLABINFO=y |
83 | CONFIG_RT_MUTEXES=y | 88 | CONFIG_RT_MUTEXES=y |
84 | # CONFIG_TINY_SHMEM is not set | 89 | # CONFIG_TINY_SHMEM is not set |
@@ -95,6 +100,7 @@ CONFIG_BLOCK=y | |||
95 | # CONFIG_BLK_DEV_IO_TRACE is not set | 100 | # CONFIG_BLK_DEV_IO_TRACE is not set |
96 | # CONFIG_LSF is not set | 101 | # CONFIG_LSF is not set |
97 | CONFIG_BLK_DEV_BSG=y | 102 | CONFIG_BLK_DEV_BSG=y |
103 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
98 | 104 | ||
99 | # | 105 | # |
100 | # IO Schedulers | 106 | # IO Schedulers |
@@ -163,10 +169,6 @@ CONFIG_BINFMT_MISC=m | |||
163 | CONFIG_PROC_HARDWARE=y | 169 | CONFIG_PROC_HARDWARE=y |
164 | CONFIG_ZONE_DMA=y | 170 | CONFIG_ZONE_DMA=y |
165 | # CONFIG_ARCH_SUPPORTS_MSI is not set | 171 | # CONFIG_ARCH_SUPPORTS_MSI is not set |
166 | |||
167 | # | ||
168 | # Networking | ||
169 | # | ||
170 | CONFIG_NET=y | 172 | CONFIG_NET=y |
171 | 173 | ||
172 | # | 174 | # |
@@ -180,6 +182,7 @@ CONFIG_XFRM=y | |||
180 | # CONFIG_XFRM_SUB_POLICY is not set | 182 | # CONFIG_XFRM_SUB_POLICY is not set |
181 | CONFIG_XFRM_MIGRATE=y | 183 | CONFIG_XFRM_MIGRATE=y |
182 | # CONFIG_XFRM_STATISTICS is not set | 184 | # CONFIG_XFRM_STATISTICS is not set |
185 | CONFIG_XFRM_IPCOMP=m | ||
183 | CONFIG_NET_KEY=y | 186 | CONFIG_NET_KEY=y |
184 | CONFIG_NET_KEY_MIGRATE=y | 187 | CONFIG_NET_KEY_MIGRATE=y |
185 | CONFIG_INET=y | 188 | CONFIG_INET=y |
@@ -413,6 +416,7 @@ CONFIG_NET_CLS_ROUTE=y | |||
413 | # | 416 | # |
414 | # CONFIG_CFG80211 is not set | 417 | # CONFIG_CFG80211 is not set |
415 | CONFIG_WIRELESS_EXT=y | 418 | CONFIG_WIRELESS_EXT=y |
419 | # CONFIG_WIRELESS_EXT_SYSFS is not set | ||
416 | # CONFIG_MAC80211 is not set | 420 | # CONFIG_MAC80211 is not set |
417 | CONFIG_IEEE80211=m | 421 | CONFIG_IEEE80211=m |
418 | # CONFIG_IEEE80211_DEBUG is not set | 422 | # CONFIG_IEEE80211_DEBUG is not set |
@@ -432,7 +436,9 @@ CONFIG_IEEE80211_CRYPT_TKIP=m | |||
432 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 436 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
433 | CONFIG_STANDALONE=y | 437 | CONFIG_STANDALONE=y |
434 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 438 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
435 | CONFIG_FW_LOADER=m | 439 | CONFIG_FW_LOADER=y |
440 | # CONFIG_FIRMWARE_IN_KERNEL is not set | ||
441 | CONFIG_EXTRA_FIRMWARE="" | ||
436 | # CONFIG_SYS_HYPERVISOR is not set | 442 | # CONFIG_SYS_HYPERVISOR is not set |
437 | CONFIG_CONNECTOR=m | 443 | CONFIG_CONNECTOR=m |
438 | # CONFIG_MTD is not set | 444 | # CONFIG_MTD is not set |
@@ -450,6 +456,7 @@ CONFIG_CDROM_PKTCDVD=m | |||
450 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 | 456 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 |
451 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set | 457 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set |
452 | CONFIG_ATA_OVER_ETH=m | 458 | CONFIG_ATA_OVER_ETH=m |
459 | # CONFIG_BLK_DEV_HD is not set | ||
453 | CONFIG_MISC_DEVICES=y | 460 | CONFIG_MISC_DEVICES=y |
454 | # CONFIG_EEPROM_93CX6 is not set | 461 | # CONFIG_EEPROM_93CX6 is not set |
455 | # CONFIG_ENCLOSURE_SERVICES is not set | 462 | # CONFIG_ENCLOSURE_SERVICES is not set |
@@ -503,6 +510,7 @@ CONFIG_ISCSI_TCP=m | |||
503 | CONFIG_53C700_BE_BUS=y | 510 | CONFIG_53C700_BE_BUS=y |
504 | # CONFIG_SCSI_DEBUG is not set | 511 | # CONFIG_SCSI_DEBUG is not set |
505 | CONFIG_MVME16x_SCSI=y | 512 | CONFIG_MVME16x_SCSI=y |
513 | # CONFIG_SCSI_DH is not set | ||
506 | CONFIG_MD=y | 514 | CONFIG_MD=y |
507 | CONFIG_BLK_DEV_MD=m | 515 | CONFIG_BLK_DEV_MD=m |
508 | CONFIG_MD_LINEAR=m | 516 | CONFIG_MD_LINEAR=m |
@@ -511,7 +519,7 @@ CONFIG_MD_RAID1=m | |||
511 | # CONFIG_MD_RAID10 is not set | 519 | # CONFIG_MD_RAID10 is not set |
512 | CONFIG_MD_RAID456=m | 520 | CONFIG_MD_RAID456=m |
513 | CONFIG_MD_RAID5_RESHAPE=y | 521 | CONFIG_MD_RAID5_RESHAPE=y |
514 | CONFIG_MD_MULTIPATH=m | 522 | # CONFIG_MD_MULTIPATH is not set |
515 | # CONFIG_MD_FAULTY is not set | 523 | # CONFIG_MD_FAULTY is not set |
516 | CONFIG_BLK_DEV_DM=m | 524 | CONFIG_BLK_DEV_DM=m |
517 | # CONFIG_DM_DEBUG is not set | 525 | # CONFIG_DM_DEBUG is not set |
@@ -520,13 +528,9 @@ CONFIG_DM_SNAPSHOT=m | |||
520 | CONFIG_DM_MIRROR=m | 528 | CONFIG_DM_MIRROR=m |
521 | CONFIG_DM_ZERO=m | 529 | CONFIG_DM_ZERO=m |
522 | CONFIG_DM_MULTIPATH=m | 530 | CONFIG_DM_MULTIPATH=m |
523 | CONFIG_DM_MULTIPATH_EMC=m | ||
524 | CONFIG_DM_MULTIPATH_RDAC=m | ||
525 | CONFIG_DM_MULTIPATH_HP=m | ||
526 | # CONFIG_DM_DELAY is not set | 531 | # CONFIG_DM_DELAY is not set |
527 | CONFIG_DM_UEVENT=y | 532 | CONFIG_DM_UEVENT=y |
528 | CONFIG_NETDEVICES=y | 533 | CONFIG_NETDEVICES=y |
529 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
530 | CONFIG_DUMMY=m | 534 | CONFIG_DUMMY=m |
531 | # CONFIG_BONDING is not set | 535 | # CONFIG_BONDING is not set |
532 | CONFIG_MACVLAN=m | 536 | CONFIG_MACVLAN=m |
@@ -631,6 +635,7 @@ CONFIG_SERIO_LIBPS2=m | |||
631 | # Character devices | 635 | # Character devices |
632 | # | 636 | # |
633 | CONFIG_VT=y | 637 | CONFIG_VT=y |
638 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
634 | CONFIG_VT_CONSOLE=y | 639 | CONFIG_VT_CONSOLE=y |
635 | CONFIG_HW_CONSOLE=y | 640 | CONFIG_HW_CONSOLE=y |
636 | CONFIG_VT_HW_CONSOLE_BINDING=y | 641 | CONFIG_VT_HW_CONSOLE_BINDING=y |
@@ -661,6 +666,7 @@ CONFIG_GEN_RTC_X=y | |||
661 | # CONFIG_POWER_SUPPLY is not set | 666 | # CONFIG_POWER_SUPPLY is not set |
662 | # CONFIG_HWMON is not set | 667 | # CONFIG_HWMON is not set |
663 | # CONFIG_THERMAL is not set | 668 | # CONFIG_THERMAL is not set |
669 | # CONFIG_THERMAL_HWMON is not set | ||
664 | # CONFIG_WATCHDOG is not set | 670 | # CONFIG_WATCHDOG is not set |
665 | 671 | ||
666 | # | 672 | # |
@@ -672,8 +678,10 @@ CONFIG_SSB_POSSIBLE=y | |||
672 | # | 678 | # |
673 | # Multifunction device drivers | 679 | # Multifunction device drivers |
674 | # | 680 | # |
681 | # CONFIG_MFD_CORE is not set | ||
675 | # CONFIG_MFD_SM501 is not set | 682 | # CONFIG_MFD_SM501 is not set |
676 | # CONFIG_HTC_PASIC3 is not set | 683 | # CONFIG_HTC_PASIC3 is not set |
684 | # CONFIG_MFD_TMIO is not set | ||
677 | 685 | ||
678 | # | 686 | # |
679 | # Multimedia devices | 687 | # Multimedia devices |
@@ -708,10 +716,6 @@ CONFIG_SSB_POSSIBLE=y | |||
708 | # Console display driver support | 716 | # Console display driver support |
709 | # | 717 | # |
710 | CONFIG_DUMMY_CONSOLE=y | 718 | CONFIG_DUMMY_CONSOLE=y |
711 | |||
712 | # | ||
713 | # Sound | ||
714 | # | ||
715 | # CONFIG_SOUND is not set | 719 | # CONFIG_SOUND is not set |
716 | CONFIG_HID_SUPPORT=y | 720 | CONFIG_HID_SUPPORT=y |
717 | CONFIG_HID=m | 721 | CONFIG_HID=m |
@@ -723,6 +727,7 @@ CONFIG_HIDRAW=y | |||
723 | # CONFIG_NEW_LEDS is not set | 727 | # CONFIG_NEW_LEDS is not set |
724 | # CONFIG_ACCESSIBILITY is not set | 728 | # CONFIG_ACCESSIBILITY is not set |
725 | # CONFIG_RTC_CLASS is not set | 729 | # CONFIG_RTC_CLASS is not set |
730 | # CONFIG_DMADEVICES is not set | ||
726 | # CONFIG_UIO is not set | 731 | # CONFIG_UIO is not set |
727 | 732 | ||
728 | # | 733 | # |
@@ -760,6 +765,7 @@ CONFIG_XFS_FS=m | |||
760 | CONFIG_OCFS2_FS=m | 765 | CONFIG_OCFS2_FS=m |
761 | CONFIG_OCFS2_FS_O2CB=m | 766 | CONFIG_OCFS2_FS_O2CB=m |
762 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m | 767 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m |
768 | # CONFIG_OCFS2_FS_STATS is not set | ||
763 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 769 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
764 | # CONFIG_OCFS2_DEBUG_FS is not set | 770 | # CONFIG_OCFS2_DEBUG_FS is not set |
765 | CONFIG_DNOTIFY=y | 771 | CONFIG_DNOTIFY=y |
@@ -819,6 +825,7 @@ CONFIG_HFSPLUS_FS=m | |||
819 | CONFIG_CRAMFS=m | 825 | CONFIG_CRAMFS=m |
820 | # CONFIG_VXFS_FS is not set | 826 | # CONFIG_VXFS_FS is not set |
821 | CONFIG_MINIX_FS=y | 827 | CONFIG_MINIX_FS=y |
828 | # CONFIG_OMFS_FS is not set | ||
822 | CONFIG_HPFS_FS=m | 829 | CONFIG_HPFS_FS=m |
823 | # CONFIG_QNX4FS_FS is not set | 830 | # CONFIG_QNX4FS_FS is not set |
824 | # CONFIG_ROMFS_FS is not set | 831 | # CONFIG_ROMFS_FS is not set |
@@ -831,18 +838,17 @@ CONFIG_NFS_FS=y | |||
831 | CONFIG_NFS_V3=y | 838 | CONFIG_NFS_V3=y |
832 | # CONFIG_NFS_V3_ACL is not set | 839 | # CONFIG_NFS_V3_ACL is not set |
833 | CONFIG_NFS_V4=y | 840 | CONFIG_NFS_V4=y |
841 | CONFIG_ROOT_NFS=y | ||
834 | CONFIG_NFSD=m | 842 | CONFIG_NFSD=m |
835 | CONFIG_NFSD_V3=y | 843 | CONFIG_NFSD_V3=y |
836 | # CONFIG_NFSD_V3_ACL is not set | 844 | # CONFIG_NFSD_V3_ACL is not set |
837 | # CONFIG_NFSD_V4 is not set | 845 | # CONFIG_NFSD_V4 is not set |
838 | CONFIG_ROOT_NFS=y | ||
839 | CONFIG_LOCKD=y | 846 | CONFIG_LOCKD=y |
840 | CONFIG_LOCKD_V4=y | 847 | CONFIG_LOCKD_V4=y |
841 | CONFIG_EXPORTFS=m | 848 | CONFIG_EXPORTFS=m |
842 | CONFIG_NFS_COMMON=y | 849 | CONFIG_NFS_COMMON=y |
843 | CONFIG_SUNRPC=y | 850 | CONFIG_SUNRPC=y |
844 | CONFIG_SUNRPC_GSS=y | 851 | CONFIG_SUNRPC_GSS=y |
845 | CONFIG_SUNRPC_BIND34=y | ||
846 | CONFIG_RPCSEC_GSS_KRB5=y | 852 | CONFIG_RPCSEC_GSS_KRB5=y |
847 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 853 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
848 | CONFIG_SMB_FS=m | 854 | CONFIG_SMB_FS=m |
@@ -851,7 +857,6 @@ CONFIG_SMB_NLS_REMOTE="cp437" | |||
851 | # CONFIG_CIFS is not set | 857 | # CONFIG_CIFS is not set |
852 | # CONFIG_NCP_FS is not set | 858 | # CONFIG_NCP_FS is not set |
853 | CONFIG_CODA_FS=m | 859 | CONFIG_CODA_FS=m |
854 | # CONFIG_CODA_FS_OLD_API is not set | ||
855 | # CONFIG_AFS_FS is not set | 860 | # CONFIG_AFS_FS is not set |
856 | 861 | ||
857 | # | 862 | # |
@@ -916,6 +921,8 @@ CONFIG_MAGIC_SYSRQ=y | |||
916 | # CONFIG_HEADERS_CHECK is not set | 921 | # CONFIG_HEADERS_CHECK is not set |
917 | # CONFIG_DEBUG_KERNEL is not set | 922 | # CONFIG_DEBUG_KERNEL is not set |
918 | CONFIG_DEBUG_BUGVERBOSE=y | 923 | CONFIG_DEBUG_BUGVERBOSE=y |
924 | CONFIG_DEBUG_MEMORY_INIT=y | ||
925 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
919 | # CONFIG_SAMPLES is not set | 926 | # CONFIG_SAMPLES is not set |
920 | 927 | ||
921 | # | 928 | # |
@@ -975,6 +982,10 @@ CONFIG_CRYPTO_CRC32C=m | |||
975 | CONFIG_CRYPTO_MD4=m | 982 | CONFIG_CRYPTO_MD4=m |
976 | CONFIG_CRYPTO_MD5=y | 983 | CONFIG_CRYPTO_MD5=y |
977 | CONFIG_CRYPTO_MICHAEL_MIC=m | 984 | CONFIG_CRYPTO_MICHAEL_MIC=m |
985 | CONFIG_CRYPTO_RMD128=m | ||
986 | CONFIG_CRYPTO_RMD160=m | ||
987 | CONFIG_CRYPTO_RMD256=m | ||
988 | CONFIG_CRYPTO_RMD320=m | ||
978 | CONFIG_CRYPTO_SHA1=m | 989 | CONFIG_CRYPTO_SHA1=m |
979 | CONFIG_CRYPTO_SHA256=m | 990 | CONFIG_CRYPTO_SHA256=m |
980 | CONFIG_CRYPTO_SHA512=m | 991 | CONFIG_CRYPTO_SHA512=m |
@@ -1016,6 +1027,7 @@ CONFIG_BITREVERSE=y | |||
1016 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | 1027 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set |
1017 | CONFIG_CRC_CCITT=m | 1028 | CONFIG_CRC_CCITT=m |
1018 | CONFIG_CRC16=m | 1029 | CONFIG_CRC16=m |
1030 | CONFIG_CRC_T10DIF=y | ||
1019 | CONFIG_CRC_ITU_T=m | 1031 | CONFIG_CRC_ITU_T=m |
1020 | CONFIG_CRC32=y | 1032 | CONFIG_CRC32=y |
1021 | # CONFIG_CRC7 is not set | 1033 | # CONFIG_CRC7 is not set |
diff --git a/arch/m68k/configs/q40_defconfig b/arch/m68k/configs/q40_defconfig index e05be687b500..72eaff0776b8 100644 --- a/arch/m68k/configs/q40_defconfig +++ b/arch/m68k/configs/q40_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.26-rc4 | 3 | # Linux kernel version: 2.6.27-rc6 |
4 | # Wed May 28 22:47:35 2008 | 4 | # Wed Sep 10 09:02:10 2008 |
5 | # | 5 | # |
6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -52,7 +52,6 @@ CONFIG_SYSCTL=y | |||
52 | # CONFIG_EMBEDDED is not set | 52 | # CONFIG_EMBEDDED is not set |
53 | CONFIG_UID16=y | 53 | CONFIG_UID16=y |
54 | CONFIG_SYSCTL_SYSCALL=y | 54 | CONFIG_SYSCTL_SYSCALL=y |
55 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
56 | CONFIG_KALLSYMS=y | 55 | CONFIG_KALLSYMS=y |
57 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 56 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
58 | CONFIG_HOTPLUG=y | 57 | CONFIG_HOTPLUG=y |
@@ -75,10 +74,16 @@ CONFIG_SLAB=y | |||
75 | # CONFIG_PROFILING is not set | 74 | # CONFIG_PROFILING is not set |
76 | # CONFIG_MARKERS is not set | 75 | # CONFIG_MARKERS is not set |
77 | # CONFIG_HAVE_OPROFILE is not set | 76 | # CONFIG_HAVE_OPROFILE is not set |
77 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
78 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
78 | # CONFIG_HAVE_KPROBES is not set | 79 | # CONFIG_HAVE_KPROBES is not set |
79 | # CONFIG_HAVE_KRETPROBES is not set | 80 | # CONFIG_HAVE_KRETPROBES is not set |
81 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
80 | # CONFIG_HAVE_DMA_ATTRS is not set | 82 | # CONFIG_HAVE_DMA_ATTRS is not set |
83 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
84 | # CONFIG_HAVE_CLK is not set | ||
81 | CONFIG_PROC_PAGE_MONITOR=y | 85 | CONFIG_PROC_PAGE_MONITOR=y |
86 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||
82 | CONFIG_SLABINFO=y | 87 | CONFIG_SLABINFO=y |
83 | CONFIG_RT_MUTEXES=y | 88 | CONFIG_RT_MUTEXES=y |
84 | # CONFIG_TINY_SHMEM is not set | 89 | # CONFIG_TINY_SHMEM is not set |
@@ -95,6 +100,7 @@ CONFIG_BLOCK=y | |||
95 | # CONFIG_BLK_DEV_IO_TRACE is not set | 100 | # CONFIG_BLK_DEV_IO_TRACE is not set |
96 | # CONFIG_LSF is not set | 101 | # CONFIG_LSF is not set |
97 | CONFIG_BLK_DEV_BSG=y | 102 | CONFIG_BLK_DEV_BSG=y |
103 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
98 | 104 | ||
99 | # | 105 | # |
100 | # IO Schedulers | 106 | # IO Schedulers |
@@ -163,10 +169,6 @@ CONFIG_ISA=y | |||
163 | CONFIG_GENERIC_ISA_DMA=y | 169 | CONFIG_GENERIC_ISA_DMA=y |
164 | CONFIG_ZONE_DMA=y | 170 | CONFIG_ZONE_DMA=y |
165 | # CONFIG_ARCH_SUPPORTS_MSI is not set | 171 | # CONFIG_ARCH_SUPPORTS_MSI is not set |
166 | |||
167 | # | ||
168 | # Networking | ||
169 | # | ||
170 | CONFIG_NET=y | 172 | CONFIG_NET=y |
171 | 173 | ||
172 | # | 174 | # |
@@ -180,6 +182,7 @@ CONFIG_XFRM=y | |||
180 | # CONFIG_XFRM_SUB_POLICY is not set | 182 | # CONFIG_XFRM_SUB_POLICY is not set |
181 | CONFIG_XFRM_MIGRATE=y | 183 | CONFIG_XFRM_MIGRATE=y |
182 | # CONFIG_XFRM_STATISTICS is not set | 184 | # CONFIG_XFRM_STATISTICS is not set |
185 | CONFIG_XFRM_IPCOMP=m | ||
183 | CONFIG_NET_KEY=y | 186 | CONFIG_NET_KEY=y |
184 | CONFIG_NET_KEY_MIGRATE=y | 187 | CONFIG_NET_KEY_MIGRATE=y |
185 | CONFIG_INET=y | 188 | CONFIG_INET=y |
@@ -410,6 +413,7 @@ CONFIG_NET_CLS_ROUTE=y | |||
410 | # | 413 | # |
411 | # CONFIG_CFG80211 is not set | 414 | # CONFIG_CFG80211 is not set |
412 | CONFIG_WIRELESS_EXT=y | 415 | CONFIG_WIRELESS_EXT=y |
416 | # CONFIG_WIRELESS_EXT_SYSFS is not set | ||
413 | # CONFIG_MAC80211 is not set | 417 | # CONFIG_MAC80211 is not set |
414 | CONFIG_IEEE80211=m | 418 | CONFIG_IEEE80211=m |
415 | # CONFIG_IEEE80211_DEBUG is not set | 419 | # CONFIG_IEEE80211_DEBUG is not set |
@@ -429,7 +433,9 @@ CONFIG_IEEE80211_CRYPT_TKIP=m | |||
429 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 433 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
430 | CONFIG_STANDALONE=y | 434 | CONFIG_STANDALONE=y |
431 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 435 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
432 | CONFIG_FW_LOADER=m | 436 | CONFIG_FW_LOADER=y |
437 | # CONFIG_FIRMWARE_IN_KERNEL is not set | ||
438 | CONFIG_EXTRA_FIRMWARE="" | ||
433 | # CONFIG_SYS_HYPERVISOR is not set | 439 | # CONFIG_SYS_HYPERVISOR is not set |
434 | CONFIG_CONNECTOR=m | 440 | CONFIG_CONNECTOR=m |
435 | # CONFIG_MTD is not set | 441 | # CONFIG_MTD is not set |
@@ -448,6 +454,7 @@ CONFIG_CDROM_PKTCDVD=m | |||
448 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 | 454 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 |
449 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set | 455 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set |
450 | CONFIG_ATA_OVER_ETH=m | 456 | CONFIG_ATA_OVER_ETH=m |
457 | # CONFIG_BLK_DEV_HD is not set | ||
451 | CONFIG_MISC_DEVICES=y | 458 | CONFIG_MISC_DEVICES=y |
452 | # CONFIG_EEPROM_93CX6 is not set | 459 | # CONFIG_EEPROM_93CX6 is not set |
453 | # CONFIG_ENCLOSURE_SERVICES is not set | 460 | # CONFIG_ENCLOSURE_SERVICES is not set |
@@ -458,6 +465,7 @@ CONFIG_BLK_DEV_IDE=y | |||
458 | # | 465 | # |
459 | # Please see Documentation/ide/ide.txt for help/info on IDE drives | 466 | # Please see Documentation/ide/ide.txt for help/info on IDE drives |
460 | # | 467 | # |
468 | CONFIG_IDE_ATAPI=y | ||
461 | # CONFIG_BLK_DEV_IDE_SATA is not set | 469 | # CONFIG_BLK_DEV_IDE_SATA is not set |
462 | CONFIG_BLK_DEV_IDEDISK=y | 470 | CONFIG_BLK_DEV_IDEDISK=y |
463 | # CONFIG_IDEDISK_MULTI_MODE is not set | 471 | # CONFIG_IDEDISK_MULTI_MODE is not set |
@@ -475,8 +483,6 @@ CONFIG_IDE_PROC_FS=y | |||
475 | # CONFIG_BLK_DEV_PLATFORM is not set | 483 | # CONFIG_BLK_DEV_PLATFORM is not set |
476 | CONFIG_BLK_DEV_Q40IDE=y | 484 | CONFIG_BLK_DEV_Q40IDE=y |
477 | # CONFIG_BLK_DEV_IDEDMA is not set | 485 | # CONFIG_BLK_DEV_IDEDMA is not set |
478 | # CONFIG_BLK_DEV_HD_ONLY is not set | ||
479 | # CONFIG_BLK_DEV_HD is not set | ||
480 | 486 | ||
481 | # | 487 | # |
482 | # SCSI device support | 488 | # SCSI device support |
@@ -536,6 +542,7 @@ CONFIG_ISCSI_TCP=m | |||
536 | # CONFIG_SCSI_SYM53C416 is not set | 542 | # CONFIG_SCSI_SYM53C416 is not set |
537 | # CONFIG_SCSI_T128 is not set | 543 | # CONFIG_SCSI_T128 is not set |
538 | # CONFIG_SCSI_DEBUG is not set | 544 | # CONFIG_SCSI_DEBUG is not set |
545 | # CONFIG_SCSI_DH is not set | ||
539 | CONFIG_MD=y | 546 | CONFIG_MD=y |
540 | CONFIG_BLK_DEV_MD=m | 547 | CONFIG_BLK_DEV_MD=m |
541 | CONFIG_MD_LINEAR=m | 548 | CONFIG_MD_LINEAR=m |
@@ -544,7 +551,7 @@ CONFIG_MD_RAID1=m | |||
544 | # CONFIG_MD_RAID10 is not set | 551 | # CONFIG_MD_RAID10 is not set |
545 | CONFIG_MD_RAID456=m | 552 | CONFIG_MD_RAID456=m |
546 | CONFIG_MD_RAID5_RESHAPE=y | 553 | CONFIG_MD_RAID5_RESHAPE=y |
547 | CONFIG_MD_MULTIPATH=m | 554 | # CONFIG_MD_MULTIPATH is not set |
548 | # CONFIG_MD_FAULTY is not set | 555 | # CONFIG_MD_FAULTY is not set |
549 | CONFIG_BLK_DEV_DM=m | 556 | CONFIG_BLK_DEV_DM=m |
550 | # CONFIG_DM_DEBUG is not set | 557 | # CONFIG_DM_DEBUG is not set |
@@ -553,13 +560,9 @@ CONFIG_DM_SNAPSHOT=m | |||
553 | CONFIG_DM_MIRROR=m | 560 | CONFIG_DM_MIRROR=m |
554 | CONFIG_DM_ZERO=m | 561 | CONFIG_DM_ZERO=m |
555 | CONFIG_DM_MULTIPATH=m | 562 | CONFIG_DM_MULTIPATH=m |
556 | CONFIG_DM_MULTIPATH_EMC=m | ||
557 | CONFIG_DM_MULTIPATH_RDAC=m | ||
558 | CONFIG_DM_MULTIPATH_HP=m | ||
559 | # CONFIG_DM_DELAY is not set | 563 | # CONFIG_DM_DELAY is not set |
560 | CONFIG_DM_UEVENT=y | 564 | CONFIG_DM_UEVENT=y |
561 | CONFIG_NETDEVICES=y | 565 | CONFIG_NETDEVICES=y |
562 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
563 | CONFIG_DUMMY=m | 566 | CONFIG_DUMMY=m |
564 | # CONFIG_BONDING is not set | 567 | # CONFIG_BONDING is not set |
565 | CONFIG_MACVLAN=m | 568 | CONFIG_MACVLAN=m |
@@ -680,6 +683,7 @@ CONFIG_SERIO_LIBPS2=m | |||
680 | # Character devices | 683 | # Character devices |
681 | # | 684 | # |
682 | CONFIG_VT=y | 685 | CONFIG_VT=y |
686 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
683 | CONFIG_VT_CONSOLE=y | 687 | CONFIG_VT_CONSOLE=y |
684 | CONFIG_HW_CONSOLE=y | 688 | CONFIG_HW_CONSOLE=y |
685 | CONFIG_VT_HW_CONSOLE_BINDING=y | 689 | CONFIG_VT_HW_CONSOLE_BINDING=y |
@@ -711,6 +715,7 @@ CONFIG_GEN_RTC_X=y | |||
711 | # CONFIG_POWER_SUPPLY is not set | 715 | # CONFIG_POWER_SUPPLY is not set |
712 | # CONFIG_HWMON is not set | 716 | # CONFIG_HWMON is not set |
713 | # CONFIG_THERMAL is not set | 717 | # CONFIG_THERMAL is not set |
718 | # CONFIG_THERMAL_HWMON is not set | ||
714 | # CONFIG_WATCHDOG is not set | 719 | # CONFIG_WATCHDOG is not set |
715 | 720 | ||
716 | # | 721 | # |
@@ -722,8 +727,10 @@ CONFIG_SSB_POSSIBLE=y | |||
722 | # | 727 | # |
723 | # Multifunction device drivers | 728 | # Multifunction device drivers |
724 | # | 729 | # |
730 | # CONFIG_MFD_CORE is not set | ||
725 | # CONFIG_MFD_SM501 is not set | 731 | # CONFIG_MFD_SM501 is not set |
726 | # CONFIG_HTC_PASIC3 is not set | 732 | # CONFIG_HTC_PASIC3 is not set |
733 | # CONFIG_MFD_TMIO is not set | ||
727 | 734 | ||
728 | # | 735 | # |
729 | # Multimedia devices | 736 | # Multimedia devices |
@@ -792,10 +799,6 @@ CONFIG_LOGO=y | |||
792 | CONFIG_LOGO_LINUX_MONO=y | 799 | CONFIG_LOGO_LINUX_MONO=y |
793 | CONFIG_LOGO_LINUX_VGA16=y | 800 | CONFIG_LOGO_LINUX_VGA16=y |
794 | CONFIG_LOGO_LINUX_CLUT224=y | 801 | CONFIG_LOGO_LINUX_CLUT224=y |
795 | |||
796 | # | ||
797 | # Sound | ||
798 | # | ||
799 | CONFIG_SOUND=m | 802 | CONFIG_SOUND=m |
800 | CONFIG_DMASOUND_Q40=m | 803 | CONFIG_DMASOUND_Q40=m |
801 | CONFIG_DMASOUND=m | 804 | CONFIG_DMASOUND=m |
@@ -809,6 +812,7 @@ CONFIG_HIDRAW=y | |||
809 | # CONFIG_NEW_LEDS is not set | 812 | # CONFIG_NEW_LEDS is not set |
810 | # CONFIG_ACCESSIBILITY is not set | 813 | # CONFIG_ACCESSIBILITY is not set |
811 | # CONFIG_RTC_CLASS is not set | 814 | # CONFIG_RTC_CLASS is not set |
815 | # CONFIG_DMADEVICES is not set | ||
812 | # CONFIG_UIO is not set | 816 | # CONFIG_UIO is not set |
813 | 817 | ||
814 | # | 818 | # |
@@ -843,6 +847,7 @@ CONFIG_XFS_FS=m | |||
843 | CONFIG_OCFS2_FS=m | 847 | CONFIG_OCFS2_FS=m |
844 | CONFIG_OCFS2_FS_O2CB=m | 848 | CONFIG_OCFS2_FS_O2CB=m |
845 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m | 849 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m |
850 | # CONFIG_OCFS2_FS_STATS is not set | ||
846 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 851 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
847 | # CONFIG_OCFS2_DEBUG_FS is not set | 852 | # CONFIG_OCFS2_DEBUG_FS is not set |
848 | CONFIG_DNOTIFY=y | 853 | CONFIG_DNOTIFY=y |
@@ -902,6 +907,7 @@ CONFIG_HFSPLUS_FS=m | |||
902 | CONFIG_CRAMFS=m | 907 | CONFIG_CRAMFS=m |
903 | # CONFIG_VXFS_FS is not set | 908 | # CONFIG_VXFS_FS is not set |
904 | CONFIG_MINIX_FS=y | 909 | CONFIG_MINIX_FS=y |
910 | # CONFIG_OMFS_FS is not set | ||
905 | CONFIG_HPFS_FS=m | 911 | CONFIG_HPFS_FS=m |
906 | # CONFIG_QNX4FS_FS is not set | 912 | # CONFIG_QNX4FS_FS is not set |
907 | # CONFIG_ROMFS_FS is not set | 913 | # CONFIG_ROMFS_FS is not set |
@@ -924,7 +930,6 @@ CONFIG_EXPORTFS=m | |||
924 | CONFIG_NFS_COMMON=y | 930 | CONFIG_NFS_COMMON=y |
925 | CONFIG_SUNRPC=y | 931 | CONFIG_SUNRPC=y |
926 | CONFIG_SUNRPC_GSS=y | 932 | CONFIG_SUNRPC_GSS=y |
927 | CONFIG_SUNRPC_BIND34=y | ||
928 | CONFIG_RPCSEC_GSS_KRB5=y | 933 | CONFIG_RPCSEC_GSS_KRB5=y |
929 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 934 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
930 | CONFIG_SMB_FS=m | 935 | CONFIG_SMB_FS=m |
@@ -933,7 +938,6 @@ CONFIG_SMB_NLS_REMOTE="cp437" | |||
933 | # CONFIG_CIFS is not set | 938 | # CONFIG_CIFS is not set |
934 | # CONFIG_NCP_FS is not set | 939 | # CONFIG_NCP_FS is not set |
935 | CONFIG_CODA_FS=m | 940 | CONFIG_CODA_FS=m |
936 | # CONFIG_CODA_FS_OLD_API is not set | ||
937 | # CONFIG_AFS_FS is not set | 941 | # CONFIG_AFS_FS is not set |
938 | 942 | ||
939 | # | 943 | # |
@@ -997,6 +1001,8 @@ CONFIG_MAGIC_SYSRQ=y | |||
997 | # CONFIG_HEADERS_CHECK is not set | 1001 | # CONFIG_HEADERS_CHECK is not set |
998 | # CONFIG_DEBUG_KERNEL is not set | 1002 | # CONFIG_DEBUG_KERNEL is not set |
999 | CONFIG_DEBUG_BUGVERBOSE=y | 1003 | CONFIG_DEBUG_BUGVERBOSE=y |
1004 | CONFIG_DEBUG_MEMORY_INIT=y | ||
1005 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
1000 | # CONFIG_SAMPLES is not set | 1006 | # CONFIG_SAMPLES is not set |
1001 | 1007 | ||
1002 | # | 1008 | # |
@@ -1056,6 +1062,10 @@ CONFIG_CRYPTO_CRC32C=m | |||
1056 | CONFIG_CRYPTO_MD4=m | 1062 | CONFIG_CRYPTO_MD4=m |
1057 | CONFIG_CRYPTO_MD5=y | 1063 | CONFIG_CRYPTO_MD5=y |
1058 | CONFIG_CRYPTO_MICHAEL_MIC=m | 1064 | CONFIG_CRYPTO_MICHAEL_MIC=m |
1065 | CONFIG_CRYPTO_RMD128=m | ||
1066 | CONFIG_CRYPTO_RMD160=m | ||
1067 | CONFIG_CRYPTO_RMD256=m | ||
1068 | CONFIG_CRYPTO_RMD320=m | ||
1059 | CONFIG_CRYPTO_SHA1=m | 1069 | CONFIG_CRYPTO_SHA1=m |
1060 | CONFIG_CRYPTO_SHA256=m | 1070 | CONFIG_CRYPTO_SHA256=m |
1061 | CONFIG_CRYPTO_SHA512=m | 1071 | CONFIG_CRYPTO_SHA512=m |
@@ -1097,6 +1107,7 @@ CONFIG_BITREVERSE=y | |||
1097 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | 1107 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set |
1098 | CONFIG_CRC_CCITT=m | 1108 | CONFIG_CRC_CCITT=m |
1099 | CONFIG_CRC16=m | 1109 | CONFIG_CRC16=m |
1110 | CONFIG_CRC_T10DIF=y | ||
1100 | CONFIG_CRC_ITU_T=m | 1111 | CONFIG_CRC_ITU_T=m |
1101 | CONFIG_CRC32=y | 1112 | CONFIG_CRC32=y |
1102 | # CONFIG_CRC7 is not set | 1113 | # CONFIG_CRC7 is not set |
diff --git a/arch/m68k/configs/sun3_defconfig b/arch/m68k/configs/sun3_defconfig index 296340d2b315..cb62b96d766e 100644 --- a/arch/m68k/configs/sun3_defconfig +++ b/arch/m68k/configs/sun3_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.26-rc4 | 3 | # Linux kernel version: 2.6.27-rc6 |
4 | # Wed May 28 22:47:35 2008 | 4 | # Wed Sep 10 09:02:11 2008 |
5 | # | 5 | # |
6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -52,7 +52,6 @@ CONFIG_SYSCTL=y | |||
52 | # CONFIG_EMBEDDED is not set | 52 | # CONFIG_EMBEDDED is not set |
53 | CONFIG_UID16=y | 53 | CONFIG_UID16=y |
54 | CONFIG_SYSCTL_SYSCALL=y | 54 | CONFIG_SYSCTL_SYSCALL=y |
55 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
56 | CONFIG_KALLSYMS=y | 55 | CONFIG_KALLSYMS=y |
57 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 56 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
58 | CONFIG_HOTPLUG=y | 57 | CONFIG_HOTPLUG=y |
@@ -75,10 +74,16 @@ CONFIG_SLAB=y | |||
75 | # CONFIG_PROFILING is not set | 74 | # CONFIG_PROFILING is not set |
76 | # CONFIG_MARKERS is not set | 75 | # CONFIG_MARKERS is not set |
77 | # CONFIG_HAVE_OPROFILE is not set | 76 | # CONFIG_HAVE_OPROFILE is not set |
77 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
78 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
78 | # CONFIG_HAVE_KPROBES is not set | 79 | # CONFIG_HAVE_KPROBES is not set |
79 | # CONFIG_HAVE_KRETPROBES is not set | 80 | # CONFIG_HAVE_KRETPROBES is not set |
81 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
80 | # CONFIG_HAVE_DMA_ATTRS is not set | 82 | # CONFIG_HAVE_DMA_ATTRS is not set |
83 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
84 | # CONFIG_HAVE_CLK is not set | ||
81 | CONFIG_PROC_PAGE_MONITOR=y | 85 | CONFIG_PROC_PAGE_MONITOR=y |
86 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||
82 | CONFIG_SLABINFO=y | 87 | CONFIG_SLABINFO=y |
83 | CONFIG_RT_MUTEXES=y | 88 | CONFIG_RT_MUTEXES=y |
84 | # CONFIG_TINY_SHMEM is not set | 89 | # CONFIG_TINY_SHMEM is not set |
@@ -95,6 +100,7 @@ CONFIG_BLOCK=y | |||
95 | # CONFIG_BLK_DEV_IO_TRACE is not set | 100 | # CONFIG_BLK_DEV_IO_TRACE is not set |
96 | # CONFIG_LSF is not set | 101 | # CONFIG_LSF is not set |
97 | CONFIG_BLK_DEV_BSG=y | 102 | CONFIG_BLK_DEV_BSG=y |
103 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
98 | 104 | ||
99 | # | 105 | # |
100 | # IO Schedulers | 106 | # IO Schedulers |
@@ -149,10 +155,6 @@ CONFIG_BINFMT_MISC=m | |||
149 | CONFIG_PROC_HARDWARE=y | 155 | CONFIG_PROC_HARDWARE=y |
150 | CONFIG_ZONE_DMA=y | 156 | CONFIG_ZONE_DMA=y |
151 | # CONFIG_ARCH_SUPPORTS_MSI is not set | 157 | # CONFIG_ARCH_SUPPORTS_MSI is not set |
152 | |||
153 | # | ||
154 | # Networking | ||
155 | # | ||
156 | CONFIG_NET=y | 158 | CONFIG_NET=y |
157 | 159 | ||
158 | # | 160 | # |
@@ -166,6 +168,7 @@ CONFIG_XFRM=y | |||
166 | # CONFIG_XFRM_SUB_POLICY is not set | 168 | # CONFIG_XFRM_SUB_POLICY is not set |
167 | CONFIG_XFRM_MIGRATE=y | 169 | CONFIG_XFRM_MIGRATE=y |
168 | # CONFIG_XFRM_STATISTICS is not set | 170 | # CONFIG_XFRM_STATISTICS is not set |
171 | CONFIG_XFRM_IPCOMP=m | ||
169 | CONFIG_NET_KEY=y | 172 | CONFIG_NET_KEY=y |
170 | CONFIG_NET_KEY_MIGRATE=y | 173 | CONFIG_NET_KEY_MIGRATE=y |
171 | CONFIG_INET=y | 174 | CONFIG_INET=y |
@@ -399,6 +402,7 @@ CONFIG_NET_CLS_ROUTE=y | |||
399 | # | 402 | # |
400 | # CONFIG_CFG80211 is not set | 403 | # CONFIG_CFG80211 is not set |
401 | CONFIG_WIRELESS_EXT=y | 404 | CONFIG_WIRELESS_EXT=y |
405 | # CONFIG_WIRELESS_EXT_SYSFS is not set | ||
402 | # CONFIG_MAC80211 is not set | 406 | # CONFIG_MAC80211 is not set |
403 | CONFIG_IEEE80211=m | 407 | CONFIG_IEEE80211=m |
404 | # CONFIG_IEEE80211_DEBUG is not set | 408 | # CONFIG_IEEE80211_DEBUG is not set |
@@ -418,7 +422,9 @@ CONFIG_IEEE80211_CRYPT_TKIP=m | |||
418 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 422 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
419 | CONFIG_STANDALONE=y | 423 | CONFIG_STANDALONE=y |
420 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 424 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
421 | CONFIG_FW_LOADER=m | 425 | CONFIG_FW_LOADER=y |
426 | # CONFIG_FIRMWARE_IN_KERNEL is not set | ||
427 | CONFIG_EXTRA_FIRMWARE="" | ||
422 | # CONFIG_SYS_HYPERVISOR is not set | 428 | # CONFIG_SYS_HYPERVISOR is not set |
423 | CONFIG_CONNECTOR=m | 429 | CONFIG_CONNECTOR=m |
424 | # CONFIG_MTD is not set | 430 | # CONFIG_MTD is not set |
@@ -436,6 +442,7 @@ CONFIG_CDROM_PKTCDVD=m | |||
436 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 | 442 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 |
437 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set | 443 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set |
438 | CONFIG_ATA_OVER_ETH=m | 444 | CONFIG_ATA_OVER_ETH=m |
445 | # CONFIG_BLK_DEV_HD is not set | ||
439 | CONFIG_MISC_DEVICES=y | 446 | CONFIG_MISC_DEVICES=y |
440 | # CONFIG_EEPROM_93CX6 is not set | 447 | # CONFIG_EEPROM_93CX6 is not set |
441 | # CONFIG_ENCLOSURE_SERVICES is not set | 448 | # CONFIG_ENCLOSURE_SERVICES is not set |
@@ -488,6 +495,7 @@ CONFIG_SCSI_LOWLEVEL=y | |||
488 | CONFIG_ISCSI_TCP=m | 495 | CONFIG_ISCSI_TCP=m |
489 | # CONFIG_SCSI_DEBUG is not set | 496 | # CONFIG_SCSI_DEBUG is not set |
490 | CONFIG_SUN3_SCSI=y | 497 | CONFIG_SUN3_SCSI=y |
498 | # CONFIG_SCSI_DH is not set | ||
491 | CONFIG_MD=y | 499 | CONFIG_MD=y |
492 | CONFIG_BLK_DEV_MD=m | 500 | CONFIG_BLK_DEV_MD=m |
493 | CONFIG_MD_LINEAR=m | 501 | CONFIG_MD_LINEAR=m |
@@ -496,7 +504,7 @@ CONFIG_MD_RAID1=m | |||
496 | # CONFIG_MD_RAID10 is not set | 504 | # CONFIG_MD_RAID10 is not set |
497 | CONFIG_MD_RAID456=m | 505 | CONFIG_MD_RAID456=m |
498 | CONFIG_MD_RAID5_RESHAPE=y | 506 | CONFIG_MD_RAID5_RESHAPE=y |
499 | CONFIG_MD_MULTIPATH=m | 507 | # CONFIG_MD_MULTIPATH is not set |
500 | # CONFIG_MD_FAULTY is not set | 508 | # CONFIG_MD_FAULTY is not set |
501 | CONFIG_BLK_DEV_DM=m | 509 | CONFIG_BLK_DEV_DM=m |
502 | # CONFIG_DM_DEBUG is not set | 510 | # CONFIG_DM_DEBUG is not set |
@@ -505,13 +513,9 @@ CONFIG_DM_SNAPSHOT=m | |||
505 | CONFIG_DM_MIRROR=m | 513 | CONFIG_DM_MIRROR=m |
506 | CONFIG_DM_ZERO=m | 514 | CONFIG_DM_ZERO=m |
507 | CONFIG_DM_MULTIPATH=m | 515 | CONFIG_DM_MULTIPATH=m |
508 | CONFIG_DM_MULTIPATH_EMC=m | ||
509 | CONFIG_DM_MULTIPATH_RDAC=m | ||
510 | CONFIG_DM_MULTIPATH_HP=m | ||
511 | # CONFIG_DM_DELAY is not set | 516 | # CONFIG_DM_DELAY is not set |
512 | CONFIG_DM_UEVENT=y | 517 | CONFIG_DM_UEVENT=y |
513 | CONFIG_NETDEVICES=y | 518 | CONFIG_NETDEVICES=y |
514 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
515 | CONFIG_DUMMY=m | 519 | CONFIG_DUMMY=m |
516 | # CONFIG_BONDING is not set | 520 | # CONFIG_BONDING is not set |
517 | CONFIG_MACVLAN=m | 521 | CONFIG_MACVLAN=m |
@@ -527,7 +531,6 @@ CONFIG_SUN3_82586=y | |||
527 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | 531 | # CONFIG_IBM_NEW_EMAC_RGMII is not set |
528 | # CONFIG_IBM_NEW_EMAC_TAH is not set | 532 | # CONFIG_IBM_NEW_EMAC_TAH is not set |
529 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | 533 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set |
530 | # CONFIG_B44 is not set | ||
531 | # CONFIG_NETDEV_1000 is not set | 534 | # CONFIG_NETDEV_1000 is not set |
532 | # CONFIG_NETDEV_10000 is not set | 535 | # CONFIG_NETDEV_10000 is not set |
533 | 536 | ||
@@ -617,6 +620,7 @@ CONFIG_SERIO_LIBPS2=m | |||
617 | # Character devices | 620 | # Character devices |
618 | # | 621 | # |
619 | CONFIG_VT=y | 622 | CONFIG_VT=y |
623 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
620 | CONFIG_VT_CONSOLE=y | 624 | CONFIG_VT_CONSOLE=y |
621 | CONFIG_HW_CONSOLE=y | 625 | CONFIG_HW_CONSOLE=y |
622 | CONFIG_VT_HW_CONSOLE_BINDING=y | 626 | CONFIG_VT_HW_CONSOLE_BINDING=y |
@@ -647,19 +651,20 @@ CONFIG_GEN_RTC_X=y | |||
647 | # CONFIG_POWER_SUPPLY is not set | 651 | # CONFIG_POWER_SUPPLY is not set |
648 | # CONFIG_HWMON is not set | 652 | # CONFIG_HWMON is not set |
649 | # CONFIG_THERMAL is not set | 653 | # CONFIG_THERMAL is not set |
654 | # CONFIG_THERMAL_HWMON is not set | ||
650 | # CONFIG_WATCHDOG is not set | 655 | # CONFIG_WATCHDOG is not set |
651 | 656 | ||
652 | # | 657 | # |
653 | # Sonics Silicon Backplane | 658 | # Sonics Silicon Backplane |
654 | # | 659 | # |
655 | CONFIG_SSB_POSSIBLE=y | ||
656 | # CONFIG_SSB is not set | ||
657 | 660 | ||
658 | # | 661 | # |
659 | # Multifunction device drivers | 662 | # Multifunction device drivers |
660 | # | 663 | # |
664 | # CONFIG_MFD_CORE is not set | ||
661 | # CONFIG_MFD_SM501 is not set | 665 | # CONFIG_MFD_SM501 is not set |
662 | # CONFIG_HTC_PASIC3 is not set | 666 | # CONFIG_HTC_PASIC3 is not set |
667 | # CONFIG_MFD_TMIO is not set | ||
663 | 668 | ||
664 | # | 669 | # |
665 | # Multimedia devices | 670 | # Multimedia devices |
@@ -727,10 +732,6 @@ CONFIG_LOGO=y | |||
727 | CONFIG_LOGO_LINUX_MONO=y | 732 | CONFIG_LOGO_LINUX_MONO=y |
728 | CONFIG_LOGO_LINUX_VGA16=y | 733 | CONFIG_LOGO_LINUX_VGA16=y |
729 | CONFIG_LOGO_LINUX_CLUT224=y | 734 | CONFIG_LOGO_LINUX_CLUT224=y |
730 | |||
731 | # | ||
732 | # Sound | ||
733 | # | ||
734 | # CONFIG_SOUND is not set | 735 | # CONFIG_SOUND is not set |
735 | CONFIG_HID_SUPPORT=y | 736 | CONFIG_HID_SUPPORT=y |
736 | CONFIG_HID=m | 737 | CONFIG_HID=m |
@@ -776,6 +777,7 @@ CONFIG_XFS_FS=m | |||
776 | CONFIG_OCFS2_FS=m | 777 | CONFIG_OCFS2_FS=m |
777 | CONFIG_OCFS2_FS_O2CB=m | 778 | CONFIG_OCFS2_FS_O2CB=m |
778 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m | 779 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m |
780 | # CONFIG_OCFS2_FS_STATS is not set | ||
779 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 781 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
780 | # CONFIG_OCFS2_DEBUG_FS is not set | 782 | # CONFIG_OCFS2_DEBUG_FS is not set |
781 | CONFIG_DNOTIFY=y | 783 | CONFIG_DNOTIFY=y |
@@ -835,6 +837,7 @@ CONFIG_HFSPLUS_FS=m | |||
835 | CONFIG_CRAMFS=m | 837 | CONFIG_CRAMFS=m |
836 | # CONFIG_VXFS_FS is not set | 838 | # CONFIG_VXFS_FS is not set |
837 | CONFIG_MINIX_FS=y | 839 | CONFIG_MINIX_FS=y |
840 | # CONFIG_OMFS_FS is not set | ||
838 | CONFIG_HPFS_FS=m | 841 | CONFIG_HPFS_FS=m |
839 | # CONFIG_QNX4FS_FS is not set | 842 | # CONFIG_QNX4FS_FS is not set |
840 | # CONFIG_ROMFS_FS is not set | 843 | # CONFIG_ROMFS_FS is not set |
@@ -847,18 +850,17 @@ CONFIG_NFS_FS=y | |||
847 | CONFIG_NFS_V3=y | 850 | CONFIG_NFS_V3=y |
848 | # CONFIG_NFS_V3_ACL is not set | 851 | # CONFIG_NFS_V3_ACL is not set |
849 | CONFIG_NFS_V4=y | 852 | CONFIG_NFS_V4=y |
853 | CONFIG_ROOT_NFS=y | ||
850 | CONFIG_NFSD=m | 854 | CONFIG_NFSD=m |
851 | CONFIG_NFSD_V3=y | 855 | CONFIG_NFSD_V3=y |
852 | # CONFIG_NFSD_V3_ACL is not set | 856 | # CONFIG_NFSD_V3_ACL is not set |
853 | # CONFIG_NFSD_V4 is not set | 857 | # CONFIG_NFSD_V4 is not set |
854 | CONFIG_ROOT_NFS=y | ||
855 | CONFIG_LOCKD=y | 858 | CONFIG_LOCKD=y |
856 | CONFIG_LOCKD_V4=y | 859 | CONFIG_LOCKD_V4=y |
857 | CONFIG_EXPORTFS=m | 860 | CONFIG_EXPORTFS=m |
858 | CONFIG_NFS_COMMON=y | 861 | CONFIG_NFS_COMMON=y |
859 | CONFIG_SUNRPC=y | 862 | CONFIG_SUNRPC=y |
860 | CONFIG_SUNRPC_GSS=y | 863 | CONFIG_SUNRPC_GSS=y |
861 | CONFIG_SUNRPC_BIND34=y | ||
862 | CONFIG_RPCSEC_GSS_KRB5=y | 864 | CONFIG_RPCSEC_GSS_KRB5=y |
863 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 865 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
864 | CONFIG_SMB_FS=m | 866 | CONFIG_SMB_FS=m |
@@ -867,7 +869,6 @@ CONFIG_SMB_NLS_REMOTE="cp437" | |||
867 | # CONFIG_CIFS is not set | 869 | # CONFIG_CIFS is not set |
868 | # CONFIG_NCP_FS is not set | 870 | # CONFIG_NCP_FS is not set |
869 | CONFIG_CODA_FS=m | 871 | CONFIG_CODA_FS=m |
870 | # CONFIG_CODA_FS_OLD_API is not set | ||
871 | # CONFIG_AFS_FS is not set | 872 | # CONFIG_AFS_FS is not set |
872 | 873 | ||
873 | # | 874 | # |
@@ -932,6 +933,8 @@ CONFIG_MAGIC_SYSRQ=y | |||
932 | # CONFIG_HEADERS_CHECK is not set | 933 | # CONFIG_HEADERS_CHECK is not set |
933 | # CONFIG_DEBUG_KERNEL is not set | 934 | # CONFIG_DEBUG_KERNEL is not set |
934 | CONFIG_DEBUG_BUGVERBOSE=y | 935 | CONFIG_DEBUG_BUGVERBOSE=y |
936 | CONFIG_DEBUG_MEMORY_INIT=y | ||
937 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
935 | # CONFIG_SAMPLES is not set | 938 | # CONFIG_SAMPLES is not set |
936 | 939 | ||
937 | # | 940 | # |
@@ -991,6 +994,10 @@ CONFIG_CRYPTO_CRC32C=m | |||
991 | CONFIG_CRYPTO_MD4=m | 994 | CONFIG_CRYPTO_MD4=m |
992 | CONFIG_CRYPTO_MD5=y | 995 | CONFIG_CRYPTO_MD5=y |
993 | CONFIG_CRYPTO_MICHAEL_MIC=m | 996 | CONFIG_CRYPTO_MICHAEL_MIC=m |
997 | CONFIG_CRYPTO_RMD128=m | ||
998 | CONFIG_CRYPTO_RMD160=m | ||
999 | CONFIG_CRYPTO_RMD256=m | ||
1000 | CONFIG_CRYPTO_RMD320=m | ||
994 | CONFIG_CRYPTO_SHA1=m | 1001 | CONFIG_CRYPTO_SHA1=m |
995 | CONFIG_CRYPTO_SHA256=m | 1002 | CONFIG_CRYPTO_SHA256=m |
996 | CONFIG_CRYPTO_SHA512=m | 1003 | CONFIG_CRYPTO_SHA512=m |
@@ -1032,6 +1039,7 @@ CONFIG_BITREVERSE=y | |||
1032 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | 1039 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set |
1033 | CONFIG_CRC_CCITT=m | 1040 | CONFIG_CRC_CCITT=m |
1034 | CONFIG_CRC16=m | 1041 | CONFIG_CRC16=m |
1042 | CONFIG_CRC_T10DIF=y | ||
1035 | CONFIG_CRC_ITU_T=m | 1043 | CONFIG_CRC_ITU_T=m |
1036 | CONFIG_CRC32=y | 1044 | CONFIG_CRC32=y |
1037 | # CONFIG_CRC7 is not set | 1045 | # CONFIG_CRC7 is not set |
diff --git a/arch/m68k/configs/sun3x_defconfig b/arch/m68k/configs/sun3x_defconfig index 8d3a416c92bf..04b4363a7050 100644 --- a/arch/m68k/configs/sun3x_defconfig +++ b/arch/m68k/configs/sun3x_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.26-rc4 | 3 | # Linux kernel version: 2.6.27-rc6 |
4 | # Wed May 28 22:47:35 2008 | 4 | # Wed Sep 10 09:02:12 2008 |
5 | # | 5 | # |
6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -52,7 +52,6 @@ CONFIG_SYSCTL=y | |||
52 | # CONFIG_EMBEDDED is not set | 52 | # CONFIG_EMBEDDED is not set |
53 | CONFIG_UID16=y | 53 | CONFIG_UID16=y |
54 | CONFIG_SYSCTL_SYSCALL=y | 54 | CONFIG_SYSCTL_SYSCALL=y |
55 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
56 | CONFIG_KALLSYMS=y | 55 | CONFIG_KALLSYMS=y |
57 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 56 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
58 | CONFIG_HOTPLUG=y | 57 | CONFIG_HOTPLUG=y |
@@ -75,10 +74,16 @@ CONFIG_SLAB=y | |||
75 | # CONFIG_PROFILING is not set | 74 | # CONFIG_PROFILING is not set |
76 | # CONFIG_MARKERS is not set | 75 | # CONFIG_MARKERS is not set |
77 | # CONFIG_HAVE_OPROFILE is not set | 76 | # CONFIG_HAVE_OPROFILE is not set |
77 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
78 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
78 | # CONFIG_HAVE_KPROBES is not set | 79 | # CONFIG_HAVE_KPROBES is not set |
79 | # CONFIG_HAVE_KRETPROBES is not set | 80 | # CONFIG_HAVE_KRETPROBES is not set |
81 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
80 | # CONFIG_HAVE_DMA_ATTRS is not set | 82 | # CONFIG_HAVE_DMA_ATTRS is not set |
83 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
84 | # CONFIG_HAVE_CLK is not set | ||
81 | CONFIG_PROC_PAGE_MONITOR=y | 85 | CONFIG_PROC_PAGE_MONITOR=y |
86 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||
82 | CONFIG_SLABINFO=y | 87 | CONFIG_SLABINFO=y |
83 | CONFIG_RT_MUTEXES=y | 88 | CONFIG_RT_MUTEXES=y |
84 | # CONFIG_TINY_SHMEM is not set | 89 | # CONFIG_TINY_SHMEM is not set |
@@ -95,6 +100,7 @@ CONFIG_BLOCK=y | |||
95 | # CONFIG_BLK_DEV_IO_TRACE is not set | 100 | # CONFIG_BLK_DEV_IO_TRACE is not set |
96 | # CONFIG_LSF is not set | 101 | # CONFIG_LSF is not set |
97 | CONFIG_BLK_DEV_BSG=y | 102 | CONFIG_BLK_DEV_BSG=y |
103 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
98 | 104 | ||
99 | # | 105 | # |
100 | # IO Schedulers | 106 | # IO Schedulers |
@@ -160,10 +166,6 @@ CONFIG_BINFMT_MISC=m | |||
160 | CONFIG_PROC_HARDWARE=y | 166 | CONFIG_PROC_HARDWARE=y |
161 | CONFIG_ZONE_DMA=y | 167 | CONFIG_ZONE_DMA=y |
162 | # CONFIG_ARCH_SUPPORTS_MSI is not set | 168 | # CONFIG_ARCH_SUPPORTS_MSI is not set |
163 | |||
164 | # | ||
165 | # Networking | ||
166 | # | ||
167 | CONFIG_NET=y | 169 | CONFIG_NET=y |
168 | 170 | ||
169 | # | 171 | # |
@@ -177,6 +179,7 @@ CONFIG_XFRM=y | |||
177 | # CONFIG_XFRM_SUB_POLICY is not set | 179 | # CONFIG_XFRM_SUB_POLICY is not set |
178 | CONFIG_XFRM_MIGRATE=y | 180 | CONFIG_XFRM_MIGRATE=y |
179 | # CONFIG_XFRM_STATISTICS is not set | 181 | # CONFIG_XFRM_STATISTICS is not set |
182 | CONFIG_XFRM_IPCOMP=m | ||
180 | CONFIG_NET_KEY=y | 183 | CONFIG_NET_KEY=y |
181 | CONFIG_NET_KEY_MIGRATE=y | 184 | CONFIG_NET_KEY_MIGRATE=y |
182 | CONFIG_INET=y | 185 | CONFIG_INET=y |
@@ -410,6 +413,7 @@ CONFIG_NET_CLS_ROUTE=y | |||
410 | # | 413 | # |
411 | # CONFIG_CFG80211 is not set | 414 | # CONFIG_CFG80211 is not set |
412 | CONFIG_WIRELESS_EXT=y | 415 | CONFIG_WIRELESS_EXT=y |
416 | # CONFIG_WIRELESS_EXT_SYSFS is not set | ||
413 | # CONFIG_MAC80211 is not set | 417 | # CONFIG_MAC80211 is not set |
414 | CONFIG_IEEE80211=m | 418 | CONFIG_IEEE80211=m |
415 | # CONFIG_IEEE80211_DEBUG is not set | 419 | # CONFIG_IEEE80211_DEBUG is not set |
@@ -429,7 +433,9 @@ CONFIG_IEEE80211_CRYPT_TKIP=m | |||
429 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 433 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
430 | CONFIG_STANDALONE=y | 434 | CONFIG_STANDALONE=y |
431 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 435 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
432 | CONFIG_FW_LOADER=m | 436 | CONFIG_FW_LOADER=y |
437 | # CONFIG_FIRMWARE_IN_KERNEL is not set | ||
438 | CONFIG_EXTRA_FIRMWARE="" | ||
433 | # CONFIG_SYS_HYPERVISOR is not set | 439 | # CONFIG_SYS_HYPERVISOR is not set |
434 | CONFIG_CONNECTOR=m | 440 | CONFIG_CONNECTOR=m |
435 | # CONFIG_MTD is not set | 441 | # CONFIG_MTD is not set |
@@ -447,6 +453,7 @@ CONFIG_CDROM_PKTCDVD=m | |||
447 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 | 453 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 |
448 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set | 454 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set |
449 | CONFIG_ATA_OVER_ETH=m | 455 | CONFIG_ATA_OVER_ETH=m |
456 | # CONFIG_BLK_DEV_HD is not set | ||
450 | CONFIG_MISC_DEVICES=y | 457 | CONFIG_MISC_DEVICES=y |
451 | # CONFIG_EEPROM_93CX6 is not set | 458 | # CONFIG_EEPROM_93CX6 is not set |
452 | # CONFIG_ENCLOSURE_SERVICES is not set | 459 | # CONFIG_ENCLOSURE_SERVICES is not set |
@@ -499,6 +506,7 @@ CONFIG_SCSI_LOWLEVEL=y | |||
499 | CONFIG_ISCSI_TCP=m | 506 | CONFIG_ISCSI_TCP=m |
500 | # CONFIG_SCSI_DEBUG is not set | 507 | # CONFIG_SCSI_DEBUG is not set |
501 | CONFIG_SUN3X_ESP=y | 508 | CONFIG_SUN3X_ESP=y |
509 | # CONFIG_SCSI_DH is not set | ||
502 | CONFIG_MD=y | 510 | CONFIG_MD=y |
503 | CONFIG_BLK_DEV_MD=m | 511 | CONFIG_BLK_DEV_MD=m |
504 | CONFIG_MD_LINEAR=m | 512 | CONFIG_MD_LINEAR=m |
@@ -507,7 +515,7 @@ CONFIG_MD_RAID1=m | |||
507 | # CONFIG_MD_RAID10 is not set | 515 | # CONFIG_MD_RAID10 is not set |
508 | CONFIG_MD_RAID456=m | 516 | CONFIG_MD_RAID456=m |
509 | CONFIG_MD_RAID5_RESHAPE=y | 517 | CONFIG_MD_RAID5_RESHAPE=y |
510 | CONFIG_MD_MULTIPATH=m | 518 | # CONFIG_MD_MULTIPATH is not set |
511 | # CONFIG_MD_FAULTY is not set | 519 | # CONFIG_MD_FAULTY is not set |
512 | CONFIG_BLK_DEV_DM=m | 520 | CONFIG_BLK_DEV_DM=m |
513 | # CONFIG_DM_DEBUG is not set | 521 | # CONFIG_DM_DEBUG is not set |
@@ -516,13 +524,9 @@ CONFIG_DM_SNAPSHOT=m | |||
516 | CONFIG_DM_MIRROR=m | 524 | CONFIG_DM_MIRROR=m |
517 | CONFIG_DM_ZERO=m | 525 | CONFIG_DM_ZERO=m |
518 | CONFIG_DM_MULTIPATH=m | 526 | CONFIG_DM_MULTIPATH=m |
519 | CONFIG_DM_MULTIPATH_EMC=m | ||
520 | CONFIG_DM_MULTIPATH_RDAC=m | ||
521 | CONFIG_DM_MULTIPATH_HP=m | ||
522 | # CONFIG_DM_DELAY is not set | 527 | # CONFIG_DM_DELAY is not set |
523 | CONFIG_DM_UEVENT=y | 528 | CONFIG_DM_UEVENT=y |
524 | CONFIG_NETDEVICES=y | 529 | CONFIG_NETDEVICES=y |
525 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
526 | CONFIG_DUMMY=m | 530 | CONFIG_DUMMY=m |
527 | # CONFIG_BONDING is not set | 531 | # CONFIG_BONDING is not set |
528 | CONFIG_MACVLAN=m | 532 | CONFIG_MACVLAN=m |
@@ -627,6 +631,7 @@ CONFIG_SERIO_LIBPS2=m | |||
627 | # Character devices | 631 | # Character devices |
628 | # | 632 | # |
629 | CONFIG_VT=y | 633 | CONFIG_VT=y |
634 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
630 | CONFIG_VT_CONSOLE=y | 635 | CONFIG_VT_CONSOLE=y |
631 | CONFIG_HW_CONSOLE=y | 636 | CONFIG_HW_CONSOLE=y |
632 | CONFIG_VT_HW_CONSOLE_BINDING=y | 637 | CONFIG_VT_HW_CONSOLE_BINDING=y |
@@ -657,6 +662,7 @@ CONFIG_GEN_RTC_X=y | |||
657 | # CONFIG_POWER_SUPPLY is not set | 662 | # CONFIG_POWER_SUPPLY is not set |
658 | # CONFIG_HWMON is not set | 663 | # CONFIG_HWMON is not set |
659 | # CONFIG_THERMAL is not set | 664 | # CONFIG_THERMAL is not set |
665 | # CONFIG_THERMAL_HWMON is not set | ||
660 | # CONFIG_WATCHDOG is not set | 666 | # CONFIG_WATCHDOG is not set |
661 | 667 | ||
662 | # | 668 | # |
@@ -668,8 +674,10 @@ CONFIG_SSB_POSSIBLE=y | |||
668 | # | 674 | # |
669 | # Multifunction device drivers | 675 | # Multifunction device drivers |
670 | # | 676 | # |
677 | # CONFIG_MFD_CORE is not set | ||
671 | # CONFIG_MFD_SM501 is not set | 678 | # CONFIG_MFD_SM501 is not set |
672 | # CONFIG_HTC_PASIC3 is not set | 679 | # CONFIG_HTC_PASIC3 is not set |
680 | # CONFIG_MFD_TMIO is not set | ||
673 | 681 | ||
674 | # | 682 | # |
675 | # Multimedia devices | 683 | # Multimedia devices |
@@ -737,10 +745,6 @@ CONFIG_LOGO=y | |||
737 | CONFIG_LOGO_LINUX_MONO=y | 745 | CONFIG_LOGO_LINUX_MONO=y |
738 | CONFIG_LOGO_LINUX_VGA16=y | 746 | CONFIG_LOGO_LINUX_VGA16=y |
739 | CONFIG_LOGO_LINUX_CLUT224=y | 747 | CONFIG_LOGO_LINUX_CLUT224=y |
740 | |||
741 | # | ||
742 | # Sound | ||
743 | # | ||
744 | # CONFIG_SOUND is not set | 748 | # CONFIG_SOUND is not set |
745 | CONFIG_HID_SUPPORT=y | 749 | CONFIG_HID_SUPPORT=y |
746 | CONFIG_HID=m | 750 | CONFIG_HID=m |
@@ -752,6 +756,7 @@ CONFIG_HIDRAW=y | |||
752 | # CONFIG_NEW_LEDS is not set | 756 | # CONFIG_NEW_LEDS is not set |
753 | # CONFIG_ACCESSIBILITY is not set | 757 | # CONFIG_ACCESSIBILITY is not set |
754 | # CONFIG_RTC_CLASS is not set | 758 | # CONFIG_RTC_CLASS is not set |
759 | # CONFIG_DMADEVICES is not set | ||
755 | # CONFIG_UIO is not set | 760 | # CONFIG_UIO is not set |
756 | 761 | ||
757 | # | 762 | # |
@@ -786,6 +791,7 @@ CONFIG_XFS_FS=m | |||
786 | CONFIG_OCFS2_FS=m | 791 | CONFIG_OCFS2_FS=m |
787 | CONFIG_OCFS2_FS_O2CB=m | 792 | CONFIG_OCFS2_FS_O2CB=m |
788 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m | 793 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m |
794 | # CONFIG_OCFS2_FS_STATS is not set | ||
789 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 795 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
790 | # CONFIG_OCFS2_DEBUG_FS is not set | 796 | # CONFIG_OCFS2_DEBUG_FS is not set |
791 | CONFIG_DNOTIFY=y | 797 | CONFIG_DNOTIFY=y |
@@ -845,6 +851,7 @@ CONFIG_HFSPLUS_FS=m | |||
845 | CONFIG_CRAMFS=m | 851 | CONFIG_CRAMFS=m |
846 | # CONFIG_VXFS_FS is not set | 852 | # CONFIG_VXFS_FS is not set |
847 | CONFIG_MINIX_FS=y | 853 | CONFIG_MINIX_FS=y |
854 | # CONFIG_OMFS_FS is not set | ||
848 | CONFIG_HPFS_FS=m | 855 | CONFIG_HPFS_FS=m |
849 | # CONFIG_QNX4FS_FS is not set | 856 | # CONFIG_QNX4FS_FS is not set |
850 | # CONFIG_ROMFS_FS is not set | 857 | # CONFIG_ROMFS_FS is not set |
@@ -857,18 +864,17 @@ CONFIG_NFS_FS=y | |||
857 | CONFIG_NFS_V3=y | 864 | CONFIG_NFS_V3=y |
858 | # CONFIG_NFS_V3_ACL is not set | 865 | # CONFIG_NFS_V3_ACL is not set |
859 | CONFIG_NFS_V4=y | 866 | CONFIG_NFS_V4=y |
867 | CONFIG_ROOT_NFS=y | ||
860 | CONFIG_NFSD=m | 868 | CONFIG_NFSD=m |
861 | CONFIG_NFSD_V3=y | 869 | CONFIG_NFSD_V3=y |
862 | # CONFIG_NFSD_V3_ACL is not set | 870 | # CONFIG_NFSD_V3_ACL is not set |
863 | # CONFIG_NFSD_V4 is not set | 871 | # CONFIG_NFSD_V4 is not set |
864 | CONFIG_ROOT_NFS=y | ||
865 | CONFIG_LOCKD=y | 872 | CONFIG_LOCKD=y |
866 | CONFIG_LOCKD_V4=y | 873 | CONFIG_LOCKD_V4=y |
867 | CONFIG_EXPORTFS=m | 874 | CONFIG_EXPORTFS=m |
868 | CONFIG_NFS_COMMON=y | 875 | CONFIG_NFS_COMMON=y |
869 | CONFIG_SUNRPC=y | 876 | CONFIG_SUNRPC=y |
870 | CONFIG_SUNRPC_GSS=y | 877 | CONFIG_SUNRPC_GSS=y |
871 | CONFIG_SUNRPC_BIND34=y | ||
872 | CONFIG_RPCSEC_GSS_KRB5=y | 878 | CONFIG_RPCSEC_GSS_KRB5=y |
873 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 879 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
874 | CONFIG_SMB_FS=m | 880 | CONFIG_SMB_FS=m |
@@ -877,7 +883,6 @@ CONFIG_SMB_NLS_REMOTE="cp437" | |||
877 | # CONFIG_CIFS is not set | 883 | # CONFIG_CIFS is not set |
878 | # CONFIG_NCP_FS is not set | 884 | # CONFIG_NCP_FS is not set |
879 | CONFIG_CODA_FS=m | 885 | CONFIG_CODA_FS=m |
880 | # CONFIG_CODA_FS_OLD_API is not set | ||
881 | # CONFIG_AFS_FS is not set | 886 | # CONFIG_AFS_FS is not set |
882 | 887 | ||
883 | # | 888 | # |
@@ -942,6 +947,8 @@ CONFIG_MAGIC_SYSRQ=y | |||
942 | # CONFIG_HEADERS_CHECK is not set | 947 | # CONFIG_HEADERS_CHECK is not set |
943 | # CONFIG_DEBUG_KERNEL is not set | 948 | # CONFIG_DEBUG_KERNEL is not set |
944 | CONFIG_DEBUG_BUGVERBOSE=y | 949 | CONFIG_DEBUG_BUGVERBOSE=y |
950 | CONFIG_DEBUG_MEMORY_INIT=y | ||
951 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
945 | # CONFIG_SAMPLES is not set | 952 | # CONFIG_SAMPLES is not set |
946 | 953 | ||
947 | # | 954 | # |
@@ -1001,6 +1008,10 @@ CONFIG_CRYPTO_CRC32C=m | |||
1001 | CONFIG_CRYPTO_MD4=m | 1008 | CONFIG_CRYPTO_MD4=m |
1002 | CONFIG_CRYPTO_MD5=y | 1009 | CONFIG_CRYPTO_MD5=y |
1003 | CONFIG_CRYPTO_MICHAEL_MIC=m | 1010 | CONFIG_CRYPTO_MICHAEL_MIC=m |
1011 | CONFIG_CRYPTO_RMD128=m | ||
1012 | CONFIG_CRYPTO_RMD160=m | ||
1013 | CONFIG_CRYPTO_RMD256=m | ||
1014 | CONFIG_CRYPTO_RMD320=m | ||
1004 | CONFIG_CRYPTO_SHA1=m | 1015 | CONFIG_CRYPTO_SHA1=m |
1005 | CONFIG_CRYPTO_SHA256=m | 1016 | CONFIG_CRYPTO_SHA256=m |
1006 | CONFIG_CRYPTO_SHA512=m | 1017 | CONFIG_CRYPTO_SHA512=m |
@@ -1042,6 +1053,7 @@ CONFIG_BITREVERSE=y | |||
1042 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | 1053 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set |
1043 | CONFIG_CRC_CCITT=m | 1054 | CONFIG_CRC_CCITT=m |
1044 | CONFIG_CRC16=m | 1055 | CONFIG_CRC16=m |
1056 | CONFIG_CRC_T10DIF=y | ||
1045 | CONFIG_CRC_ITU_T=m | 1057 | CONFIG_CRC_ITU_T=m |
1046 | CONFIG_CRC32=y | 1058 | CONFIG_CRC32=y |
1047 | # CONFIG_CRC7 is not set | 1059 | # CONFIG_CRC7 is not set |
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 49896a2a1d72..1e06d233fa83 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig | |||
@@ -211,6 +211,7 @@ config MIPS_MALTA | |||
211 | select SYS_SUPPORTS_64BIT_KERNEL | 211 | select SYS_SUPPORTS_64BIT_KERNEL |
212 | select SYS_SUPPORTS_BIG_ENDIAN | 212 | select SYS_SUPPORTS_BIG_ENDIAN |
213 | select SYS_SUPPORTS_LITTLE_ENDIAN | 213 | select SYS_SUPPORTS_LITTLE_ENDIAN |
214 | select SYS_SUPPORTS_MIPS_CMP if BROKEN # because SYNC_R4K is broken | ||
214 | select SYS_SUPPORTS_MULTITHREADING | 215 | select SYS_SUPPORTS_MULTITHREADING |
215 | select SYS_SUPPORTS_SMARTMIPS | 216 | select SYS_SUPPORTS_SMARTMIPS |
216 | help | 217 | help |
@@ -1403,7 +1404,6 @@ config MIPS_MT_SMTC | |||
1403 | depends on CPU_MIPS32_R2 | 1404 | depends on CPU_MIPS32_R2 |
1404 | #depends on CPU_MIPS64_R2 # once there is hardware ... | 1405 | #depends on CPU_MIPS64_R2 # once there is hardware ... |
1405 | depends on SYS_SUPPORTS_MULTITHREADING | 1406 | depends on SYS_SUPPORTS_MULTITHREADING |
1406 | select GENERIC_CLOCKEVENTS_BROADCAST | ||
1407 | select CPU_MIPSR2_IRQ_VI | 1407 | select CPU_MIPSR2_IRQ_VI |
1408 | select CPU_MIPSR2_IRQ_EI | 1408 | select CPU_MIPSR2_IRQ_EI |
1409 | select MIPS_MT | 1409 | select MIPS_MT |
@@ -1451,32 +1451,17 @@ config MIPS_VPE_LOADER | |||
1451 | Includes a loader for loading an elf relocatable object | 1451 | Includes a loader for loading an elf relocatable object |
1452 | onto another VPE and running it. | 1452 | onto another VPE and running it. |
1453 | 1453 | ||
1454 | config MIPS_MT_SMTC_INSTANT_REPLAY | ||
1455 | bool "Low-latency Dispatch of Deferred SMTC IPIs" | ||
1456 | depends on MIPS_MT_SMTC && !PREEMPT | ||
1457 | default y | ||
1458 | help | ||
1459 | SMTC pseudo-interrupts between TCs are deferred and queued | ||
1460 | if the target TC is interrupt-inhibited (IXMT). In the first | ||
1461 | SMTC prototypes, these queued IPIs were serviced on return | ||
1462 | to user mode, or on entry into the kernel idle loop. The | ||
1463 | INSTANT_REPLAY option dispatches them as part of local_irq_restore() | ||
1464 | processing, which adds runtime overhead (hence the option to turn | ||
1465 | it off), but ensures that IPIs are handled promptly even under | ||
1466 | heavy I/O interrupt load. | ||
1467 | |||
1468 | config MIPS_MT_SMTC_IM_BACKSTOP | 1454 | config MIPS_MT_SMTC_IM_BACKSTOP |
1469 | bool "Use per-TC register bits as backstop for inhibited IM bits" | 1455 | bool "Use per-TC register bits as backstop for inhibited IM bits" |
1470 | depends on MIPS_MT_SMTC | 1456 | depends on MIPS_MT_SMTC |
1471 | default y | 1457 | default n |
1472 | help | 1458 | help |
1473 | To support multiple TC microthreads acting as "CPUs" within | 1459 | To support multiple TC microthreads acting as "CPUs" within |
1474 | a VPE, VPE-wide interrupt mask bits must be specially manipulated | 1460 | a VPE, VPE-wide interrupt mask bits must be specially manipulated |
1475 | during interrupt handling. To support legacy drivers and interrupt | 1461 | during interrupt handling. To support legacy drivers and interrupt |
1476 | controller management code, SMTC has a "backstop" to track and | 1462 | controller management code, SMTC has a "backstop" to track and |
1477 | if necessary restore the interrupt mask. This has some performance | 1463 | if necessary restore the interrupt mask. This has some performance |
1478 | impact on interrupt service overhead. Disable it only if you know | 1464 | impact on interrupt service overhead. |
1479 | what you are doing. | ||
1480 | 1465 | ||
1481 | config MIPS_MT_SMTC_IRQAFF | 1466 | config MIPS_MT_SMTC_IRQAFF |
1482 | bool "Support IRQ affinity API" | 1467 | bool "Support IRQ affinity API" |
@@ -1486,10 +1471,8 @@ config MIPS_MT_SMTC_IRQAFF | |||
1486 | Enables SMP IRQ affinity API (/proc/irq/*/smp_affinity, etc.) | 1471 | Enables SMP IRQ affinity API (/proc/irq/*/smp_affinity, etc.) |
1487 | for SMTC Linux kernel. Requires platform support, of which | 1472 | for SMTC Linux kernel. Requires platform support, of which |
1488 | an example can be found in the MIPS kernel i8259 and Malta | 1473 | an example can be found in the MIPS kernel i8259 and Malta |
1489 | platform code. It is recommended that MIPS_MT_SMTC_INSTANT_REPLAY | 1474 | platform code. Adds some overhead to interrupt dispatch, and |
1490 | be enabled if MIPS_MT_SMTC_IRQAFF is used. Adds overhead to | 1475 | should be used only if you know what you are doing. |
1491 | interrupt dispatch, and should be used only if you know what | ||
1492 | you are doing. | ||
1493 | 1476 | ||
1494 | config MIPS_VPE_LOADER_TOM | 1477 | config MIPS_VPE_LOADER_TOM |
1495 | bool "Load VPE program into memory hidden from linux" | 1478 | bool "Load VPE program into memory hidden from linux" |
@@ -1517,6 +1500,18 @@ config MIPS_APSP_KSPD | |||
1517 | "exit" syscall notifying other kernel modules the SP program is | 1500 | "exit" syscall notifying other kernel modules the SP program is |
1518 | exiting. You probably want to say yes here. | 1501 | exiting. You probably want to say yes here. |
1519 | 1502 | ||
1503 | config MIPS_CMP | ||
1504 | bool "MIPS CMP framework support" | ||
1505 | depends on SYS_SUPPORTS_MIPS_CMP | ||
1506 | select SYNC_R4K if BROKEN | ||
1507 | select SYS_SUPPORTS_SMP | ||
1508 | select SYS_SUPPORTS_SCHED_SMT if SMP | ||
1509 | select WEAK_ORDERING | ||
1510 | default n | ||
1511 | help | ||
1512 | This is a placeholder option for the GCMP work. It will need to | ||
1513 | be handled differently... | ||
1514 | |||
1520 | config SB1_PASS_1_WORKAROUNDS | 1515 | config SB1_PASS_1_WORKAROUNDS |
1521 | bool | 1516 | bool |
1522 | depends on CPU_SB1_PASS_1 | 1517 | depends on CPU_SB1_PASS_1 |
@@ -1693,6 +1688,9 @@ config SMP | |||
1693 | config SMP_UP | 1688 | config SMP_UP |
1694 | bool | 1689 | bool |
1695 | 1690 | ||
1691 | config SYS_SUPPORTS_MIPS_CMP | ||
1692 | bool | ||
1693 | |||
1696 | config SYS_SUPPORTS_SMP | 1694 | config SYS_SUPPORTS_SMP |
1697 | bool | 1695 | bool |
1698 | 1696 | ||
@@ -1740,17 +1738,6 @@ config NR_CPUS | |||
1740 | performance should round up your number of processors to the next | 1738 | performance should round up your number of processors to the next |
1741 | power of two. | 1739 | power of two. |
1742 | 1740 | ||
1743 | config MIPS_CMP | ||
1744 | bool "MIPS CMP framework support" | ||
1745 | depends on SMP | ||
1746 | select SYNC_R4K | ||
1747 | select SYS_SUPPORTS_SCHED_SMT | ||
1748 | select WEAK_ORDERING | ||
1749 | default n | ||
1750 | help | ||
1751 | This is a placeholder option for the GCMP work. It will need to | ||
1752 | be handled differently... | ||
1753 | |||
1754 | source "kernel/time/Kconfig" | 1741 | source "kernel/time/Kconfig" |
1755 | 1742 | ||
1756 | # | 1743 | # |
diff --git a/arch/mips/au1000/common/gpio.c b/arch/mips/au1000/common/gpio.c index b485d94ce8a5..e660ddd611c4 100644 --- a/arch/mips/au1000/common/gpio.c +++ b/arch/mips/au1000/common/gpio.c | |||
@@ -48,7 +48,7 @@ static void au1xxx_gpio2_write(unsigned gpio, int value) | |||
48 | { | 48 | { |
49 | gpio -= AU1XXX_GPIO_BASE; | 49 | gpio -= AU1XXX_GPIO_BASE; |
50 | 50 | ||
51 | gpio2->output = (GPIO2_OUTPUT_ENABLE_MASK << gpio) | (value << gpio); | 51 | gpio2->output = (GPIO2_OUTPUT_ENABLE_MASK << gpio) | ((!!value) << gpio); |
52 | } | 52 | } |
53 | 53 | ||
54 | static int au1xxx_gpio2_direction_input(unsigned gpio) | 54 | static int au1xxx_gpio2_direction_input(unsigned gpio) |
@@ -61,7 +61,8 @@ static int au1xxx_gpio2_direction_input(unsigned gpio) | |||
61 | static int au1xxx_gpio2_direction_output(unsigned gpio, int value) | 61 | static int au1xxx_gpio2_direction_output(unsigned gpio, int value) |
62 | { | 62 | { |
63 | gpio -= AU1XXX_GPIO_BASE; | 63 | gpio -= AU1XXX_GPIO_BASE; |
64 | gpio2->dir = (0x01 << gpio) | (value << gpio); | 64 | gpio2->dir |= 0x01 << gpio; |
65 | gpio2->output = (GPIO2_OUTPUT_ENABLE_MASK << gpio) | ((!!value) << gpio); | ||
65 | return 0; | 66 | return 0; |
66 | } | 67 | } |
67 | 68 | ||
@@ -90,6 +91,7 @@ static int au1xxx_gpio1_direction_input(unsigned gpio) | |||
90 | static int au1xxx_gpio1_direction_output(unsigned gpio, int value) | 91 | static int au1xxx_gpio1_direction_output(unsigned gpio, int value) |
91 | { | 92 | { |
92 | gpio1->trioutclr = (0x01 & gpio); | 93 | gpio1->trioutclr = (0x01 & gpio); |
94 | au1xxx_gpio1_write(gpio, value); | ||
93 | return 0; | 95 | return 0; |
94 | } | 96 | } |
95 | 97 | ||
diff --git a/arch/mips/kernel/Makefile b/arch/mips/kernel/Makefile index 706f93974797..25775cb54000 100644 --- a/arch/mips/kernel/Makefile +++ b/arch/mips/kernel/Makefile | |||
@@ -10,6 +10,7 @@ obj-y += cpu-probe.o branch.o entry.o genex.o irq.o process.o \ | |||
10 | 10 | ||
11 | obj-$(CONFIG_CEVT_BCM1480) += cevt-bcm1480.o | 11 | obj-$(CONFIG_CEVT_BCM1480) += cevt-bcm1480.o |
12 | obj-$(CONFIG_CEVT_R4K) += cevt-r4k.o | 12 | obj-$(CONFIG_CEVT_R4K) += cevt-r4k.o |
13 | obj-$(CONFIG_MIPS_MT_SMTC) += cevt-smtc.o | ||
13 | obj-$(CONFIG_CEVT_DS1287) += cevt-ds1287.o | 14 | obj-$(CONFIG_CEVT_DS1287) += cevt-ds1287.o |
14 | obj-$(CONFIG_CEVT_GT641XX) += cevt-gt641xx.o | 15 | obj-$(CONFIG_CEVT_GT641XX) += cevt-gt641xx.o |
15 | obj-$(CONFIG_CEVT_SB1250) += cevt-sb1250.o | 16 | obj-$(CONFIG_CEVT_SB1250) += cevt-sb1250.o |
diff --git a/arch/mips/kernel/cevt-r4k.c b/arch/mips/kernel/cevt-r4k.c index 24a2d907aa0d..4a4c59f2737a 100644 --- a/arch/mips/kernel/cevt-r4k.c +++ b/arch/mips/kernel/cevt-r4k.c | |||
@@ -12,6 +12,14 @@ | |||
12 | 12 | ||
13 | #include <asm/smtc_ipi.h> | 13 | #include <asm/smtc_ipi.h> |
14 | #include <asm/time.h> | 14 | #include <asm/time.h> |
15 | #include <asm/cevt-r4k.h> | ||
16 | |||
17 | /* | ||
18 | * The SMTC Kernel for the 34K, 1004K, et. al. replaces several | ||
19 | * of these routines with SMTC-specific variants. | ||
20 | */ | ||
21 | |||
22 | #ifndef CONFIG_MIPS_MT_SMTC | ||
15 | 23 | ||
16 | static int mips_next_event(unsigned long delta, | 24 | static int mips_next_event(unsigned long delta, |
17 | struct clock_event_device *evt) | 25 | struct clock_event_device *evt) |
@@ -19,60 +27,27 @@ static int mips_next_event(unsigned long delta, | |||
19 | unsigned int cnt; | 27 | unsigned int cnt; |
20 | int res; | 28 | int res; |
21 | 29 | ||
22 | #ifdef CONFIG_MIPS_MT_SMTC | ||
23 | { | ||
24 | unsigned long flags, vpflags; | ||
25 | local_irq_save(flags); | ||
26 | vpflags = dvpe(); | ||
27 | #endif | ||
28 | cnt = read_c0_count(); | 30 | cnt = read_c0_count(); |
29 | cnt += delta; | 31 | cnt += delta; |
30 | write_c0_compare(cnt); | 32 | write_c0_compare(cnt); |
31 | res = ((int)(read_c0_count() - cnt) > 0) ? -ETIME : 0; | 33 | res = ((int)(read_c0_count() - cnt) > 0) ? -ETIME : 0; |
32 | #ifdef CONFIG_MIPS_MT_SMTC | ||
33 | evpe(vpflags); | ||
34 | local_irq_restore(flags); | ||
35 | } | ||
36 | #endif | ||
37 | return res; | 34 | return res; |
38 | } | 35 | } |
39 | 36 | ||
40 | static void mips_set_mode(enum clock_event_mode mode, | 37 | #endif /* CONFIG_MIPS_MT_SMTC */ |
41 | struct clock_event_device *evt) | 38 | |
39 | void mips_set_clock_mode(enum clock_event_mode mode, | ||
40 | struct clock_event_device *evt) | ||
42 | { | 41 | { |
43 | /* Nothing to do ... */ | 42 | /* Nothing to do ... */ |
44 | } | 43 | } |
45 | 44 | ||
46 | static DEFINE_PER_CPU(struct clock_event_device, mips_clockevent_device); | 45 | DEFINE_PER_CPU(struct clock_event_device, mips_clockevent_device); |
47 | static int cp0_timer_irq_installed; | 46 | int cp0_timer_irq_installed; |
48 | 47 | ||
49 | /* | 48 | #ifndef CONFIG_MIPS_MT_SMTC |
50 | * Timer ack for an R4k-compatible timer of a known frequency. | ||
51 | */ | ||
52 | static void c0_timer_ack(void) | ||
53 | { | ||
54 | write_c0_compare(read_c0_compare()); | ||
55 | } | ||
56 | 49 | ||
57 | /* | 50 | irqreturn_t c0_compare_interrupt(int irq, void *dev_id) |
58 | * Possibly handle a performance counter interrupt. | ||
59 | * Return true if the timer interrupt should not be checked | ||
60 | */ | ||
61 | static inline int handle_perf_irq(int r2) | ||
62 | { | ||
63 | /* | ||
64 | * The performance counter overflow interrupt may be shared with the | ||
65 | * timer interrupt (cp0_perfcount_irq < 0). If it is and a | ||
66 | * performance counter has overflowed (perf_irq() == IRQ_HANDLED) | ||
67 | * and we can't reliably determine if a counter interrupt has also | ||
68 | * happened (!r2) then don't check for a timer interrupt. | ||
69 | */ | ||
70 | return (cp0_perfcount_irq < 0) && | ||
71 | perf_irq() == IRQ_HANDLED && | ||
72 | !r2; | ||
73 | } | ||
74 | |||
75 | static irqreturn_t c0_compare_interrupt(int irq, void *dev_id) | ||
76 | { | 51 | { |
77 | const int r2 = cpu_has_mips_r2; | 52 | const int r2 = cpu_has_mips_r2; |
78 | struct clock_event_device *cd; | 53 | struct clock_event_device *cd; |
@@ -93,12 +68,8 @@ static irqreturn_t c0_compare_interrupt(int irq, void *dev_id) | |||
93 | * interrupt. Being the paranoiacs we are we check anyway. | 68 | * interrupt. Being the paranoiacs we are we check anyway. |
94 | */ | 69 | */ |
95 | if (!r2 || (read_c0_cause() & (1 << 30))) { | 70 | if (!r2 || (read_c0_cause() & (1 << 30))) { |
96 | c0_timer_ack(); | 71 | /* Clear Count/Compare Interrupt */ |
97 | #ifdef CONFIG_MIPS_MT_SMTC | 72 | write_c0_compare(read_c0_compare()); |
98 | if (cpu_data[cpu].vpe_id) | ||
99 | goto out; | ||
100 | cpu = 0; | ||
101 | #endif | ||
102 | cd = &per_cpu(mips_clockevent_device, cpu); | 73 | cd = &per_cpu(mips_clockevent_device, cpu); |
103 | cd->event_handler(cd); | 74 | cd->event_handler(cd); |
104 | } | 75 | } |
@@ -107,65 +78,16 @@ out: | |||
107 | return IRQ_HANDLED; | 78 | return IRQ_HANDLED; |
108 | } | 79 | } |
109 | 80 | ||
110 | static struct irqaction c0_compare_irqaction = { | 81 | #endif /* Not CONFIG_MIPS_MT_SMTC */ |
82 | |||
83 | struct irqaction c0_compare_irqaction = { | ||
111 | .handler = c0_compare_interrupt, | 84 | .handler = c0_compare_interrupt, |
112 | #ifdef CONFIG_MIPS_MT_SMTC | ||
113 | .flags = IRQF_DISABLED, | ||
114 | #else | ||
115 | .flags = IRQF_DISABLED | IRQF_PERCPU, | 85 | .flags = IRQF_DISABLED | IRQF_PERCPU, |
116 | #endif | ||
117 | .name = "timer", | 86 | .name = "timer", |
118 | }; | 87 | }; |
119 | 88 | ||
120 | #ifdef CONFIG_MIPS_MT_SMTC | ||
121 | DEFINE_PER_CPU(struct clock_event_device, smtc_dummy_clockevent_device); | ||
122 | |||
123 | static void smtc_set_mode(enum clock_event_mode mode, | ||
124 | struct clock_event_device *evt) | ||
125 | { | ||
126 | } | ||
127 | |||
128 | static void mips_broadcast(cpumask_t mask) | ||
129 | { | ||
130 | unsigned int cpu; | ||
131 | |||
132 | for_each_cpu_mask(cpu, mask) | ||
133 | smtc_send_ipi(cpu, SMTC_CLOCK_TICK, 0); | ||
134 | } | ||
135 | |||
136 | static void setup_smtc_dummy_clockevent_device(void) | ||
137 | { | ||
138 | //uint64_t mips_freq = mips_hpt_^frequency; | ||
139 | unsigned int cpu = smp_processor_id(); | ||
140 | struct clock_event_device *cd; | ||
141 | 89 | ||
142 | cd = &per_cpu(smtc_dummy_clockevent_device, cpu); | 90 | void mips_event_handler(struct clock_event_device *dev) |
143 | |||
144 | cd->name = "SMTC"; | ||
145 | cd->features = CLOCK_EVT_FEAT_DUMMY; | ||
146 | |||
147 | /* Calculate the min / max delta */ | ||
148 | cd->mult = 0; //div_sc((unsigned long) mips_freq, NSEC_PER_SEC, 32); | ||
149 | cd->shift = 0; //32; | ||
150 | cd->max_delta_ns = 0; //clockevent_delta2ns(0x7fffffff, cd); | ||
151 | cd->min_delta_ns = 0; //clockevent_delta2ns(0x30, cd); | ||
152 | |||
153 | cd->rating = 200; | ||
154 | cd->irq = 17; //-1; | ||
155 | // if (cpu) | ||
156 | // cd->cpumask = CPU_MASK_ALL; // cpumask_of_cpu(cpu); | ||
157 | // else | ||
158 | cd->cpumask = cpumask_of_cpu(cpu); | ||
159 | |||
160 | cd->set_mode = smtc_set_mode; | ||
161 | |||
162 | cd->broadcast = mips_broadcast; | ||
163 | |||
164 | clockevents_register_device(cd); | ||
165 | } | ||
166 | #endif | ||
167 | |||
168 | static void mips_event_handler(struct clock_event_device *dev) | ||
169 | { | 91 | { |
170 | } | 92 | } |
171 | 93 | ||
@@ -177,7 +99,23 @@ static int c0_compare_int_pending(void) | |||
177 | return (read_c0_cause() >> cp0_compare_irq) & 0x100; | 99 | return (read_c0_cause() >> cp0_compare_irq) & 0x100; |
178 | } | 100 | } |
179 | 101 | ||
180 | static int c0_compare_int_usable(void) | 102 | /* |
103 | * Compare interrupt can be routed and latched outside the core, | ||
104 | * so a single execution hazard barrier may not be enough to give | ||
105 | * it time to clear as seen in the Cause register. 4 time the | ||
106 | * pipeline depth seems reasonably conservative, and empirically | ||
107 | * works better in configurations with high CPU/bus clock ratios. | ||
108 | */ | ||
109 | |||
110 | #define compare_change_hazard() \ | ||
111 | do { \ | ||
112 | irq_disable_hazard(); \ | ||
113 | irq_disable_hazard(); \ | ||
114 | irq_disable_hazard(); \ | ||
115 | irq_disable_hazard(); \ | ||
116 | } while (0) | ||
117 | |||
118 | int c0_compare_int_usable(void) | ||
181 | { | 119 | { |
182 | unsigned int delta; | 120 | unsigned int delta; |
183 | unsigned int cnt; | 121 | unsigned int cnt; |
@@ -187,7 +125,7 @@ static int c0_compare_int_usable(void) | |||
187 | */ | 125 | */ |
188 | if (c0_compare_int_pending()) { | 126 | if (c0_compare_int_pending()) { |
189 | write_c0_compare(read_c0_count()); | 127 | write_c0_compare(read_c0_count()); |
190 | irq_disable_hazard(); | 128 | compare_change_hazard(); |
191 | if (c0_compare_int_pending()) | 129 | if (c0_compare_int_pending()) |
192 | return 0; | 130 | return 0; |
193 | } | 131 | } |
@@ -196,7 +134,7 @@ static int c0_compare_int_usable(void) | |||
196 | cnt = read_c0_count(); | 134 | cnt = read_c0_count(); |
197 | cnt += delta; | 135 | cnt += delta; |
198 | write_c0_compare(cnt); | 136 | write_c0_compare(cnt); |
199 | irq_disable_hazard(); | 137 | compare_change_hazard(); |
200 | if ((int)(read_c0_count() - cnt) < 0) | 138 | if ((int)(read_c0_count() - cnt) < 0) |
201 | break; | 139 | break; |
202 | /* increase delta if the timer was already expired */ | 140 | /* increase delta if the timer was already expired */ |
@@ -205,11 +143,12 @@ static int c0_compare_int_usable(void) | |||
205 | while ((int)(read_c0_count() - cnt) <= 0) | 143 | while ((int)(read_c0_count() - cnt) <= 0) |
206 | ; /* Wait for expiry */ | 144 | ; /* Wait for expiry */ |
207 | 145 | ||
146 | compare_change_hazard(); | ||
208 | if (!c0_compare_int_pending()) | 147 | if (!c0_compare_int_pending()) |
209 | return 0; | 148 | return 0; |
210 | 149 | ||
211 | write_c0_compare(read_c0_count()); | 150 | write_c0_compare(read_c0_count()); |
212 | irq_disable_hazard(); | 151 | compare_change_hazard(); |
213 | if (c0_compare_int_pending()) | 152 | if (c0_compare_int_pending()) |
214 | return 0; | 153 | return 0; |
215 | 154 | ||
@@ -219,6 +158,8 @@ static int c0_compare_int_usable(void) | |||
219 | return 1; | 158 | return 1; |
220 | } | 159 | } |
221 | 160 | ||
161 | #ifndef CONFIG_MIPS_MT_SMTC | ||
162 | |||
222 | int __cpuinit mips_clockevent_init(void) | 163 | int __cpuinit mips_clockevent_init(void) |
223 | { | 164 | { |
224 | uint64_t mips_freq = mips_hpt_frequency; | 165 | uint64_t mips_freq = mips_hpt_frequency; |
@@ -229,17 +170,6 @@ int __cpuinit mips_clockevent_init(void) | |||
229 | if (!cpu_has_counter || !mips_hpt_frequency) | 170 | if (!cpu_has_counter || !mips_hpt_frequency) |
230 | return -ENXIO; | 171 | return -ENXIO; |
231 | 172 | ||
232 | #ifdef CONFIG_MIPS_MT_SMTC | ||
233 | setup_smtc_dummy_clockevent_device(); | ||
234 | |||
235 | /* | ||
236 | * On SMTC we only register VPE0's compare interrupt as clockevent | ||
237 | * device. | ||
238 | */ | ||
239 | if (cpu) | ||
240 | return 0; | ||
241 | #endif | ||
242 | |||
243 | if (!c0_compare_int_usable()) | 173 | if (!c0_compare_int_usable()) |
244 | return -ENXIO; | 174 | return -ENXIO; |
245 | 175 | ||
@@ -265,13 +195,9 @@ int __cpuinit mips_clockevent_init(void) | |||
265 | 195 | ||
266 | cd->rating = 300; | 196 | cd->rating = 300; |
267 | cd->irq = irq; | 197 | cd->irq = irq; |
268 | #ifdef CONFIG_MIPS_MT_SMTC | ||
269 | cd->cpumask = CPU_MASK_ALL; | ||
270 | #else | ||
271 | cd->cpumask = cpumask_of_cpu(cpu); | 198 | cd->cpumask = cpumask_of_cpu(cpu); |
272 | #endif | ||
273 | cd->set_next_event = mips_next_event; | 199 | cd->set_next_event = mips_next_event; |
274 | cd->set_mode = mips_set_mode; | 200 | cd->set_mode = mips_set_clock_mode; |
275 | cd->event_handler = mips_event_handler; | 201 | cd->event_handler = mips_event_handler; |
276 | 202 | ||
277 | clockevents_register_device(cd); | 203 | clockevents_register_device(cd); |
@@ -281,12 +207,9 @@ int __cpuinit mips_clockevent_init(void) | |||
281 | 207 | ||
282 | cp0_timer_irq_installed = 1; | 208 | cp0_timer_irq_installed = 1; |
283 | 209 | ||
284 | #ifdef CONFIG_MIPS_MT_SMTC | ||
285 | #define CPUCTR_IMASKBIT (0x100 << cp0_compare_irq) | ||
286 | setup_irq_smtc(irq, &c0_compare_irqaction, CPUCTR_IMASKBIT); | ||
287 | #else | ||
288 | setup_irq(irq, &c0_compare_irqaction); | 210 | setup_irq(irq, &c0_compare_irqaction); |
289 | #endif | ||
290 | 211 | ||
291 | return 0; | 212 | return 0; |
292 | } | 213 | } |
214 | |||
215 | #endif /* Not CONFIG_MIPS_MT_SMTC */ | ||
diff --git a/arch/mips/kernel/cevt-smtc.c b/arch/mips/kernel/cevt-smtc.c new file mode 100644 index 000000000000..5162fe4b5952 --- /dev/null +++ b/arch/mips/kernel/cevt-smtc.c | |||
@@ -0,0 +1,321 @@ | |||
1 | /* | ||
2 | * This file is subject to the terms and conditions of the GNU General Public | ||
3 | * License. See the file "COPYING" in the main directory of this archive | ||
4 | * for more details. | ||
5 | * | ||
6 | * Copyright (C) 2007 MIPS Technologies, Inc. | ||
7 | * Copyright (C) 2007 Ralf Baechle <ralf@linux-mips.org> | ||
8 | * Copyright (C) 2008 Kevin D. Kissell, Paralogos sarl | ||
9 | */ | ||
10 | #include <linux/clockchips.h> | ||
11 | #include <linux/interrupt.h> | ||
12 | #include <linux/percpu.h> | ||
13 | |||
14 | #include <asm/smtc_ipi.h> | ||
15 | #include <asm/time.h> | ||
16 | #include <asm/cevt-r4k.h> | ||
17 | |||
18 | /* | ||
19 | * Variant clock event timer support for SMTC on MIPS 34K, 1004K | ||
20 | * or other MIPS MT cores. | ||
21 | * | ||
22 | * Notes on SMTC Support: | ||
23 | * | ||
24 | * SMTC has multiple microthread TCs pretending to be Linux CPUs. | ||
25 | * But there's only one Count/Compare pair per VPE, and Compare | ||
26 | * interrupts are taken opportunisitically by available TCs | ||
27 | * bound to the VPE with the Count register. The new timer | ||
28 | * framework provides for global broadcasts, but we really | ||
29 | * want VPE-level multicasts for best behavior. So instead | ||
30 | * of invoking the high-level clock-event broadcast code, | ||
31 | * this version of SMTC support uses the historical SMTC | ||
32 | * multicast mechanisms "under the hood", appearing to the | ||
33 | * generic clock layer as if the interrupts are per-CPU. | ||
34 | * | ||
35 | * The approach taken here is to maintain a set of NR_CPUS | ||
36 | * virtual timers, and track which "CPU" needs to be alerted | ||
37 | * at each event. | ||
38 | * | ||
39 | * It's unlikely that we'll see a MIPS MT core with more than | ||
40 | * 2 VPEs, but we *know* that we won't need to handle more | ||
41 | * VPEs than we have "CPUs". So NCPUs arrays of NCPUs elements | ||
42 | * is always going to be overkill, but always going to be enough. | ||
43 | */ | ||
44 | |||
45 | unsigned long smtc_nexttime[NR_CPUS][NR_CPUS]; | ||
46 | static int smtc_nextinvpe[NR_CPUS]; | ||
47 | |||
48 | /* | ||
49 | * Timestamps stored are absolute values to be programmed | ||
50 | * into Count register. Valid timestamps will never be zero. | ||
51 | * If a Zero Count value is actually calculated, it is converted | ||
52 | * to be a 1, which will introduce 1 or two CPU cycles of error | ||
53 | * roughly once every four billion events, which at 1000 HZ means | ||
54 | * about once every 50 days. If that's actually a problem, one | ||
55 | * could alternate squashing 0 to 1 and to -1. | ||
56 | */ | ||
57 | |||
58 | #define MAKEVALID(x) (((x) == 0L) ? 1L : (x)) | ||
59 | #define ISVALID(x) ((x) != 0L) | ||
60 | |||
61 | /* | ||
62 | * Time comparison is subtle, as it's really truncated | ||
63 | * modular arithmetic. | ||
64 | */ | ||
65 | |||
66 | #define IS_SOONER(a, b, reference) \ | ||
67 | (((a) - (unsigned long)(reference)) < ((b) - (unsigned long)(reference))) | ||
68 | |||
69 | /* | ||
70 | * CATCHUP_INCREMENT, used when the function falls behind the counter. | ||
71 | * Could be an increasing function instead of a constant; | ||
72 | */ | ||
73 | |||
74 | #define CATCHUP_INCREMENT 64 | ||
75 | |||
76 | static int mips_next_event(unsigned long delta, | ||
77 | struct clock_event_device *evt) | ||
78 | { | ||
79 | unsigned long flags; | ||
80 | unsigned int mtflags; | ||
81 | unsigned long timestamp, reference, previous; | ||
82 | unsigned long nextcomp = 0L; | ||
83 | int vpe = current_cpu_data.vpe_id; | ||
84 | int cpu = smp_processor_id(); | ||
85 | local_irq_save(flags); | ||
86 | mtflags = dmt(); | ||
87 | |||
88 | /* | ||
89 | * Maintain the per-TC virtual timer | ||
90 | * and program the per-VPE shared Count register | ||
91 | * as appropriate here... | ||
92 | */ | ||
93 | reference = (unsigned long)read_c0_count(); | ||
94 | timestamp = MAKEVALID(reference + delta); | ||
95 | /* | ||
96 | * To really model the clock, we have to catch the case | ||
97 | * where the current next-in-VPE timestamp is the old | ||
98 | * timestamp for the calling CPE, but the new value is | ||
99 | * in fact later. In that case, we have to do a full | ||
100 | * scan and discover the new next-in-VPE CPU id and | ||
101 | * timestamp. | ||
102 | */ | ||
103 | previous = smtc_nexttime[vpe][cpu]; | ||
104 | if (cpu == smtc_nextinvpe[vpe] && ISVALID(previous) | ||
105 | && IS_SOONER(previous, timestamp, reference)) { | ||
106 | int i; | ||
107 | int soonest = cpu; | ||
108 | |||
109 | /* | ||
110 | * Update timestamp array here, so that new | ||
111 | * value gets considered along with those of | ||
112 | * other virtual CPUs on the VPE. | ||
113 | */ | ||
114 | smtc_nexttime[vpe][cpu] = timestamp; | ||
115 | for_each_online_cpu(i) { | ||
116 | if (ISVALID(smtc_nexttime[vpe][i]) | ||
117 | && IS_SOONER(smtc_nexttime[vpe][i], | ||
118 | smtc_nexttime[vpe][soonest], reference)) { | ||
119 | soonest = i; | ||
120 | } | ||
121 | } | ||
122 | smtc_nextinvpe[vpe] = soonest; | ||
123 | nextcomp = smtc_nexttime[vpe][soonest]; | ||
124 | /* | ||
125 | * Otherwise, we don't have to process the whole array rank, | ||
126 | * we just have to see if the event horizon has gotten closer. | ||
127 | */ | ||
128 | } else { | ||
129 | if (!ISVALID(smtc_nexttime[vpe][smtc_nextinvpe[vpe]]) || | ||
130 | IS_SOONER(timestamp, | ||
131 | smtc_nexttime[vpe][smtc_nextinvpe[vpe]], reference)) { | ||
132 | smtc_nextinvpe[vpe] = cpu; | ||
133 | nextcomp = timestamp; | ||
134 | } | ||
135 | /* | ||
136 | * Since next-in-VPE may me the same as the executing | ||
137 | * virtual CPU, we update the array *after* checking | ||
138 | * its value. | ||
139 | */ | ||
140 | smtc_nexttime[vpe][cpu] = timestamp; | ||
141 | } | ||
142 | |||
143 | /* | ||
144 | * It may be that, in fact, we don't need to update Compare, | ||
145 | * but if we do, we want to make sure we didn't fall into | ||
146 | * a crack just behind Count. | ||
147 | */ | ||
148 | if (ISVALID(nextcomp)) { | ||
149 | write_c0_compare(nextcomp); | ||
150 | ehb(); | ||
151 | /* | ||
152 | * We never return an error, we just make sure | ||
153 | * that we trigger the handlers as quickly as | ||
154 | * we can if we fell behind. | ||
155 | */ | ||
156 | while ((nextcomp - (unsigned long)read_c0_count()) | ||
157 | > (unsigned long)LONG_MAX) { | ||
158 | nextcomp += CATCHUP_INCREMENT; | ||
159 | write_c0_compare(nextcomp); | ||
160 | ehb(); | ||
161 | } | ||
162 | } | ||
163 | emt(mtflags); | ||
164 | local_irq_restore(flags); | ||
165 | return 0; | ||
166 | } | ||
167 | |||
168 | |||
169 | void smtc_distribute_timer(int vpe) | ||
170 | { | ||
171 | unsigned long flags; | ||
172 | unsigned int mtflags; | ||
173 | int cpu; | ||
174 | struct clock_event_device *cd; | ||
175 | unsigned long nextstamp = 0L; | ||
176 | unsigned long reference; | ||
177 | |||
178 | |||
179 | repeat: | ||
180 | for_each_online_cpu(cpu) { | ||
181 | /* | ||
182 | * Find virtual CPUs within the current VPE who have | ||
183 | * unserviced timer requests whose time is now past. | ||
184 | */ | ||
185 | local_irq_save(flags); | ||
186 | mtflags = dmt(); | ||
187 | if (cpu_data[cpu].vpe_id == vpe && | ||
188 | ISVALID(smtc_nexttime[vpe][cpu])) { | ||
189 | reference = (unsigned long)read_c0_count(); | ||
190 | if ((smtc_nexttime[vpe][cpu] - reference) | ||
191 | > (unsigned long)LONG_MAX) { | ||
192 | smtc_nexttime[vpe][cpu] = 0L; | ||
193 | emt(mtflags); | ||
194 | local_irq_restore(flags); | ||
195 | /* | ||
196 | * We don't send IPIs to ourself. | ||
197 | */ | ||
198 | if (cpu != smp_processor_id()) { | ||
199 | smtc_send_ipi(cpu, SMTC_CLOCK_TICK, 0); | ||
200 | } else { | ||
201 | cd = &per_cpu(mips_clockevent_device, cpu); | ||
202 | cd->event_handler(cd); | ||
203 | } | ||
204 | } else { | ||
205 | /* Local to VPE but Valid Time not yet reached. */ | ||
206 | if (!ISVALID(nextstamp) || | ||
207 | IS_SOONER(smtc_nexttime[vpe][cpu], nextstamp, | ||
208 | reference)) { | ||
209 | smtc_nextinvpe[vpe] = cpu; | ||
210 | nextstamp = smtc_nexttime[vpe][cpu]; | ||
211 | } | ||
212 | emt(mtflags); | ||
213 | local_irq_restore(flags); | ||
214 | } | ||
215 | } else { | ||
216 | emt(mtflags); | ||
217 | local_irq_restore(flags); | ||
218 | |||
219 | } | ||
220 | } | ||
221 | /* Reprogram for interrupt at next soonest timestamp for VPE */ | ||
222 | if (ISVALID(nextstamp)) { | ||
223 | write_c0_compare(nextstamp); | ||
224 | ehb(); | ||
225 | if ((nextstamp - (unsigned long)read_c0_count()) | ||
226 | > (unsigned long)LONG_MAX) | ||
227 | goto repeat; | ||
228 | } | ||
229 | } | ||
230 | |||
231 | |||
232 | irqreturn_t c0_compare_interrupt(int irq, void *dev_id) | ||
233 | { | ||
234 | int cpu = smp_processor_id(); | ||
235 | |||
236 | /* If we're running SMTC, we've got MIPS MT and therefore MIPS32R2 */ | ||
237 | handle_perf_irq(1); | ||
238 | |||
239 | if (read_c0_cause() & (1 << 30)) { | ||
240 | /* Clear Count/Compare Interrupt */ | ||
241 | write_c0_compare(read_c0_compare()); | ||
242 | smtc_distribute_timer(cpu_data[cpu].vpe_id); | ||
243 | } | ||
244 | return IRQ_HANDLED; | ||
245 | } | ||
246 | |||
247 | |||
248 | int __cpuinit mips_clockevent_init(void) | ||
249 | { | ||
250 | uint64_t mips_freq = mips_hpt_frequency; | ||
251 | unsigned int cpu = smp_processor_id(); | ||
252 | struct clock_event_device *cd; | ||
253 | unsigned int irq; | ||
254 | int i; | ||
255 | int j; | ||
256 | |||
257 | if (!cpu_has_counter || !mips_hpt_frequency) | ||
258 | return -ENXIO; | ||
259 | if (cpu == 0) { | ||
260 | for (i = 0; i < num_possible_cpus(); i++) { | ||
261 | smtc_nextinvpe[i] = 0; | ||
262 | for (j = 0; j < num_possible_cpus(); j++) | ||
263 | smtc_nexttime[i][j] = 0L; | ||
264 | } | ||
265 | /* | ||
266 | * SMTC also can't have the usablility test | ||
267 | * run by secondary TCs once Compare is in use. | ||
268 | */ | ||
269 | if (!c0_compare_int_usable()) | ||
270 | return -ENXIO; | ||
271 | } | ||
272 | |||
273 | /* | ||
274 | * With vectored interrupts things are getting platform specific. | ||
275 | * get_c0_compare_int is a hook to allow a platform to return the | ||
276 | * interrupt number of it's liking. | ||
277 | */ | ||
278 | irq = MIPS_CPU_IRQ_BASE + cp0_compare_irq; | ||
279 | if (get_c0_compare_int) | ||
280 | irq = get_c0_compare_int(); | ||
281 | |||
282 | cd = &per_cpu(mips_clockevent_device, cpu); | ||
283 | |||
284 | cd->name = "MIPS"; | ||
285 | cd->features = CLOCK_EVT_FEAT_ONESHOT; | ||
286 | |||
287 | /* Calculate the min / max delta */ | ||
288 | cd->mult = div_sc((unsigned long) mips_freq, NSEC_PER_SEC, 32); | ||
289 | cd->shift = 32; | ||
290 | cd->max_delta_ns = clockevent_delta2ns(0x7fffffff, cd); | ||
291 | cd->min_delta_ns = clockevent_delta2ns(0x300, cd); | ||
292 | |||
293 | cd->rating = 300; | ||
294 | cd->irq = irq; | ||
295 | cd->cpumask = cpumask_of_cpu(cpu); | ||
296 | cd->set_next_event = mips_next_event; | ||
297 | cd->set_mode = mips_set_clock_mode; | ||
298 | cd->event_handler = mips_event_handler; | ||
299 | |||
300 | clockevents_register_device(cd); | ||
301 | |||
302 | /* | ||
303 | * On SMTC we only want to do the data structure | ||
304 | * initialization and IRQ setup once. | ||
305 | */ | ||
306 | if (cpu) | ||
307 | return 0; | ||
308 | /* | ||
309 | * And we need the hwmask associated with the c0_compare | ||
310 | * vector to be initialized. | ||
311 | */ | ||
312 | irq_hwmask[irq] = (0x100 << cp0_compare_irq); | ||
313 | if (cp0_timer_irq_installed) | ||
314 | return 0; | ||
315 | |||
316 | cp0_timer_irq_installed = 1; | ||
317 | |||
318 | setup_irq(irq, &c0_compare_irqaction); | ||
319 | |||
320 | return 0; | ||
321 | } | ||
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c index 335a6ae3d594..e621fda8ab37 100644 --- a/arch/mips/kernel/cpu-probe.c +++ b/arch/mips/kernel/cpu-probe.c | |||
@@ -45,18 +45,7 @@ static void r39xx_wait(void) | |||
45 | local_irq_enable(); | 45 | local_irq_enable(); |
46 | } | 46 | } |
47 | 47 | ||
48 | /* | 48 | extern void r4k_wait(void); |
49 | * There is a race when WAIT instruction executed with interrupt | ||
50 | * enabled. | ||
51 | * But it is implementation-dependent wheter the pipelie restarts when | ||
52 | * a non-enabled interrupt is requested. | ||
53 | */ | ||
54 | static void r4k_wait(void) | ||
55 | { | ||
56 | __asm__(" .set mips3 \n" | ||
57 | " wait \n" | ||
58 | " .set mips0 \n"); | ||
59 | } | ||
60 | 49 | ||
61 | /* | 50 | /* |
62 | * This variant is preferable as it allows testing need_resched and going to | 51 | * This variant is preferable as it allows testing need_resched and going to |
@@ -65,14 +54,18 @@ static void r4k_wait(void) | |||
65 | * interrupt is requested" restriction in the MIPS32/MIPS64 architecture makes | 54 | * interrupt is requested" restriction in the MIPS32/MIPS64 architecture makes |
66 | * using this version a gamble. | 55 | * using this version a gamble. |
67 | */ | 56 | */ |
68 | static void r4k_wait_irqoff(void) | 57 | void r4k_wait_irqoff(void) |
69 | { | 58 | { |
70 | local_irq_disable(); | 59 | local_irq_disable(); |
71 | if (!need_resched()) | 60 | if (!need_resched()) |
72 | __asm__(" .set mips3 \n" | 61 | __asm__(" .set push \n" |
62 | " .set mips3 \n" | ||
73 | " wait \n" | 63 | " wait \n" |
74 | " .set mips0 \n"); | 64 | " .set pop \n"); |
75 | local_irq_enable(); | 65 | local_irq_enable(); |
66 | __asm__(" .globl __pastwait \n" | ||
67 | "__pastwait: \n"); | ||
68 | return; | ||
76 | } | 69 | } |
77 | 70 | ||
78 | /* | 71 | /* |
@@ -128,7 +121,7 @@ static int __init wait_disable(char *s) | |||
128 | 121 | ||
129 | __setup("nowait", wait_disable); | 122 | __setup("nowait", wait_disable); |
130 | 123 | ||
131 | static inline void check_wait(void) | 124 | void __init check_wait(void) |
132 | { | 125 | { |
133 | struct cpuinfo_mips *c = ¤t_cpu_data; | 126 | struct cpuinfo_mips *c = ¤t_cpu_data; |
134 | 127 | ||
@@ -242,7 +235,6 @@ static inline void check_errata(void) | |||
242 | 235 | ||
243 | void __init check_bugs32(void) | 236 | void __init check_bugs32(void) |
244 | { | 237 | { |
245 | check_wait(); | ||
246 | check_errata(); | 238 | check_errata(); |
247 | } | 239 | } |
248 | 240 | ||
diff --git a/arch/mips/kernel/entry.S b/arch/mips/kernel/entry.S index e29598ae939d..ffa331029e08 100644 --- a/arch/mips/kernel/entry.S +++ b/arch/mips/kernel/entry.S | |||
@@ -79,11 +79,6 @@ FEXPORT(syscall_exit) | |||
79 | 79 | ||
80 | FEXPORT(restore_all) # restore full frame | 80 | FEXPORT(restore_all) # restore full frame |
81 | #ifdef CONFIG_MIPS_MT_SMTC | 81 | #ifdef CONFIG_MIPS_MT_SMTC |
82 | /* Detect and execute deferred IPI "interrupts" */ | ||
83 | LONG_L s0, TI_REGS($28) | ||
84 | LONG_S sp, TI_REGS($28) | ||
85 | jal deferred_smtc_ipi | ||
86 | LONG_S s0, TI_REGS($28) | ||
87 | #ifdef CONFIG_MIPS_MT_SMTC_IM_BACKSTOP | 82 | #ifdef CONFIG_MIPS_MT_SMTC_IM_BACKSTOP |
88 | /* Re-arm any temporarily masked interrupts not explicitly "acked" */ | 83 | /* Re-arm any temporarily masked interrupts not explicitly "acked" */ |
89 | mfc0 v0, CP0_TCSTATUS | 84 | mfc0 v0, CP0_TCSTATUS |
@@ -112,6 +107,11 @@ FEXPORT(restore_all) # restore full frame | |||
112 | xor t0, t0, t3 | 107 | xor t0, t0, t3 |
113 | mtc0 t0, CP0_TCCONTEXT | 108 | mtc0 t0, CP0_TCCONTEXT |
114 | #endif /* CONFIG_MIPS_MT_SMTC_IM_BACKSTOP */ | 109 | #endif /* CONFIG_MIPS_MT_SMTC_IM_BACKSTOP */ |
110 | /* Detect and execute deferred IPI "interrupts" */ | ||
111 | LONG_L s0, TI_REGS($28) | ||
112 | LONG_S sp, TI_REGS($28) | ||
113 | jal deferred_smtc_ipi | ||
114 | LONG_S s0, TI_REGS($28) | ||
115 | #endif /* CONFIG_MIPS_MT_SMTC */ | 115 | #endif /* CONFIG_MIPS_MT_SMTC */ |
116 | .set noat | 116 | .set noat |
117 | RESTORE_TEMP | 117 | RESTORE_TEMP |
diff --git a/arch/mips/kernel/genex.S b/arch/mips/kernel/genex.S index c6ada98ee042..01dcbe38fa01 100644 --- a/arch/mips/kernel/genex.S +++ b/arch/mips/kernel/genex.S | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <asm/stackframe.h> | 20 | #include <asm/stackframe.h> |
21 | #include <asm/war.h> | 21 | #include <asm/war.h> |
22 | #include <asm/page.h> | 22 | #include <asm/page.h> |
23 | #include <asm/thread_info.h> | ||
23 | 24 | ||
24 | #define PANIC_PIC(msg) \ | 25 | #define PANIC_PIC(msg) \ |
25 | .set push; \ | 26 | .set push; \ |
@@ -126,7 +127,42 @@ handle_vcei: | |||
126 | 127 | ||
127 | __FINIT | 128 | __FINIT |
128 | 129 | ||
130 | .align 5 /* 32 byte rollback region */ | ||
131 | LEAF(r4k_wait) | ||
132 | .set push | ||
133 | .set noreorder | ||
134 | /* start of rollback region */ | ||
135 | LONG_L t0, TI_FLAGS($28) | ||
136 | nop | ||
137 | andi t0, _TIF_NEED_RESCHED | ||
138 | bnez t0, 1f | ||
139 | nop | ||
140 | nop | ||
141 | nop | ||
142 | .set mips3 | ||
143 | wait | ||
144 | /* end of rollback region (the region size must be power of two) */ | ||
145 | .set pop | ||
146 | 1: | ||
147 | jr ra | ||
148 | END(r4k_wait) | ||
149 | |||
150 | .macro BUILD_ROLLBACK_PROLOGUE handler | ||
151 | FEXPORT(rollback_\handler) | ||
152 | .set push | ||
153 | .set noat | ||
154 | MFC0 k0, CP0_EPC | ||
155 | PTR_LA k1, r4k_wait | ||
156 | ori k0, 0x1f /* 32 byte rollback region */ | ||
157 | xori k0, 0x1f | ||
158 | bne k0, k1, 9f | ||
159 | MTC0 k0, CP0_EPC | ||
160 | 9: | ||
161 | .set pop | ||
162 | .endm | ||
163 | |||
129 | .align 5 | 164 | .align 5 |
165 | BUILD_ROLLBACK_PROLOGUE handle_int | ||
130 | NESTED(handle_int, PT_SIZE, sp) | 166 | NESTED(handle_int, PT_SIZE, sp) |
131 | #ifdef CONFIG_TRACE_IRQFLAGS | 167 | #ifdef CONFIG_TRACE_IRQFLAGS |
132 | /* | 168 | /* |
@@ -201,6 +237,7 @@ NESTED(except_vec_ejtag_debug, 0, sp) | |||
201 | * This prototype is copied to ebase + n*IntCtl.VS and patched | 237 | * This prototype is copied to ebase + n*IntCtl.VS and patched |
202 | * to invoke the handler | 238 | * to invoke the handler |
203 | */ | 239 | */ |
240 | BUILD_ROLLBACK_PROLOGUE except_vec_vi | ||
204 | NESTED(except_vec_vi, 0, sp) | 241 | NESTED(except_vec_vi, 0, sp) |
205 | SAVE_SOME | 242 | SAVE_SOME |
206 | SAVE_AT | 243 | SAVE_AT |
@@ -245,8 +282,8 @@ NESTED(except_vec_vi_handler, 0, sp) | |||
245 | and t0, a0, t1 | 282 | and t0, a0, t1 |
246 | #ifdef CONFIG_MIPS_MT_SMTC_IM_BACKSTOP | 283 | #ifdef CONFIG_MIPS_MT_SMTC_IM_BACKSTOP |
247 | mfc0 t2, CP0_TCCONTEXT | 284 | mfc0 t2, CP0_TCCONTEXT |
248 | or t0, t0, t2 | 285 | or t2, t0, t2 |
249 | mtc0 t0, CP0_TCCONTEXT | 286 | mtc0 t2, CP0_TCCONTEXT |
250 | #endif /* CONFIG_MIPS_MT_SMTC_IM_BACKSTOP */ | 287 | #endif /* CONFIG_MIPS_MT_SMTC_IM_BACKSTOP */ |
251 | xor t1, t1, t0 | 288 | xor t1, t1, t0 |
252 | mtc0 t1, CP0_STATUS | 289 | mtc0 t1, CP0_STATUS |
diff --git a/arch/mips/kernel/head.S b/arch/mips/kernel/head.S index 361364501d34..492a0a8d70fb 100644 --- a/arch/mips/kernel/head.S +++ b/arch/mips/kernel/head.S | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <asm/irqflags.h> | 22 | #include <asm/irqflags.h> |
23 | #include <asm/regdef.h> | 23 | #include <asm/regdef.h> |
24 | #include <asm/page.h> | 24 | #include <asm/page.h> |
25 | #include <asm/pgtable-bits.h> | ||
25 | #include <asm/mipsregs.h> | 26 | #include <asm/mipsregs.h> |
26 | #include <asm/stackframe.h> | 27 | #include <asm/stackframe.h> |
27 | 28 | ||
diff --git a/arch/mips/kernel/kgdb.c b/arch/mips/kernel/kgdb.c index 8f6d58ede33c..6e152c80cd4a 100644 --- a/arch/mips/kernel/kgdb.c +++ b/arch/mips/kernel/kgdb.c | |||
@@ -236,8 +236,7 @@ int kgdb_arch_handle_exception(int vector, int signo, int err_code, | |||
236 | 236 | ||
237 | atomic_set(&kgdb_cpu_doing_single_step, -1); | 237 | atomic_set(&kgdb_cpu_doing_single_step, -1); |
238 | if (remcom_in_buffer[0] == 's') | 238 | if (remcom_in_buffer[0] == 's') |
239 | if (kgdb_contthread) | 239 | atomic_set(&kgdb_cpu_doing_single_step, cpu); |
240 | atomic_set(&kgdb_cpu_doing_single_step, cpu); | ||
241 | 240 | ||
242 | return 0; | 241 | return 0; |
243 | } | 242 | } |
diff --git a/arch/mips/kernel/mips-mt-fpaff.c b/arch/mips/kernel/mips-mt-fpaff.c index df4d3f2f740c..dc9eb72ed9de 100644 --- a/arch/mips/kernel/mips-mt-fpaff.c +++ b/arch/mips/kernel/mips-mt-fpaff.c | |||
@@ -159,7 +159,7 @@ __setup("fpaff=", fpaff_thresh); | |||
159 | /* | 159 | /* |
160 | * FPU Use Factor empirically derived from experiments on 34K | 160 | * FPU Use Factor empirically derived from experiments on 34K |
161 | */ | 161 | */ |
162 | #define FPUSEFACTOR 333 | 162 | #define FPUSEFACTOR 2000 |
163 | 163 | ||
164 | static __init int mt_fp_affinity_init(void) | 164 | static __init int mt_fp_affinity_init(void) |
165 | { | 165 | { |
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c index b16facd9ea8e..22fc19bbe87f 100644 --- a/arch/mips/kernel/process.c +++ b/arch/mips/kernel/process.c | |||
@@ -55,7 +55,7 @@ void __noreturn cpu_idle(void) | |||
55 | while (1) { | 55 | while (1) { |
56 | tick_nohz_stop_sched_tick(1); | 56 | tick_nohz_stop_sched_tick(1); |
57 | while (!need_resched()) { | 57 | while (!need_resched()) { |
58 | #ifdef CONFIG_SMTC_IDLE_HOOK_DEBUG | 58 | #ifdef CONFIG_MIPS_MT_SMTC |
59 | extern void smtc_idle_loop_hook(void); | 59 | extern void smtc_idle_loop_hook(void); |
60 | 60 | ||
61 | smtc_idle_loop_hook(); | 61 | smtc_idle_loop_hook(); |
@@ -145,17 +145,18 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long usp, | |||
145 | */ | 145 | */ |
146 | p->thread.cp0_status = read_c0_status() & ~(ST0_CU2|ST0_CU1); | 146 | p->thread.cp0_status = read_c0_status() & ~(ST0_CU2|ST0_CU1); |
147 | childregs->cp0_status &= ~(ST0_CU2|ST0_CU1); | 147 | childregs->cp0_status &= ~(ST0_CU2|ST0_CU1); |
148 | clear_tsk_thread_flag(p, TIF_USEDFPU); | ||
149 | 148 | ||
150 | #ifdef CONFIG_MIPS_MT_FPAFF | 149 | #ifdef CONFIG_MIPS_MT_SMTC |
151 | /* | 150 | /* |
152 | * FPU affinity support is cleaner if we track the | 151 | * SMTC restores TCStatus after Status, and the CU bits |
153 | * user-visible CPU affinity from the very beginning. | 152 | * are aliased there. |
154 | * The generic cpus_allowed mask will already have | ||
155 | * been copied from the parent before copy_thread | ||
156 | * is invoked. | ||
157 | */ | 153 | */ |
158 | p->thread.user_cpus_allowed = p->cpus_allowed; | 154 | childregs->cp0_tcstatus &= ~(ST0_CU2|ST0_CU1); |
155 | #endif | ||
156 | clear_tsk_thread_flag(p, TIF_USEDFPU); | ||
157 | |||
158 | #ifdef CONFIG_MIPS_MT_FPAFF | ||
159 | clear_tsk_thread_flag(p, TIF_FPUBOUND); | ||
159 | #endif /* CONFIG_MIPS_MT_FPAFF */ | 160 | #endif /* CONFIG_MIPS_MT_FPAFF */ |
160 | 161 | ||
161 | if (clone_flags & CLONE_SETTLS) | 162 | if (clone_flags & CLONE_SETTLS) |
diff --git a/arch/mips/kernel/ptrace.c b/arch/mips/kernel/ptrace.c index 35234b92b9a5..96ffc9c6d194 100644 --- a/arch/mips/kernel/ptrace.c +++ b/arch/mips/kernel/ptrace.c | |||
@@ -238,7 +238,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
238 | case FPC_EIR: { /* implementation / version register */ | 238 | case FPC_EIR: { /* implementation / version register */ |
239 | unsigned int flags; | 239 | unsigned int flags; |
240 | #ifdef CONFIG_MIPS_MT_SMTC | 240 | #ifdef CONFIG_MIPS_MT_SMTC |
241 | unsigned int irqflags; | 241 | unsigned long irqflags; |
242 | unsigned int mtflags; | 242 | unsigned int mtflags; |
243 | #endif /* CONFIG_MIPS_MT_SMTC */ | 243 | #endif /* CONFIG_MIPS_MT_SMTC */ |
244 | 244 | ||
diff --git a/arch/mips/kernel/smtc.c b/arch/mips/kernel/smtc.c index a516286532ab..897fb2b4751c 100644 --- a/arch/mips/kernel/smtc.c +++ b/arch/mips/kernel/smtc.c | |||
@@ -1,4 +1,21 @@ | |||
1 | /* Copyright (C) 2004 Mips Technologies, Inc */ | 1 | /* |
2 | * This program is free software; you can redistribute it and/or | ||
3 | * modify it under the terms of the GNU General Public License | ||
4 | * as published by the Free Software Foundation; either version 2 | ||
5 | * of the License, or (at your option) any later version. | ||
6 | * | ||
7 | * This program is distributed in the hope that it will be useful, | ||
8 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
9 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
10 | * GNU General Public License for more details. | ||
11 | * | ||
12 | * You should have received a copy of the GNU General Public License | ||
13 | * along with this program; if not, write to the Free Software | ||
14 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
15 | * | ||
16 | * Copyright (C) 2004 Mips Technologies, Inc | ||
17 | * Copyright (C) 2008 Kevin D. Kissell | ||
18 | */ | ||
2 | 19 | ||
3 | #include <linux/clockchips.h> | 20 | #include <linux/clockchips.h> |
4 | #include <linux/kernel.h> | 21 | #include <linux/kernel.h> |
@@ -21,7 +38,6 @@ | |||
21 | #include <asm/time.h> | 38 | #include <asm/time.h> |
22 | #include <asm/addrspace.h> | 39 | #include <asm/addrspace.h> |
23 | #include <asm/smtc.h> | 40 | #include <asm/smtc.h> |
24 | #include <asm/smtc_ipi.h> | ||
25 | #include <asm/smtc_proc.h> | 41 | #include <asm/smtc_proc.h> |
26 | 42 | ||
27 | /* | 43 | /* |
@@ -58,11 +74,6 @@ unsigned long irq_hwmask[NR_IRQS]; | |||
58 | 74 | ||
59 | asiduse smtc_live_asid[MAX_SMTC_TLBS][MAX_SMTC_ASIDS]; | 75 | asiduse smtc_live_asid[MAX_SMTC_TLBS][MAX_SMTC_ASIDS]; |
60 | 76 | ||
61 | /* | ||
62 | * Clock interrupt "latch" buffers, per "CPU" | ||
63 | */ | ||
64 | |||
65 | static atomic_t ipi_timer_latch[NR_CPUS]; | ||
66 | 77 | ||
67 | /* | 78 | /* |
68 | * Number of InterProcessor Interrupt (IPI) message buffers to allocate | 79 | * Number of InterProcessor Interrupt (IPI) message buffers to allocate |
@@ -70,7 +81,7 @@ static atomic_t ipi_timer_latch[NR_CPUS]; | |||
70 | 81 | ||
71 | #define IPIBUF_PER_CPU 4 | 82 | #define IPIBUF_PER_CPU 4 |
72 | 83 | ||
73 | static struct smtc_ipi_q IPIQ[NR_CPUS]; | 84 | struct smtc_ipi_q IPIQ[NR_CPUS]; |
74 | static struct smtc_ipi_q freeIPIq; | 85 | static struct smtc_ipi_q freeIPIq; |
75 | 86 | ||
76 | 87 | ||
@@ -282,7 +293,7 @@ static void smtc_configure_tlb(void) | |||
282 | * phys_cpu_present_map and the logical/physical mappings. | 293 | * phys_cpu_present_map and the logical/physical mappings. |
283 | */ | 294 | */ |
284 | 295 | ||
285 | int __init mipsmt_build_cpu_map(int start_cpu_slot) | 296 | int __init smtc_build_cpu_map(int start_cpu_slot) |
286 | { | 297 | { |
287 | int i, ntcs; | 298 | int i, ntcs; |
288 | 299 | ||
@@ -325,7 +336,12 @@ static void smtc_tc_setup(int vpe, int tc, int cpu) | |||
325 | write_tc_c0_tcstatus((read_tc_c0_tcstatus() | 336 | write_tc_c0_tcstatus((read_tc_c0_tcstatus() |
326 | & ~(TCSTATUS_TKSU | TCSTATUS_DA | TCSTATUS_IXMT)) | 337 | & ~(TCSTATUS_TKSU | TCSTATUS_DA | TCSTATUS_IXMT)) |
327 | | TCSTATUS_A); | 338 | | TCSTATUS_A); |
328 | write_tc_c0_tccontext(0); | 339 | /* |
340 | * TCContext gets an offset from the base of the IPIQ array | ||
341 | * to be used in low-level code to detect the presence of | ||
342 | * an active IPI queue | ||
343 | */ | ||
344 | write_tc_c0_tccontext((sizeof(struct smtc_ipi_q) * cpu) << 16); | ||
329 | /* Bind tc to vpe */ | 345 | /* Bind tc to vpe */ |
330 | write_tc_c0_tcbind(vpe); | 346 | write_tc_c0_tcbind(vpe); |
331 | /* In general, all TCs should have the same cpu_data indications */ | 347 | /* In general, all TCs should have the same cpu_data indications */ |
@@ -336,10 +352,18 @@ static void smtc_tc_setup(int vpe, int tc, int cpu) | |||
336 | cpu_data[cpu].options &= ~MIPS_CPU_FPU; | 352 | cpu_data[cpu].options &= ~MIPS_CPU_FPU; |
337 | cpu_data[cpu].vpe_id = vpe; | 353 | cpu_data[cpu].vpe_id = vpe; |
338 | cpu_data[cpu].tc_id = tc; | 354 | cpu_data[cpu].tc_id = tc; |
355 | /* Multi-core SMTC hasn't been tested, but be prepared */ | ||
356 | cpu_data[cpu].core = (read_vpe_c0_ebase() >> 1) & 0xff; | ||
339 | } | 357 | } |
340 | 358 | ||
359 | /* | ||
360 | * Tweak to get Count registes in as close a sync as possible. | ||
361 | * Value seems good for 34K-class cores. | ||
362 | */ | ||
363 | |||
364 | #define CP0_SKEW 8 | ||
341 | 365 | ||
342 | void mipsmt_prepare_cpus(void) | 366 | void smtc_prepare_cpus(int cpus) |
343 | { | 367 | { |
344 | int i, vpe, tc, ntc, nvpe, tcpervpe[NR_CPUS], slop, cpu; | 368 | int i, vpe, tc, ntc, nvpe, tcpervpe[NR_CPUS], slop, cpu; |
345 | unsigned long flags; | 369 | unsigned long flags; |
@@ -363,13 +387,13 @@ void mipsmt_prepare_cpus(void) | |||
363 | IPIQ[i].head = IPIQ[i].tail = NULL; | 387 | IPIQ[i].head = IPIQ[i].tail = NULL; |
364 | spin_lock_init(&IPIQ[i].lock); | 388 | spin_lock_init(&IPIQ[i].lock); |
365 | IPIQ[i].depth = 0; | 389 | IPIQ[i].depth = 0; |
366 | atomic_set(&ipi_timer_latch[i], 0); | ||
367 | } | 390 | } |
368 | 391 | ||
369 | /* cpu_data index starts at zero */ | 392 | /* cpu_data index starts at zero */ |
370 | cpu = 0; | 393 | cpu = 0; |
371 | cpu_data[cpu].vpe_id = 0; | 394 | cpu_data[cpu].vpe_id = 0; |
372 | cpu_data[cpu].tc_id = 0; | 395 | cpu_data[cpu].tc_id = 0; |
396 | cpu_data[cpu].core = (read_c0_ebase() >> 1) & 0xff; | ||
373 | cpu++; | 397 | cpu++; |
374 | 398 | ||
375 | /* Report on boot-time options */ | 399 | /* Report on boot-time options */ |
@@ -484,7 +508,8 @@ void mipsmt_prepare_cpus(void) | |||
484 | write_vpe_c0_compare(0); | 508 | write_vpe_c0_compare(0); |
485 | /* Propagate Config7 */ | 509 | /* Propagate Config7 */ |
486 | write_vpe_c0_config7(read_c0_config7()); | 510 | write_vpe_c0_config7(read_c0_config7()); |
487 | write_vpe_c0_count(read_c0_count()); | 511 | write_vpe_c0_count(read_c0_count() + CP0_SKEW); |
512 | ehb(); | ||
488 | } | 513 | } |
489 | /* enable multi-threading within VPE */ | 514 | /* enable multi-threading within VPE */ |
490 | write_vpe_c0_vpecontrol(read_vpe_c0_vpecontrol() | VPECONTROL_TE); | 515 | write_vpe_c0_vpecontrol(read_vpe_c0_vpecontrol() | VPECONTROL_TE); |
@@ -556,7 +581,7 @@ void mipsmt_prepare_cpus(void) | |||
556 | void __cpuinit smtc_boot_secondary(int cpu, struct task_struct *idle) | 581 | void __cpuinit smtc_boot_secondary(int cpu, struct task_struct *idle) |
557 | { | 582 | { |
558 | extern u32 kernelsp[NR_CPUS]; | 583 | extern u32 kernelsp[NR_CPUS]; |
559 | long flags; | 584 | unsigned long flags; |
560 | int mtflags; | 585 | int mtflags; |
561 | 586 | ||
562 | LOCK_MT_PRA(); | 587 | LOCK_MT_PRA(); |
@@ -585,24 +610,22 @@ void __cpuinit smtc_boot_secondary(int cpu, struct task_struct *idle) | |||
585 | 610 | ||
586 | void smtc_init_secondary(void) | 611 | void smtc_init_secondary(void) |
587 | { | 612 | { |
588 | /* | ||
589 | * Start timer on secondary VPEs if necessary. | ||
590 | * plat_timer_setup has already have been invoked by init/main | ||
591 | * on "boot" TC. Like per_cpu_trap_init() hack, this assumes that | ||
592 | * SMTC init code assigns TCs consdecutively and in ascending order | ||
593 | * to across available VPEs. | ||
594 | */ | ||
595 | if (((read_c0_tcbind() & TCBIND_CURTC) != 0) && | ||
596 | ((read_c0_tcbind() & TCBIND_CURVPE) | ||
597 | != cpu_data[smp_processor_id() - 1].vpe_id)){ | ||
598 | write_c0_compare(read_c0_count() + mips_hpt_frequency/HZ); | ||
599 | } | ||
600 | |||
601 | local_irq_enable(); | 613 | local_irq_enable(); |
602 | } | 614 | } |
603 | 615 | ||
604 | void smtc_smp_finish(void) | 616 | void smtc_smp_finish(void) |
605 | { | 617 | { |
618 | int cpu = smp_processor_id(); | ||
619 | |||
620 | /* | ||
621 | * Lowest-numbered CPU per VPE starts a clock tick. | ||
622 | * Like per_cpu_trap_init() hack, this assumes that | ||
623 | * SMTC init code assigns TCs consdecutively and | ||
624 | * in ascending order across available VPEs. | ||
625 | */ | ||
626 | if (cpu > 0 && (cpu_data[cpu].vpe_id != cpu_data[cpu - 1].vpe_id)) | ||
627 | write_c0_compare(read_c0_count() + mips_hpt_frequency/HZ); | ||
628 | |||
606 | printk("TC %d going on-line as CPU %d\n", | 629 | printk("TC %d going on-line as CPU %d\n", |
607 | cpu_data[smp_processor_id()].tc_id, smp_processor_id()); | 630 | cpu_data[smp_processor_id()].tc_id, smp_processor_id()); |
608 | } | 631 | } |
@@ -753,8 +776,10 @@ void smtc_send_ipi(int cpu, int type, unsigned int action) | |||
753 | { | 776 | { |
754 | int tcstatus; | 777 | int tcstatus; |
755 | struct smtc_ipi *pipi; | 778 | struct smtc_ipi *pipi; |
756 | long flags; | 779 | unsigned long flags; |
757 | int mtflags; | 780 | int mtflags; |
781 | unsigned long tcrestart; | ||
782 | extern void r4k_wait_irqoff(void), __pastwait(void); | ||
758 | 783 | ||
759 | if (cpu == smp_processor_id()) { | 784 | if (cpu == smp_processor_id()) { |
760 | printk("Cannot Send IPI to self!\n"); | 785 | printk("Cannot Send IPI to self!\n"); |
@@ -771,8 +796,6 @@ void smtc_send_ipi(int cpu, int type, unsigned int action) | |||
771 | pipi->arg = (void *)action; | 796 | pipi->arg = (void *)action; |
772 | pipi->dest = cpu; | 797 | pipi->dest = cpu; |
773 | if (cpu_data[cpu].vpe_id != cpu_data[smp_processor_id()].vpe_id) { | 798 | if (cpu_data[cpu].vpe_id != cpu_data[smp_processor_id()].vpe_id) { |
774 | if (type == SMTC_CLOCK_TICK) | ||
775 | atomic_inc(&ipi_timer_latch[cpu]); | ||
776 | /* If not on same VPE, enqueue and send cross-VPE interrupt */ | 799 | /* If not on same VPE, enqueue and send cross-VPE interrupt */ |
777 | smtc_ipi_nq(&IPIQ[cpu], pipi); | 800 | smtc_ipi_nq(&IPIQ[cpu], pipi); |
778 | LOCK_CORE_PRA(); | 801 | LOCK_CORE_PRA(); |
@@ -800,22 +823,29 @@ void smtc_send_ipi(int cpu, int type, unsigned int action) | |||
800 | 823 | ||
801 | if ((tcstatus & TCSTATUS_IXMT) != 0) { | 824 | if ((tcstatus & TCSTATUS_IXMT) != 0) { |
802 | /* | 825 | /* |
803 | * Spin-waiting here can deadlock, | 826 | * If we're in the the irq-off version of the wait |
804 | * so we queue the message for the target TC. | 827 | * loop, we need to force exit from the wait and |
828 | * do a direct post of the IPI. | ||
829 | */ | ||
830 | if (cpu_wait == r4k_wait_irqoff) { | ||
831 | tcrestart = read_tc_c0_tcrestart(); | ||
832 | if (tcrestart >= (unsigned long)r4k_wait_irqoff | ||
833 | && tcrestart < (unsigned long)__pastwait) { | ||
834 | write_tc_c0_tcrestart(__pastwait); | ||
835 | tcstatus &= ~TCSTATUS_IXMT; | ||
836 | write_tc_c0_tcstatus(tcstatus); | ||
837 | goto postdirect; | ||
838 | } | ||
839 | } | ||
840 | /* | ||
841 | * Otherwise we queue the message for the target TC | ||
842 | * to pick up when he does a local_irq_restore() | ||
805 | */ | 843 | */ |
806 | write_tc_c0_tchalt(0); | 844 | write_tc_c0_tchalt(0); |
807 | UNLOCK_CORE_PRA(); | 845 | UNLOCK_CORE_PRA(); |
808 | /* Try to reduce redundant timer interrupt messages */ | ||
809 | if (type == SMTC_CLOCK_TICK) { | ||
810 | if (atomic_postincrement(&ipi_timer_latch[cpu])!=0){ | ||
811 | smtc_ipi_nq(&freeIPIq, pipi); | ||
812 | return; | ||
813 | } | ||
814 | } | ||
815 | smtc_ipi_nq(&IPIQ[cpu], pipi); | 846 | smtc_ipi_nq(&IPIQ[cpu], pipi); |
816 | } else { | 847 | } else { |
817 | if (type == SMTC_CLOCK_TICK) | 848 | postdirect: |
818 | atomic_inc(&ipi_timer_latch[cpu]); | ||
819 | post_direct_ipi(cpu, pipi); | 849 | post_direct_ipi(cpu, pipi); |
820 | write_tc_c0_tchalt(0); | 850 | write_tc_c0_tchalt(0); |
821 | UNLOCK_CORE_PRA(); | 851 | UNLOCK_CORE_PRA(); |
@@ -883,7 +913,7 @@ static void ipi_call_interrupt(void) | |||
883 | smp_call_function_interrupt(); | 913 | smp_call_function_interrupt(); |
884 | } | 914 | } |
885 | 915 | ||
886 | DECLARE_PER_CPU(struct clock_event_device, smtc_dummy_clockevent_device); | 916 | DECLARE_PER_CPU(struct clock_event_device, mips_clockevent_device); |
887 | 917 | ||
888 | void ipi_decode(struct smtc_ipi *pipi) | 918 | void ipi_decode(struct smtc_ipi *pipi) |
889 | { | 919 | { |
@@ -891,20 +921,13 @@ void ipi_decode(struct smtc_ipi *pipi) | |||
891 | struct clock_event_device *cd; | 921 | struct clock_event_device *cd; |
892 | void *arg_copy = pipi->arg; | 922 | void *arg_copy = pipi->arg; |
893 | int type_copy = pipi->type; | 923 | int type_copy = pipi->type; |
894 | int ticks; | ||
895 | |||
896 | smtc_ipi_nq(&freeIPIq, pipi); | 924 | smtc_ipi_nq(&freeIPIq, pipi); |
897 | switch (type_copy) { | 925 | switch (type_copy) { |
898 | case SMTC_CLOCK_TICK: | 926 | case SMTC_CLOCK_TICK: |
899 | irq_enter(); | 927 | irq_enter(); |
900 | kstat_this_cpu.irqs[MIPS_CPU_IRQ_BASE + 1]++; | 928 | kstat_this_cpu.irqs[MIPS_CPU_IRQ_BASE + 1]++; |
901 | cd = &per_cpu(smtc_dummy_clockevent_device, cpu); | 929 | cd = &per_cpu(mips_clockevent_device, cpu); |
902 | ticks = atomic_read(&ipi_timer_latch[cpu]); | 930 | cd->event_handler(cd); |
903 | atomic_sub(ticks, &ipi_timer_latch[cpu]); | ||
904 | while (ticks) { | ||
905 | cd->event_handler(cd); | ||
906 | ticks--; | ||
907 | } | ||
908 | irq_exit(); | 931 | irq_exit(); |
909 | break; | 932 | break; |
910 | 933 | ||
@@ -937,24 +960,48 @@ void ipi_decode(struct smtc_ipi *pipi) | |||
937 | } | 960 | } |
938 | } | 961 | } |
939 | 962 | ||
963 | /* | ||
964 | * Similar to smtc_ipi_replay(), but invoked from context restore, | ||
965 | * so it reuses the current exception frame rather than set up a | ||
966 | * new one with self_ipi. | ||
967 | */ | ||
968 | |||
940 | void deferred_smtc_ipi(void) | 969 | void deferred_smtc_ipi(void) |
941 | { | 970 | { |
942 | struct smtc_ipi *pipi; | 971 | int cpu = smp_processor_id(); |
943 | unsigned long flags; | ||
944 | /* DEBUG */ | ||
945 | int q = smp_processor_id(); | ||
946 | 972 | ||
947 | /* | 973 | /* |
948 | * Test is not atomic, but much faster than a dequeue, | 974 | * Test is not atomic, but much faster than a dequeue, |
949 | * and the vast majority of invocations will have a null queue. | 975 | * and the vast majority of invocations will have a null queue. |
976 | * If irq_disabled when this was called, then any IPIs queued | ||
977 | * after we test last will be taken on the next irq_enable/restore. | ||
978 | * If interrupts were enabled, then any IPIs added after the | ||
979 | * last test will be taken directly. | ||
950 | */ | 980 | */ |
951 | if (IPIQ[q].head != NULL) { | 981 | |
952 | while((pipi = smtc_ipi_dq(&IPIQ[q])) != NULL) { | 982 | while (IPIQ[cpu].head != NULL) { |
953 | /* ipi_decode() should be called with interrupts off */ | 983 | struct smtc_ipi_q *q = &IPIQ[cpu]; |
954 | local_irq_save(flags); | 984 | struct smtc_ipi *pipi; |
985 | unsigned long flags; | ||
986 | |||
987 | /* | ||
988 | * It may be possible we'll come in with interrupts | ||
989 | * already enabled. | ||
990 | */ | ||
991 | local_irq_save(flags); | ||
992 | |||
993 | spin_lock(&q->lock); | ||
994 | pipi = __smtc_ipi_dq(q); | ||
995 | spin_unlock(&q->lock); | ||
996 | if (pipi != NULL) | ||
955 | ipi_decode(pipi); | 997 | ipi_decode(pipi); |
956 | local_irq_restore(flags); | 998 | /* |
957 | } | 999 | * The use of the __raw_local restore isn't |
1000 | * as obviously necessary here as in smtc_ipi_replay(), | ||
1001 | * but it's more efficient, given that we're already | ||
1002 | * running down the IPI queue. | ||
1003 | */ | ||
1004 | __raw_local_irq_restore(flags); | ||
958 | } | 1005 | } |
959 | } | 1006 | } |
960 | 1007 | ||
@@ -975,7 +1022,7 @@ static irqreturn_t ipi_interrupt(int irq, void *dev_idm) | |||
975 | struct smtc_ipi *pipi; | 1022 | struct smtc_ipi *pipi; |
976 | unsigned long tcstatus; | 1023 | unsigned long tcstatus; |
977 | int sent; | 1024 | int sent; |
978 | long flags; | 1025 | unsigned long flags; |
979 | unsigned int mtflags; | 1026 | unsigned int mtflags; |
980 | unsigned int vpflags; | 1027 | unsigned int vpflags; |
981 | 1028 | ||
@@ -1066,55 +1113,53 @@ static void setup_cross_vpe_interrupts(unsigned int nvpe) | |||
1066 | 1113 | ||
1067 | /* | 1114 | /* |
1068 | * SMTC-specific hacks invoked from elsewhere in the kernel. | 1115 | * SMTC-specific hacks invoked from elsewhere in the kernel. |
1069 | * | ||
1070 | * smtc_ipi_replay is called from raw_local_irq_restore which is only ever | ||
1071 | * called with interrupts disabled. We do rely on interrupts being disabled | ||
1072 | * here because using spin_lock_irqsave()/spin_unlock_irqrestore() would | ||
1073 | * result in a recursive call to raw_local_irq_restore(). | ||
1074 | */ | 1116 | */ |
1075 | 1117 | ||
1076 | static void __smtc_ipi_replay(void) | 1118 | /* |
1119 | * smtc_ipi_replay is called from raw_local_irq_restore | ||
1120 | */ | ||
1121 | |||
1122 | void smtc_ipi_replay(void) | ||
1077 | { | 1123 | { |
1078 | unsigned int cpu = smp_processor_id(); | 1124 | unsigned int cpu = smp_processor_id(); |
1079 | 1125 | ||
1080 | /* | 1126 | /* |
1081 | * To the extent that we've ever turned interrupts off, | 1127 | * To the extent that we've ever turned interrupts off, |
1082 | * we may have accumulated deferred IPIs. This is subtle. | 1128 | * we may have accumulated deferred IPIs. This is subtle. |
1083 | * If we use the smtc_ipi_qdepth() macro, we'll get an | ||
1084 | * exact number - but we'll also disable interrupts | ||
1085 | * and create a window of failure where a new IPI gets | ||
1086 | * queued after we test the depth but before we re-enable | ||
1087 | * interrupts. So long as IXMT never gets set, however, | ||
1088 | * we should be OK: If we pick up something and dispatch | 1129 | * we should be OK: If we pick up something and dispatch |
1089 | * it here, that's great. If we see nothing, but concurrent | 1130 | * it here, that's great. If we see nothing, but concurrent |
1090 | * with this operation, another TC sends us an IPI, IXMT | 1131 | * with this operation, another TC sends us an IPI, IXMT |
1091 | * is clear, and we'll handle it as a real pseudo-interrupt | 1132 | * is clear, and we'll handle it as a real pseudo-interrupt |
1092 | * and not a pseudo-pseudo interrupt. | 1133 | * and not a pseudo-pseudo interrupt. The important thing |
1134 | * is to do the last check for queued message *after* the | ||
1135 | * re-enabling of interrupts. | ||
1093 | */ | 1136 | */ |
1094 | if (IPIQ[cpu].depth > 0) { | 1137 | while (IPIQ[cpu].head != NULL) { |
1095 | while (1) { | 1138 | struct smtc_ipi_q *q = &IPIQ[cpu]; |
1096 | struct smtc_ipi_q *q = &IPIQ[cpu]; | 1139 | struct smtc_ipi *pipi; |
1097 | struct smtc_ipi *pipi; | 1140 | unsigned long flags; |
1098 | extern void self_ipi(struct smtc_ipi *); | 1141 | |
1099 | 1142 | /* | |
1100 | spin_lock(&q->lock); | 1143 | * It's just possible we'll come in with interrupts |
1101 | pipi = __smtc_ipi_dq(q); | 1144 | * already enabled. |
1102 | spin_unlock(&q->lock); | 1145 | */ |
1103 | if (!pipi) | 1146 | local_irq_save(flags); |
1104 | break; | 1147 | |
1148 | spin_lock(&q->lock); | ||
1149 | pipi = __smtc_ipi_dq(q); | ||
1150 | spin_unlock(&q->lock); | ||
1151 | /* | ||
1152 | ** But use a raw restore here to avoid recursion. | ||
1153 | */ | ||
1154 | __raw_local_irq_restore(flags); | ||
1105 | 1155 | ||
1156 | if (pipi) { | ||
1106 | self_ipi(pipi); | 1157 | self_ipi(pipi); |
1107 | smtc_cpu_stats[cpu].selfipis++; | 1158 | smtc_cpu_stats[cpu].selfipis++; |
1108 | } | 1159 | } |
1109 | } | 1160 | } |
1110 | } | 1161 | } |
1111 | 1162 | ||
1112 | void smtc_ipi_replay(void) | ||
1113 | { | ||
1114 | raw_local_irq_disable(); | ||
1115 | __smtc_ipi_replay(); | ||
1116 | } | ||
1117 | |||
1118 | EXPORT_SYMBOL(smtc_ipi_replay); | 1163 | EXPORT_SYMBOL(smtc_ipi_replay); |
1119 | 1164 | ||
1120 | void smtc_idle_loop_hook(void) | 1165 | void smtc_idle_loop_hook(void) |
@@ -1193,40 +1238,13 @@ void smtc_idle_loop_hook(void) | |||
1193 | } | 1238 | } |
1194 | } | 1239 | } |
1195 | 1240 | ||
1196 | /* | ||
1197 | * Now that we limit outstanding timer IPIs, check for hung TC | ||
1198 | */ | ||
1199 | for (tc = 0; tc < NR_CPUS; tc++) { | ||
1200 | /* Don't check ourself - we'll dequeue IPIs just below */ | ||
1201 | if ((tc != smp_processor_id()) && | ||
1202 | atomic_read(&ipi_timer_latch[tc]) > timerq_limit) { | ||
1203 | if (clock_hang_reported[tc] == 0) { | ||
1204 | pdb_msg += sprintf(pdb_msg, | ||
1205 | "TC %d looks hung with timer latch at %d\n", | ||
1206 | tc, atomic_read(&ipi_timer_latch[tc])); | ||
1207 | clock_hang_reported[tc]++; | ||
1208 | } | ||
1209 | } | ||
1210 | } | ||
1211 | emt(mtflags); | 1241 | emt(mtflags); |
1212 | local_irq_restore(flags); | 1242 | local_irq_restore(flags); |
1213 | if (pdb_msg != &id_ho_db_msg[0]) | 1243 | if (pdb_msg != &id_ho_db_msg[0]) |
1214 | printk("CPU%d: %s", smp_processor_id(), id_ho_db_msg); | 1244 | printk("CPU%d: %s", smp_processor_id(), id_ho_db_msg); |
1215 | #endif /* CONFIG_SMTC_IDLE_HOOK_DEBUG */ | 1245 | #endif /* CONFIG_SMTC_IDLE_HOOK_DEBUG */ |
1216 | 1246 | ||
1217 | /* | 1247 | smtc_ipi_replay(); |
1218 | * Replay any accumulated deferred IPIs. If "Instant Replay" | ||
1219 | * is in use, there should never be any. | ||
1220 | */ | ||
1221 | #ifndef CONFIG_MIPS_MT_SMTC_INSTANT_REPLAY | ||
1222 | { | ||
1223 | unsigned long flags; | ||
1224 | |||
1225 | local_irq_save(flags); | ||
1226 | __smtc_ipi_replay(); | ||
1227 | local_irq_restore(flags); | ||
1228 | } | ||
1229 | #endif /* CONFIG_MIPS_MT_SMTC_INSTANT_REPLAY */ | ||
1230 | } | 1248 | } |
1231 | 1249 | ||
1232 | void smtc_soft_dump(void) | 1250 | void smtc_soft_dump(void) |
@@ -1242,10 +1260,6 @@ void smtc_soft_dump(void) | |||
1242 | printk("%d: %ld\n", i, smtc_cpu_stats[i].selfipis); | 1260 | printk("%d: %ld\n", i, smtc_cpu_stats[i].selfipis); |
1243 | } | 1261 | } |
1244 | smtc_ipi_qdump(); | 1262 | smtc_ipi_qdump(); |
1245 | printk("Timer IPI Backlogs:\n"); | ||
1246 | for (i=0; i < NR_CPUS; i++) { | ||
1247 | printk("%d: %d\n", i, atomic_read(&ipi_timer_latch[i])); | ||
1248 | } | ||
1249 | printk("%d Recoveries of \"stolen\" FPU\n", | 1263 | printk("%d Recoveries of \"stolen\" FPU\n", |
1250 | atomic_read(&smtc_fpu_recoveries)); | 1264 | atomic_read(&smtc_fpu_recoveries)); |
1251 | } | 1265 | } |
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index 6bee29097a56..b602ac6eb47d 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c | |||
@@ -46,6 +46,9 @@ | |||
46 | #include <asm/types.h> | 46 | #include <asm/types.h> |
47 | #include <asm/stacktrace.h> | 47 | #include <asm/stacktrace.h> |
48 | 48 | ||
49 | extern void check_wait(void); | ||
50 | extern asmlinkage void r4k_wait(void); | ||
51 | extern asmlinkage void rollback_handle_int(void); | ||
49 | extern asmlinkage void handle_int(void); | 52 | extern asmlinkage void handle_int(void); |
50 | extern asmlinkage void handle_tlbm(void); | 53 | extern asmlinkage void handle_tlbm(void); |
51 | extern asmlinkage void handle_tlbl(void); | 54 | extern asmlinkage void handle_tlbl(void); |
@@ -822,8 +825,10 @@ static void mt_ase_fp_affinity(void) | |||
822 | if (cpus_intersects(current->cpus_allowed, mt_fpu_cpumask)) { | 825 | if (cpus_intersects(current->cpus_allowed, mt_fpu_cpumask)) { |
823 | cpumask_t tmask; | 826 | cpumask_t tmask; |
824 | 827 | ||
825 | cpus_and(tmask, current->thread.user_cpus_allowed, | 828 | current->thread.user_cpus_allowed |
826 | mt_fpu_cpumask); | 829 | = current->cpus_allowed; |
830 | cpus_and(tmask, current->cpus_allowed, | ||
831 | mt_fpu_cpumask); | ||
827 | set_cpus_allowed(current, tmask); | 832 | set_cpus_allowed(current, tmask); |
828 | set_thread_flag(TIF_FPUBOUND); | 833 | set_thread_flag(TIF_FPUBOUND); |
829 | } | 834 | } |
@@ -1251,6 +1256,9 @@ static void *set_vi_srs_handler(int n, vi_handler_t addr, int srs) | |||
1251 | 1256 | ||
1252 | extern char except_vec_vi, except_vec_vi_lui; | 1257 | extern char except_vec_vi, except_vec_vi_lui; |
1253 | extern char except_vec_vi_ori, except_vec_vi_end; | 1258 | extern char except_vec_vi_ori, except_vec_vi_end; |
1259 | extern char rollback_except_vec_vi; | ||
1260 | char *vec_start = (cpu_wait == r4k_wait) ? | ||
1261 | &rollback_except_vec_vi : &except_vec_vi; | ||
1254 | #ifdef CONFIG_MIPS_MT_SMTC | 1262 | #ifdef CONFIG_MIPS_MT_SMTC |
1255 | /* | 1263 | /* |
1256 | * We need to provide the SMTC vectored interrupt handler | 1264 | * We need to provide the SMTC vectored interrupt handler |
@@ -1258,11 +1266,11 @@ static void *set_vi_srs_handler(int n, vi_handler_t addr, int srs) | |||
1258 | * Status.IM bit to be masked before going there. | 1266 | * Status.IM bit to be masked before going there. |
1259 | */ | 1267 | */ |
1260 | extern char except_vec_vi_mori; | 1268 | extern char except_vec_vi_mori; |
1261 | const int mori_offset = &except_vec_vi_mori - &except_vec_vi; | 1269 | const int mori_offset = &except_vec_vi_mori - vec_start; |
1262 | #endif /* CONFIG_MIPS_MT_SMTC */ | 1270 | #endif /* CONFIG_MIPS_MT_SMTC */ |
1263 | const int handler_len = &except_vec_vi_end - &except_vec_vi; | 1271 | const int handler_len = &except_vec_vi_end - vec_start; |
1264 | const int lui_offset = &except_vec_vi_lui - &except_vec_vi; | 1272 | const int lui_offset = &except_vec_vi_lui - vec_start; |
1265 | const int ori_offset = &except_vec_vi_ori - &except_vec_vi; | 1273 | const int ori_offset = &except_vec_vi_ori - vec_start; |
1266 | 1274 | ||
1267 | if (handler_len > VECTORSPACING) { | 1275 | if (handler_len > VECTORSPACING) { |
1268 | /* | 1276 | /* |
@@ -1272,7 +1280,7 @@ static void *set_vi_srs_handler(int n, vi_handler_t addr, int srs) | |||
1272 | panic("VECTORSPACING too small"); | 1280 | panic("VECTORSPACING too small"); |
1273 | } | 1281 | } |
1274 | 1282 | ||
1275 | memcpy(b, &except_vec_vi, handler_len); | 1283 | memcpy(b, vec_start, handler_len); |
1276 | #ifdef CONFIG_MIPS_MT_SMTC | 1284 | #ifdef CONFIG_MIPS_MT_SMTC |
1277 | BUG_ON(n > 7); /* Vector index %d exceeds SMTC maximum. */ | 1285 | BUG_ON(n > 7); /* Vector index %d exceeds SMTC maximum. */ |
1278 | 1286 | ||
@@ -1554,6 +1562,10 @@ void __init trap_init(void) | |||
1554 | extern char except_vec3_generic, except_vec3_r4000; | 1562 | extern char except_vec3_generic, except_vec3_r4000; |
1555 | extern char except_vec4; | 1563 | extern char except_vec4; |
1556 | unsigned long i; | 1564 | unsigned long i; |
1565 | int rollback; | ||
1566 | |||
1567 | check_wait(); | ||
1568 | rollback = (cpu_wait == r4k_wait); | ||
1557 | 1569 | ||
1558 | #if defined(CONFIG_KGDB) | 1570 | #if defined(CONFIG_KGDB) |
1559 | if (kgdb_early_setup) | 1571 | if (kgdb_early_setup) |
@@ -1618,7 +1630,7 @@ void __init trap_init(void) | |||
1618 | if (board_be_init) | 1630 | if (board_be_init) |
1619 | board_be_init(); | 1631 | board_be_init(); |
1620 | 1632 | ||
1621 | set_except_vector(0, handle_int); | 1633 | set_except_vector(0, rollback ? rollback_handle_int : handle_int); |
1622 | set_except_vector(1, handle_tlbm); | 1634 | set_except_vector(1, handle_tlbm); |
1623 | set_except_vector(2, handle_tlbl); | 1635 | set_except_vector(2, handle_tlbl); |
1624 | set_except_vector(3, handle_tlbs); | 1636 | set_except_vector(3, handle_tlbs); |
diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S index b5470ceb418b..afb119f35682 100644 --- a/arch/mips/kernel/vmlinux.lds.S +++ b/arch/mips/kernel/vmlinux.lds.S | |||
@@ -36,6 +36,7 @@ SECTIONS | |||
36 | SCHED_TEXT | 36 | SCHED_TEXT |
37 | LOCK_TEXT | 37 | LOCK_TEXT |
38 | KPROBES_TEXT | 38 | KPROBES_TEXT |
39 | *(.text.*) | ||
39 | *(.fixup) | 40 | *(.fixup) |
40 | *(.gnu.warning) | 41 | *(.gnu.warning) |
41 | } :text = 0 | 42 | } :text = 0 |
diff --git a/arch/mips/lib/csum_partial.S b/arch/mips/lib/csum_partial.S index 8d7784122c14..edac9892c51a 100644 --- a/arch/mips/lib/csum_partial.S +++ b/arch/mips/lib/csum_partial.S | |||
@@ -39,12 +39,14 @@ | |||
39 | #ifdef USE_DOUBLE | 39 | #ifdef USE_DOUBLE |
40 | 40 | ||
41 | #define LOAD ld | 41 | #define LOAD ld |
42 | #define LOAD32 lwu | ||
42 | #define ADD daddu | 43 | #define ADD daddu |
43 | #define NBYTES 8 | 44 | #define NBYTES 8 |
44 | 45 | ||
45 | #else | 46 | #else |
46 | 47 | ||
47 | #define LOAD lw | 48 | #define LOAD lw |
49 | #define LOAD32 lw | ||
48 | #define ADD addu | 50 | #define ADD addu |
49 | #define NBYTES 4 | 51 | #define NBYTES 4 |
50 | 52 | ||
@@ -60,6 +62,14 @@ | |||
60 | ADD sum, v1; \ | 62 | ADD sum, v1; \ |
61 | .set pop | 63 | .set pop |
62 | 64 | ||
65 | #define ADDC32(sum,reg) \ | ||
66 | .set push; \ | ||
67 | .set noat; \ | ||
68 | addu sum, reg; \ | ||
69 | sltu v1, sum, reg; \ | ||
70 | addu sum, v1; \ | ||
71 | .set pop | ||
72 | |||
63 | #define CSUM_BIGCHUNK1(src, offset, sum, _t0, _t1, _t2, _t3) \ | 73 | #define CSUM_BIGCHUNK1(src, offset, sum, _t0, _t1, _t2, _t3) \ |
64 | LOAD _t0, (offset + UNIT(0))(src); \ | 74 | LOAD _t0, (offset + UNIT(0))(src); \ |
65 | LOAD _t1, (offset + UNIT(1))(src); \ | 75 | LOAD _t1, (offset + UNIT(1))(src); \ |
@@ -132,7 +142,7 @@ LEAF(csum_partial) | |||
132 | beqz t8, .Lqword_align | 142 | beqz t8, .Lqword_align |
133 | andi t8, src, 0x8 | 143 | andi t8, src, 0x8 |
134 | 144 | ||
135 | lw t0, 0x00(src) | 145 | LOAD32 t0, 0x00(src) |
136 | LONG_SUBU a1, a1, 0x4 | 146 | LONG_SUBU a1, a1, 0x4 |
137 | ADDC(sum, t0) | 147 | ADDC(sum, t0) |
138 | PTR_ADDU src, src, 0x4 | 148 | PTR_ADDU src, src, 0x4 |
@@ -211,7 +221,7 @@ LEAF(csum_partial) | |||
211 | LONG_SRL t8, t8, 0x2 | 221 | LONG_SRL t8, t8, 0x2 |
212 | 222 | ||
213 | .Lend_words: | 223 | .Lend_words: |
214 | lw t0, (src) | 224 | LOAD32 t0, (src) |
215 | LONG_SUBU t8, t8, 0x1 | 225 | LONG_SUBU t8, t8, 0x1 |
216 | ADDC(sum, t0) | 226 | ADDC(sum, t0) |
217 | .set reorder /* DADDI_WAR */ | 227 | .set reorder /* DADDI_WAR */ |
@@ -230,6 +240,9 @@ LEAF(csum_partial) | |||
230 | /* Still a full word to go */ | 240 | /* Still a full word to go */ |
231 | ulw t1, (src) | 241 | ulw t1, (src) |
232 | PTR_ADDIU src, 4 | 242 | PTR_ADDIU src, 4 |
243 | #ifdef USE_DOUBLE | ||
244 | dsll t1, t1, 32 /* clear lower 32bit */ | ||
245 | #endif | ||
233 | ADDC(sum, t1) | 246 | ADDC(sum, t1) |
234 | 247 | ||
235 | 1: move t1, zero | 248 | 1: move t1, zero |
@@ -280,7 +293,7 @@ LEAF(csum_partial) | |||
280 | 1: | 293 | 1: |
281 | .set reorder | 294 | .set reorder |
282 | /* Add the passed partial csum. */ | 295 | /* Add the passed partial csum. */ |
283 | ADDC(sum, a2) | 296 | ADDC32(sum, a2) |
284 | jr ra | 297 | jr ra |
285 | .set noreorder | 298 | .set noreorder |
286 | END(csum_partial) | 299 | END(csum_partial) |
@@ -681,7 +694,7 @@ EXC( sb t0, NBYTES-2(dst), .Ls_exc) | |||
681 | .set pop | 694 | .set pop |
682 | 1: | 695 | 1: |
683 | .set reorder | 696 | .set reorder |
684 | ADDC(sum, psum) | 697 | ADDC32(sum, psum) |
685 | jr ra | 698 | jr ra |
686 | .set noreorder | 699 | .set noreorder |
687 | 700 | ||
diff --git a/arch/mips/mti-malta/Makefile b/arch/mips/mti-malta/Makefile index 3b7dd722c32a..cef2db8d2225 100644 --- a/arch/mips/mti-malta/Makefile +++ b/arch/mips/mti-malta/Makefile | |||
@@ -15,6 +15,6 @@ obj-$(CONFIG_EARLY_PRINTK) += malta-console.o | |||
15 | obj-$(CONFIG_PCI) += malta-pci.o | 15 | obj-$(CONFIG_PCI) += malta-pci.o |
16 | 16 | ||
17 | # FIXME FIXME FIXME | 17 | # FIXME FIXME FIXME |
18 | obj-$(CONFIG_MIPS_MT_SMTC) += malta_smtc.o | 18 | obj-$(CONFIG_MIPS_MT_SMTC) += malta-smtc.o |
19 | 19 | ||
20 | EXTRA_CFLAGS += -Werror | 20 | EXTRA_CFLAGS += -Werror |
diff --git a/arch/mips/mti-malta/malta-smtc.c b/arch/mips/mti-malta/malta-smtc.c index 5ea705e49454..f84a46a8ae6e 100644 --- a/arch/mips/mti-malta/malta-smtc.c +++ b/arch/mips/mti-malta/malta-smtc.c | |||
@@ -84,12 +84,17 @@ static void msmtc_cpus_done(void) | |||
84 | 84 | ||
85 | static void __init msmtc_smp_setup(void) | 85 | static void __init msmtc_smp_setup(void) |
86 | { | 86 | { |
87 | mipsmt_build_cpu_map(0); | 87 | /* |
88 | * we won't get the definitive value until | ||
89 | * we've run smtc_prepare_cpus later, but | ||
90 | * we would appear to need an upper bound now. | ||
91 | */ | ||
92 | smp_num_siblings = smtc_build_cpu_map(0); | ||
88 | } | 93 | } |
89 | 94 | ||
90 | static void __init msmtc_prepare_cpus(unsigned int max_cpus) | 95 | static void __init msmtc_prepare_cpus(unsigned int max_cpus) |
91 | { | 96 | { |
92 | mipsmt_prepare_cpus(); | 97 | smtc_prepare_cpus(max_cpus); |
93 | } | 98 | } |
94 | 99 | ||
95 | struct plat_smp_ops msmtc_smp_ops = { | 100 | struct plat_smp_ops msmtc_smp_ops = { |
diff --git a/arch/mips/pci/Makefile b/arch/mips/pci/Makefile index 15e01aec37fd..c8c32f417b6c 100644 --- a/arch/mips/pci/Makefile +++ b/arch/mips/pci/Makefile | |||
@@ -15,6 +15,7 @@ obj-$(CONFIG_SOC_TX3927) += ops-tx3927.o | |||
15 | obj-$(CONFIG_PCI_VR41XX) += ops-vr41xx.o pci-vr41xx.o | 15 | obj-$(CONFIG_PCI_VR41XX) += ops-vr41xx.o pci-vr41xx.o |
16 | obj-$(CONFIG_MARKEINS) += ops-emma2rh.o pci-emma2rh.o fixup-emma2rh.o | 16 | obj-$(CONFIG_MARKEINS) += ops-emma2rh.o pci-emma2rh.o fixup-emma2rh.o |
17 | obj-$(CONFIG_PCI_TX4927) += ops-tx4927.o | 17 | obj-$(CONFIG_PCI_TX4927) += ops-tx4927.o |
18 | obj-$(CONFIG_BCM47XX) += pci-bcm47xx.o | ||
18 | 19 | ||
19 | # | 20 | # |
20 | # These are still pretty much in the old state, watch, go blind. | 21 | # These are still pretty much in the old state, watch, go blind. |
diff --git a/arch/mips/pci/pci-bcm47xx.c b/arch/mips/pci/pci-bcm47xx.c new file mode 100644 index 000000000000..bea9b6cdfdbf --- /dev/null +++ b/arch/mips/pci/pci-bcm47xx.c | |||
@@ -0,0 +1,60 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2008 Aurelien Jarno <aurelien@aurel32.net> | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify it | ||
5 | * under the terms of the GNU General Public License as published by the | ||
6 | * Free Software Foundation; either version 2 of the License, or (at your | ||
7 | * option) any later version. | ||
8 | * | ||
9 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
10 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
11 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
12 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
13 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
14 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
15 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
16 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
17 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
18 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
19 | * | ||
20 | * You should have received a copy of the GNU General Public License along | ||
21 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
22 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
23 | */ | ||
24 | |||
25 | #include <linux/types.h> | ||
26 | #include <linux/pci.h> | ||
27 | #include <linux/ssb/ssb.h> | ||
28 | |||
29 | int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) | ||
30 | { | ||
31 | return 0; | ||
32 | } | ||
33 | |||
34 | int pcibios_plat_dev_init(struct pci_dev *dev) | ||
35 | { | ||
36 | int res; | ||
37 | u8 slot, pin; | ||
38 | |||
39 | res = ssb_pcibios_plat_dev_init(dev); | ||
40 | if (res < 0) { | ||
41 | printk(KERN_ALERT "PCI: Failed to init device %s\n", | ||
42 | pci_name(dev)); | ||
43 | return res; | ||
44 | } | ||
45 | |||
46 | pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin); | ||
47 | slot = PCI_SLOT(dev->devfn); | ||
48 | res = ssb_pcibios_map_irq(dev, slot, pin); | ||
49 | |||
50 | /* IRQ-0 and IRQ-1 are software interrupts. */ | ||
51 | if (res < 2) { | ||
52 | printk(KERN_ALERT "PCI: Failed to map IRQ of device %s\n", | ||
53 | pci_name(dev)); | ||
54 | return res; | ||
55 | } | ||
56 | |||
57 | dev->irq = res; | ||
58 | return 0; | ||
59 | } | ||
60 | |||
diff --git a/arch/mips/pci/pci-ip27.c b/arch/mips/pci/pci-ip27.c index bd78368c82bf..f97ab1461012 100644 --- a/arch/mips/pci/pci-ip27.c +++ b/arch/mips/pci/pci-ip27.c | |||
@@ -143,25 +143,47 @@ int __cpuinit bridge_probe(nasid_t nasid, int widget_id, int masterwid) | |||
143 | */ | 143 | */ |
144 | int __devinit pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) | 144 | int __devinit pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) |
145 | { | 145 | { |
146 | return 0; | ||
147 | } | ||
148 | |||
149 | /* Most MIPS systems have straight-forward swizzling needs. */ | ||
150 | static inline u8 bridge_swizzle(u8 pin, u8 slot) | ||
151 | { | ||
152 | return (((pin - 1) + slot) % 4) + 1; | ||
153 | } | ||
154 | |||
155 | static inline struct pci_dev *bridge_root_dev(struct pci_dev *dev) | ||
156 | { | ||
157 | while (dev->bus->parent) { | ||
158 | /* Move up the chain of bridges. */ | ||
159 | dev = dev->bus->self; | ||
160 | } | ||
161 | |||
162 | return dev; | ||
163 | } | ||
164 | |||
165 | /* Do platform specific device initialization at pci_enable_device() time */ | ||
166 | int pcibios_plat_dev_init(struct pci_dev *dev) | ||
167 | { | ||
146 | struct bridge_controller *bc = BRIDGE_CONTROLLER(dev->bus); | 168 | struct bridge_controller *bc = BRIDGE_CONTROLLER(dev->bus); |
147 | int irq = bc->pci_int[slot]; | 169 | struct pci_dev *rdev = bridge_root_dev(dev); |
170 | int slot = PCI_SLOT(rdev->devfn); | ||
171 | int irq; | ||
148 | 172 | ||
173 | irq = bc->pci_int[slot]; | ||
149 | if (irq == -1) { | 174 | if (irq == -1) { |
150 | irq = bc->pci_int[slot] = request_bridge_irq(bc); | 175 | irq = request_bridge_irq(bc); |
151 | if (irq < 0) | 176 | if (irq < 0) |
152 | panic("Can't allocate interrupt for PCI device %s\n", | 177 | return irq; |
153 | pci_name(dev)); | 178 | |
179 | bc->pci_int[slot] = irq; | ||
154 | } | 180 | } |
155 | 181 | ||
156 | irq_to_bridge[irq] = bc; | 182 | irq_to_bridge[irq] = bc; |
157 | irq_to_slot[irq] = slot; | 183 | irq_to_slot[irq] = slot; |
158 | 184 | ||
159 | return irq; | 185 | dev->irq = irq; |
160 | } | ||
161 | 186 | ||
162 | /* Do platform specific device initialization at pci_enable_device() time */ | ||
163 | int pcibios_plat_dev_init(struct pci_dev *dev) | ||
164 | { | ||
165 | return 0; | 187 | return 0; |
166 | } | 188 | } |
167 | 189 | ||
diff --git a/arch/mips/sibyte/swarm/Makefile b/arch/mips/sibyte/swarm/Makefile index f18ba9201bbc..7b45f199d92a 100644 --- a/arch/mips/sibyte/swarm/Makefile +++ b/arch/mips/sibyte/swarm/Makefile | |||
@@ -1,3 +1,4 @@ | |||
1 | obj-y := setup.o rtc_xicor1241.o rtc_m41t81.o | 1 | obj-y := platform.o setup.o rtc_xicor1241.o \ |
2 | rtc_m41t81.o | ||
2 | 3 | ||
3 | obj-$(CONFIG_I2C_BOARDINFO) += swarm-i2c.o | 4 | obj-$(CONFIG_I2C_BOARDINFO) += swarm-i2c.o |
diff --git a/arch/mips/sibyte/swarm/platform.c b/arch/mips/sibyte/swarm/platform.c new file mode 100644 index 000000000000..54847fe1e564 --- /dev/null +++ b/arch/mips/sibyte/swarm/platform.c | |||
@@ -0,0 +1,85 @@ | |||
1 | #include <linux/err.h> | ||
2 | #include <linux/kernel.h> | ||
3 | #include <linux/init.h> | ||
4 | #include <linux/io.h> | ||
5 | #include <linux/platform_device.h> | ||
6 | #include <linux/ata_platform.h> | ||
7 | |||
8 | #include <asm/sibyte/board.h> | ||
9 | #include <asm/sibyte/sb1250_genbus.h> | ||
10 | #include <asm/sibyte/sb1250_regs.h> | ||
11 | |||
12 | #if defined(CONFIG_SIBYTE_SWARM) || defined(CONFIG_SIBYTE_LITTLESUR) | ||
13 | |||
14 | #define DRV_NAME "pata-swarm" | ||
15 | |||
16 | #define SWARM_IDE_SHIFT 5 | ||
17 | #define SWARM_IDE_BASE 0x1f0 | ||
18 | #define SWARM_IDE_CTRL 0x3f6 | ||
19 | |||
20 | static struct resource swarm_pata_resource[] = { | ||
21 | { | ||
22 | .name = "Swarm GenBus IDE", | ||
23 | .flags = IORESOURCE_MEM, | ||
24 | }, { | ||
25 | .name = "Swarm GenBus IDE", | ||
26 | .flags = IORESOURCE_MEM, | ||
27 | }, { | ||
28 | .name = "Swarm GenBus IDE", | ||
29 | .flags = IORESOURCE_IRQ, | ||
30 | .start = K_INT_GB_IDE, | ||
31 | .end = K_INT_GB_IDE, | ||
32 | }, | ||
33 | }; | ||
34 | |||
35 | static struct pata_platform_info pata_platform_data = { | ||
36 | .ioport_shift = SWARM_IDE_SHIFT, | ||
37 | }; | ||
38 | |||
39 | static struct platform_device swarm_pata_device = { | ||
40 | .name = "pata_platform", | ||
41 | .id = -1, | ||
42 | .resource = swarm_pata_resource, | ||
43 | .num_resources = ARRAY_SIZE(swarm_pata_resource), | ||
44 | .dev = { | ||
45 | .platform_data = &pata_platform_data, | ||
46 | .coherent_dma_mask = ~0, /* grumble */ | ||
47 | }, | ||
48 | }; | ||
49 | |||
50 | static int __init swarm_pata_init(void) | ||
51 | { | ||
52 | u8 __iomem *base; | ||
53 | phys_t offset, size; | ||
54 | struct resource *r; | ||
55 | |||
56 | if (!SIBYTE_HAVE_IDE) | ||
57 | return -ENODEV; | ||
58 | |||
59 | base = ioremap(A_IO_EXT_BASE, 0x800); | ||
60 | offset = __raw_readq(base + R_IO_EXT_REG(R_IO_EXT_START_ADDR, IDE_CS)); | ||
61 | size = __raw_readq(base + R_IO_EXT_REG(R_IO_EXT_MULT_SIZE, IDE_CS)); | ||
62 | iounmap(base); | ||
63 | |||
64 | offset = G_IO_START_ADDR(offset) << S_IO_ADDRBASE; | ||
65 | size = (G_IO_MULT_SIZE(size) + 1) << S_IO_REGSIZE; | ||
66 | if (offset < A_PHYS_GENBUS || offset >= A_PHYS_GENBUS_END) { | ||
67 | pr_info(DRV_NAME ": PATA interface at GenBus disabled\n"); | ||
68 | |||
69 | return -EBUSY; | ||
70 | } | ||
71 | |||
72 | pr_info(DRV_NAME ": PATA interface at GenBus slot %i\n", IDE_CS); | ||
73 | |||
74 | r = swarm_pata_resource; | ||
75 | r[0].start = offset + (SWARM_IDE_BASE << SWARM_IDE_SHIFT); | ||
76 | r[0].end = offset + ((SWARM_IDE_BASE + 8) << SWARM_IDE_SHIFT) - 1; | ||
77 | r[1].start = offset + (SWARM_IDE_CTRL << SWARM_IDE_SHIFT); | ||
78 | r[1].end = offset + ((SWARM_IDE_CTRL + 1) << SWARM_IDE_SHIFT) - 1; | ||
79 | |||
80 | return platform_device_register(&swarm_pata_device); | ||
81 | } | ||
82 | |||
83 | device_initcall(swarm_pata_init); | ||
84 | |||
85 | #endif /* defined(CONFIG_SIBYTE_SWARM) || defined(CONFIG_SIBYTE_LITTLESUR) */ | ||
diff --git a/arch/mips/vr41xx/common/irq.c b/arch/mips/vr41xx/common/irq.c index cba36a247e32..92dd1a0ca352 100644 --- a/arch/mips/vr41xx/common/irq.c +++ b/arch/mips/vr41xx/common/irq.c | |||
@@ -72,6 +72,7 @@ static void irq_dispatch(unsigned int irq) | |||
72 | cascade = irq_cascade + irq; | 72 | cascade = irq_cascade + irq; |
73 | if (cascade->get_irq != NULL) { | 73 | if (cascade->get_irq != NULL) { |
74 | unsigned int source_irq = irq; | 74 | unsigned int source_irq = irq; |
75 | int ret; | ||
75 | desc = irq_desc + source_irq; | 76 | desc = irq_desc + source_irq; |
76 | if (desc->chip->mask_ack) | 77 | if (desc->chip->mask_ack) |
77 | desc->chip->mask_ack(source_irq); | 78 | desc->chip->mask_ack(source_irq); |
@@ -79,8 +80,9 @@ static void irq_dispatch(unsigned int irq) | |||
79 | desc->chip->mask(source_irq); | 80 | desc->chip->mask(source_irq); |
80 | desc->chip->ack(source_irq); | 81 | desc->chip->ack(source_irq); |
81 | } | 82 | } |
82 | irq = cascade->get_irq(irq); | 83 | ret = cascade->get_irq(irq); |
83 | if (irq < 0) | 84 | irq = ret; |
85 | if (ret < 0) | ||
84 | atomic_inc(&irq_err_count); | 86 | atomic_inc(&irq_err_count); |
85 | else | 87 | else |
86 | irq_dispatch(irq); | 88 | irq_dispatch(irq); |
diff --git a/arch/mn10300/kernel/irq.c b/arch/mn10300/kernel/irq.c index 761c434a2488..56c64ccc9c21 100644 --- a/arch/mn10300/kernel/irq.c +++ b/arch/mn10300/kernel/irq.c | |||
@@ -20,22 +20,8 @@ EXPORT_SYMBOL(__mn10300_irq_enabled_epsw); | |||
20 | atomic_t irq_err_count; | 20 | atomic_t irq_err_count; |
21 | 21 | ||
22 | /* | 22 | /* |
23 | * MN10300 INTC controller operations | 23 | * MN10300 interrupt controller operations |
24 | */ | 24 | */ |
25 | static void mn10300_cpupic_disable(unsigned int irq) | ||
26 | { | ||
27 | u16 tmp = GxICR(irq); | ||
28 | GxICR(irq) = (tmp & GxICR_LEVEL) | GxICR_DETECT; | ||
29 | tmp = GxICR(irq); | ||
30 | } | ||
31 | |||
32 | static void mn10300_cpupic_enable(unsigned int irq) | ||
33 | { | ||
34 | u16 tmp = GxICR(irq); | ||
35 | GxICR(irq) = (tmp & GxICR_LEVEL) | GxICR_ENABLE; | ||
36 | tmp = GxICR(irq); | ||
37 | } | ||
38 | |||
39 | static void mn10300_cpupic_ack(unsigned int irq) | 25 | static void mn10300_cpupic_ack(unsigned int irq) |
40 | { | 26 | { |
41 | u16 tmp; | 27 | u16 tmp; |
@@ -60,26 +46,54 @@ static void mn10300_cpupic_mask_ack(unsigned int irq) | |||
60 | static void mn10300_cpupic_unmask(unsigned int irq) | 46 | static void mn10300_cpupic_unmask(unsigned int irq) |
61 | { | 47 | { |
62 | u16 tmp = GxICR(irq); | 48 | u16 tmp = GxICR(irq); |
63 | GxICR(irq) = (tmp & GxICR_LEVEL) | GxICR_ENABLE | GxICR_DETECT; | 49 | GxICR(irq) = (tmp & GxICR_LEVEL) | GxICR_ENABLE; |
64 | tmp = GxICR(irq); | 50 | tmp = GxICR(irq); |
65 | } | 51 | } |
66 | 52 | ||
67 | static void mn10300_cpupic_end(unsigned int irq) | 53 | static void mn10300_cpupic_unmask_clear(unsigned int irq) |
68 | { | 54 | { |
55 | /* the MN10300 PIC latches its interrupt request bit, even after the | ||
56 | * device has ceased to assert its interrupt line and the interrupt | ||
57 | * channel has been disabled in the PIC, so for level-triggered | ||
58 | * interrupts we need to clear the request bit when we re-enable */ | ||
69 | u16 tmp = GxICR(irq); | 59 | u16 tmp = GxICR(irq); |
70 | GxICR(irq) = (tmp & GxICR_LEVEL) | GxICR_ENABLE; | 60 | GxICR(irq) = (tmp & GxICR_LEVEL) | GxICR_ENABLE | GxICR_DETECT; |
71 | tmp = GxICR(irq); | 61 | tmp = GxICR(irq); |
72 | } | 62 | } |
73 | 63 | ||
74 | static struct irq_chip mn10300_cpu_pic = { | 64 | /* |
75 | .name = "cpu", | 65 | * MN10300 PIC level-triggered IRQ handling. |
76 | .disable = mn10300_cpupic_disable, | 66 | * |
77 | .enable = mn10300_cpupic_enable, | 67 | * The PIC has no 'ACK' function per se. It is possible to clear individual |
68 | * channel latches, but each latch relatches whether or not the channel is | ||
69 | * masked, so we need to clear the latch when we unmask the channel. | ||
70 | * | ||
71 | * Also for this reason, we don't supply an ack() op (it's unused anyway if | ||
72 | * mask_ack() is provided), and mask_ack() just masks. | ||
73 | */ | ||
74 | static struct irq_chip mn10300_cpu_pic_level = { | ||
75 | .name = "cpu_l", | ||
76 | .disable = mn10300_cpupic_mask, | ||
77 | .enable = mn10300_cpupic_unmask_clear, | ||
78 | .ack = NULL, | ||
79 | .mask = mn10300_cpupic_mask, | ||
80 | .mask_ack = mn10300_cpupic_mask, | ||
81 | .unmask = mn10300_cpupic_unmask_clear, | ||
82 | }; | ||
83 | |||
84 | /* | ||
85 | * MN10300 PIC edge-triggered IRQ handling. | ||
86 | * | ||
87 | * We use the latch clearing function of the PIC as the 'ACK' function. | ||
88 | */ | ||
89 | static struct irq_chip mn10300_cpu_pic_edge = { | ||
90 | .name = "cpu_e", | ||
91 | .disable = mn10300_cpupic_mask, | ||
92 | .enable = mn10300_cpupic_unmask, | ||
78 | .ack = mn10300_cpupic_ack, | 93 | .ack = mn10300_cpupic_ack, |
79 | .mask = mn10300_cpupic_mask, | 94 | .mask = mn10300_cpupic_mask, |
80 | .mask_ack = mn10300_cpupic_mask_ack, | 95 | .mask_ack = mn10300_cpupic_mask_ack, |
81 | .unmask = mn10300_cpupic_unmask, | 96 | .unmask = mn10300_cpupic_unmask, |
82 | .end = mn10300_cpupic_end, | ||
83 | }; | 97 | }; |
84 | 98 | ||
85 | /* | 99 | /* |
@@ -114,7 +128,8 @@ void set_intr_level(int irq, u16 level) | |||
114 | */ | 128 | */ |
115 | void set_intr_postackable(int irq) | 129 | void set_intr_postackable(int irq) |
116 | { | 130 | { |
117 | set_irq_handler(irq, handle_level_irq); | 131 | set_irq_chip_and_handler(irq, &mn10300_cpu_pic_level, |
132 | handle_level_irq); | ||
118 | } | 133 | } |
119 | 134 | ||
120 | /* | 135 | /* |
@@ -126,8 +141,12 @@ void __init init_IRQ(void) | |||
126 | 141 | ||
127 | for (irq = 0; irq < NR_IRQS; irq++) | 142 | for (irq = 0; irq < NR_IRQS; irq++) |
128 | if (irq_desc[irq].chip == &no_irq_type) | 143 | if (irq_desc[irq].chip == &no_irq_type) |
129 | set_irq_chip_and_handler(irq, &mn10300_cpu_pic, | 144 | /* due to the PIC latching interrupt requests, even |
130 | handle_edge_irq); | 145 | * when the IRQ is disabled, IRQ_PENDING is superfluous |
146 | * and we can use handle_level_irq() for edge-triggered | ||
147 | * interrupts */ | ||
148 | set_irq_chip_and_handler(irq, &mn10300_cpu_pic_edge, | ||
149 | handle_level_irq); | ||
131 | unit_init_IRQ(); | 150 | unit_init_IRQ(); |
132 | } | 151 | } |
133 | 152 | ||
diff --git a/arch/mn10300/kernel/time.c b/arch/mn10300/kernel/time.c index babb7c2ac377..e4606586f94c 100644 --- a/arch/mn10300/kernel/time.c +++ b/arch/mn10300/kernel/time.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* MN10300 Low level time management | 1 | /* MN10300 Low level time management |
2 | * | 2 | * |
3 | * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. | 3 | * Copyright (C) 2007-2008 Red Hat, Inc. All Rights Reserved. |
4 | * Written by David Howells (dhowells@redhat.com) | 4 | * Written by David Howells (dhowells@redhat.com) |
5 | * - Derived from arch/i386/kernel/time.c | 5 | * - Derived from arch/i386/kernel/time.c |
6 | * | 6 | * |
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
17 | #include <linux/smp.h> | 17 | #include <linux/smp.h> |
18 | #include <linux/profile.h> | 18 | #include <linux/profile.h> |
19 | #include <linux/cnt32_to_63.h> | ||
19 | #include <asm/irq.h> | 20 | #include <asm/irq.h> |
20 | #include <asm/div64.h> | 21 | #include <asm/div64.h> |
21 | #include <asm/processor.h> | 22 | #include <asm/processor.h> |
@@ -40,27 +41,54 @@ static struct irqaction timer_irq = { | |||
40 | .name = "timer", | 41 | .name = "timer", |
41 | }; | 42 | }; |
42 | 43 | ||
44 | static unsigned long sched_clock_multiplier; | ||
45 | |||
43 | /* | 46 | /* |
44 | * scheduler clock - returns current time in nanosec units. | 47 | * scheduler clock - returns current time in nanosec units. |
45 | */ | 48 | */ |
46 | unsigned long long sched_clock(void) | 49 | unsigned long long sched_clock(void) |
47 | { | 50 | { |
48 | union { | 51 | union { |
49 | unsigned long long l; | 52 | unsigned long long ll; |
50 | u32 w[2]; | 53 | unsigned l[2]; |
51 | } quot; | 54 | } tsc64, result; |
55 | unsigned long tsc, tmp; | ||
56 | unsigned product[3]; /* 96-bit intermediate value */ | ||
57 | |||
58 | /* read the TSC value | ||
59 | */ | ||
60 | tsc = 0 - get_cycles(); /* get_cycles() counts down */ | ||
52 | 61 | ||
53 | quot.w[0] = mn10300_last_tsc - get_cycles(); | 62 | /* expand to 64-bits. |
54 | quot.w[1] = 1000000000; | 63 | * - sched_clock() must be called once a minute or better or the |
64 | * following will go horribly wrong - see cnt32_to_63() | ||
65 | */ | ||
66 | tsc64.ll = cnt32_to_63(tsc) & 0x7fffffffffffffffULL; | ||
55 | 67 | ||
56 | asm("mulu %2,%3,%0,%1" | 68 | /* scale the 64-bit TSC value to a nanosecond value via a 96-bit |
57 | : "=r"(quot.w[1]), "=r"(quot.w[0]) | 69 | * intermediate |
58 | : "0"(quot.w[1]), "1"(quot.w[0]) | 70 | */ |
71 | asm("mulu %2,%0,%3,%0 \n" /* LSW * mult -> 0:%3:%0 */ | ||
72 | "mulu %2,%1,%2,%1 \n" /* MSW * mult -> %2:%1:0 */ | ||
73 | "add %3,%1 \n" | ||
74 | "addc 0,%2 \n" /* result in %2:%1:%0 */ | ||
75 | : "=r"(product[0]), "=r"(product[1]), "=r"(product[2]), "=r"(tmp) | ||
76 | : "0"(tsc64.l[0]), "1"(tsc64.l[1]), "2"(sched_clock_multiplier) | ||
59 | : "cc"); | 77 | : "cc"); |
60 | 78 | ||
61 | do_div(quot.l, MN10300_TSCCLK); | 79 | result.l[0] = product[1] << 16 | product[0] >> 16; |
80 | result.l[1] = product[2] << 16 | product[1] >> 16; | ||
62 | 81 | ||
63 | return quot.l; | 82 | return result.ll; |
83 | } | ||
84 | |||
85 | /* | ||
86 | * initialise the scheduler clock | ||
87 | */ | ||
88 | static void __init mn10300_sched_clock_init(void) | ||
89 | { | ||
90 | sched_clock_multiplier = | ||
91 | __muldiv64u(NSEC_PER_SEC, 1 << 16, MN10300_TSCCLK); | ||
64 | } | 92 | } |
65 | 93 | ||
66 | /* | 94 | /* |
@@ -128,4 +156,6 @@ void __init time_init(void) | |||
128 | /* start the watchdog timer */ | 156 | /* start the watchdog timer */ |
129 | watchdog_go(); | 157 | watchdog_go(); |
130 | #endif | 158 | #endif |
159 | |||
160 | mn10300_sched_clock_init(); | ||
131 | } | 161 | } |
diff --git a/arch/mn10300/mm/fault.c b/arch/mn10300/mm/fault.c index 78f092ca0316..33cf25025dac 100644 --- a/arch/mn10300/mm/fault.c +++ b/arch/mn10300/mm/fault.c | |||
@@ -174,7 +174,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long fault_code, | |||
174 | * If we're in an interrupt or have no user | 174 | * If we're in an interrupt or have no user |
175 | * context, we must not take the fault.. | 175 | * context, we must not take the fault.. |
176 | */ | 176 | */ |
177 | if (in_interrupt() || !mm) | 177 | if (in_atomic() || !mm) |
178 | goto no_context; | 178 | goto no_context; |
179 | 179 | ||
180 | down_read(&mm->mmap_sem); | 180 | down_read(&mm->mmap_sem); |
diff --git a/arch/mn10300/unit-asb2303/unit-init.c b/arch/mn10300/unit-asb2303/unit-init.c index 14b2c817cff8..70e8cb4ea266 100644 --- a/arch/mn10300/unit-asb2303/unit-init.c +++ b/arch/mn10300/unit-asb2303/unit-init.c | |||
@@ -51,7 +51,7 @@ void __init unit_init_IRQ(void) | |||
51 | switch (GET_XIRQ_TRIGGER(extnum)) { | 51 | switch (GET_XIRQ_TRIGGER(extnum)) { |
52 | case XIRQ_TRIGGER_HILEVEL: | 52 | case XIRQ_TRIGGER_HILEVEL: |
53 | case XIRQ_TRIGGER_LOWLEVEL: | 53 | case XIRQ_TRIGGER_LOWLEVEL: |
54 | set_irq_handler(XIRQ2IRQ(extnum), handle_level_irq); | 54 | set_intr_postackable(XIRQ2IRQ(extnum)); |
55 | break; | 55 | break; |
56 | default: | 56 | default: |
57 | break; | 57 | break; |
diff --git a/arch/mn10300/unit-asb2305/unit-init.c b/arch/mn10300/unit-asb2305/unit-init.c index 6a352414a358..72812a9439ac 100644 --- a/arch/mn10300/unit-asb2305/unit-init.c +++ b/arch/mn10300/unit-asb2305/unit-init.c | |||
@@ -52,7 +52,7 @@ void __init unit_init_IRQ(void) | |||
52 | switch (GET_XIRQ_TRIGGER(extnum)) { | 52 | switch (GET_XIRQ_TRIGGER(extnum)) { |
53 | case XIRQ_TRIGGER_HILEVEL: | 53 | case XIRQ_TRIGGER_HILEVEL: |
54 | case XIRQ_TRIGGER_LOWLEVEL: | 54 | case XIRQ_TRIGGER_LOWLEVEL: |
55 | set_irq_handler(XIRQ2IRQ(extnum), handle_level_irq); | 55 | set_intr_postackable(XIRQ2IRQ(extnum)); |
56 | break; | 56 | break; |
57 | default: | 57 | default: |
58 | break; | 58 | break; |
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile index 717a3bc1352e..65d1a8454d2c 100644 --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile | |||
@@ -195,7 +195,7 @@ image-$(CONFIG_PPC_CELLEB) += zImage.pseries | |||
195 | image-$(CONFIG_PPC_CHRP) += zImage.chrp | 195 | image-$(CONFIG_PPC_CHRP) += zImage.chrp |
196 | image-$(CONFIG_PPC_EFIKA) += zImage.chrp | 196 | image-$(CONFIG_PPC_EFIKA) += zImage.chrp |
197 | image-$(CONFIG_PPC_PMAC) += zImage.pmac | 197 | image-$(CONFIG_PPC_PMAC) += zImage.pmac |
198 | image-$(CONFIG_PPC_HOLLY) += zImage.holly | 198 | image-$(CONFIG_PPC_HOLLY) += dtbImage.holly |
199 | image-$(CONFIG_PPC_PRPMC2800) += dtbImage.prpmc2800 | 199 | image-$(CONFIG_PPC_PRPMC2800) += dtbImage.prpmc2800 |
200 | image-$(CONFIG_PPC_ISERIES) += zImage.iseries | 200 | image-$(CONFIG_PPC_ISERIES) += zImage.iseries |
201 | image-$(CONFIG_DEFAULT_UIMAGE) += uImage | 201 | image-$(CONFIG_DEFAULT_UIMAGE) += uImage |
diff --git a/arch/powerpc/boot/dts/holly.dts b/arch/powerpc/boot/dts/holly.dts index f87fe7b9ced9..c6e11ebecebb 100644 --- a/arch/powerpc/boot/dts/holly.dts +++ b/arch/powerpc/boot/dts/holly.dts | |||
@@ -133,61 +133,61 @@ | |||
133 | reg = <0x00007400 0x00000400>; | 133 | reg = <0x00007400 0x00000400>; |
134 | big-endian; | 134 | big-endian; |
135 | }; | 135 | }; |
136 | }; | ||
136 | 137 | ||
137 | pci@1000 { | 138 | pci@c0001000 { |
138 | device_type = "pci"; | 139 | device_type = "pci"; |
139 | compatible = "tsi109-pci", "tsi108-pci"; | 140 | compatible = "tsi109-pci", "tsi108-pci"; |
140 | #interrupt-cells = <1>; | 141 | #interrupt-cells = <1>; |
141 | #size-cells = <2>; | 142 | #size-cells = <2>; |
142 | #address-cells = <3>; | 143 | #address-cells = <3>; |
143 | reg = <0x00001000 0x00001000>; | 144 | reg = <0xc0001000 0x00001000>; |
144 | bus-range = <0x0 0x0>; | 145 | bus-range = <0x0 0x0>; |
145 | /*----------------------------------------------------+ | 146 | /*----------------------------------------------------+ |
146 | | PCI memory range. | 147 | | PCI memory range. |
147 | | 01 denotes I/O space | 148 | | 01 denotes I/O space |
148 | | 02 denotes 32-bit memory space | 149 | | 02 denotes 32-bit memory space |
149 | +----------------------------------------------------*/ | 150 | +----------------------------------------------------*/ |
150 | ranges = <0x02000000 0x00000000 0x40000000 0x40000000 0x00000000 0x10000000 | 151 | ranges = <0x02000000 0x00000000 0x40000000 0x40000000 0x00000000 0x10000000 |
151 | 0x01000000 0x00000000 0x00000000 0x7e000000 0x00000000 0x00010000>; | 152 | 0x01000000 0x00000000 0x00000000 0x7e000000 0x00000000 0x00010000>; |
152 | clock-frequency = <133333332>; | 153 | clock-frequency = <133333332>; |
153 | interrupt-parent = <&MPIC>; | 154 | interrupt-parent = <&MPIC>; |
155 | interrupts = <0x17 0x2>; | ||
156 | interrupt-map-mask = <0xf800 0x0 0x0 0x7>; | ||
157 | /*----------------------------------------------------+ | ||
158 | | The INTA, INTB, INTC, INTD are shared. | ||
159 | +----------------------------------------------------*/ | ||
160 | interrupt-map = < | ||
161 | 0x800 0x0 0x0 0x1 &RT0 0x24 0x0 | ||
162 | 0x800 0x0 0x0 0x2 &RT0 0x25 0x0 | ||
163 | 0x800 0x0 0x0 0x3 &RT0 0x26 0x0 | ||
164 | 0x800 0x0 0x0 0x4 &RT0 0x27 0x0 | ||
165 | |||
166 | 0x1000 0x0 0x0 0x1 &RT0 0x25 0x0 | ||
167 | 0x1000 0x0 0x0 0x2 &RT0 0x26 0x0 | ||
168 | 0x1000 0x0 0x0 0x3 &RT0 0x27 0x0 | ||
169 | 0x1000 0x0 0x0 0x4 &RT0 0x24 0x0 | ||
170 | |||
171 | 0x1800 0x0 0x0 0x1 &RT0 0x26 0x0 | ||
172 | 0x1800 0x0 0x0 0x2 &RT0 0x27 0x0 | ||
173 | 0x1800 0x0 0x0 0x3 &RT0 0x24 0x0 | ||
174 | 0x1800 0x0 0x0 0x4 &RT0 0x25 0x0 | ||
175 | |||
176 | 0x2000 0x0 0x0 0x1 &RT0 0x27 0x0 | ||
177 | 0x2000 0x0 0x0 0x2 &RT0 0x24 0x0 | ||
178 | 0x2000 0x0 0x0 0x3 &RT0 0x25 0x0 | ||
179 | 0x2000 0x0 0x0 0x4 &RT0 0x26 0x0 | ||
180 | >; | ||
181 | |||
182 | RT0: router@1180 { | ||
183 | device_type = "pic-router"; | ||
184 | interrupt-controller; | ||
185 | big-endian; | ||
186 | clock-frequency = <0>; | ||
187 | #address-cells = <0>; | ||
188 | #interrupt-cells = <2>; | ||
154 | interrupts = <0x17 0x2>; | 189 | interrupts = <0x17 0x2>; |
155 | interrupt-map-mask = <0xf800 0x0 0x0 0x7>; | 190 | interrupt-parent = <&MPIC>; |
156 | /*----------------------------------------------------+ | ||
157 | | The INTA, INTB, INTC, INTD are shared. | ||
158 | +----------------------------------------------------*/ | ||
159 | interrupt-map = < | ||
160 | 0x800 0x0 0x0 0x1 &RT0 0x24 0x0 | ||
161 | 0x800 0x0 0x0 0x2 &RT0 0x25 0x0 | ||
162 | 0x800 0x0 0x0 0x3 &RT0 0x26 0x0 | ||
163 | 0x800 0x0 0x0 0x4 &RT0 0x27 0x0 | ||
164 | |||
165 | 0x1000 0x0 0x0 0x1 &RT0 0x25 0x0 | ||
166 | 0x1000 0x0 0x0 0x2 &RT0 0x26 0x0 | ||
167 | 0x1000 0x0 0x0 0x3 &RT0 0x27 0x0 | ||
168 | 0x1000 0x0 0x0 0x4 &RT0 0x24 0x0 | ||
169 | |||
170 | 0x1800 0x0 0x0 0x1 &RT0 0x26 0x0 | ||
171 | 0x1800 0x0 0x0 0x2 &RT0 0x27 0x0 | ||
172 | 0x1800 0x0 0x0 0x3 &RT0 0x24 0x0 | ||
173 | 0x1800 0x0 0x0 0x4 &RT0 0x25 0x0 | ||
174 | |||
175 | 0x2000 0x0 0x0 0x1 &RT0 0x27 0x0 | ||
176 | 0x2000 0x0 0x0 0x2 &RT0 0x24 0x0 | ||
177 | 0x2000 0x0 0x0 0x3 &RT0 0x25 0x0 | ||
178 | 0x2000 0x0 0x0 0x4 &RT0 0x26 0x0 | ||
179 | >; | ||
180 | |||
181 | RT0: router@1180 { | ||
182 | device_type = "pic-router"; | ||
183 | interrupt-controller; | ||
184 | big-endian; | ||
185 | clock-frequency = <0>; | ||
186 | #address-cells = <0>; | ||
187 | #interrupt-cells = <2>; | ||
188 | interrupts = <0x17 0x2>; | ||
189 | interrupt-parent = <&MPIC>; | ||
190 | }; | ||
191 | }; | 191 | }; |
192 | }; | 192 | }; |
193 | 193 | ||
diff --git a/arch/powerpc/boot/dts/mpc8610_hpcd.dts b/arch/powerpc/boot/dts/mpc8610_hpcd.dts index 3b3a1062cb25..584a4f184eb2 100644 --- a/arch/powerpc/boot/dts/mpc8610_hpcd.dts +++ b/arch/powerpc/boot/dts/mpc8610_hpcd.dts | |||
@@ -281,7 +281,7 @@ | |||
281 | cell-index = <0>; | 281 | cell-index = <0>; |
282 | reg = <0x0 0x80>; | 282 | reg = <0x0 0x80>; |
283 | interrupt-parent = <&mpic>; | 283 | interrupt-parent = <&mpic>; |
284 | interrupts = <60 2>; | 284 | interrupts = <76 2>; |
285 | }; | 285 | }; |
286 | dma-channel@1 { | 286 | dma-channel@1 { |
287 | compatible = "fsl,mpc8610-dma-channel", | 287 | compatible = "fsl,mpc8610-dma-channel", |
@@ -289,7 +289,7 @@ | |||
289 | cell-index = <1>; | 289 | cell-index = <1>; |
290 | reg = <0x80 0x80>; | 290 | reg = <0x80 0x80>; |
291 | interrupt-parent = <&mpic>; | 291 | interrupt-parent = <&mpic>; |
292 | interrupts = <61 2>; | 292 | interrupts = <77 2>; |
293 | }; | 293 | }; |
294 | dma-channel@2 { | 294 | dma-channel@2 { |
295 | compatible = "fsl,mpc8610-dma-channel", | 295 | compatible = "fsl,mpc8610-dma-channel", |
@@ -297,7 +297,7 @@ | |||
297 | cell-index = <2>; | 297 | cell-index = <2>; |
298 | reg = <0x100 0x80>; | 298 | reg = <0x100 0x80>; |
299 | interrupt-parent = <&mpic>; | 299 | interrupt-parent = <&mpic>; |
300 | interrupts = <62 2>; | 300 | interrupts = <78 2>; |
301 | }; | 301 | }; |
302 | dma-channel@3 { | 302 | dma-channel@3 { |
303 | compatible = "fsl,mpc8610-dma-channel", | 303 | compatible = "fsl,mpc8610-dma-channel", |
@@ -305,7 +305,7 @@ | |||
305 | cell-index = <3>; | 305 | cell-index = <3>; |
306 | reg = <0x180 0x80>; | 306 | reg = <0x180 0x80>; |
307 | interrupt-parent = <&mpic>; | 307 | interrupt-parent = <&mpic>; |
308 | interrupts = <63 2>; | 308 | interrupts = <79 2>; |
309 | }; | 309 | }; |
310 | }; | 310 | }; |
311 | 311 | ||
diff --git a/arch/powerpc/include/asm/elf.h b/arch/powerpc/include/asm/elf.h index 80d1f399ee51..64c6ee22eefd 100644 --- a/arch/powerpc/include/asm/elf.h +++ b/arch/powerpc/include/asm/elf.h | |||
@@ -409,6 +409,13 @@ do { \ | |||
409 | /* Keep this the last entry. */ | 409 | /* Keep this the last entry. */ |
410 | #define R_PPC64_NUM 107 | 410 | #define R_PPC64_NUM 107 |
411 | 411 | ||
412 | /* There's actually a third entry here, but it's unused */ | ||
413 | struct ppc64_opd_entry | ||
414 | { | ||
415 | unsigned long funcaddr; | ||
416 | unsigned long r2; | ||
417 | }; | ||
418 | |||
412 | #ifdef __KERNEL__ | 419 | #ifdef __KERNEL__ |
413 | 420 | ||
414 | #ifdef CONFIG_SPU_BASE | 421 | #ifdef CONFIG_SPU_BASE |
diff --git a/arch/powerpc/include/asm/sections.h b/arch/powerpc/include/asm/sections.h index 7710e9e6660f..07956f3e7844 100644 --- a/arch/powerpc/include/asm/sections.h +++ b/arch/powerpc/include/asm/sections.h | |||
@@ -2,6 +2,8 @@ | |||
2 | #define _ASM_POWERPC_SECTIONS_H | 2 | #define _ASM_POWERPC_SECTIONS_H |
3 | #ifdef __KERNEL__ | 3 | #ifdef __KERNEL__ |
4 | 4 | ||
5 | #include <linux/elf.h> | ||
6 | #include <linux/uaccess.h> | ||
5 | #include <asm-generic/sections.h> | 7 | #include <asm-generic/sections.h> |
6 | 8 | ||
7 | #ifdef __powerpc64__ | 9 | #ifdef __powerpc64__ |
@@ -17,7 +19,15 @@ static inline int in_kernel_text(unsigned long addr) | |||
17 | } | 19 | } |
18 | 20 | ||
19 | #undef dereference_function_descriptor | 21 | #undef dereference_function_descriptor |
20 | void *dereference_function_descriptor(void *); | 22 | static inline void *dereference_function_descriptor(void *ptr) |
23 | { | ||
24 | struct ppc64_opd_entry *desc = ptr; | ||
25 | void *p; | ||
26 | |||
27 | if (!probe_kernel_address(&desc->funcaddr, p)) | ||
28 | ptr = p; | ||
29 | return ptr; | ||
30 | } | ||
21 | 31 | ||
22 | #endif | 32 | #endif |
23 | 33 | ||
diff --git a/arch/powerpc/kernel/idle.c b/arch/powerpc/kernel/idle.c index d308a9f70f1b..31982d05d81a 100644 --- a/arch/powerpc/kernel/idle.c +++ b/arch/powerpc/kernel/idle.c | |||
@@ -34,11 +34,7 @@ | |||
34 | #include <asm/smp.h> | 34 | #include <asm/smp.h> |
35 | 35 | ||
36 | #ifdef CONFIG_HOTPLUG_CPU | 36 | #ifdef CONFIG_HOTPLUG_CPU |
37 | /* this is used for software suspend, and that shuts down | 37 | #define cpu_should_die() cpu_is_offline(smp_processor_id()) |
38 | * CPUs even while the system is still booting... */ | ||
39 | #define cpu_should_die() (cpu_is_offline(smp_processor_id()) && \ | ||
40 | (system_state == SYSTEM_RUNNING \ | ||
41 | || system_state == SYSTEM_BOOTING)) | ||
42 | #else | 38 | #else |
43 | #define cpu_should_die() 0 | 39 | #define cpu_should_die() 0 |
44 | #endif | 40 | #endif |
diff --git a/arch/powerpc/kernel/kgdb.c b/arch/powerpc/kernel/kgdb.c index b4fdf2f2743c..fe8f71dd0b3f 100644 --- a/arch/powerpc/kernel/kgdb.c +++ b/arch/powerpc/kernel/kgdb.c | |||
@@ -347,9 +347,8 @@ int kgdb_arch_handle_exception(int vector, int signo, int err_code, | |||
347 | linux_regs->msr |= MSR_SE; | 347 | linux_regs->msr |= MSR_SE; |
348 | #endif | 348 | #endif |
349 | kgdb_single_step = 1; | 349 | kgdb_single_step = 1; |
350 | if (kgdb_contthread) | 350 | atomic_set(&kgdb_cpu_doing_single_step, |
351 | atomic_set(&kgdb_cpu_doing_single_step, | 351 | raw_smp_processor_id()); |
352 | raw_smp_processor_id()); | ||
353 | } | 352 | } |
354 | return 0; | 353 | return 0; |
355 | } | 354 | } |
diff --git a/arch/powerpc/kernel/module_64.c b/arch/powerpc/kernel/module_64.c index ad79de272ff3..1af2377e4992 100644 --- a/arch/powerpc/kernel/module_64.c +++ b/arch/powerpc/kernel/module_64.c | |||
@@ -21,9 +21,7 @@ | |||
21 | #include <linux/err.h> | 21 | #include <linux/err.h> |
22 | #include <linux/vmalloc.h> | 22 | #include <linux/vmalloc.h> |
23 | #include <linux/bug.h> | 23 | #include <linux/bug.h> |
24 | #include <linux/uaccess.h> | ||
25 | #include <asm/module.h> | 24 | #include <asm/module.h> |
26 | #include <asm/sections.h> | ||
27 | #include <asm/firmware.h> | 25 | #include <asm/firmware.h> |
28 | #include <asm/code-patching.h> | 26 | #include <asm/code-patching.h> |
29 | #include <linux/sort.h> | 27 | #include <linux/sort.h> |
@@ -43,13 +41,6 @@ | |||
43 | #define DEBUGP(fmt , ...) | 41 | #define DEBUGP(fmt , ...) |
44 | #endif | 42 | #endif |
45 | 43 | ||
46 | /* There's actually a third entry here, but it's unused */ | ||
47 | struct ppc64_opd_entry | ||
48 | { | ||
49 | unsigned long funcaddr; | ||
50 | unsigned long r2; | ||
51 | }; | ||
52 | |||
53 | /* Like PPC32, we need little trampolines to do > 24-bit jumps (into | 44 | /* Like PPC32, we need little trampolines to do > 24-bit jumps (into |
54 | the kernel itself). But on PPC64, these need to be used for every | 45 | the kernel itself). But on PPC64, these need to be used for every |
55 | jump, actually, to reset r2 (TOC+0x8000). */ | 46 | jump, actually, to reset r2 (TOC+0x8000). */ |
@@ -452,13 +443,3 @@ int apply_relocate_add(Elf64_Shdr *sechdrs, | |||
452 | 443 | ||
453 | return 0; | 444 | return 0; |
454 | } | 445 | } |
455 | |||
456 | void *dereference_function_descriptor(void *ptr) | ||
457 | { | ||
458 | struct ppc64_opd_entry *desc = ptr; | ||
459 | void *p; | ||
460 | |||
461 | if (!probe_kernel_address(&desc->funcaddr, p)) | ||
462 | ptr = p; | ||
463 | return ptr; | ||
464 | } | ||
diff --git a/arch/powerpc/platforms/fsl_uli1575.c b/arch/powerpc/platforms/fsl_uli1575.c index ef74a0763ec1..8c619963becc 100644 --- a/arch/powerpc/platforms/fsl_uli1575.c +++ b/arch/powerpc/platforms/fsl_uli1575.c | |||
@@ -219,11 +219,21 @@ static void __devinit quirk_final_uli5249(struct pci_dev *dev) | |||
219 | int i; | 219 | int i; |
220 | u8 *dummy; | 220 | u8 *dummy; |
221 | struct pci_bus *bus = dev->bus; | 221 | struct pci_bus *bus = dev->bus; |
222 | resource_size_t end = 0; | ||
223 | |||
224 | for (i = PCI_BRIDGE_RESOURCES; i < PCI_BRIDGE_RESOURCES+3; i++) { | ||
225 | unsigned long flags = pci_resource_flags(dev, i); | ||
226 | if ((flags & (IORESOURCE_MEM|IORESOURCE_PREFETCH)) == IORESOURCE_MEM) | ||
227 | end = pci_resource_end(dev, i); | ||
228 | } | ||
222 | 229 | ||
223 | for (i = 0; i < PCI_BUS_NUM_RESOURCES; i++) { | 230 | for (i = 0; i < PCI_BUS_NUM_RESOURCES; i++) { |
224 | if ((bus->resource[i]) && | 231 | if ((bus->resource[i]) && |
225 | (bus->resource[i]->flags & IORESOURCE_MEM)) { | 232 | (bus->resource[i]->flags & IORESOURCE_MEM)) { |
226 | dummy = ioremap(bus->resource[i]->end - 3, 0x4); | 233 | if (bus->resource[i]->end == end) |
234 | dummy = ioremap(bus->resource[i]->start, 0x4); | ||
235 | else | ||
236 | dummy = ioremap(bus->resource[i]->end - 3, 0x4); | ||
227 | if (dummy) { | 237 | if (dummy) { |
228 | in_8(dummy); | 238 | in_8(dummy); |
229 | iounmap(dummy); | 239 | iounmap(dummy); |
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c index ca114fe46ffb..06acb1a18bbc 100644 --- a/arch/s390/kernel/time.c +++ b/arch/s390/kernel/time.c | |||
@@ -169,6 +169,8 @@ void init_cpu_timer(void) | |||
169 | 169 | ||
170 | static void clock_comparator_interrupt(__u16 code) | 170 | static void clock_comparator_interrupt(__u16 code) |
171 | { | 171 | { |
172 | if (S390_lowcore.clock_comparator == -1ULL) | ||
173 | set_clock_comparator(S390_lowcore.clock_comparator); | ||
172 | } | 174 | } |
173 | 175 | ||
174 | static void etr_timing_alert(struct etr_irq_parm *); | 176 | static void etr_timing_alert(struct etr_irq_parm *); |
diff --git a/arch/s390/lib/delay.c b/arch/s390/lib/delay.c index fc6ab6094df8..0953cee05efc 100644 --- a/arch/s390/lib/delay.c +++ b/arch/s390/lib/delay.c | |||
@@ -1,14 +1,9 @@ | |||
1 | /* | 1 | /* |
2 | * arch/s390/lib/delay.c | ||
3 | * Precise Delay Loops for S390 | 2 | * Precise Delay Loops for S390 |
4 | * | 3 | * |
5 | * S390 version | 4 | * Copyright IBM Corp. 1999,2008 |
6 | * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation | 5 | * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>, |
7 | * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com), | 6 | * Heiko Carstens <heiko.carstens@de.ibm.com>, |
8 | * | ||
9 | * Derived from "arch/i386/lib/delay.c" | ||
10 | * Copyright (C) 1993 Linus Torvalds | ||
11 | * Copyright (C) 1997 Martin Mares <mj@atrey.karlin.mff.cuni.cz> | ||
12 | */ | 7 | */ |
13 | 8 | ||
14 | #include <linux/sched.h> | 9 | #include <linux/sched.h> |
@@ -29,30 +24,31 @@ void __delay(unsigned long loops) | |||
29 | asm volatile("0: brct %0,0b" : : "d" ((loops/2) + 1)); | 24 | asm volatile("0: brct %0,0b" : : "d" ((loops/2) + 1)); |
30 | } | 25 | } |
31 | 26 | ||
32 | /* | 27 | static void __udelay_disabled(unsigned long usecs) |
33 | * Waits for 'usecs' microseconds using the TOD clock comparator. | ||
34 | */ | ||
35 | void __udelay(unsigned long usecs) | ||
36 | { | 28 | { |
37 | u64 end, time, old_cc = 0; | 29 | unsigned long mask, cr0, cr0_saved; |
38 | unsigned long flags, cr0, mask, dummy; | 30 | u64 clock_saved; |
39 | int irq_context; | ||
40 | 31 | ||
41 | irq_context = in_interrupt(); | 32 | clock_saved = local_tick_disable(); |
42 | if (!irq_context) | 33 | set_clock_comparator(get_clock() + ((u64) usecs << 12)); |
43 | local_bh_disable(); | 34 | __ctl_store(cr0_saved, 0, 0); |
44 | local_irq_save(flags); | 35 | cr0 = (cr0_saved & 0xffff00e0) | 0x00000800; |
45 | if (raw_irqs_disabled_flags(flags)) { | 36 | __ctl_load(cr0 , 0, 0); |
46 | old_cc = local_tick_disable(); | 37 | mask = psw_kernel_bits | PSW_MASK_WAIT | PSW_MASK_EXT; |
47 | S390_lowcore.clock_comparator = -1ULL; | 38 | trace_hardirqs_on(); |
48 | __ctl_store(cr0, 0, 0); | 39 | __load_psw_mask(mask); |
49 | dummy = (cr0 & 0xffff00e0) | 0x00000800; | 40 | local_irq_disable(); |
50 | __ctl_load(dummy , 0, 0); | 41 | __ctl_load(cr0_saved, 0, 0); |
51 | mask = psw_kernel_bits | PSW_MASK_WAIT | PSW_MASK_EXT; | 42 | local_tick_enable(clock_saved); |
52 | } else | 43 | set_clock_comparator(S390_lowcore.clock_comparator); |
53 | mask = psw_kernel_bits | PSW_MASK_WAIT | | 44 | } |
54 | PSW_MASK_EXT | PSW_MASK_IO; | ||
55 | 45 | ||
46 | static void __udelay_enabled(unsigned long usecs) | ||
47 | { | ||
48 | unsigned long mask; | ||
49 | u64 end, time; | ||
50 | |||
51 | mask = psw_kernel_bits | PSW_MASK_WAIT | PSW_MASK_EXT | PSW_MASK_IO; | ||
56 | end = get_clock() + ((u64) usecs << 12); | 52 | end = get_clock() + ((u64) usecs << 12); |
57 | do { | 53 | do { |
58 | time = end < S390_lowcore.clock_comparator ? | 54 | time = end < S390_lowcore.clock_comparator ? |
@@ -62,13 +58,37 @@ void __udelay(unsigned long usecs) | |||
62 | __load_psw_mask(mask); | 58 | __load_psw_mask(mask); |
63 | local_irq_disable(); | 59 | local_irq_disable(); |
64 | } while (get_clock() < end); | 60 | } while (get_clock() < end); |
61 | set_clock_comparator(S390_lowcore.clock_comparator); | ||
62 | } | ||
65 | 63 | ||
66 | if (raw_irqs_disabled_flags(flags)) { | 64 | /* |
67 | __ctl_load(cr0, 0, 0); | 65 | * Waits for 'usecs' microseconds using the TOD clock comparator. |
68 | local_tick_enable(old_cc); | 66 | */ |
67 | void __udelay(unsigned long usecs) | ||
68 | { | ||
69 | unsigned long flags; | ||
70 | |||
71 | preempt_disable(); | ||
72 | local_irq_save(flags); | ||
73 | if (in_irq()) { | ||
74 | __udelay_disabled(usecs); | ||
75 | goto out; | ||
76 | } | ||
77 | if (in_softirq()) { | ||
78 | if (raw_irqs_disabled_flags(flags)) | ||
79 | __udelay_disabled(usecs); | ||
80 | else | ||
81 | __udelay_enabled(usecs); | ||
82 | goto out; | ||
69 | } | 83 | } |
70 | if (!irq_context) | 84 | if (raw_irqs_disabled_flags(flags)) { |
85 | local_bh_disable(); | ||
86 | __udelay_disabled(usecs); | ||
71 | _local_bh_enable(); | 87 | _local_bh_enable(); |
72 | set_clock_comparator(S390_lowcore.clock_comparator); | 88 | goto out; |
89 | } | ||
90 | __udelay_enabled(usecs); | ||
91 | out: | ||
73 | local_irq_restore(flags); | 92 | local_irq_restore(flags); |
93 | preempt_enable(); | ||
74 | } | 94 | } |
diff --git a/arch/sparc/kernel/of_device.c b/arch/sparc/kernel/of_device.c index c481d45f97b7..f58c537446a8 100644 --- a/arch/sparc/kernel/of_device.c +++ b/arch/sparc/kernel/of_device.c | |||
@@ -241,7 +241,7 @@ static int of_bus_sbus_map(u32 *addr, const u32 *range, int na, int ns, int pna) | |||
241 | return of_bus_default_map(addr, range, na, ns, pna); | 241 | return of_bus_default_map(addr, range, na, ns, pna); |
242 | } | 242 | } |
243 | 243 | ||
244 | static unsigned int of_bus_sbus_get_flags(const u32 *addr) | 244 | static unsigned long of_bus_sbus_get_flags(const u32 *addr, unsigned long flags) |
245 | { | 245 | { |
246 | return IORESOURCE_MEM; | 246 | return IORESOURCE_MEM; |
247 | } | 247 | } |
diff --git a/arch/sparc/kernel/ptrace.c b/arch/sparc/kernel/ptrace.c index 20699c701412..8ce6285a06d5 100644 --- a/arch/sparc/kernel/ptrace.c +++ b/arch/sparc/kernel/ptrace.c | |||
@@ -288,7 +288,7 @@ static const struct user_regset sparc32_regsets[] = { | |||
288 | */ | 288 | */ |
289 | [REGSET_GENERAL] = { | 289 | [REGSET_GENERAL] = { |
290 | .core_note_type = NT_PRSTATUS, | 290 | .core_note_type = NT_PRSTATUS, |
291 | .n = 38 * sizeof(u32), | 291 | .n = 38, |
292 | .size = sizeof(u32), .align = sizeof(u32), | 292 | .size = sizeof(u32), .align = sizeof(u32), |
293 | .get = genregs32_get, .set = genregs32_set | 293 | .get = genregs32_get, .set = genregs32_set |
294 | }, | 294 | }, |
@@ -304,7 +304,7 @@ static const struct user_regset sparc32_regsets[] = { | |||
304 | */ | 304 | */ |
305 | [REGSET_FP] = { | 305 | [REGSET_FP] = { |
306 | .core_note_type = NT_PRFPREG, | 306 | .core_note_type = NT_PRFPREG, |
307 | .n = 99 * sizeof(u32), | 307 | .n = 99, |
308 | .size = sizeof(u32), .align = sizeof(u32), | 308 | .size = sizeof(u32), .align = sizeof(u32), |
309 | .get = fpregs32_get, .set = fpregs32_set | 309 | .get = fpregs32_get, .set = fpregs32_set |
310 | }, | 310 | }, |
diff --git a/arch/sparc64/kernel/irq.c b/arch/sparc64/kernel/irq.c index 23963882bc18..7495bc774685 100644 --- a/arch/sparc64/kernel/irq.c +++ b/arch/sparc64/kernel/irq.c | |||
@@ -7,6 +7,7 @@ | |||
7 | 7 | ||
8 | #include <linux/module.h> | 8 | #include <linux/module.h> |
9 | #include <linux/sched.h> | 9 | #include <linux/sched.h> |
10 | #include <linux/linkage.h> | ||
10 | #include <linux/ptrace.h> | 11 | #include <linux/ptrace.h> |
11 | #include <linux/errno.h> | 12 | #include <linux/errno.h> |
12 | #include <linux/kernel_stat.h> | 13 | #include <linux/kernel_stat.h> |
@@ -866,7 +867,7 @@ static void kill_prom_timer(void) | |||
866 | : "g1", "g2"); | 867 | : "g1", "g2"); |
867 | } | 868 | } |
868 | 869 | ||
869 | void init_irqwork_curcpu(void) | 870 | void notrace init_irqwork_curcpu(void) |
870 | { | 871 | { |
871 | int cpu = hard_smp_processor_id(); | 872 | int cpu = hard_smp_processor_id(); |
872 | 873 | ||
@@ -897,7 +898,7 @@ static void __cpuinit register_one_mondo(unsigned long paddr, unsigned long type | |||
897 | } | 898 | } |
898 | } | 899 | } |
899 | 900 | ||
900 | void __cpuinit sun4v_register_mondo_queues(int this_cpu) | 901 | void __cpuinit notrace sun4v_register_mondo_queues(int this_cpu) |
901 | { | 902 | { |
902 | struct trap_per_cpu *tb = &trap_block[this_cpu]; | 903 | struct trap_per_cpu *tb = &trap_block[this_cpu]; |
903 | 904 | ||
diff --git a/arch/sparc64/kernel/of_device.c b/arch/sparc64/kernel/of_device.c index f845f150f565..100ebd527499 100644 --- a/arch/sparc64/kernel/of_device.c +++ b/arch/sparc64/kernel/of_device.c | |||
@@ -169,7 +169,7 @@ static unsigned long of_bus_default_get_flags(const u32 *addr, unsigned long fla | |||
169 | 169 | ||
170 | static int of_bus_pci_match(struct device_node *np) | 170 | static int of_bus_pci_match(struct device_node *np) |
171 | { | 171 | { |
172 | if (!strcmp(np->type, "pci") || !strcmp(np->type, "pciex")) { | 172 | if (!strcmp(np->name, "pci")) { |
173 | const char *model = of_get_property(np, "model", NULL); | 173 | const char *model = of_get_property(np, "model", NULL); |
174 | 174 | ||
175 | if (model && !strcmp(model, "SUNW,simba")) | 175 | if (model && !strcmp(model, "SUNW,simba")) |
@@ -200,7 +200,7 @@ static int of_bus_simba_match(struct device_node *np) | |||
200 | /* Treat PCI busses lacking ranges property just like | 200 | /* Treat PCI busses lacking ranges property just like |
201 | * simba. | 201 | * simba. |
202 | */ | 202 | */ |
203 | if (!strcmp(np->type, "pci") || !strcmp(np->type, "pciex")) { | 203 | if (!strcmp(np->name, "pci")) { |
204 | if (!of_find_property(np, "ranges", NULL)) | 204 | if (!of_find_property(np, "ranges", NULL)) |
205 | return 1; | 205 | return 1; |
206 | } | 206 | } |
@@ -429,7 +429,7 @@ static int __init use_1to1_mapping(struct device_node *pp) | |||
429 | * it lacks a ranges property, and this will include | 429 | * it lacks a ranges property, and this will include |
430 | * cases like Simba. | 430 | * cases like Simba. |
431 | */ | 431 | */ |
432 | if (!strcmp(pp->type, "pci") || !strcmp(pp->type, "pciex")) | 432 | if (!strcmp(pp->name, "pci")) |
433 | return 0; | 433 | return 0; |
434 | 434 | ||
435 | return 1; | 435 | return 1; |
@@ -714,8 +714,7 @@ static unsigned int __init build_one_device_irq(struct of_device *op, | |||
714 | break; | 714 | break; |
715 | } | 715 | } |
716 | } else { | 716 | } else { |
717 | if (!strcmp(pp->type, "pci") || | 717 | if (!strcmp(pp->name, "pci")) { |
718 | !strcmp(pp->type, "pciex")) { | ||
719 | unsigned int this_orig_irq = irq; | 718 | unsigned int this_orig_irq = irq; |
720 | 719 | ||
721 | irq = pci_irq_swizzle(dp, pp, irq); | 720 | irq = pci_irq_swizzle(dp, pp, irq); |
diff --git a/arch/sparc64/kernel/pci.c b/arch/sparc64/kernel/pci.c index 55096195458f..80dad76f8b81 100644 --- a/arch/sparc64/kernel/pci.c +++ b/arch/sparc64/kernel/pci.c | |||
@@ -425,7 +425,7 @@ struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm, | |||
425 | dev->current_state = 4; /* unknown power state */ | 425 | dev->current_state = 4; /* unknown power state */ |
426 | dev->error_state = pci_channel_io_normal; | 426 | dev->error_state = pci_channel_io_normal; |
427 | 427 | ||
428 | if (!strcmp(type, "pci") || !strcmp(type, "pciex")) { | 428 | if (!strcmp(node->name, "pci")) { |
429 | /* a PCI-PCI bridge */ | 429 | /* a PCI-PCI bridge */ |
430 | dev->hdr_type = PCI_HEADER_TYPE_BRIDGE; | 430 | dev->hdr_type = PCI_HEADER_TYPE_BRIDGE; |
431 | dev->rom_base_reg = PCI_ROM_ADDRESS1; | 431 | dev->rom_base_reg = PCI_ROM_ADDRESS1; |
diff --git a/arch/sparc64/kernel/pci_psycho.c b/arch/sparc64/kernel/pci_psycho.c index ef5fe29202c2..f85b6bebb0be 100644 --- a/arch/sparc64/kernel/pci_psycho.c +++ b/arch/sparc64/kernel/pci_psycho.c | |||
@@ -575,7 +575,7 @@ static irqreturn_t psycho_pcierr_intr_other(struct pci_pbm_info *pbm, int is_pbm | |||
575 | { | 575 | { |
576 | unsigned long csr_reg, csr, csr_error_bits; | 576 | unsigned long csr_reg, csr, csr_error_bits; |
577 | irqreturn_t ret = IRQ_NONE; | 577 | irqreturn_t ret = IRQ_NONE; |
578 | u16 stat; | 578 | u16 stat, *addr; |
579 | 579 | ||
580 | if (is_pbm_a) { | 580 | if (is_pbm_a) { |
581 | csr_reg = pbm->controller_regs + PSYCHO_PCIA_CTRL; | 581 | csr_reg = pbm->controller_regs + PSYCHO_PCIA_CTRL; |
@@ -597,7 +597,9 @@ static irqreturn_t psycho_pcierr_intr_other(struct pci_pbm_info *pbm, int is_pbm | |||
597 | printk("%s: PCI SERR signal asserted.\n", pbm->name); | 597 | printk("%s: PCI SERR signal asserted.\n", pbm->name); |
598 | ret = IRQ_HANDLED; | 598 | ret = IRQ_HANDLED; |
599 | } | 599 | } |
600 | pci_read_config_word(pbm->pci_bus->self, PCI_STATUS, &stat); | 600 | addr = psycho_pci_config_mkaddr(pbm, pbm->pci_first_busno, |
601 | 0, PCI_STATUS); | ||
602 | pci_config_read16(addr, &stat); | ||
601 | if (stat & (PCI_STATUS_PARITY | | 603 | if (stat & (PCI_STATUS_PARITY | |
602 | PCI_STATUS_SIG_TARGET_ABORT | | 604 | PCI_STATUS_SIG_TARGET_ABORT | |
603 | PCI_STATUS_REC_TARGET_ABORT | | 605 | PCI_STATUS_REC_TARGET_ABORT | |
@@ -605,7 +607,7 @@ static irqreturn_t psycho_pcierr_intr_other(struct pci_pbm_info *pbm, int is_pbm | |||
605 | PCI_STATUS_SIG_SYSTEM_ERROR)) { | 607 | PCI_STATUS_SIG_SYSTEM_ERROR)) { |
606 | printk("%s: PCI bus error, PCI_STATUS[%04x]\n", | 608 | printk("%s: PCI bus error, PCI_STATUS[%04x]\n", |
607 | pbm->name, stat); | 609 | pbm->name, stat); |
608 | pci_write_config_word(pbm->pci_bus->self, PCI_STATUS, 0xffff); | 610 | pci_config_write16(addr, 0xffff); |
609 | ret = IRQ_HANDLED; | 611 | ret = IRQ_HANDLED; |
610 | } | 612 | } |
611 | return ret; | 613 | return ret; |
@@ -744,16 +746,16 @@ static void psycho_register_error_handlers(struct pci_pbm_info *pbm) | |||
744 | * the second will just error out since we do not pass in | 746 | * the second will just error out since we do not pass in |
745 | * IRQF_SHARED. | 747 | * IRQF_SHARED. |
746 | */ | 748 | */ |
747 | err = request_irq(op->irqs[1], psycho_ue_intr, 0, | 749 | err = request_irq(op->irqs[1], psycho_ue_intr, IRQF_SHARED, |
748 | "PSYCHO_UE", pbm); | 750 | "PSYCHO_UE", pbm); |
749 | err = request_irq(op->irqs[2], psycho_ce_intr, 0, | 751 | err = request_irq(op->irqs[2], psycho_ce_intr, IRQF_SHARED, |
750 | "PSYCHO_CE", pbm); | 752 | "PSYCHO_CE", pbm); |
751 | 753 | ||
752 | /* This one, however, ought not to fail. We can just warn | 754 | /* This one, however, ought not to fail. We can just warn |
753 | * about it since the system can still operate properly even | 755 | * about it since the system can still operate properly even |
754 | * if this fails. | 756 | * if this fails. |
755 | */ | 757 | */ |
756 | err = request_irq(op->irqs[0], psycho_pcierr_intr, 0, | 758 | err = request_irq(op->irqs[0], psycho_pcierr_intr, IRQF_SHARED, |
757 | "PSYCHO_PCIERR", pbm); | 759 | "PSYCHO_PCIERR", pbm); |
758 | if (err) | 760 | if (err) |
759 | printk(KERN_WARNING "%s: Could not register PCIERR, " | 761 | printk(KERN_WARNING "%s: Could not register PCIERR, " |
diff --git a/arch/sparc64/kernel/prom.c b/arch/sparc64/kernel/prom.c index 3c048ac4e638..7151513f156e 100644 --- a/arch/sparc64/kernel/prom.c +++ b/arch/sparc64/kernel/prom.c | |||
@@ -156,55 +156,11 @@ static unsigned long psycho_pcislot_imap_offset(unsigned long ino) | |||
156 | return PSYCHO_IMAP_B_SLOT0 + (slot * 8); | 156 | return PSYCHO_IMAP_B_SLOT0 + (slot * 8); |
157 | } | 157 | } |
158 | 158 | ||
159 | #define PSYCHO_IMAP_SCSI 0x1000UL | 159 | #define PSYCHO_OBIO_IMAP_BASE 0x1000UL |
160 | #define PSYCHO_IMAP_ETH 0x1008UL | 160 | |
161 | #define PSYCHO_IMAP_BPP 0x1010UL | ||
162 | #define PSYCHO_IMAP_AU_REC 0x1018UL | ||
163 | #define PSYCHO_IMAP_AU_PLAY 0x1020UL | ||
164 | #define PSYCHO_IMAP_PFAIL 0x1028UL | ||
165 | #define PSYCHO_IMAP_KMS 0x1030UL | ||
166 | #define PSYCHO_IMAP_FLPY 0x1038UL | ||
167 | #define PSYCHO_IMAP_SHW 0x1040UL | ||
168 | #define PSYCHO_IMAP_KBD 0x1048UL | ||
169 | #define PSYCHO_IMAP_MS 0x1050UL | ||
170 | #define PSYCHO_IMAP_SER 0x1058UL | ||
171 | #define PSYCHO_IMAP_TIM0 0x1060UL | ||
172 | #define PSYCHO_IMAP_TIM1 0x1068UL | ||
173 | #define PSYCHO_IMAP_UE 0x1070UL | ||
174 | #define PSYCHO_IMAP_CE 0x1078UL | ||
175 | #define PSYCHO_IMAP_A_ERR 0x1080UL | ||
176 | #define PSYCHO_IMAP_B_ERR 0x1088UL | ||
177 | #define PSYCHO_IMAP_PMGMT 0x1090UL | ||
178 | #define PSYCHO_IMAP_GFX 0x1098UL | ||
179 | #define PSYCHO_IMAP_EUPA 0x10a0UL | ||
180 | |||
181 | static unsigned long __psycho_onboard_imap_off[] = { | ||
182 | /*0x20*/ PSYCHO_IMAP_SCSI, | ||
183 | /*0x21*/ PSYCHO_IMAP_ETH, | ||
184 | /*0x22*/ PSYCHO_IMAP_BPP, | ||
185 | /*0x23*/ PSYCHO_IMAP_AU_REC, | ||
186 | /*0x24*/ PSYCHO_IMAP_AU_PLAY, | ||
187 | /*0x25*/ PSYCHO_IMAP_PFAIL, | ||
188 | /*0x26*/ PSYCHO_IMAP_KMS, | ||
189 | /*0x27*/ PSYCHO_IMAP_FLPY, | ||
190 | /*0x28*/ PSYCHO_IMAP_SHW, | ||
191 | /*0x29*/ PSYCHO_IMAP_KBD, | ||
192 | /*0x2a*/ PSYCHO_IMAP_MS, | ||
193 | /*0x2b*/ PSYCHO_IMAP_SER, | ||
194 | /*0x2c*/ PSYCHO_IMAP_TIM0, | ||
195 | /*0x2d*/ PSYCHO_IMAP_TIM1, | ||
196 | /*0x2e*/ PSYCHO_IMAP_UE, | ||
197 | /*0x2f*/ PSYCHO_IMAP_CE, | ||
198 | /*0x30*/ PSYCHO_IMAP_A_ERR, | ||
199 | /*0x31*/ PSYCHO_IMAP_B_ERR, | ||
200 | /*0x32*/ PSYCHO_IMAP_PMGMT, | ||
201 | /*0x33*/ PSYCHO_IMAP_GFX, | ||
202 | /*0x34*/ PSYCHO_IMAP_EUPA, | ||
203 | }; | ||
204 | #define PSYCHO_ONBOARD_IRQ_BASE 0x20 | 161 | #define PSYCHO_ONBOARD_IRQ_BASE 0x20 |
205 | #define PSYCHO_ONBOARD_IRQ_LAST 0x34 | ||
206 | #define psycho_onboard_imap_offset(__ino) \ | 162 | #define psycho_onboard_imap_offset(__ino) \ |
207 | __psycho_onboard_imap_off[(__ino) - PSYCHO_ONBOARD_IRQ_BASE] | 163 | (PSYCHO_OBIO_IMAP_BASE + (((__ino) & 0x1f) << 3)) |
208 | 164 | ||
209 | #define PSYCHO_ICLR_A_SLOT0 0x1400UL | 165 | #define PSYCHO_ICLR_A_SLOT0 0x1400UL |
210 | #define PSYCHO_ICLR_SCSI 0x1800UL | 166 | #define PSYCHO_ICLR_SCSI 0x1800UL |
@@ -228,10 +184,6 @@ static unsigned int psycho_irq_build(struct device_node *dp, | |||
228 | imap_off = psycho_pcislot_imap_offset(ino); | 184 | imap_off = psycho_pcislot_imap_offset(ino); |
229 | } else { | 185 | } else { |
230 | /* Onboard device */ | 186 | /* Onboard device */ |
231 | if (ino > PSYCHO_ONBOARD_IRQ_LAST) { | ||
232 | prom_printf("psycho_irq_build: Wacky INO [%x]\n", ino); | ||
233 | prom_halt(); | ||
234 | } | ||
235 | imap_off = psycho_onboard_imap_offset(ino); | 187 | imap_off = psycho_onboard_imap_offset(ino); |
236 | } | 188 | } |
237 | 189 | ||
@@ -318,23 +270,6 @@ static void sabre_wsync_handler(unsigned int ino, void *_arg1, void *_arg2) | |||
318 | 270 | ||
319 | #define SABRE_IMAP_A_SLOT0 0x0c00UL | 271 | #define SABRE_IMAP_A_SLOT0 0x0c00UL |
320 | #define SABRE_IMAP_B_SLOT0 0x0c20UL | 272 | #define SABRE_IMAP_B_SLOT0 0x0c20UL |
321 | #define SABRE_IMAP_SCSI 0x1000UL | ||
322 | #define SABRE_IMAP_ETH 0x1008UL | ||
323 | #define SABRE_IMAP_BPP 0x1010UL | ||
324 | #define SABRE_IMAP_AU_REC 0x1018UL | ||
325 | #define SABRE_IMAP_AU_PLAY 0x1020UL | ||
326 | #define SABRE_IMAP_PFAIL 0x1028UL | ||
327 | #define SABRE_IMAP_KMS 0x1030UL | ||
328 | #define SABRE_IMAP_FLPY 0x1038UL | ||
329 | #define SABRE_IMAP_SHW 0x1040UL | ||
330 | #define SABRE_IMAP_KBD 0x1048UL | ||
331 | #define SABRE_IMAP_MS 0x1050UL | ||
332 | #define SABRE_IMAP_SER 0x1058UL | ||
333 | #define SABRE_IMAP_UE 0x1070UL | ||
334 | #define SABRE_IMAP_CE 0x1078UL | ||
335 | #define SABRE_IMAP_PCIERR 0x1080UL | ||
336 | #define SABRE_IMAP_GFX 0x1098UL | ||
337 | #define SABRE_IMAP_EUPA 0x10a0UL | ||
338 | #define SABRE_ICLR_A_SLOT0 0x1400UL | 273 | #define SABRE_ICLR_A_SLOT0 0x1400UL |
339 | #define SABRE_ICLR_B_SLOT0 0x1480UL | 274 | #define SABRE_ICLR_B_SLOT0 0x1480UL |
340 | #define SABRE_ICLR_SCSI 0x1800UL | 275 | #define SABRE_ICLR_SCSI 0x1800UL |
@@ -364,33 +299,10 @@ static unsigned long sabre_pcislot_imap_offset(unsigned long ino) | |||
364 | return SABRE_IMAP_B_SLOT0 + (slot * 8); | 299 | return SABRE_IMAP_B_SLOT0 + (slot * 8); |
365 | } | 300 | } |
366 | 301 | ||
367 | static unsigned long __sabre_onboard_imap_off[] = { | 302 | #define SABRE_OBIO_IMAP_BASE 0x1000UL |
368 | /*0x20*/ SABRE_IMAP_SCSI, | 303 | #define SABRE_ONBOARD_IRQ_BASE 0x20 |
369 | /*0x21*/ SABRE_IMAP_ETH, | ||
370 | /*0x22*/ SABRE_IMAP_BPP, | ||
371 | /*0x23*/ SABRE_IMAP_AU_REC, | ||
372 | /*0x24*/ SABRE_IMAP_AU_PLAY, | ||
373 | /*0x25*/ SABRE_IMAP_PFAIL, | ||
374 | /*0x26*/ SABRE_IMAP_KMS, | ||
375 | /*0x27*/ SABRE_IMAP_FLPY, | ||
376 | /*0x28*/ SABRE_IMAP_SHW, | ||
377 | /*0x29*/ SABRE_IMAP_KBD, | ||
378 | /*0x2a*/ SABRE_IMAP_MS, | ||
379 | /*0x2b*/ SABRE_IMAP_SER, | ||
380 | /*0x2c*/ 0 /* reserved */, | ||
381 | /*0x2d*/ 0 /* reserved */, | ||
382 | /*0x2e*/ SABRE_IMAP_UE, | ||
383 | /*0x2f*/ SABRE_IMAP_CE, | ||
384 | /*0x30*/ SABRE_IMAP_PCIERR, | ||
385 | /*0x31*/ 0 /* reserved */, | ||
386 | /*0x32*/ 0 /* reserved */, | ||
387 | /*0x33*/ SABRE_IMAP_GFX, | ||
388 | /*0x34*/ SABRE_IMAP_EUPA, | ||
389 | }; | ||
390 | #define SABRE_ONBOARD_IRQ_BASE 0x20 | ||
391 | #define SABRE_ONBOARD_IRQ_LAST 0x30 | ||
392 | #define sabre_onboard_imap_offset(__ino) \ | 304 | #define sabre_onboard_imap_offset(__ino) \ |
393 | __sabre_onboard_imap_off[(__ino) - SABRE_ONBOARD_IRQ_BASE] | 305 | (SABRE_OBIO_IMAP_BASE + (((__ino) & 0x1f) << 3)) |
394 | 306 | ||
395 | #define sabre_iclr_offset(ino) \ | 307 | #define sabre_iclr_offset(ino) \ |
396 | ((ino & 0x20) ? (SABRE_ICLR_SCSI + (((ino) & 0x1f) << 3)) : \ | 308 | ((ino & 0x20) ? (SABRE_ICLR_SCSI + (((ino) & 0x1f) << 3)) : \ |
@@ -453,10 +365,6 @@ static unsigned int sabre_irq_build(struct device_node *dp, | |||
453 | imap_off = sabre_pcislot_imap_offset(ino); | 365 | imap_off = sabre_pcislot_imap_offset(ino); |
454 | } else { | 366 | } else { |
455 | /* onboard device */ | 367 | /* onboard device */ |
456 | if (ino > SABRE_ONBOARD_IRQ_LAST) { | ||
457 | prom_printf("sabre_irq_build: Wacky INO [%x]\n", ino); | ||
458 | prom_halt(); | ||
459 | } | ||
460 | imap_off = sabre_onboard_imap_offset(ino); | 368 | imap_off = sabre_onboard_imap_offset(ino); |
461 | } | 369 | } |
462 | 370 | ||
diff --git a/arch/sparc64/kernel/ptrace.c b/arch/sparc64/kernel/ptrace.c index bd578cc4856d..10306e476e38 100644 --- a/arch/sparc64/kernel/ptrace.c +++ b/arch/sparc64/kernel/ptrace.c | |||
@@ -443,7 +443,7 @@ static const struct user_regset sparc64_regsets[] = { | |||
443 | */ | 443 | */ |
444 | [REGSET_GENERAL] = { | 444 | [REGSET_GENERAL] = { |
445 | .core_note_type = NT_PRSTATUS, | 445 | .core_note_type = NT_PRSTATUS, |
446 | .n = 36 * sizeof(u64), | 446 | .n = 36, |
447 | .size = sizeof(u64), .align = sizeof(u64), | 447 | .size = sizeof(u64), .align = sizeof(u64), |
448 | .get = genregs64_get, .set = genregs64_set | 448 | .get = genregs64_get, .set = genregs64_set |
449 | }, | 449 | }, |
@@ -455,7 +455,7 @@ static const struct user_regset sparc64_regsets[] = { | |||
455 | */ | 455 | */ |
456 | [REGSET_FP] = { | 456 | [REGSET_FP] = { |
457 | .core_note_type = NT_PRFPREG, | 457 | .core_note_type = NT_PRFPREG, |
458 | .n = 35 * sizeof(u64), | 458 | .n = 35, |
459 | .size = sizeof(u64), .align = sizeof(u64), | 459 | .size = sizeof(u64), .align = sizeof(u64), |
460 | .get = fpregs64_get, .set = fpregs64_set | 460 | .get = fpregs64_get, .set = fpregs64_set |
461 | }, | 461 | }, |
@@ -801,7 +801,7 @@ static const struct user_regset sparc32_regsets[] = { | |||
801 | */ | 801 | */ |
802 | [REGSET_GENERAL] = { | 802 | [REGSET_GENERAL] = { |
803 | .core_note_type = NT_PRSTATUS, | 803 | .core_note_type = NT_PRSTATUS, |
804 | .n = 38 * sizeof(u32), | 804 | .n = 38, |
805 | .size = sizeof(u32), .align = sizeof(u32), | 805 | .size = sizeof(u32), .align = sizeof(u32), |
806 | .get = genregs32_get, .set = genregs32_set | 806 | .get = genregs32_get, .set = genregs32_set |
807 | }, | 807 | }, |
@@ -817,7 +817,7 @@ static const struct user_regset sparc32_regsets[] = { | |||
817 | */ | 817 | */ |
818 | [REGSET_FP] = { | 818 | [REGSET_FP] = { |
819 | .core_note_type = NT_PRFPREG, | 819 | .core_note_type = NT_PRFPREG, |
820 | .n = 99 * sizeof(u32), | 820 | .n = 99, |
821 | .size = sizeof(u32), .align = sizeof(u32), | 821 | .size = sizeof(u32), .align = sizeof(u32), |
822 | .get = fpregs32_get, .set = fpregs32_set | 822 | .get = fpregs32_get, .set = fpregs32_set |
823 | }, | 823 | }, |
diff --git a/arch/sparc64/kernel/traps.c b/arch/sparc64/kernel/traps.c index 3d924121c796..c824df13f589 100644 --- a/arch/sparc64/kernel/traps.c +++ b/arch/sparc64/kernel/traps.c | |||
@@ -10,6 +10,7 @@ | |||
10 | 10 | ||
11 | #include <linux/module.h> | 11 | #include <linux/module.h> |
12 | #include <linux/sched.h> | 12 | #include <linux/sched.h> |
13 | #include <linux/linkage.h> | ||
13 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
14 | #include <linux/signal.h> | 15 | #include <linux/signal.h> |
15 | #include <linux/smp.h> | 16 | #include <linux/smp.h> |
@@ -2453,7 +2454,7 @@ struct trap_per_cpu trap_block[NR_CPUS]; | |||
2453 | /* This can get invoked before sched_init() so play it super safe | 2454 | /* This can get invoked before sched_init() so play it super safe |
2454 | * and use hard_smp_processor_id(). | 2455 | * and use hard_smp_processor_id(). |
2455 | */ | 2456 | */ |
2456 | void init_cur_cpu_trap(struct thread_info *t) | 2457 | void notrace init_cur_cpu_trap(struct thread_info *t) |
2457 | { | 2458 | { |
2458 | int cpu = hard_smp_processor_id(); | 2459 | int cpu = hard_smp_processor_id(); |
2459 | struct trap_per_cpu *p = &trap_block[cpu]; | 2460 | struct trap_per_cpu *p = &trap_block[cpu]; |
diff --git a/arch/x86/boot/compressed/relocs.c b/arch/x86/boot/compressed/relocs.c index a1310c52fc0c..857e492c571e 100644 --- a/arch/x86/boot/compressed/relocs.c +++ b/arch/x86/boot/compressed/relocs.c | |||
@@ -492,7 +492,7 @@ static void walk_relocs(void (*visit)(Elf32_Rel *rel, Elf32_Sym *sym)) | |||
492 | continue; | 492 | continue; |
493 | } | 493 | } |
494 | sh_symtab = sec_symtab->symtab; | 494 | sh_symtab = sec_symtab->symtab; |
495 | sym_strtab = sec->link->strtab; | 495 | sym_strtab = sec_symtab->link->strtab; |
496 | for (j = 0; j < sec->shdr.sh_size/sizeof(Elf32_Rel); j++) { | 496 | for (j = 0; j < sec->shdr.sh_size/sizeof(Elf32_Rel); j++) { |
497 | Elf32_Rel *rel; | 497 | Elf32_Rel *rel; |
498 | Elf32_Sym *sym; | 498 | Elf32_Sym *sym; |
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index bfd10fd211cd..c102af85df9c 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c | |||
@@ -1605,6 +1605,14 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = { | |||
1605 | */ | 1605 | */ |
1606 | { | 1606 | { |
1607 | .callback = dmi_ignore_irq0_timer_override, | 1607 | .callback = dmi_ignore_irq0_timer_override, |
1608 | .ident = "HP nx6115 laptop", | ||
1609 | .matches = { | ||
1610 | DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), | ||
1611 | DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6115"), | ||
1612 | }, | ||
1613 | }, | ||
1614 | { | ||
1615 | .callback = dmi_ignore_irq0_timer_override, | ||
1608 | .ident = "HP NX6125 laptop", | 1616 | .ident = "HP NX6125 laptop", |
1609 | .matches = { | 1617 | .matches = { |
1610 | DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), | 1618 | DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), |
@@ -1619,6 +1627,14 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = { | |||
1619 | DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6325"), | 1627 | DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6325"), |
1620 | }, | 1628 | }, |
1621 | }, | 1629 | }, |
1630 | { | ||
1631 | .callback = dmi_ignore_irq0_timer_override, | ||
1632 | .ident = "HP 6715b laptop", | ||
1633 | .matches = { | ||
1634 | DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), | ||
1635 | DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq 6715b"), | ||
1636 | }, | ||
1637 | }, | ||
1622 | {} | 1638 | {} |
1623 | }; | 1639 | }; |
1624 | 1640 | ||
diff --git a/arch/x86/kernel/amd_iommu.c b/arch/x86/kernel/amd_iommu.c index 69b4d060b21c..042fdc27bc92 100644 --- a/arch/x86/kernel/amd_iommu.c +++ b/arch/x86/kernel/amd_iommu.c | |||
@@ -101,10 +101,10 @@ static int iommu_queue_command(struct amd_iommu *iommu, struct iommu_cmd *cmd) | |||
101 | */ | 101 | */ |
102 | static int iommu_completion_wait(struct amd_iommu *iommu) | 102 | static int iommu_completion_wait(struct amd_iommu *iommu) |
103 | { | 103 | { |
104 | int ret, ready = 0; | 104 | int ret = 0, ready = 0; |
105 | unsigned status = 0; | 105 | unsigned status = 0; |
106 | struct iommu_cmd cmd; | 106 | struct iommu_cmd cmd; |
107 | unsigned long i = 0; | 107 | unsigned long flags, i = 0; |
108 | 108 | ||
109 | memset(&cmd, 0, sizeof(cmd)); | 109 | memset(&cmd, 0, sizeof(cmd)); |
110 | cmd.data[0] = CMD_COMPL_WAIT_INT_MASK; | 110 | cmd.data[0] = CMD_COMPL_WAIT_INT_MASK; |
@@ -112,10 +112,12 @@ static int iommu_completion_wait(struct amd_iommu *iommu) | |||
112 | 112 | ||
113 | iommu->need_sync = 0; | 113 | iommu->need_sync = 0; |
114 | 114 | ||
115 | ret = iommu_queue_command(iommu, &cmd); | 115 | spin_lock_irqsave(&iommu->lock, flags); |
116 | |||
117 | ret = __iommu_queue_command(iommu, &cmd); | ||
116 | 118 | ||
117 | if (ret) | 119 | if (ret) |
118 | return ret; | 120 | goto out; |
119 | 121 | ||
120 | while (!ready && (i < EXIT_LOOP_COUNT)) { | 122 | while (!ready && (i < EXIT_LOOP_COUNT)) { |
121 | ++i; | 123 | ++i; |
@@ -130,6 +132,8 @@ static int iommu_completion_wait(struct amd_iommu *iommu) | |||
130 | 132 | ||
131 | if (unlikely((i == EXIT_LOOP_COUNT) && printk_ratelimit())) | 133 | if (unlikely((i == EXIT_LOOP_COUNT) && printk_ratelimit())) |
132 | printk(KERN_WARNING "AMD IOMMU: Completion wait loop failed\n"); | 134 | printk(KERN_WARNING "AMD IOMMU: Completion wait loop failed\n"); |
135 | out: | ||
136 | spin_unlock_irqrestore(&iommu->lock, flags); | ||
133 | 137 | ||
134 | return 0; | 138 | return 0; |
135 | } | 139 | } |
@@ -140,6 +144,7 @@ static int iommu_completion_wait(struct amd_iommu *iommu) | |||
140 | static int iommu_queue_inv_dev_entry(struct amd_iommu *iommu, u16 devid) | 144 | static int iommu_queue_inv_dev_entry(struct amd_iommu *iommu, u16 devid) |
141 | { | 145 | { |
142 | struct iommu_cmd cmd; | 146 | struct iommu_cmd cmd; |
147 | int ret; | ||
143 | 148 | ||
144 | BUG_ON(iommu == NULL); | 149 | BUG_ON(iommu == NULL); |
145 | 150 | ||
@@ -147,9 +152,11 @@ static int iommu_queue_inv_dev_entry(struct amd_iommu *iommu, u16 devid) | |||
147 | CMD_SET_TYPE(&cmd, CMD_INV_DEV_ENTRY); | 152 | CMD_SET_TYPE(&cmd, CMD_INV_DEV_ENTRY); |
148 | cmd.data[0] = devid; | 153 | cmd.data[0] = devid; |
149 | 154 | ||
155 | ret = iommu_queue_command(iommu, &cmd); | ||
156 | |||
150 | iommu->need_sync = 1; | 157 | iommu->need_sync = 1; |
151 | 158 | ||
152 | return iommu_queue_command(iommu, &cmd); | 159 | return ret; |
153 | } | 160 | } |
154 | 161 | ||
155 | /* | 162 | /* |
@@ -159,6 +166,7 @@ static int iommu_queue_inv_iommu_pages(struct amd_iommu *iommu, | |||
159 | u64 address, u16 domid, int pde, int s) | 166 | u64 address, u16 domid, int pde, int s) |
160 | { | 167 | { |
161 | struct iommu_cmd cmd; | 168 | struct iommu_cmd cmd; |
169 | int ret; | ||
162 | 170 | ||
163 | memset(&cmd, 0, sizeof(cmd)); | 171 | memset(&cmd, 0, sizeof(cmd)); |
164 | address &= PAGE_MASK; | 172 | address &= PAGE_MASK; |
@@ -171,9 +179,11 @@ static int iommu_queue_inv_iommu_pages(struct amd_iommu *iommu, | |||
171 | if (pde) /* PDE bit - we wan't flush everything not only the PTEs */ | 179 | if (pde) /* PDE bit - we wan't flush everything not only the PTEs */ |
172 | cmd.data[2] |= CMD_INV_IOMMU_PAGES_PDE_MASK; | 180 | cmd.data[2] |= CMD_INV_IOMMU_PAGES_PDE_MASK; |
173 | 181 | ||
182 | ret = iommu_queue_command(iommu, &cmd); | ||
183 | |||
174 | iommu->need_sync = 1; | 184 | iommu->need_sync = 1; |
175 | 185 | ||
176 | return iommu_queue_command(iommu, &cmd); | 186 | return ret; |
177 | } | 187 | } |
178 | 188 | ||
179 | /* | 189 | /* |
diff --git a/arch/x86/kernel/apm_32.c b/arch/x86/kernel/apm_32.c index 9ee24e6bc4b0..732d1f4e10ee 100644 --- a/arch/x86/kernel/apm_32.c +++ b/arch/x86/kernel/apm_32.c | |||
@@ -234,6 +234,7 @@ | |||
234 | #include <asm/uaccess.h> | 234 | #include <asm/uaccess.h> |
235 | #include <asm/desc.h> | 235 | #include <asm/desc.h> |
236 | #include <asm/i8253.h> | 236 | #include <asm/i8253.h> |
237 | #include <asm/olpc.h> | ||
237 | #include <asm/paravirt.h> | 238 | #include <asm/paravirt.h> |
238 | #include <asm/reboot.h> | 239 | #include <asm/reboot.h> |
239 | 240 | ||
@@ -2217,7 +2218,7 @@ static int __init apm_init(void) | |||
2217 | 2218 | ||
2218 | dmi_check_system(apm_dmi_table); | 2219 | dmi_check_system(apm_dmi_table); |
2219 | 2220 | ||
2220 | if (apm_info.bios.version == 0 || paravirt_enabled()) { | 2221 | if (apm_info.bios.version == 0 || paravirt_enabled() || machine_is_olpc()) { |
2221 | printk(KERN_INFO "apm: BIOS not found.\n"); | 2222 | printk(KERN_INFO "apm: BIOS not found.\n"); |
2222 | return -ENODEV; | 2223 | return -ENODEV; |
2223 | } | 2224 | } |
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index 8aab8517642e..4e456bd955bb 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c | |||
@@ -344,31 +344,15 @@ static void __init early_cpu_detect(void) | |||
344 | 344 | ||
345 | /* | 345 | /* |
346 | * The NOPL instruction is supposed to exist on all CPUs with | 346 | * The NOPL instruction is supposed to exist on all CPUs with |
347 | * family >= 6, unfortunately, that's not true in practice because | 347 | * family >= 6; unfortunately, that's not true in practice because |
348 | * of early VIA chips and (more importantly) broken virtualizers that | 348 | * of early VIA chips and (more importantly) broken virtualizers that |
349 | * are not easy to detect. Hence, probe for it based on first | 349 | * are not easy to detect. In the latter case it doesn't even *fail* |
350 | * principles. | 350 | * reliably, so probing for it doesn't even work. Disable it completely |
351 | * unless we can find a reliable way to detect all the broken cases. | ||
351 | */ | 352 | */ |
352 | static void __cpuinit detect_nopl(struct cpuinfo_x86 *c) | 353 | static void __cpuinit detect_nopl(struct cpuinfo_x86 *c) |
353 | { | 354 | { |
354 | const u32 nopl_signature = 0x888c53b1; /* Random number */ | ||
355 | u32 has_nopl = nopl_signature; | ||
356 | |||
357 | clear_cpu_cap(c, X86_FEATURE_NOPL); | 355 | clear_cpu_cap(c, X86_FEATURE_NOPL); |
358 | if (c->x86 >= 6) { | ||
359 | asm volatile("\n" | ||
360 | "1: .byte 0x0f,0x1f,0xc0\n" /* nopl %eax */ | ||
361 | "2:\n" | ||
362 | " .section .fixup,\"ax\"\n" | ||
363 | "3: xor %0,%0\n" | ||
364 | " jmp 2b\n" | ||
365 | " .previous\n" | ||
366 | _ASM_EXTABLE(1b,3b) | ||
367 | : "+a" (has_nopl)); | ||
368 | |||
369 | if (has_nopl == nopl_signature) | ||
370 | set_cpu_cap(c, X86_FEATURE_NOPL); | ||
371 | } | ||
372 | } | 356 | } |
373 | 357 | ||
374 | static void __cpuinit generic_identify(struct cpuinfo_x86 *c) | 358 | static void __cpuinit generic_identify(struct cpuinfo_x86 *c) |
diff --git a/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c b/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c index f1685fb91fbd..b8e05ee4f736 100644 --- a/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c +++ b/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c | |||
@@ -171,7 +171,7 @@ static unsigned int cpufreq_p4_get_frequency(struct cpuinfo_x86 *c) | |||
171 | } | 171 | } |
172 | 172 | ||
173 | if (c->x86 != 0xF) { | 173 | if (c->x86 != 0xF) { |
174 | printk(KERN_WARNING PFX "Unknown p4-clockmod-capable CPU. Please send an e-mail to <cpufreq@lists.linux.org.uk>\n"); | 174 | printk(KERN_WARNING PFX "Unknown p4-clockmod-capable CPU. Please send an e-mail to <cpufreq@vger.kernel.org>\n"); |
175 | return 0; | 175 | return 0; |
176 | } | 176 | } |
177 | 177 | ||
diff --git a/arch/x86/kernel/cpu/cpufreq/speedstep-centrino.c b/arch/x86/kernel/cpu/cpufreq/speedstep-centrino.c index 15e13c01cc36..3b5f06423e77 100644 --- a/arch/x86/kernel/cpu/cpufreq/speedstep-centrino.c +++ b/arch/x86/kernel/cpu/cpufreq/speedstep-centrino.c | |||
@@ -26,7 +26,7 @@ | |||
26 | #include <asm/cpufeature.h> | 26 | #include <asm/cpufeature.h> |
27 | 27 | ||
28 | #define PFX "speedstep-centrino: " | 28 | #define PFX "speedstep-centrino: " |
29 | #define MAINTAINER "cpufreq@lists.linux.org.uk" | 29 | #define MAINTAINER "cpufreq@vger.kernel.org" |
30 | 30 | ||
31 | #define dprintk(msg...) \ | 31 | #define dprintk(msg...) \ |
32 | cpufreq_debug_printk(CPUFREQ_DEBUG_DRIVER, "speedstep-centrino", msg) | 32 | cpufreq_debug_printk(CPUFREQ_DEBUG_DRIVER, "speedstep-centrino", msg) |
diff --git a/arch/x86/kernel/cpu/mtrr/main.c b/arch/x86/kernel/cpu/mtrr/main.c index b117d7f8a564..885c8265e6b5 100644 --- a/arch/x86/kernel/cpu/mtrr/main.c +++ b/arch/x86/kernel/cpu/mtrr/main.c | |||
@@ -834,7 +834,7 @@ static int __init enable_mtrr_cleanup_setup(char *str) | |||
834 | enable_mtrr_cleanup = 1; | 834 | enable_mtrr_cleanup = 1; |
835 | return 0; | 835 | return 0; |
836 | } | 836 | } |
837 | early_param("enble_mtrr_cleanup", enable_mtrr_cleanup_setup); | 837 | early_param("enable_mtrr_cleanup", enable_mtrr_cleanup_setup); |
838 | 838 | ||
839 | struct var_mtrr_state { | 839 | struct var_mtrr_state { |
840 | unsigned long range_startk; | 840 | unsigned long range_startk; |
diff --git a/arch/x86/kernel/kdebugfs.c b/arch/x86/kernel/kdebugfs.c index f2d43bc75514..ff7d3b0124f1 100644 --- a/arch/x86/kernel/kdebugfs.c +++ b/arch/x86/kernel/kdebugfs.c | |||
@@ -139,6 +139,7 @@ static int __init create_setup_data_nodes(struct dentry *parent) | |||
139 | if (PageHighMem(pg)) { | 139 | if (PageHighMem(pg)) { |
140 | data = ioremap_cache(pa_data, sizeof(*data)); | 140 | data = ioremap_cache(pa_data, sizeof(*data)); |
141 | if (!data) { | 141 | if (!data) { |
142 | kfree(node); | ||
142 | error = -ENXIO; | 143 | error = -ENXIO; |
143 | goto err_dir; | 144 | goto err_dir; |
144 | } | 145 | } |
diff --git a/arch/x86/kernel/kgdb.c b/arch/x86/kernel/kgdb.c index f47f0eb886b8..10435a120d22 100644 --- a/arch/x86/kernel/kgdb.c +++ b/arch/x86/kernel/kgdb.c | |||
@@ -69,6 +69,9 @@ static int gdb_x86vector = -1; | |||
69 | */ | 69 | */ |
70 | void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs) | 70 | void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs) |
71 | { | 71 | { |
72 | #ifndef CONFIG_X86_32 | ||
73 | u32 *gdb_regs32 = (u32 *)gdb_regs; | ||
74 | #endif | ||
72 | gdb_regs[GDB_AX] = regs->ax; | 75 | gdb_regs[GDB_AX] = regs->ax; |
73 | gdb_regs[GDB_BX] = regs->bx; | 76 | gdb_regs[GDB_BX] = regs->bx; |
74 | gdb_regs[GDB_CX] = regs->cx; | 77 | gdb_regs[GDB_CX] = regs->cx; |
@@ -76,9 +79,9 @@ void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs) | |||
76 | gdb_regs[GDB_SI] = regs->si; | 79 | gdb_regs[GDB_SI] = regs->si; |
77 | gdb_regs[GDB_DI] = regs->di; | 80 | gdb_regs[GDB_DI] = regs->di; |
78 | gdb_regs[GDB_BP] = regs->bp; | 81 | gdb_regs[GDB_BP] = regs->bp; |
79 | gdb_regs[GDB_PS] = regs->flags; | ||
80 | gdb_regs[GDB_PC] = regs->ip; | 82 | gdb_regs[GDB_PC] = regs->ip; |
81 | #ifdef CONFIG_X86_32 | 83 | #ifdef CONFIG_X86_32 |
84 | gdb_regs[GDB_PS] = regs->flags; | ||
82 | gdb_regs[GDB_DS] = regs->ds; | 85 | gdb_regs[GDB_DS] = regs->ds; |
83 | gdb_regs[GDB_ES] = regs->es; | 86 | gdb_regs[GDB_ES] = regs->es; |
84 | gdb_regs[GDB_CS] = regs->cs; | 87 | gdb_regs[GDB_CS] = regs->cs; |
@@ -94,6 +97,9 @@ void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs) | |||
94 | gdb_regs[GDB_R13] = regs->r13; | 97 | gdb_regs[GDB_R13] = regs->r13; |
95 | gdb_regs[GDB_R14] = regs->r14; | 98 | gdb_regs[GDB_R14] = regs->r14; |
96 | gdb_regs[GDB_R15] = regs->r15; | 99 | gdb_regs[GDB_R15] = regs->r15; |
100 | gdb_regs32[GDB_PS] = regs->flags; | ||
101 | gdb_regs32[GDB_CS] = regs->cs; | ||
102 | gdb_regs32[GDB_SS] = regs->ss; | ||
97 | #endif | 103 | #endif |
98 | gdb_regs[GDB_SP] = regs->sp; | 104 | gdb_regs[GDB_SP] = regs->sp; |
99 | } | 105 | } |
@@ -112,6 +118,9 @@ void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs) | |||
112 | */ | 118 | */ |
113 | void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *p) | 119 | void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *p) |
114 | { | 120 | { |
121 | #ifndef CONFIG_X86_32 | ||
122 | u32 *gdb_regs32 = (u32 *)gdb_regs; | ||
123 | #endif | ||
115 | gdb_regs[GDB_AX] = 0; | 124 | gdb_regs[GDB_AX] = 0; |
116 | gdb_regs[GDB_BX] = 0; | 125 | gdb_regs[GDB_BX] = 0; |
117 | gdb_regs[GDB_CX] = 0; | 126 | gdb_regs[GDB_CX] = 0; |
@@ -129,8 +138,10 @@ void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *p) | |||
129 | gdb_regs[GDB_FS] = 0xFFFF; | 138 | gdb_regs[GDB_FS] = 0xFFFF; |
130 | gdb_regs[GDB_GS] = 0xFFFF; | 139 | gdb_regs[GDB_GS] = 0xFFFF; |
131 | #else | 140 | #else |
132 | gdb_regs[GDB_PS] = *(unsigned long *)(p->thread.sp + 8); | 141 | gdb_regs32[GDB_PS] = *(unsigned long *)(p->thread.sp + 8); |
133 | gdb_regs[GDB_PC] = 0; | 142 | gdb_regs32[GDB_CS] = __KERNEL_CS; |
143 | gdb_regs32[GDB_SS] = __KERNEL_DS; | ||
144 | gdb_regs[GDB_PC] = p->thread.ip; | ||
134 | gdb_regs[GDB_R8] = 0; | 145 | gdb_regs[GDB_R8] = 0; |
135 | gdb_regs[GDB_R9] = 0; | 146 | gdb_regs[GDB_R9] = 0; |
136 | gdb_regs[GDB_R10] = 0; | 147 | gdb_regs[GDB_R10] = 0; |
@@ -153,6 +164,9 @@ void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *p) | |||
153 | */ | 164 | */ |
154 | void gdb_regs_to_pt_regs(unsigned long *gdb_regs, struct pt_regs *regs) | 165 | void gdb_regs_to_pt_regs(unsigned long *gdb_regs, struct pt_regs *regs) |
155 | { | 166 | { |
167 | #ifndef CONFIG_X86_32 | ||
168 | u32 *gdb_regs32 = (u32 *)gdb_regs; | ||
169 | #endif | ||
156 | regs->ax = gdb_regs[GDB_AX]; | 170 | regs->ax = gdb_regs[GDB_AX]; |
157 | regs->bx = gdb_regs[GDB_BX]; | 171 | regs->bx = gdb_regs[GDB_BX]; |
158 | regs->cx = gdb_regs[GDB_CX]; | 172 | regs->cx = gdb_regs[GDB_CX]; |
@@ -160,9 +174,9 @@ void gdb_regs_to_pt_regs(unsigned long *gdb_regs, struct pt_regs *regs) | |||
160 | regs->si = gdb_regs[GDB_SI]; | 174 | regs->si = gdb_regs[GDB_SI]; |
161 | regs->di = gdb_regs[GDB_DI]; | 175 | regs->di = gdb_regs[GDB_DI]; |
162 | regs->bp = gdb_regs[GDB_BP]; | 176 | regs->bp = gdb_regs[GDB_BP]; |
163 | regs->flags = gdb_regs[GDB_PS]; | ||
164 | regs->ip = gdb_regs[GDB_PC]; | 177 | regs->ip = gdb_regs[GDB_PC]; |
165 | #ifdef CONFIG_X86_32 | 178 | #ifdef CONFIG_X86_32 |
179 | regs->flags = gdb_regs[GDB_PS]; | ||
166 | regs->ds = gdb_regs[GDB_DS]; | 180 | regs->ds = gdb_regs[GDB_DS]; |
167 | regs->es = gdb_regs[GDB_ES]; | 181 | regs->es = gdb_regs[GDB_ES]; |
168 | regs->cs = gdb_regs[GDB_CS]; | 182 | regs->cs = gdb_regs[GDB_CS]; |
@@ -175,6 +189,9 @@ void gdb_regs_to_pt_regs(unsigned long *gdb_regs, struct pt_regs *regs) | |||
175 | regs->r13 = gdb_regs[GDB_R13]; | 189 | regs->r13 = gdb_regs[GDB_R13]; |
176 | regs->r14 = gdb_regs[GDB_R14]; | 190 | regs->r14 = gdb_regs[GDB_R14]; |
177 | regs->r15 = gdb_regs[GDB_R15]; | 191 | regs->r15 = gdb_regs[GDB_R15]; |
192 | regs->flags = gdb_regs32[GDB_PS]; | ||
193 | regs->cs = gdb_regs32[GDB_CS]; | ||
194 | regs->ss = gdb_regs32[GDB_SS]; | ||
178 | #endif | 195 | #endif |
179 | } | 196 | } |
180 | 197 | ||
@@ -378,10 +395,8 @@ int kgdb_arch_handle_exception(int e_vector, int signo, int err_code, | |||
378 | if (remcomInBuffer[0] == 's') { | 395 | if (remcomInBuffer[0] == 's') { |
379 | linux_regs->flags |= X86_EFLAGS_TF; | 396 | linux_regs->flags |= X86_EFLAGS_TF; |
380 | kgdb_single_step = 1; | 397 | kgdb_single_step = 1; |
381 | if (kgdb_contthread) { | 398 | atomic_set(&kgdb_cpu_doing_single_step, |
382 | atomic_set(&kgdb_cpu_doing_single_step, | 399 | raw_smp_processor_id()); |
383 | raw_smp_processor_id()); | ||
384 | } | ||
385 | } | 400 | } |
386 | 401 | ||
387 | get_debugreg(dr6, 6); | 402 | get_debugreg(dr6, 6); |
@@ -440,12 +455,7 @@ static int __kgdb_notify(struct die_args *args, unsigned long cmd) | |||
440 | return NOTIFY_DONE; | 455 | return NOTIFY_DONE; |
441 | 456 | ||
442 | case DIE_NMI_IPI: | 457 | case DIE_NMI_IPI: |
443 | if (atomic_read(&kgdb_active) != -1) { | 458 | /* Just ignore, we will handle the roundup on DIE_NMI. */ |
444 | /* KGDB CPU roundup */ | ||
445 | kgdb_nmicallback(raw_smp_processor_id(), regs); | ||
446 | was_in_debug_nmi[raw_smp_processor_id()] = 1; | ||
447 | touch_nmi_watchdog(); | ||
448 | } | ||
449 | return NOTIFY_DONE; | 459 | return NOTIFY_DONE; |
450 | 460 | ||
451 | case DIE_NMIUNKNOWN: | 461 | case DIE_NMIUNKNOWN: |
@@ -466,9 +476,15 @@ static int __kgdb_notify(struct die_args *args, unsigned long cmd) | |||
466 | 476 | ||
467 | case DIE_DEBUG: | 477 | case DIE_DEBUG: |
468 | if (atomic_read(&kgdb_cpu_doing_single_step) == | 478 | if (atomic_read(&kgdb_cpu_doing_single_step) == |
469 | raw_smp_processor_id() && | 479 | raw_smp_processor_id()) { |
470 | user_mode(regs)) | 480 | if (user_mode(regs)) |
471 | return single_step_cont(regs, args); | 481 | return single_step_cont(regs, args); |
482 | break; | ||
483 | } else if (test_thread_flag(TIF_SINGLESTEP)) | ||
484 | /* This means a user thread is single stepping | ||
485 | * a system call which should be ignored | ||
486 | */ | ||
487 | return NOTIFY_DONE; | ||
472 | /* fall through */ | 488 | /* fall through */ |
473 | default: | 489 | default: |
474 | if (user_mode(regs)) | 490 | if (user_mode(regs)) |
diff --git a/arch/x86/kernel/pci-gart_64.c b/arch/x86/kernel/pci-gart_64.c index 49285f8fd4d5..be33a5442d82 100644 --- a/arch/x86/kernel/pci-gart_64.c +++ b/arch/x86/kernel/pci-gart_64.c | |||
@@ -626,7 +626,6 @@ static __init int init_k8_gatt(struct agp_kern_info *info) | |||
626 | struct pci_dev *dev; | 626 | struct pci_dev *dev; |
627 | void *gatt; | 627 | void *gatt; |
628 | int i, error; | 628 | int i, error; |
629 | unsigned long start_pfn, end_pfn; | ||
630 | 629 | ||
631 | printk(KERN_INFO "PCI-DMA: Disabling AGP.\n"); | 630 | printk(KERN_INFO "PCI-DMA: Disabling AGP.\n"); |
632 | aper_size = aper_base = info->aper_size = 0; | 631 | aper_size = aper_base = info->aper_size = 0; |
@@ -672,12 +671,6 @@ static __init int init_k8_gatt(struct agp_kern_info *info) | |||
672 | printk(KERN_INFO "PCI-DMA: aperture base @ %x size %u KB\n", | 671 | printk(KERN_INFO "PCI-DMA: aperture base @ %x size %u KB\n", |
673 | aper_base, aper_size>>10); | 672 | aper_base, aper_size>>10); |
674 | 673 | ||
675 | /* need to map that range */ | ||
676 | end_pfn = (aper_base>>PAGE_SHIFT) + (aper_size>>PAGE_SHIFT); | ||
677 | if (end_pfn > max_low_pfn_mapped) { | ||
678 | start_pfn = (aper_base>>PAGE_SHIFT); | ||
679 | init_memory_mapping(start_pfn<<PAGE_SHIFT, end_pfn<<PAGE_SHIFT); | ||
680 | } | ||
681 | return 0; | 674 | return 0; |
682 | 675 | ||
683 | nommu: | 676 | nommu: |
@@ -727,7 +720,8 @@ void __init gart_iommu_init(void) | |||
727 | { | 720 | { |
728 | struct agp_kern_info info; | 721 | struct agp_kern_info info; |
729 | unsigned long iommu_start; | 722 | unsigned long iommu_start; |
730 | unsigned long aper_size; | 723 | unsigned long aper_base, aper_size; |
724 | unsigned long start_pfn, end_pfn; | ||
731 | unsigned long scratch; | 725 | unsigned long scratch; |
732 | long i; | 726 | long i; |
733 | 727 | ||
@@ -765,8 +759,16 @@ void __init gart_iommu_init(void) | |||
765 | return; | 759 | return; |
766 | } | 760 | } |
767 | 761 | ||
762 | /* need to map that range */ | ||
763 | aper_size = info.aper_size << 20; | ||
764 | aper_base = info.aper_base; | ||
765 | end_pfn = (aper_base>>PAGE_SHIFT) + (aper_size>>PAGE_SHIFT); | ||
766 | if (end_pfn > max_low_pfn_mapped) { | ||
767 | start_pfn = (aper_base>>PAGE_SHIFT); | ||
768 | init_memory_mapping(start_pfn<<PAGE_SHIFT, end_pfn<<PAGE_SHIFT); | ||
769 | } | ||
770 | |||
768 | printk(KERN_INFO "PCI-DMA: using GART IOMMU.\n"); | 771 | printk(KERN_INFO "PCI-DMA: using GART IOMMU.\n"); |
769 | aper_size = info.aper_size * 1024 * 1024; | ||
770 | iommu_size = check_iommu_size(info.aper_base, aper_size); | 772 | iommu_size = check_iommu_size(info.aper_base, aper_size); |
771 | iommu_pages = iommu_size >> PAGE_SHIFT; | 773 | iommu_pages = iommu_size >> PAGE_SHIFT; |
772 | 774 | ||
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index 7fc4d5b0a6a0..876e91890777 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c | |||
@@ -246,6 +246,14 @@ static int __cpuinit check_c1e_idle(const struct cpuinfo_x86 *c) | |||
246 | return 1; | 246 | return 1; |
247 | } | 247 | } |
248 | 248 | ||
249 | static cpumask_t c1e_mask = CPU_MASK_NONE; | ||
250 | static int c1e_detected; | ||
251 | |||
252 | void c1e_remove_cpu(int cpu) | ||
253 | { | ||
254 | cpu_clear(cpu, c1e_mask); | ||
255 | } | ||
256 | |||
249 | /* | 257 | /* |
250 | * C1E aware idle routine. We check for C1E active in the interrupt | 258 | * C1E aware idle routine. We check for C1E active in the interrupt |
251 | * pending message MSR. If we detect C1E, then we handle it the same | 259 | * pending message MSR. If we detect C1E, then we handle it the same |
@@ -253,9 +261,6 @@ static int __cpuinit check_c1e_idle(const struct cpuinfo_x86 *c) | |||
253 | */ | 261 | */ |
254 | static void c1e_idle(void) | 262 | static void c1e_idle(void) |
255 | { | 263 | { |
256 | static cpumask_t c1e_mask = CPU_MASK_NONE; | ||
257 | static int c1e_detected; | ||
258 | |||
259 | if (need_resched()) | 264 | if (need_resched()) |
260 | return; | 265 | return; |
261 | 266 | ||
@@ -265,8 +270,10 @@ static void c1e_idle(void) | |||
265 | rdmsr(MSR_K8_INT_PENDING_MSG, lo, hi); | 270 | rdmsr(MSR_K8_INT_PENDING_MSG, lo, hi); |
266 | if (lo & K8_INTP_C1E_ACTIVE_MASK) { | 271 | if (lo & K8_INTP_C1E_ACTIVE_MASK) { |
267 | c1e_detected = 1; | 272 | c1e_detected = 1; |
268 | mark_tsc_unstable("TSC halt in C1E"); | 273 | if (!boot_cpu_has(X86_FEATURE_CONSTANT_TSC)) |
269 | printk(KERN_INFO "System has C1E enabled\n"); | 274 | mark_tsc_unstable("TSC halt in AMD C1E"); |
275 | printk(KERN_INFO "System has AMD C1E enabled\n"); | ||
276 | set_cpu_cap(&boot_cpu_data, X86_FEATURE_AMDC1E); | ||
270 | } | 277 | } |
271 | } | 278 | } |
272 | 279 | ||
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c index 3b7a1ddcc0bc..31f40b24bf5d 100644 --- a/arch/x86/kernel/process_32.c +++ b/arch/x86/kernel/process_32.c | |||
@@ -55,6 +55,7 @@ | |||
55 | #include <asm/tlbflush.h> | 55 | #include <asm/tlbflush.h> |
56 | #include <asm/cpu.h> | 56 | #include <asm/cpu.h> |
57 | #include <asm/kdebug.h> | 57 | #include <asm/kdebug.h> |
58 | #include <asm/idle.h> | ||
58 | 59 | ||
59 | asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); | 60 | asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); |
60 | 61 | ||
@@ -88,6 +89,7 @@ static void cpu_exit_clear(void) | |||
88 | cpu_clear(cpu, cpu_callin_map); | 89 | cpu_clear(cpu, cpu_callin_map); |
89 | 90 | ||
90 | numa_remove_cpu(cpu); | 91 | numa_remove_cpu(cpu); |
92 | c1e_remove_cpu(cpu); | ||
91 | } | 93 | } |
92 | 94 | ||
93 | /* We don't actually take CPU down, just spin without interrupts. */ | 95 | /* We don't actually take CPU down, just spin without interrupts. */ |
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c index 71553b664e2a..e12e0e4dd256 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c | |||
@@ -93,6 +93,8 @@ DECLARE_PER_CPU(int, cpu_state); | |||
93 | static inline void play_dead(void) | 93 | static inline void play_dead(void) |
94 | { | 94 | { |
95 | idle_task_exit(); | 95 | idle_task_exit(); |
96 | c1e_remove_cpu(raw_smp_processor_id()); | ||
97 | |||
96 | mb(); | 98 | mb(); |
97 | /* Ack it */ | 99 | /* Ack it */ |
98 | __get_cpu_var(cpu_state) = CPU_DEAD; | 100 | __get_cpu_var(cpu_state) = CPU_DEAD; |
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index 362d4e7f2d38..9838f2539dfc 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c | |||
@@ -670,6 +670,10 @@ void __init setup_arch(char **cmdline_p) | |||
670 | 670 | ||
671 | parse_early_param(); | 671 | parse_early_param(); |
672 | 672 | ||
673 | #ifdef CONFIG_X86_64 | ||
674 | check_efer(); | ||
675 | #endif | ||
676 | |||
673 | #if defined(CONFIG_VMI) && defined(CONFIG_X86_32) | 677 | #if defined(CONFIG_VMI) && defined(CONFIG_X86_32) |
674 | /* | 678 | /* |
675 | * Must be before kernel pagetables are setup | 679 | * Must be before kernel pagetables are setup |
@@ -738,7 +742,6 @@ void __init setup_arch(char **cmdline_p) | |||
738 | #else | 742 | #else |
739 | num_physpages = max_pfn; | 743 | num_physpages = max_pfn; |
740 | 744 | ||
741 | check_efer(); | ||
742 | 745 | ||
743 | /* How many end-of-memory variables you have, grandma! */ | 746 | /* How many end-of-memory variables you have, grandma! */ |
744 | /* need this before calling reserve_initrd */ | 747 | /* need this before calling reserve_initrd */ |
diff --git a/arch/x86/kernel/vmi_32.c b/arch/x86/kernel/vmi_32.c index 6ca515d6db54..edfb09f30479 100644 --- a/arch/x86/kernel/vmi_32.c +++ b/arch/x86/kernel/vmi_32.c | |||
@@ -235,7 +235,7 @@ static void vmi_write_ldt_entry(struct desc_struct *dt, int entry, | |||
235 | const void *desc) | 235 | const void *desc) |
236 | { | 236 | { |
237 | u32 *ldt_entry = (u32 *)desc; | 237 | u32 *ldt_entry = (u32 *)desc; |
238 | vmi_ops.write_idt_entry(dt, entry, ldt_entry[0], ldt_entry[1]); | 238 | vmi_ops.write_ldt_entry(dt, entry, ldt_entry[0], ldt_entry[1]); |
239 | } | 239 | } |
240 | 240 | ||
241 | static void vmi_load_sp0(struct tss_struct *tss, | 241 | static void vmi_load_sp0(struct tss_struct *tss, |
diff --git a/arch/x86/kernel/vsmp_64.c b/arch/x86/kernel/vsmp_64.c index 0c029e8959c7..7766d36983fc 100644 --- a/arch/x86/kernel/vsmp_64.c +++ b/arch/x86/kernel/vsmp_64.c | |||
@@ -61,7 +61,7 @@ static void vsmp_irq_enable(void) | |||
61 | native_restore_fl((flags | X86_EFLAGS_IF) & (~X86_EFLAGS_AC)); | 61 | native_restore_fl((flags | X86_EFLAGS_IF) & (~X86_EFLAGS_AC)); |
62 | } | 62 | } |
63 | 63 | ||
64 | static unsigned __init vsmp_patch(u8 type, u16 clobbers, void *ibuf, | 64 | static unsigned __init_or_module vsmp_patch(u8 type, u16 clobbers, void *ibuf, |
65 | unsigned long addr, unsigned len) | 65 | unsigned long addr, unsigned len) |
66 | { | 66 | { |
67 | switch (type) { | 67 | switch (type) { |
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index 0bfe2bd305eb..3da2508eb22a 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c | |||
@@ -711,6 +711,10 @@ static int kvm_age_rmapp(struct kvm *kvm, unsigned long *rmapp) | |||
711 | u64 *spte; | 711 | u64 *spte; |
712 | int young = 0; | 712 | int young = 0; |
713 | 713 | ||
714 | /* always return old for EPT */ | ||
715 | if (!shadow_accessed_mask) | ||
716 | return 0; | ||
717 | |||
714 | spte = rmap_next(kvm, rmapp, NULL); | 718 | spte = rmap_next(kvm, rmapp, NULL); |
715 | while (spte) { | 719 | while (spte) { |
716 | int _young; | 720 | int _young; |
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index e2ee264740c7..8233b86c778c 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c | |||
@@ -62,6 +62,7 @@ static int npt = 1; | |||
62 | module_param(npt, int, S_IRUGO); | 62 | module_param(npt, int, S_IRUGO); |
63 | 63 | ||
64 | static void kvm_reput_irq(struct vcpu_svm *svm); | 64 | static void kvm_reput_irq(struct vcpu_svm *svm); |
65 | static void svm_flush_tlb(struct kvm_vcpu *vcpu); | ||
65 | 66 | ||
66 | static inline struct vcpu_svm *to_svm(struct kvm_vcpu *vcpu) | 67 | static inline struct vcpu_svm *to_svm(struct kvm_vcpu *vcpu) |
67 | { | 68 | { |
@@ -878,6 +879,10 @@ set: | |||
878 | static void svm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4) | 879 | static void svm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4) |
879 | { | 880 | { |
880 | unsigned long host_cr4_mce = read_cr4() & X86_CR4_MCE; | 881 | unsigned long host_cr4_mce = read_cr4() & X86_CR4_MCE; |
882 | unsigned long old_cr4 = to_svm(vcpu)->vmcb->save.cr4; | ||
883 | |||
884 | if (npt_enabled && ((old_cr4 ^ cr4) & X86_CR4_PGE)) | ||
885 | force_new_asid(vcpu); | ||
881 | 886 | ||
882 | vcpu->arch.cr4 = cr4; | 887 | vcpu->arch.cr4 = cr4; |
883 | if (!npt_enabled) | 888 | if (!npt_enabled) |
@@ -1027,6 +1032,13 @@ static int pf_interception(struct vcpu_svm *svm, struct kvm_run *kvm_run) | |||
1027 | KVMTRACE_3D(TDP_FAULT, &svm->vcpu, error_code, | 1032 | KVMTRACE_3D(TDP_FAULT, &svm->vcpu, error_code, |
1028 | (u32)fault_address, (u32)(fault_address >> 32), | 1033 | (u32)fault_address, (u32)(fault_address >> 32), |
1029 | handler); | 1034 | handler); |
1035 | /* | ||
1036 | * FIXME: Tis shouldn't be necessary here, but there is a flush | ||
1037 | * missing in the MMU code. Until we find this bug, flush the | ||
1038 | * complete TLB here on an NPF | ||
1039 | */ | ||
1040 | if (npt_enabled) | ||
1041 | svm_flush_tlb(&svm->vcpu); | ||
1030 | 1042 | ||
1031 | if (event_injection) | 1043 | if (event_injection) |
1032 | kvm_mmu_unprotect_page_virt(&svm->vcpu, fault_address); | 1044 | kvm_mmu_unprotect_page_virt(&svm->vcpu, fault_address); |
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 2a69773e3b26..7041cc52b562 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c | |||
@@ -3301,8 +3301,7 @@ static int __init vmx_init(void) | |||
3301 | kvm_mmu_set_base_ptes(VMX_EPT_READABLE_MASK | | 3301 | kvm_mmu_set_base_ptes(VMX_EPT_READABLE_MASK | |
3302 | VMX_EPT_WRITABLE_MASK | | 3302 | VMX_EPT_WRITABLE_MASK | |
3303 | VMX_EPT_DEFAULT_MT << VMX_EPT_MT_EPTE_SHIFT); | 3303 | VMX_EPT_DEFAULT_MT << VMX_EPT_MT_EPTE_SHIFT); |
3304 | kvm_mmu_set_mask_ptes(0ull, VMX_EPT_FAKE_ACCESSED_MASK, | 3304 | kvm_mmu_set_mask_ptes(0ull, 0ull, 0ull, 0ull, |
3305 | VMX_EPT_FAKE_DIRTY_MASK, 0ull, | ||
3306 | VMX_EPT_EXECUTABLE_MASK); | 3305 | VMX_EPT_EXECUTABLE_MASK); |
3307 | kvm_enable_tdp(); | 3306 | kvm_enable_tdp(); |
3308 | } else | 3307 | } else |
diff --git a/arch/x86/kvm/vmx.h b/arch/x86/kvm/vmx.h index 425a13436b3f..23e8373507ad 100644 --- a/arch/x86/kvm/vmx.h +++ b/arch/x86/kvm/vmx.h | |||
@@ -370,8 +370,6 @@ enum vmcs_field { | |||
370 | #define VMX_EPT_READABLE_MASK 0x1ull | 370 | #define VMX_EPT_READABLE_MASK 0x1ull |
371 | #define VMX_EPT_WRITABLE_MASK 0x2ull | 371 | #define VMX_EPT_WRITABLE_MASK 0x2ull |
372 | #define VMX_EPT_EXECUTABLE_MASK 0x4ull | 372 | #define VMX_EPT_EXECUTABLE_MASK 0x4ull |
373 | #define VMX_EPT_FAKE_ACCESSED_MASK (1ull << 62) | ||
374 | #define VMX_EPT_FAKE_DIRTY_MASK (1ull << 63) | ||
375 | 373 | ||
376 | #define VMX_EPT_IDENTITY_PAGETABLE_ADDR 0xfffbc000ul | 374 | #define VMX_EPT_IDENTITY_PAGETABLE_ADDR 0xfffbc000ul |
377 | 375 | ||
diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c index d37f29376b0c..60ec1d08ff24 100644 --- a/arch/x86/mm/init_32.c +++ b/arch/x86/mm/init_32.c | |||
@@ -458,11 +458,7 @@ static void __init pagetable_init(void) | |||
458 | { | 458 | { |
459 | pgd_t *pgd_base = swapper_pg_dir; | 459 | pgd_t *pgd_base = swapper_pg_dir; |
460 | 460 | ||
461 | paravirt_pagetable_setup_start(pgd_base); | ||
462 | |||
463 | permanent_kmaps_init(pgd_base); | 461 | permanent_kmaps_init(pgd_base); |
464 | |||
465 | paravirt_pagetable_setup_done(pgd_base); | ||
466 | } | 462 | } |
467 | 463 | ||
468 | #ifdef CONFIG_ACPI_SLEEP | 464 | #ifdef CONFIG_ACPI_SLEEP |
diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c index 0227694f7dab..8a5f1614a3d5 100644 --- a/arch/x86/oprofile/nmi_int.c +++ b/arch/x86/oprofile/nmi_int.c | |||
@@ -295,10 +295,12 @@ static void nmi_cpu_shutdown(void *dummy) | |||
295 | 295 | ||
296 | static void nmi_shutdown(void) | 296 | static void nmi_shutdown(void) |
297 | { | 297 | { |
298 | struct op_msrs *msrs = &get_cpu_var(cpu_msrs); | 298 | struct op_msrs *msrs; |
299 | |||
299 | nmi_enabled = 0; | 300 | nmi_enabled = 0; |
300 | on_each_cpu(nmi_cpu_shutdown, NULL, 1); | 301 | on_each_cpu(nmi_cpu_shutdown, NULL, 1); |
301 | unregister_die_notifier(&profile_exceptions_nb); | 302 | unregister_die_notifier(&profile_exceptions_nb); |
303 | msrs = &get_cpu_var(cpu_msrs); | ||
302 | model->shutdown(msrs); | 304 | model->shutdown(msrs); |
303 | free_msrs(); | 305 | free_msrs(); |
304 | put_cpu_var(cpu_msrs); | 306 | put_cpu_var(cpu_msrs); |
diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c index b6acc3a0af46..d67901083888 100644 --- a/arch/x86/xen/setup.c +++ b/arch/x86/xen/setup.c | |||
@@ -42,7 +42,7 @@ char * __init xen_memory_setup(void) | |||
42 | 42 | ||
43 | e820.nr_map = 0; | 43 | e820.nr_map = 0; |
44 | 44 | ||
45 | e820_add_region(0, PFN_PHYS(max_pfn), E820_RAM); | 45 | e820_add_region(0, PFN_PHYS((u64)max_pfn), E820_RAM); |
46 | 46 | ||
47 | /* | 47 | /* |
48 | * Even though this is normal, usable memory under Xen, reserve | 48 | * Even though this is normal, usable memory under Xen, reserve |
diff --git a/block/cmd-filter.c b/block/cmd-filter.c index 228b6447e89f..79c14996ac11 100644 --- a/block/cmd-filter.c +++ b/block/cmd-filter.c | |||
@@ -49,6 +49,7 @@ int blk_verify_command(struct blk_cmd_filter *filter, | |||
49 | } | 49 | } |
50 | EXPORT_SYMBOL(blk_verify_command); | 50 | EXPORT_SYMBOL(blk_verify_command); |
51 | 51 | ||
52 | #if 0 | ||
52 | /* and now, the sysfs stuff */ | 53 | /* and now, the sysfs stuff */ |
53 | static ssize_t rcf_cmds_show(struct blk_cmd_filter *filter, char *page, | 54 | static ssize_t rcf_cmds_show(struct blk_cmd_filter *filter, char *page, |
54 | int rw) | 55 | int rw) |
@@ -233,3 +234,4 @@ void blk_unregister_filter(struct gendisk *disk) | |||
233 | kobject_put(disk->holder_dir->parent); | 234 | kobject_put(disk->holder_dir->parent); |
234 | } | 235 | } |
235 | EXPORT_SYMBOL(blk_unregister_filter); | 236 | EXPORT_SYMBOL(blk_unregister_filter); |
237 | #endif | ||
diff --git a/drivers/accessibility/braille/braille_console.c b/drivers/accessibility/braille/braille_console.c index 0a5f6b2114c5..d672cfe7ca59 100644 --- a/drivers/accessibility/braille/braille_console.c +++ b/drivers/accessibility/braille/braille_console.c | |||
@@ -376,6 +376,8 @@ int braille_register_console(struct console *console, int index, | |||
376 | console->flags |= CON_ENABLED; | 376 | console->flags |= CON_ENABLED; |
377 | console->index = index; | 377 | console->index = index; |
378 | braille_co = console; | 378 | braille_co = console; |
379 | register_keyboard_notifier(&keyboard_notifier_block); | ||
380 | register_vt_notifier(&vt_notifier_block); | ||
379 | return 0; | 381 | return 0; |
380 | } | 382 | } |
381 | 383 | ||
@@ -383,15 +385,8 @@ int braille_unregister_console(struct console *console) | |||
383 | { | 385 | { |
384 | if (braille_co != console) | 386 | if (braille_co != console) |
385 | return -EINVAL; | 387 | return -EINVAL; |
388 | unregister_keyboard_notifier(&keyboard_notifier_block); | ||
389 | unregister_vt_notifier(&vt_notifier_block); | ||
386 | braille_co = NULL; | 390 | braille_co = NULL; |
387 | return 0; | 391 | return 0; |
388 | } | 392 | } |
389 | |||
390 | static int __init braille_init(void) | ||
391 | { | ||
392 | register_keyboard_notifier(&keyboard_notifier_block); | ||
393 | register_vt_notifier(&vt_notifier_block); | ||
394 | return 0; | ||
395 | } | ||
396 | |||
397 | console_initcall(braille_init); | ||
diff --git a/drivers/acpi/glue.c b/drivers/acpi/glue.c index 084109507c9f..8dd3336efd7e 100644 --- a/drivers/acpi/glue.c +++ b/drivers/acpi/glue.c | |||
@@ -165,8 +165,11 @@ static int acpi_bind_one(struct device *dev, acpi_handle handle) | |||
165 | "firmware_node"); | 165 | "firmware_node"); |
166 | ret = sysfs_create_link(&acpi_dev->dev.kobj, &dev->kobj, | 166 | ret = sysfs_create_link(&acpi_dev->dev.kobj, &dev->kobj, |
167 | "physical_node"); | 167 | "physical_node"); |
168 | if (acpi_dev->wakeup.flags.valid) | 168 | if (acpi_dev->wakeup.flags.valid) { |
169 | device_set_wakeup_capable(dev, true); | 169 | device_set_wakeup_capable(dev, true); |
170 | device_set_wakeup_enable(dev, | ||
171 | acpi_dev->wakeup.state.enabled); | ||
172 | } | ||
170 | } | 173 | } |
171 | 174 | ||
172 | return 0; | 175 | return 0; |
diff --git a/drivers/acpi/sleep/proc.c b/drivers/acpi/sleep/proc.c index 4ebbba2b6b19..bf5b04de02d1 100644 --- a/drivers/acpi/sleep/proc.c +++ b/drivers/acpi/sleep/proc.c | |||
@@ -377,6 +377,14 @@ acpi_system_wakeup_device_seq_show(struct seq_file *seq, void *offset) | |||
377 | return 0; | 377 | return 0; |
378 | } | 378 | } |
379 | 379 | ||
380 | static void physical_device_enable_wakeup(struct acpi_device *adev) | ||
381 | { | ||
382 | struct device *dev = acpi_get_physical_device(adev->handle); | ||
383 | |||
384 | if (dev && device_can_wakeup(dev)) | ||
385 | device_set_wakeup_enable(dev, adev->wakeup.state.enabled); | ||
386 | } | ||
387 | |||
380 | static ssize_t | 388 | static ssize_t |
381 | acpi_system_write_wakeup_device(struct file *file, | 389 | acpi_system_write_wakeup_device(struct file *file, |
382 | const char __user * buffer, | 390 | const char __user * buffer, |
@@ -411,6 +419,7 @@ acpi_system_write_wakeup_device(struct file *file, | |||
411 | } | 419 | } |
412 | } | 420 | } |
413 | if (found_dev) { | 421 | if (found_dev) { |
422 | physical_device_enable_wakeup(found_dev); | ||
414 | list_for_each_safe(node, next, &acpi_wakeup_device_list) { | 423 | list_for_each_safe(node, next, &acpi_wakeup_device_list) { |
415 | struct acpi_device *dev = container_of(node, | 424 | struct acpi_device *dev = container_of(node, |
416 | struct | 425 | struct |
@@ -428,6 +437,7 @@ acpi_system_write_wakeup_device(struct file *file, | |||
428 | dev->pnp.bus_id, found_dev->pnp.bus_id); | 437 | dev->pnp.bus_id, found_dev->pnp.bus_id); |
429 | dev->wakeup.state.enabled = | 438 | dev->wakeup.state.enabled = |
430 | found_dev->wakeup.state.enabled; | 439 | found_dev->wakeup.state.enabled; |
440 | physical_device_enable_wakeup(dev); | ||
431 | } | 441 | } |
432 | } | 442 | } |
433 | } | 443 | } |
diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c index b1d08a8f5003..e6b4606e36b6 100644 --- a/drivers/ata/ata_piix.c +++ b/drivers/ata/ata_piix.c | |||
@@ -1499,7 +1499,7 @@ static int __devinit piix_init_one(struct pci_dev *pdev, | |||
1499 | * off. | 1499 | * off. |
1500 | */ | 1500 | */ |
1501 | if (pdev->vendor == PCI_VENDOR_ID_INTEL && pdev->device == 0x2652) { | 1501 | if (pdev->vendor == PCI_VENDOR_ID_INTEL && pdev->device == 0x2652) { |
1502 | int rc = piix_disable_ahci(pdev); | 1502 | rc = piix_disable_ahci(pdev); |
1503 | if (rc) | 1503 | if (rc) |
1504 | return rc; | 1504 | return rc; |
1505 | } | 1505 | } |
diff --git a/drivers/ata/sata_inic162x.c b/drivers/ata/sata_inic162x.c index 3ead02fe379e..5032c32fa505 100644 --- a/drivers/ata/sata_inic162x.c +++ b/drivers/ata/sata_inic162x.c | |||
@@ -96,6 +96,7 @@ enum { | |||
96 | PORT_SCR = 0x20, | 96 | PORT_SCR = 0x20, |
97 | 97 | ||
98 | /* HOST_CTL bits */ | 98 | /* HOST_CTL bits */ |
99 | HCTL_LEDEN = (1 << 3), /* enable LED operation */ | ||
99 | HCTL_IRQOFF = (1 << 8), /* global IRQ off */ | 100 | HCTL_IRQOFF = (1 << 8), /* global IRQ off */ |
100 | HCTL_FTHD0 = (1 << 10), /* fifo threshold 0 */ | 101 | HCTL_FTHD0 = (1 << 10), /* fifo threshold 0 */ |
101 | HCTL_FTHD1 = (1 << 11), /* fifo threshold 1*/ | 102 | HCTL_FTHD1 = (1 << 11), /* fifo threshold 1*/ |
@@ -540,7 +541,7 @@ static unsigned int inic_qc_issue(struct ata_queued_cmd *qc) | |||
540 | void __iomem *port_base = inic_port_base(ap); | 541 | void __iomem *port_base = inic_port_base(ap); |
541 | 542 | ||
542 | /* fire up the ADMA engine */ | 543 | /* fire up the ADMA engine */ |
543 | writew(HCTL_FTHD0, port_base + HOST_CTL); | 544 | writew(HCTL_FTHD0 | HCTL_LEDEN, port_base + HOST_CTL); |
544 | writew(IDMA_CTL_GO, port_base + PORT_IDMA_CTL); | 545 | writew(IDMA_CTL_GO, port_base + PORT_IDMA_CTL); |
545 | writeb(0, port_base + PORT_CPB_PTQFIFO); | 546 | writeb(0, port_base + PORT_CPB_PTQFIFO); |
546 | 547 | ||
diff --git a/drivers/ata/sata_nv.c b/drivers/ata/sata_nv.c index 1e1f3f3757ae..14601dc05e41 100644 --- a/drivers/ata/sata_nv.c +++ b/drivers/ata/sata_nv.c | |||
@@ -309,6 +309,8 @@ static void nv_nf2_freeze(struct ata_port *ap); | |||
309 | static void nv_nf2_thaw(struct ata_port *ap); | 309 | static void nv_nf2_thaw(struct ata_port *ap); |
310 | static void nv_ck804_freeze(struct ata_port *ap); | 310 | static void nv_ck804_freeze(struct ata_port *ap); |
311 | static void nv_ck804_thaw(struct ata_port *ap); | 311 | static void nv_ck804_thaw(struct ata_port *ap); |
312 | static int nv_hardreset(struct ata_link *link, unsigned int *class, | ||
313 | unsigned long deadline); | ||
312 | static int nv_adma_slave_config(struct scsi_device *sdev); | 314 | static int nv_adma_slave_config(struct scsi_device *sdev); |
313 | static int nv_adma_check_atapi_dma(struct ata_queued_cmd *qc); | 315 | static int nv_adma_check_atapi_dma(struct ata_queued_cmd *qc); |
314 | static void nv_adma_qc_prep(struct ata_queued_cmd *qc); | 316 | static void nv_adma_qc_prep(struct ata_queued_cmd *qc); |
@@ -403,28 +405,45 @@ static struct scsi_host_template nv_swncq_sht = { | |||
403 | .slave_configure = nv_swncq_slave_config, | 405 | .slave_configure = nv_swncq_slave_config, |
404 | }; | 406 | }; |
405 | 407 | ||
406 | static struct ata_port_operations nv_generic_ops = { | 408 | /* OSDL bz3352 reports that some nv controllers can't determine device |
409 | * signature reliably and nv_hardreset is implemented to work around | ||
410 | * the problem. This was reported on nf3 and it's unclear whether any | ||
411 | * other controllers are affected. However, the workaround has been | ||
412 | * applied to all variants and there isn't much to gain by trying to | ||
413 | * find out exactly which ones are affected at this point especially | ||
414 | * because NV has moved over to ahci for newer controllers. | ||
415 | */ | ||
416 | static struct ata_port_operations nv_common_ops = { | ||
407 | .inherits = &ata_bmdma_port_ops, | 417 | .inherits = &ata_bmdma_port_ops, |
408 | .hardreset = ATA_OP_NULL, | 418 | .hardreset = nv_hardreset, |
409 | .scr_read = nv_scr_read, | 419 | .scr_read = nv_scr_read, |
410 | .scr_write = nv_scr_write, | 420 | .scr_write = nv_scr_write, |
411 | }; | 421 | }; |
412 | 422 | ||
423 | /* OSDL bz11195 reports that link doesn't come online after hardreset | ||
424 | * on generic nv's and there have been several other similar reports | ||
425 | * on linux-ide. Disable hardreset for generic nv's. | ||
426 | */ | ||
427 | static struct ata_port_operations nv_generic_ops = { | ||
428 | .inherits = &nv_common_ops, | ||
429 | .hardreset = ATA_OP_NULL, | ||
430 | }; | ||
431 | |||
413 | static struct ata_port_operations nv_nf2_ops = { | 432 | static struct ata_port_operations nv_nf2_ops = { |
414 | .inherits = &nv_generic_ops, | 433 | .inherits = &nv_common_ops, |
415 | .freeze = nv_nf2_freeze, | 434 | .freeze = nv_nf2_freeze, |
416 | .thaw = nv_nf2_thaw, | 435 | .thaw = nv_nf2_thaw, |
417 | }; | 436 | }; |
418 | 437 | ||
419 | static struct ata_port_operations nv_ck804_ops = { | 438 | static struct ata_port_operations nv_ck804_ops = { |
420 | .inherits = &nv_generic_ops, | 439 | .inherits = &nv_common_ops, |
421 | .freeze = nv_ck804_freeze, | 440 | .freeze = nv_ck804_freeze, |
422 | .thaw = nv_ck804_thaw, | 441 | .thaw = nv_ck804_thaw, |
423 | .host_stop = nv_ck804_host_stop, | 442 | .host_stop = nv_ck804_host_stop, |
424 | }; | 443 | }; |
425 | 444 | ||
426 | static struct ata_port_operations nv_adma_ops = { | 445 | static struct ata_port_operations nv_adma_ops = { |
427 | .inherits = &nv_generic_ops, | 446 | .inherits = &nv_common_ops, |
428 | 447 | ||
429 | .check_atapi_dma = nv_adma_check_atapi_dma, | 448 | .check_atapi_dma = nv_adma_check_atapi_dma, |
430 | .sff_tf_read = nv_adma_tf_read, | 449 | .sff_tf_read = nv_adma_tf_read, |
@@ -448,7 +467,7 @@ static struct ata_port_operations nv_adma_ops = { | |||
448 | }; | 467 | }; |
449 | 468 | ||
450 | static struct ata_port_operations nv_swncq_ops = { | 469 | static struct ata_port_operations nv_swncq_ops = { |
451 | .inherits = &nv_generic_ops, | 470 | .inherits = &nv_common_ops, |
452 | 471 | ||
453 | .qc_defer = ata_std_qc_defer, | 472 | .qc_defer = ata_std_qc_defer, |
454 | .qc_prep = nv_swncq_qc_prep, | 473 | .qc_prep = nv_swncq_qc_prep, |
@@ -1586,6 +1605,21 @@ static void nv_mcp55_thaw(struct ata_port *ap) | |||
1586 | ata_sff_thaw(ap); | 1605 | ata_sff_thaw(ap); |
1587 | } | 1606 | } |
1588 | 1607 | ||
1608 | static int nv_hardreset(struct ata_link *link, unsigned int *class, | ||
1609 | unsigned long deadline) | ||
1610 | { | ||
1611 | int rc; | ||
1612 | |||
1613 | /* SATA hardreset fails to retrieve proper device signature on | ||
1614 | * some controllers. Request follow up SRST. For more info, | ||
1615 | * see http://bugzilla.kernel.org/show_bug.cgi?id=3352 | ||
1616 | */ | ||
1617 | rc = sata_sff_hardreset(link, class, deadline); | ||
1618 | if (rc) | ||
1619 | return rc; | ||
1620 | return -EAGAIN; | ||
1621 | } | ||
1622 | |||
1589 | static void nv_adma_error_handler(struct ata_port *ap) | 1623 | static void nv_adma_error_handler(struct ata_port *ap) |
1590 | { | 1624 | { |
1591 | struct nv_adma_port_priv *pp = ap->private_data; | 1625 | struct nv_adma_port_priv *pp = ap->private_data; |
diff --git a/drivers/bluetooth/bpa10x.c b/drivers/bluetooth/bpa10x.c index 1e55a658e6ce..32f3a8ed8d3d 100644 --- a/drivers/bluetooth/bpa10x.c +++ b/drivers/bluetooth/bpa10x.c | |||
@@ -256,7 +256,6 @@ static inline int bpa10x_submit_intr_urb(struct hci_dev *hdev) | |||
256 | BT_ERR("%s urb %p submission failed (%d)", | 256 | BT_ERR("%s urb %p submission failed (%d)", |
257 | hdev->name, urb, -err); | 257 | hdev->name, urb, -err); |
258 | usb_unanchor_urb(urb); | 258 | usb_unanchor_urb(urb); |
259 | kfree(buf); | ||
260 | } | 259 | } |
261 | 260 | ||
262 | usb_free_urb(urb); | 261 | usb_free_urb(urb); |
@@ -298,7 +297,6 @@ static inline int bpa10x_submit_bulk_urb(struct hci_dev *hdev) | |||
298 | BT_ERR("%s urb %p submission failed (%d)", | 297 | BT_ERR("%s urb %p submission failed (%d)", |
299 | hdev->name, urb, -err); | 298 | hdev->name, urb, -err); |
300 | usb_unanchor_urb(urb); | 299 | usb_unanchor_urb(urb); |
301 | kfree(buf); | ||
302 | } | 300 | } |
303 | 301 | ||
304 | usb_free_urb(urb); | 302 | usb_free_urb(urb); |
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index 6a010681ecf3..af472e052732 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c | |||
@@ -102,14 +102,19 @@ static struct usb_device_id blacklist_table[] = { | |||
102 | { USB_DEVICE(0x0a5c, 0x2101), .driver_info = BTUSB_RESET | BTUSB_WRONG_SCO_MTU }, | 102 | { USB_DEVICE(0x0a5c, 0x2101), .driver_info = BTUSB_RESET | BTUSB_WRONG_SCO_MTU }, |
103 | 103 | ||
104 | /* Broadcom BCM2046 */ | 104 | /* Broadcom BCM2046 */ |
105 | { USB_DEVICE(0x0a5c, 0x2146), .driver_info = BTUSB_RESET }, | ||
105 | { USB_DEVICE(0x0a5c, 0x2151), .driver_info = BTUSB_RESET }, | 106 | { USB_DEVICE(0x0a5c, 0x2151), .driver_info = BTUSB_RESET }, |
106 | 107 | ||
108 | /* Apple MacBook Pro with Broadcom chip */ | ||
109 | { USB_DEVICE(0x05ac, 0x820f), .driver_info = BTUSB_RESET }, | ||
110 | |||
107 | /* IBM/Lenovo ThinkPad with Broadcom chip */ | 111 | /* IBM/Lenovo ThinkPad with Broadcom chip */ |
108 | { USB_DEVICE(0x0a5c, 0x201e), .driver_info = BTUSB_RESET | BTUSB_WRONG_SCO_MTU }, | 112 | { USB_DEVICE(0x0a5c, 0x201e), .driver_info = BTUSB_RESET | BTUSB_WRONG_SCO_MTU }, |
109 | { USB_DEVICE(0x0a5c, 0x2110), .driver_info = BTUSB_RESET | BTUSB_WRONG_SCO_MTU }, | 113 | { USB_DEVICE(0x0a5c, 0x2110), .driver_info = BTUSB_RESET | BTUSB_WRONG_SCO_MTU }, |
110 | 114 | ||
111 | /* Targus ACB10US */ | 115 | /* Targus ACB10US */ |
112 | { USB_DEVICE(0x0a5c, 0x2100), .driver_info = BTUSB_RESET }, | 116 | { USB_DEVICE(0x0a5c, 0x2100), .driver_info = BTUSB_RESET }, |
117 | { USB_DEVICE(0x0a5c, 0x2154), .driver_info = BTUSB_RESET }, | ||
113 | 118 | ||
114 | /* ANYCOM Bluetooth USB-200 and USB-250 */ | 119 | /* ANYCOM Bluetooth USB-200 and USB-250 */ |
115 | { USB_DEVICE(0x0a5c, 0x2111), .driver_info = BTUSB_RESET }, | 120 | { USB_DEVICE(0x0a5c, 0x2111), .driver_info = BTUSB_RESET }, |
@@ -147,6 +152,9 @@ static struct usb_device_id blacklist_table[] = { | |||
147 | { USB_DEVICE(0x050d, 0x0012), .driver_info = BTUSB_RESET | BTUSB_WRONG_SCO_MTU }, | 152 | { USB_DEVICE(0x050d, 0x0012), .driver_info = BTUSB_RESET | BTUSB_WRONG_SCO_MTU }, |
148 | { USB_DEVICE(0x050d, 0x0013), .driver_info = BTUSB_RESET | BTUSB_WRONG_SCO_MTU }, | 153 | { USB_DEVICE(0x050d, 0x0013), .driver_info = BTUSB_RESET | BTUSB_WRONG_SCO_MTU }, |
149 | 154 | ||
155 | /* Belkin F8T016 device */ | ||
156 | { USB_DEVICE(0x050d, 0x016a), .driver_info = BTUSB_RESET }, | ||
157 | |||
150 | /* Digianswer devices */ | 158 | /* Digianswer devices */ |
151 | { USB_DEVICE(0x08fd, 0x0001), .driver_info = BTUSB_DIGIANSWER }, | 159 | { USB_DEVICE(0x08fd, 0x0001), .driver_info = BTUSB_DIGIANSWER }, |
152 | { USB_DEVICE(0x08fd, 0x0002), .driver_info = BTUSB_IGNORE }, | 160 | { USB_DEVICE(0x08fd, 0x0002), .driver_info = BTUSB_IGNORE }, |
@@ -169,6 +177,7 @@ static struct usb_device_id blacklist_table[] = { | |||
169 | struct btusb_data { | 177 | struct btusb_data { |
170 | struct hci_dev *hdev; | 178 | struct hci_dev *hdev; |
171 | struct usb_device *udev; | 179 | struct usb_device *udev; |
180 | struct usb_interface *intf; | ||
172 | struct usb_interface *isoc; | 181 | struct usb_interface *isoc; |
173 | 182 | ||
174 | spinlock_t lock; | 183 | spinlock_t lock; |
@@ -267,7 +276,6 @@ static int btusb_submit_intr_urb(struct hci_dev *hdev) | |||
267 | BT_ERR("%s urb %p submission failed (%d)", | 276 | BT_ERR("%s urb %p submission failed (%d)", |
268 | hdev->name, urb, -err); | 277 | hdev->name, urb, -err); |
269 | usb_unanchor_urb(urb); | 278 | usb_unanchor_urb(urb); |
270 | kfree(buf); | ||
271 | } | 279 | } |
272 | 280 | ||
273 | usb_free_urb(urb); | 281 | usb_free_urb(urb); |
@@ -350,7 +358,6 @@ static int btusb_submit_bulk_urb(struct hci_dev *hdev) | |||
350 | BT_ERR("%s urb %p submission failed (%d)", | 358 | BT_ERR("%s urb %p submission failed (%d)", |
351 | hdev->name, urb, -err); | 359 | hdev->name, urb, -err); |
352 | usb_unanchor_urb(urb); | 360 | usb_unanchor_urb(urb); |
353 | kfree(buf); | ||
354 | } | 361 | } |
355 | 362 | ||
356 | usb_free_urb(urb); | 363 | usb_free_urb(urb); |
@@ -471,7 +478,6 @@ static int btusb_submit_isoc_urb(struct hci_dev *hdev) | |||
471 | BT_ERR("%s urb %p submission failed (%d)", | 478 | BT_ERR("%s urb %p submission failed (%d)", |
472 | hdev->name, urb, -err); | 479 | hdev->name, urb, -err); |
473 | usb_unanchor_urb(urb); | 480 | usb_unanchor_urb(urb); |
474 | kfree(buf); | ||
475 | } | 481 | } |
476 | 482 | ||
477 | usb_free_urb(urb); | 483 | usb_free_urb(urb); |
@@ -516,7 +522,7 @@ static int btusb_open(struct hci_dev *hdev) | |||
516 | 522 | ||
517 | err = btusb_submit_intr_urb(hdev); | 523 | err = btusb_submit_intr_urb(hdev); |
518 | if (err < 0) { | 524 | if (err < 0) { |
519 | clear_bit(BTUSB_INTR_RUNNING, &hdev->flags); | 525 | clear_bit(BTUSB_INTR_RUNNING, &data->flags); |
520 | clear_bit(HCI_RUNNING, &hdev->flags); | 526 | clear_bit(HCI_RUNNING, &hdev->flags); |
521 | } | 527 | } |
522 | 528 | ||
@@ -532,8 +538,10 @@ static int btusb_close(struct hci_dev *hdev) | |||
532 | if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags)) | 538 | if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags)) |
533 | return 0; | 539 | return 0; |
534 | 540 | ||
541 | cancel_work_sync(&data->work); | ||
542 | |||
535 | clear_bit(BTUSB_ISOC_RUNNING, &data->flags); | 543 | clear_bit(BTUSB_ISOC_RUNNING, &data->flags); |
536 | usb_kill_anchored_urbs(&data->intr_anchor); | 544 | usb_kill_anchored_urbs(&data->isoc_anchor); |
537 | 545 | ||
538 | clear_bit(BTUSB_BULK_RUNNING, &data->flags); | 546 | clear_bit(BTUSB_BULK_RUNNING, &data->flags); |
539 | usb_kill_anchored_urbs(&data->bulk_anchor); | 547 | usb_kill_anchored_urbs(&data->bulk_anchor); |
@@ -821,6 +829,7 @@ static int btusb_probe(struct usb_interface *intf, | |||
821 | } | 829 | } |
822 | 830 | ||
823 | data->udev = interface_to_usbdev(intf); | 831 | data->udev = interface_to_usbdev(intf); |
832 | data->intf = intf; | ||
824 | 833 | ||
825 | spin_lock_init(&data->lock); | 834 | spin_lock_init(&data->lock); |
826 | 835 | ||
@@ -889,7 +898,7 @@ static int btusb_probe(struct usb_interface *intf, | |||
889 | 898 | ||
890 | if (data->isoc) { | 899 | if (data->isoc) { |
891 | err = usb_driver_claim_interface(&btusb_driver, | 900 | err = usb_driver_claim_interface(&btusb_driver, |
892 | data->isoc, NULL); | 901 | data->isoc, data); |
893 | if (err < 0) { | 902 | if (err < 0) { |
894 | hci_free_dev(hdev); | 903 | hci_free_dev(hdev); |
895 | kfree(data); | 904 | kfree(data); |
@@ -921,13 +930,22 @@ static void btusb_disconnect(struct usb_interface *intf) | |||
921 | 930 | ||
922 | hdev = data->hdev; | 931 | hdev = data->hdev; |
923 | 932 | ||
924 | if (data->isoc) | 933 | __hci_dev_hold(hdev); |
925 | usb_driver_release_interface(&btusb_driver, data->isoc); | ||
926 | 934 | ||
927 | usb_set_intfdata(intf, NULL); | 935 | usb_set_intfdata(data->intf, NULL); |
936 | |||
937 | if (data->isoc) | ||
938 | usb_set_intfdata(data->isoc, NULL); | ||
928 | 939 | ||
929 | hci_unregister_dev(hdev); | 940 | hci_unregister_dev(hdev); |
930 | 941 | ||
942 | if (intf == data->isoc) | ||
943 | usb_driver_release_interface(&btusb_driver, data->intf); | ||
944 | else if (data->isoc) | ||
945 | usb_driver_release_interface(&btusb_driver, data->isoc); | ||
946 | |||
947 | __hci_dev_put(hdev); | ||
948 | |||
931 | hci_free_dev(hdev); | 949 | hci_free_dev(hdev); |
932 | } | 950 | } |
933 | 951 | ||
diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c index daeb8f766971..e4dce8709541 100644 --- a/drivers/char/tty_io.c +++ b/drivers/char/tty_io.c | |||
@@ -695,13 +695,23 @@ struct tty_driver *tty_find_polling_driver(char *name, int *line) | |||
695 | { | 695 | { |
696 | struct tty_driver *p, *res = NULL; | 696 | struct tty_driver *p, *res = NULL; |
697 | int tty_line = 0; | 697 | int tty_line = 0; |
698 | int len; | ||
698 | char *str; | 699 | char *str; |
699 | 700 | ||
701 | for (str = name; *str; str++) | ||
702 | if ((*str >= '0' && *str <= '9') || *str == ',') | ||
703 | break; | ||
704 | if (!*str) | ||
705 | return NULL; | ||
706 | |||
707 | len = str - name; | ||
708 | tty_line = simple_strtoul(str, &str, 10); | ||
709 | |||
700 | mutex_lock(&tty_mutex); | 710 | mutex_lock(&tty_mutex); |
701 | /* Search through the tty devices to look for a match */ | 711 | /* Search through the tty devices to look for a match */ |
702 | list_for_each_entry(p, &tty_drivers, tty_drivers) { | 712 | list_for_each_entry(p, &tty_drivers, tty_drivers) { |
703 | str = name + strlen(p->name); | 713 | if (strncmp(name, p->name, len) != 0) |
704 | tty_line = simple_strtoul(str, &str, 10); | 714 | continue; |
705 | if (*str == ',') | 715 | if (*str == ',') |
706 | str++; | 716 | str++; |
707 | if (*str == '\0') | 717 | if (*str == '\0') |
diff --git a/drivers/clocksource/acpi_pm.c b/drivers/clocksource/acpi_pm.c index 4eee533f3f4a..71d2ac4e3f46 100644 --- a/drivers/clocksource/acpi_pm.c +++ b/drivers/clocksource/acpi_pm.c | |||
@@ -178,11 +178,13 @@ static int verify_pmtmr_rate(void) | |||
178 | 178 | ||
179 | /* Number of monotonicity checks to perform during initialization */ | 179 | /* Number of monotonicity checks to perform during initialization */ |
180 | #define ACPI_PM_MONOTONICITY_CHECKS 10 | 180 | #define ACPI_PM_MONOTONICITY_CHECKS 10 |
181 | /* Number of reads we try to get two different values */ | ||
182 | #define ACPI_PM_READ_CHECKS 10000 | ||
181 | 183 | ||
182 | static int __init init_acpi_pm_clocksource(void) | 184 | static int __init init_acpi_pm_clocksource(void) |
183 | { | 185 | { |
184 | cycle_t value1, value2; | 186 | cycle_t value1, value2; |
185 | unsigned int i, j, good = 0; | 187 | unsigned int i, j = 0; |
186 | 188 | ||
187 | if (!pmtmr_ioport) | 189 | if (!pmtmr_ioport) |
188 | return -ENODEV; | 190 | return -ENODEV; |
@@ -192,29 +194,26 @@ static int __init init_acpi_pm_clocksource(void) | |||
192 | 194 | ||
193 | /* "verify" this timing source: */ | 195 | /* "verify" this timing source: */ |
194 | for (j = 0; j < ACPI_PM_MONOTONICITY_CHECKS; j++) { | 196 | for (j = 0; j < ACPI_PM_MONOTONICITY_CHECKS; j++) { |
197 | udelay(100 * j); | ||
195 | value1 = clocksource_acpi_pm.read(); | 198 | value1 = clocksource_acpi_pm.read(); |
196 | for (i = 0; i < 10000; i++) { | 199 | for (i = 0; i < ACPI_PM_READ_CHECKS; i++) { |
197 | value2 = clocksource_acpi_pm.read(); | 200 | value2 = clocksource_acpi_pm.read(); |
198 | if (value2 == value1) | 201 | if (value2 == value1) |
199 | continue; | 202 | continue; |
200 | if (value2 > value1) | 203 | if (value2 > value1) |
201 | good++; | ||
202 | break; | 204 | break; |
203 | if ((value2 < value1) && ((value2) < 0xFFF)) | 205 | if ((value2 < value1) && ((value2) < 0xFFF)) |
204 | good++; | ||
205 | break; | 206 | break; |
206 | printk(KERN_INFO "PM-Timer had inconsistent results:" | 207 | printk(KERN_INFO "PM-Timer had inconsistent results:" |
207 | " 0x%#llx, 0x%#llx - aborting.\n", | 208 | " 0x%#llx, 0x%#llx - aborting.\n", |
208 | value1, value2); | 209 | value1, value2); |
209 | return -EINVAL; | 210 | return -EINVAL; |
210 | } | 211 | } |
211 | udelay(300 * i); | 212 | if (i == ACPI_PM_READ_CHECKS) { |
212 | } | 213 | printk(KERN_INFO "PM-Timer failed consistency check " |
213 | 214 | " (0x%#llx) - aborting.\n", value1); | |
214 | if (good != ACPI_PM_MONOTONICITY_CHECKS) { | 215 | return -ENODEV; |
215 | printk(KERN_INFO "PM-Timer failed consistency check " | 216 | } |
216 | " (0x%#llx) - aborting.\n", value1); | ||
217 | return -ENODEV; | ||
218 | } | 217 | } |
219 | 218 | ||
220 | if (verify_pmtmr_rate() != 0) | 219 | if (verify_pmtmr_rate() != 0) |
diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c index ee827a7f7c6a..b6ad3ac5916e 100644 --- a/drivers/crypto/talitos.c +++ b/drivers/crypto/talitos.c | |||
@@ -1157,6 +1157,8 @@ static int aead_authenc_givencrypt( | |||
1157 | edesc->desc.hdr = ctx->desc_hdr_template | DESC_HDR_MODE0_ENCRYPT; | 1157 | edesc->desc.hdr = ctx->desc_hdr_template | DESC_HDR_MODE0_ENCRYPT; |
1158 | 1158 | ||
1159 | memcpy(req->giv, ctx->iv, crypto_aead_ivsize(authenc)); | 1159 | memcpy(req->giv, ctx->iv, crypto_aead_ivsize(authenc)); |
1160 | /* avoid consecutive packets going out with same IV */ | ||
1161 | *(__be64 *)req->giv ^= cpu_to_be64(req->seq); | ||
1160 | 1162 | ||
1161 | return ipsec_esp(edesc, areq, req->giv, req->seq, | 1163 | return ipsec_esp(edesc, areq, req->giv, req->seq, |
1162 | ipsec_esp_encrypt_done); | 1164 | ipsec_esp_encrypt_done); |
@@ -1449,6 +1451,8 @@ static int talitos_probe(struct of_device *ofdev, | |||
1449 | 1451 | ||
1450 | priv->ofdev = ofdev; | 1452 | priv->ofdev = ofdev; |
1451 | 1453 | ||
1454 | INIT_LIST_HEAD(&priv->alg_list); | ||
1455 | |||
1452 | tasklet_init(&priv->done_task, talitos_done, (unsigned long)dev); | 1456 | tasklet_init(&priv->done_task, talitos_done, (unsigned long)dev); |
1453 | tasklet_init(&priv->error_task, talitos_error, (unsigned long)dev); | 1457 | tasklet_init(&priv->error_task, talitos_error, (unsigned long)dev); |
1454 | 1458 | ||
@@ -1575,8 +1579,6 @@ static int talitos_probe(struct of_device *ofdev, | |||
1575 | } | 1579 | } |
1576 | 1580 | ||
1577 | /* register crypto algorithms the device supports */ | 1581 | /* register crypto algorithms the device supports */ |
1578 | INIT_LIST_HEAD(&priv->alg_list); | ||
1579 | |||
1580 | for (i = 0; i < ARRAY_SIZE(driver_algs); i++) { | 1582 | for (i = 0; i < ARRAY_SIZE(driver_algs); i++) { |
1581 | if (hw_supports(dev, driver_algs[i].desc_hdr_template)) { | 1583 | if (hw_supports(dev, driver_algs[i].desc_hdr_template)) { |
1582 | struct talitos_crypto_alg *t_alg; | 1584 | struct talitos_crypto_alg *t_alg; |
diff --git a/drivers/dma/dw_dmac.c b/drivers/dma/dw_dmac.c index 94df91771243..0778d99aea7c 100644 --- a/drivers/dma/dw_dmac.c +++ b/drivers/dma/dw_dmac.c | |||
@@ -364,7 +364,7 @@ static void dw_dma_tasklet(unsigned long data) | |||
364 | int i; | 364 | int i; |
365 | 365 | ||
366 | status_block = dma_readl(dw, RAW.BLOCK); | 366 | status_block = dma_readl(dw, RAW.BLOCK); |
367 | status_xfer = dma_readl(dw, RAW.BLOCK); | 367 | status_xfer = dma_readl(dw, RAW.XFER); |
368 | status_err = dma_readl(dw, RAW.ERROR); | 368 | status_err = dma_readl(dw, RAW.ERROR); |
369 | 369 | ||
370 | dev_vdbg(dw->dma.dev, "tasklet: status_block=%x status_err=%x\n", | 370 | dev_vdbg(dw->dma.dev, "tasklet: status_block=%x status_err=%x\n", |
diff --git a/drivers/hwmon/abituguru3.c b/drivers/hwmon/abituguru3.c index d568c65c1370..d9e7a49d6cbf 100644 --- a/drivers/hwmon/abituguru3.c +++ b/drivers/hwmon/abituguru3.c | |||
@@ -279,7 +279,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = { | |||
279 | { "OTES1 Fan", 36, 2, 60, 1, 0 }, | 279 | { "OTES1 Fan", 36, 2, 60, 1, 0 }, |
280 | { NULL, 0, 0, 0, 0, 0 } } | 280 | { NULL, 0, 0, 0, 0, 0 } } |
281 | }, | 281 | }, |
282 | { 0x0011, NULL /* Abit AT8 32X, need DMI string */, { | 282 | { 0x0011, "AT8 32X(ATI RD580-ULI M1575)", { |
283 | { "CPU Core", 0, 0, 10, 1, 0 }, | 283 | { "CPU Core", 0, 0, 10, 1, 0 }, |
284 | { "DDR", 1, 0, 20, 1, 0 }, | 284 | { "DDR", 1, 0, 20, 1, 0 }, |
285 | { "DDR VTT", 2, 0, 10, 1, 0 }, | 285 | { "DDR VTT", 2, 0, 10, 1, 0 }, |
@@ -303,6 +303,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = { | |||
303 | { "SYS Fan", 34, 2, 60, 1, 0 }, | 303 | { "SYS Fan", 34, 2, 60, 1, 0 }, |
304 | { "AUX1 Fan", 35, 2, 60, 1, 0 }, | 304 | { "AUX1 Fan", 35, 2, 60, 1, 0 }, |
305 | { "AUX2 Fan", 36, 2, 60, 1, 0 }, | 305 | { "AUX2 Fan", 36, 2, 60, 1, 0 }, |
306 | { "AUX3 Fan", 37, 2, 60, 1, 0 }, | ||
306 | { NULL, 0, 0, 0, 0, 0 } } | 307 | { NULL, 0, 0, 0, 0, 0 } } |
307 | }, | 308 | }, |
308 | { 0x0012, NULL /* Abit AN8 32X, need DMI string */, { | 309 | { 0x0012, NULL /* Abit AN8 32X, need DMI string */, { |
diff --git a/drivers/hwmon/ad7414.c b/drivers/hwmon/ad7414.c index ce8d94fbfd7e..bfda8c80ef24 100644 --- a/drivers/hwmon/ad7414.c +++ b/drivers/hwmon/ad7414.c | |||
@@ -69,7 +69,7 @@ static inline int ad7414_write(struct i2c_client *client, u8 reg, u8 value) | |||
69 | return i2c_smbus_write_byte_data(client, reg, value); | 69 | return i2c_smbus_write_byte_data(client, reg, value); |
70 | } | 70 | } |
71 | 71 | ||
72 | struct ad7414_data *ad7414_update_device(struct device *dev) | 72 | static struct ad7414_data *ad7414_update_device(struct device *dev) |
73 | { | 73 | { |
74 | struct i2c_client *client = to_i2c_client(dev); | 74 | struct i2c_client *client = to_i2c_client(dev); |
75 | struct ad7414_data *data = i2c_get_clientdata(client); | 75 | struct ad7414_data *data = i2c_get_clientdata(client); |
diff --git a/drivers/hwmon/atxp1.c b/drivers/hwmon/atxp1.c index d191118ba0cb..d6b490d3e36f 100644 --- a/drivers/hwmon/atxp1.c +++ b/drivers/hwmon/atxp1.c | |||
@@ -31,7 +31,7 @@ | |||
31 | 31 | ||
32 | MODULE_LICENSE("GPL"); | 32 | MODULE_LICENSE("GPL"); |
33 | MODULE_DESCRIPTION("System voltages control via Attansic ATXP1"); | 33 | MODULE_DESCRIPTION("System voltages control via Attansic ATXP1"); |
34 | MODULE_VERSION("0.6.2"); | 34 | MODULE_VERSION("0.6.3"); |
35 | MODULE_AUTHOR("Sebastian Witt <se.witt@gmx.net>"); | 35 | MODULE_AUTHOR("Sebastian Witt <se.witt@gmx.net>"); |
36 | 36 | ||
37 | #define ATXP1_VID 0x00 | 37 | #define ATXP1_VID 0x00 |
@@ -289,16 +289,16 @@ static int atxp1_detect(struct i2c_client *new_client, int kind, | |||
289 | if (!((i2c_smbus_read_byte_data(new_client, 0x3e) == 0) && | 289 | if (!((i2c_smbus_read_byte_data(new_client, 0x3e) == 0) && |
290 | (i2c_smbus_read_byte_data(new_client, 0x3f) == 0) && | 290 | (i2c_smbus_read_byte_data(new_client, 0x3f) == 0) && |
291 | (i2c_smbus_read_byte_data(new_client, 0xfe) == 0) && | 291 | (i2c_smbus_read_byte_data(new_client, 0xfe) == 0) && |
292 | (i2c_smbus_read_byte_data(new_client, 0xff) == 0) )) { | 292 | (i2c_smbus_read_byte_data(new_client, 0xff) == 0))) |
293 | return -ENODEV; | ||
293 | 294 | ||
294 | /* No vendor ID, now checking if registers 0x10,0x11 (non-existent) | 295 | /* No vendor ID, now checking if registers 0x10,0x11 (non-existent) |
295 | * showing the same as register 0x00 */ | 296 | * showing the same as register 0x00 */ |
296 | temp = i2c_smbus_read_byte_data(new_client, 0x00); | 297 | temp = i2c_smbus_read_byte_data(new_client, 0x00); |
297 | 298 | ||
298 | if (!((i2c_smbus_read_byte_data(new_client, 0x10) == temp) && | 299 | if (!((i2c_smbus_read_byte_data(new_client, 0x10) == temp) && |
299 | (i2c_smbus_read_byte_data(new_client, 0x11) == temp) )) | 300 | (i2c_smbus_read_byte_data(new_client, 0x11) == temp))) |
300 | return -ENODEV; | 301 | return -ENODEV; |
301 | } | ||
302 | 302 | ||
303 | /* Get VRM */ | 303 | /* Get VRM */ |
304 | temp = vid_which_vrm(); | 304 | temp = vid_which_vrm(); |
diff --git a/drivers/hwmon/it87.c b/drivers/hwmon/it87.c index 30cdb0956779..d793cc011990 100644 --- a/drivers/hwmon/it87.c +++ b/drivers/hwmon/it87.c | |||
@@ -46,6 +46,8 @@ | |||
46 | #include <linux/err.h> | 46 | #include <linux/err.h> |
47 | #include <linux/mutex.h> | 47 | #include <linux/mutex.h> |
48 | #include <linux/sysfs.h> | 48 | #include <linux/sysfs.h> |
49 | #include <linux/string.h> | ||
50 | #include <linux/dmi.h> | ||
49 | #include <asm/io.h> | 51 | #include <asm/io.h> |
50 | 52 | ||
51 | #define DRVNAME "it87" | 53 | #define DRVNAME "it87" |
@@ -236,6 +238,8 @@ struct it87_sio_data { | |||
236 | /* Values read from Super-I/O config space */ | 238 | /* Values read from Super-I/O config space */ |
237 | u8 revision; | 239 | u8 revision; |
238 | u8 vid_value; | 240 | u8 vid_value; |
241 | /* Values set based on DMI strings */ | ||
242 | u8 skip_pwm; | ||
239 | }; | 243 | }; |
240 | 244 | ||
241 | /* For each registered chip, we need to keep some data in memory. | 245 | /* For each registered chip, we need to keep some data in memory. |
@@ -273,10 +277,10 @@ struct it87_data { | |||
273 | static inline int has_16bit_fans(const struct it87_data *data) | 277 | static inline int has_16bit_fans(const struct it87_data *data) |
274 | { | 278 | { |
275 | /* IT8705F Datasheet 0.4.1, 3h == Version G. | 279 | /* IT8705F Datasheet 0.4.1, 3h == Version G. |
276 | IT8712F Datasheet 0.9.1, section 8.3.5 indicates 7h == Version I. | 280 | IT8712F Datasheet 0.9.1, section 8.3.5 indicates 8h == Version J. |
277 | These are the first revisions with 16bit tachometer support. */ | 281 | These are the first revisions with 16bit tachometer support. */ |
278 | return (data->type == it87 && data->revision >= 0x03) | 282 | return (data->type == it87 && data->revision >= 0x03) |
279 | || (data->type == it8712 && data->revision >= 0x07) | 283 | || (data->type == it8712 && data->revision >= 0x08) |
280 | || data->type == it8716 | 284 | || data->type == it8716 |
281 | || data->type == it8718; | 285 | || data->type == it8718; |
282 | } | 286 | } |
@@ -964,6 +968,7 @@ static int __init it87_find(unsigned short *address, | |||
964 | { | 968 | { |
965 | int err = -ENODEV; | 969 | int err = -ENODEV; |
966 | u16 chip_type; | 970 | u16 chip_type; |
971 | const char *board_vendor, *board_name; | ||
967 | 972 | ||
968 | superio_enter(); | 973 | superio_enter(); |
969 | chip_type = force_id ? force_id : superio_inw(DEVID); | 974 | chip_type = force_id ? force_id : superio_inw(DEVID); |
@@ -1022,6 +1027,24 @@ static int __init it87_find(unsigned short *address, | |||
1022 | pr_info("it87: in7 is VCCH (+5V Stand-By)\n"); | 1027 | pr_info("it87: in7 is VCCH (+5V Stand-By)\n"); |
1023 | } | 1028 | } |
1024 | 1029 | ||
1030 | /* Disable specific features based on DMI strings */ | ||
1031 | board_vendor = dmi_get_system_info(DMI_BOARD_VENDOR); | ||
1032 | board_name = dmi_get_system_info(DMI_BOARD_NAME); | ||
1033 | if (board_vendor && board_name) { | ||
1034 | if (strcmp(board_vendor, "nVIDIA") == 0 | ||
1035 | && strcmp(board_name, "FN68PT") == 0) { | ||
1036 | /* On the Shuttle SN68PT, FAN_CTL2 is apparently not | ||
1037 | connected to a fan, but to something else. One user | ||
1038 | has reported instant system power-off when changing | ||
1039 | the PWM2 duty cycle, so we disable it. | ||
1040 | I use the board name string as the trigger in case | ||
1041 | the same board is ever used in other systems. */ | ||
1042 | pr_info("it87: Disabling pwm2 due to " | ||
1043 | "hardware constraints\n"); | ||
1044 | sio_data->skip_pwm = (1 << 1); | ||
1045 | } | ||
1046 | } | ||
1047 | |||
1025 | exit: | 1048 | exit: |
1026 | superio_exit(); | 1049 | superio_exit(); |
1027 | return err; | 1050 | return err; |
@@ -1168,25 +1191,33 @@ static int __devinit it87_probe(struct platform_device *pdev) | |||
1168 | } | 1191 | } |
1169 | 1192 | ||
1170 | if (enable_pwm_interface) { | 1193 | if (enable_pwm_interface) { |
1171 | if ((err = device_create_file(dev, | 1194 | if (!(sio_data->skip_pwm & (1 << 0))) { |
1172 | &sensor_dev_attr_pwm1_enable.dev_attr)) | 1195 | if ((err = device_create_file(dev, |
1173 | || (err = device_create_file(dev, | 1196 | &sensor_dev_attr_pwm1_enable.dev_attr)) |
1174 | &sensor_dev_attr_pwm2_enable.dev_attr)) | 1197 | || (err = device_create_file(dev, |
1175 | || (err = device_create_file(dev, | 1198 | &sensor_dev_attr_pwm1.dev_attr)) |
1176 | &sensor_dev_attr_pwm3_enable.dev_attr)) | 1199 | || (err = device_create_file(dev, |
1177 | || (err = device_create_file(dev, | 1200 | &dev_attr_pwm1_freq))) |
1178 | &sensor_dev_attr_pwm1.dev_attr)) | 1201 | goto ERROR4; |
1179 | || (err = device_create_file(dev, | 1202 | } |
1180 | &sensor_dev_attr_pwm2.dev_attr)) | 1203 | if (!(sio_data->skip_pwm & (1 << 1))) { |
1181 | || (err = device_create_file(dev, | 1204 | if ((err = device_create_file(dev, |
1182 | &sensor_dev_attr_pwm3.dev_attr)) | 1205 | &sensor_dev_attr_pwm2_enable.dev_attr)) |
1183 | || (err = device_create_file(dev, | 1206 | || (err = device_create_file(dev, |
1184 | &dev_attr_pwm1_freq)) | 1207 | &sensor_dev_attr_pwm2.dev_attr)) |
1185 | || (err = device_create_file(dev, | 1208 | || (err = device_create_file(dev, |
1186 | &dev_attr_pwm2_freq)) | 1209 | &dev_attr_pwm2_freq))) |
1187 | || (err = device_create_file(dev, | 1210 | goto ERROR4; |
1188 | &dev_attr_pwm3_freq))) | 1211 | } |
1189 | goto ERROR4; | 1212 | if (!(sio_data->skip_pwm & (1 << 2))) { |
1213 | if ((err = device_create_file(dev, | ||
1214 | &sensor_dev_attr_pwm3_enable.dev_attr)) | ||
1215 | || (err = device_create_file(dev, | ||
1216 | &sensor_dev_attr_pwm3.dev_attr)) | ||
1217 | || (err = device_create_file(dev, | ||
1218 | &dev_attr_pwm3_freq))) | ||
1219 | goto ERROR4; | ||
1220 | } | ||
1190 | } | 1221 | } |
1191 | 1222 | ||
1192 | if (data->type == it8712 || data->type == it8716 | 1223 | if (data->type == it8712 || data->type == it8716 |
@@ -1546,6 +1577,7 @@ static int __init sm_it87_init(void) | |||
1546 | unsigned short isa_address=0; | 1577 | unsigned short isa_address=0; |
1547 | struct it87_sio_data sio_data; | 1578 | struct it87_sio_data sio_data; |
1548 | 1579 | ||
1580 | memset(&sio_data, 0, sizeof(struct it87_sio_data)); | ||
1549 | err = it87_find(&isa_address, &sio_data); | 1581 | err = it87_find(&isa_address, &sio_data); |
1550 | if (err) | 1582 | if (err) |
1551 | return err; | 1583 | return err; |
diff --git a/drivers/i2c/busses/i2c-powermac.c b/drivers/i2c/busses/i2c-powermac.c index 22f6d5c00d80..0e7b1c6724aa 100644 --- a/drivers/i2c/busses/i2c-powermac.c +++ b/drivers/i2c/busses/i2c-powermac.c | |||
@@ -180,7 +180,7 @@ static const struct i2c_algorithm i2c_powermac_algorithm = { | |||
180 | }; | 180 | }; |
181 | 181 | ||
182 | 182 | ||
183 | static int i2c_powermac_remove(struct platform_device *dev) | 183 | static int __devexit i2c_powermac_remove(struct platform_device *dev) |
184 | { | 184 | { |
185 | struct i2c_adapter *adapter = platform_get_drvdata(dev); | 185 | struct i2c_adapter *adapter = platform_get_drvdata(dev); |
186 | struct pmac_i2c_bus *bus = i2c_get_adapdata(adapter); | 186 | struct pmac_i2c_bus *bus = i2c_get_adapdata(adapter); |
@@ -200,7 +200,7 @@ static int i2c_powermac_remove(struct platform_device *dev) | |||
200 | } | 200 | } |
201 | 201 | ||
202 | 202 | ||
203 | static int __devexit i2c_powermac_probe(struct platform_device *dev) | 203 | static int __devinit i2c_powermac_probe(struct platform_device *dev) |
204 | { | 204 | { |
205 | struct pmac_i2c_bus *bus = dev->dev.platform_data; | 205 | struct pmac_i2c_bus *bus = dev->dev.platform_data; |
206 | struct device_node *parent = NULL; | 206 | struct device_node *parent = NULL; |
diff --git a/drivers/i2c/i2c-dev.c b/drivers/i2c/i2c-dev.c index af4491fa7e34..307d976c9b69 100644 --- a/drivers/i2c/i2c-dev.c +++ b/drivers/i2c/i2c-dev.c | |||
@@ -583,8 +583,10 @@ static int __init i2c_dev_init(void) | |||
583 | goto out; | 583 | goto out; |
584 | 584 | ||
585 | i2c_dev_class = class_create(THIS_MODULE, "i2c-dev"); | 585 | i2c_dev_class = class_create(THIS_MODULE, "i2c-dev"); |
586 | if (IS_ERR(i2c_dev_class)) | 586 | if (IS_ERR(i2c_dev_class)) { |
587 | res = PTR_ERR(i2c_dev_class); | ||
587 | goto out_unreg_chrdev; | 588 | goto out_unreg_chrdev; |
589 | } | ||
588 | 590 | ||
589 | res = i2c_add_driver(&i2cdev_driver); | 591 | res = i2c_add_driver(&i2cdev_driver); |
590 | if (res) | 592 | if (res) |
diff --git a/drivers/ide/Kconfig b/drivers/ide/Kconfig index fc735ab08ff4..052879a6f853 100644 --- a/drivers/ide/Kconfig +++ b/drivers/ide/Kconfig | |||
@@ -292,6 +292,20 @@ config IDE_GENERIC | |||
292 | tristate "generic/default IDE chipset support" | 292 | tristate "generic/default IDE chipset support" |
293 | depends on ALPHA || X86 || IA64 || M32R || MIPS | 293 | depends on ALPHA || X86 || IA64 || M32R || MIPS |
294 | help | 294 | help |
295 | This is the generic IDE driver. This driver attaches to the | ||
296 | fixed legacy ports (e.g. on PCs 0x1f0/0x170, 0x1e8/0x168 and | ||
297 | so on). Please note that if this driver is built into the | ||
298 | kernel or loaded before other ATA (IDE or libata) drivers | ||
299 | and the controller is located at legacy ports, this driver | ||
300 | may grab those ports and thus can prevent the controller | ||
301 | specific driver from attaching. | ||
302 | |||
303 | Also, currently, IDE generic doesn't allow IRQ sharing | ||
304 | meaning that the IRQs it grabs won't be available to other | ||
305 | controllers sharing those IRQs which usually makes drivers | ||
306 | for those controllers fail. Generally, it's not a good idea | ||
307 | to load IDE generic driver on modern systems. | ||
308 | |||
295 | If unsure, say N. | 309 | If unsure, say N. |
296 | 310 | ||
297 | config BLK_DEV_PLATFORM | 311 | config BLK_DEV_PLATFORM |
@@ -766,10 +780,6 @@ config BLK_DEV_IDEDMA_PMAC | |||
766 | to transfer data to and from memory. Saying Y is safe and improves | 780 | to transfer data to and from memory. Saying Y is safe and improves |
767 | performance. | 781 | performance. |
768 | 782 | ||
769 | config BLK_DEV_IDE_SWARM | ||
770 | tristate "IDE for Sibyte evaluation boards" | ||
771 | depends on SIBYTE_SB1xxx_SOC | ||
772 | |||
773 | config BLK_DEV_IDE_AU1XXX | 783 | config BLK_DEV_IDE_AU1XXX |
774 | bool "IDE for AMD Alchemy Au1200" | 784 | bool "IDE for AMD Alchemy Au1200" |
775 | depends on SOC_AU1200 | 785 | depends on SOC_AU1200 |
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c index f1489999cf91..f16bb4667238 100644 --- a/drivers/ide/ide-cd.c +++ b/drivers/ide/ide-cd.c | |||
@@ -1661,7 +1661,9 @@ static int ide_cdrom_probe_capabilities(ide_drive_t *drive) | |||
1661 | cdi->mask &= ~CDC_PLAY_AUDIO; | 1661 | cdi->mask &= ~CDC_PLAY_AUDIO; |
1662 | 1662 | ||
1663 | mechtype = buf[8 + 6] >> 5; | 1663 | mechtype = buf[8 + 6] >> 5; |
1664 | if (mechtype == mechtype_caddy || mechtype == mechtype_popup) | 1664 | if (mechtype == mechtype_caddy || |
1665 | mechtype == mechtype_popup || | ||
1666 | (drive->atapi_flags & IDE_AFLAG_NO_AUTOCLOSE)) | ||
1665 | cdi->mask |= CDC_CLOSE_TRAY; | 1667 | cdi->mask |= CDC_CLOSE_TRAY; |
1666 | 1668 | ||
1667 | if (cdi->sanyo_slot > 0) { | 1669 | if (cdi->sanyo_slot > 0) { |
@@ -1859,6 +1861,8 @@ static const struct cd_list_entry ide_cd_quirks_list[] = { | |||
1859 | { "MATSHITADVD-ROM SR-8176", NULL, IDE_AFLAG_PLAY_AUDIO_OK }, | 1861 | { "MATSHITADVD-ROM SR-8176", NULL, IDE_AFLAG_PLAY_AUDIO_OK }, |
1860 | { "MATSHITADVD-ROM SR-8174", NULL, IDE_AFLAG_PLAY_AUDIO_OK }, | 1862 | { "MATSHITADVD-ROM SR-8174", NULL, IDE_AFLAG_PLAY_AUDIO_OK }, |
1861 | { "Optiarc DVD RW AD-5200A", NULL, IDE_AFLAG_PLAY_AUDIO_OK }, | 1863 | { "Optiarc DVD RW AD-5200A", NULL, IDE_AFLAG_PLAY_AUDIO_OK }, |
1864 | { "Optiarc DVD RW AD-7200A", NULL, IDE_AFLAG_PLAY_AUDIO_OK }, | ||
1865 | { "Optiarc DVD RW AD-7543A", NULL, IDE_AFLAG_NO_AUTOCLOSE }, | ||
1862 | { NULL, NULL, 0 } | 1866 | { NULL, NULL, 0 } |
1863 | }; | 1867 | }; |
1864 | 1868 | ||
@@ -1933,7 +1937,6 @@ static void ide_cd_remove(ide_drive_t *drive) | |||
1933 | 1937 | ||
1934 | ide_proc_unregister_driver(drive, info->driver); | 1938 | ide_proc_unregister_driver(drive, info->driver); |
1935 | 1939 | ||
1936 | blk_unregister_filter(info->disk); | ||
1937 | del_gendisk(info->disk); | 1940 | del_gendisk(info->disk); |
1938 | 1941 | ||
1939 | ide_cd_put(info); | 1942 | ide_cd_put(info); |
@@ -2159,7 +2162,6 @@ static int ide_cd_probe(ide_drive_t *drive) | |||
2159 | g->fops = &idecd_ops; | 2162 | g->fops = &idecd_ops; |
2160 | g->flags |= GENHD_FL_REMOVABLE; | 2163 | g->flags |= GENHD_FL_REMOVABLE; |
2161 | add_disk(g); | 2164 | add_disk(g); |
2162 | blk_register_filter(g); | ||
2163 | return 0; | 2165 | return 0; |
2164 | 2166 | ||
2165 | out_free_cd: | 2167 | out_free_cd: |
diff --git a/drivers/ide/ide-dma.c b/drivers/ide/ide-dma.c index adc682755857..3fa07c0aeaa4 100644 --- a/drivers/ide/ide-dma.c +++ b/drivers/ide/ide-dma.c | |||
@@ -211,7 +211,7 @@ int ide_build_dmatable (ide_drive_t *drive, struct request *rq) | |||
211 | xcount = bcount & 0xffff; | 211 | xcount = bcount & 0xffff; |
212 | if (is_trm290) | 212 | if (is_trm290) |
213 | xcount = ((xcount >> 2) - 1) << 16; | 213 | xcount = ((xcount >> 2) - 1) << 16; |
214 | if (xcount == 0x0000) { | 214 | else if (xcount == 0x0000) { |
215 | /* | 215 | /* |
216 | * Most chipsets correctly interpret a length of 0x0000 as 64KB, | 216 | * Most chipsets correctly interpret a length of 0x0000 as 64KB, |
217 | * but at least one (e.g. CS5530) misinterprets it as zero (!). | 217 | * but at least one (e.g. CS5530) misinterprets it as zero (!). |
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c index 994e41099b42..a51a30e9eab3 100644 --- a/drivers/ide/ide-probe.c +++ b/drivers/ide/ide-probe.c | |||
@@ -1492,7 +1492,7 @@ static struct device_attribute *ide_port_attrs[] = { | |||
1492 | 1492 | ||
1493 | static int ide_sysfs_register_port(ide_hwif_t *hwif) | 1493 | static int ide_sysfs_register_port(ide_hwif_t *hwif) |
1494 | { | 1494 | { |
1495 | int i, rc; | 1495 | int i, uninitialized_var(rc); |
1496 | 1496 | ||
1497 | for (i = 0; ide_port_attrs[i]; i++) { | 1497 | for (i = 0; ide_port_attrs[i]; i++) { |
1498 | rc = device_create_file(hwif->portdev, ide_port_attrs[i]); | 1498 | rc = device_create_file(hwif->portdev, ide_port_attrs[i]); |
diff --git a/drivers/ide/ide-tape.c b/drivers/ide/ide-tape.c index 1bce84b56630..3833189144ed 100644 --- a/drivers/ide/ide-tape.c +++ b/drivers/ide/ide-tape.c | |||
@@ -2338,7 +2338,7 @@ static void idetape_get_inquiry_results(ide_drive_t *drive) | |||
2338 | { | 2338 | { |
2339 | idetape_tape_t *tape = drive->driver_data; | 2339 | idetape_tape_t *tape = drive->driver_data; |
2340 | struct ide_atapi_pc pc; | 2340 | struct ide_atapi_pc pc; |
2341 | char fw_rev[6], vendor_id[10], product_id[18]; | 2341 | char fw_rev[4], vendor_id[8], product_id[16]; |
2342 | 2342 | ||
2343 | idetape_create_inquiry_cmd(&pc); | 2343 | idetape_create_inquiry_cmd(&pc); |
2344 | if (idetape_queue_pc_tail(drive, &pc)) { | 2344 | if (idetape_queue_pc_tail(drive, &pc)) { |
@@ -2350,11 +2350,11 @@ static void idetape_get_inquiry_results(ide_drive_t *drive) | |||
2350 | memcpy(product_id, &pc.buf[16], 16); | 2350 | memcpy(product_id, &pc.buf[16], 16); |
2351 | memcpy(fw_rev, &pc.buf[32], 4); | 2351 | memcpy(fw_rev, &pc.buf[32], 4); |
2352 | 2352 | ||
2353 | ide_fixstring(vendor_id, 10, 0); | 2353 | ide_fixstring(vendor_id, 8, 0); |
2354 | ide_fixstring(product_id, 18, 0); | 2354 | ide_fixstring(product_id, 16, 0); |
2355 | ide_fixstring(fw_rev, 6, 0); | 2355 | ide_fixstring(fw_rev, 4, 0); |
2356 | 2356 | ||
2357 | printk(KERN_INFO "ide-tape: %s <-> %s: %s %s rev %s\n", | 2357 | printk(KERN_INFO "ide-tape: %s <-> %s: %.8s %.16s rev %.4s\n", |
2358 | drive->name, tape->name, vendor_id, product_id, fw_rev); | 2358 | drive->name, tape->name, vendor_id, product_id, fw_rev); |
2359 | } | 2359 | } |
2360 | 2360 | ||
diff --git a/drivers/ide/mips/Makefile b/drivers/ide/mips/Makefile index 677c7b2bac92..5873fa0b8769 100644 --- a/drivers/ide/mips/Makefile +++ b/drivers/ide/mips/Makefile | |||
@@ -1,4 +1,3 @@ | |||
1 | obj-$(CONFIG_BLK_DEV_IDE_SWARM) += swarm.o | ||
2 | obj-$(CONFIG_BLK_DEV_IDE_AU1XXX) += au1xxx-ide.o | 1 | obj-$(CONFIG_BLK_DEV_IDE_AU1XXX) += au1xxx-ide.o |
3 | 2 | ||
4 | EXTRA_CFLAGS := -Idrivers/ide | 3 | EXTRA_CFLAGS := -Idrivers/ide |
diff --git a/drivers/ide/mips/swarm.c b/drivers/ide/mips/swarm.c deleted file mode 100644 index badf79fc9e3a..000000000000 --- a/drivers/ide/mips/swarm.c +++ /dev/null | |||
@@ -1,196 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2001, 2002, 2003 Broadcom Corporation | ||
3 | * Copyright (C) 2004 MontaVista Software Inc. | ||
4 | * Author: Manish Lachwani, mlachwani@mvista.com | ||
5 | * Copyright (C) 2004 MIPS Technologies, Inc. All rights reserved. | ||
6 | * Author: Maciej W. Rozycki <macro@mips.com> | ||
7 | * Copyright (c) 2006, 2008 Maciej W. Rozycki | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or | ||
10 | * modify it under the terms of the GNU General Public License | ||
11 | * as published by the Free Software Foundation; either version 2 | ||
12 | * of the License, or (at your option) any later version. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
22 | */ | ||
23 | |||
24 | /* | ||
25 | * Derived loosely from ide-pmac.c, so: | ||
26 | * Copyright (C) 1998 Paul Mackerras. | ||
27 | * Copyright (C) 1995-1998 Mark Lord | ||
28 | */ | ||
29 | |||
30 | /* | ||
31 | * Boards with SiByte processors so far have supported IDE devices via | ||
32 | * the Generic Bus, PCI bus, and built-in PCMCIA interface. In all | ||
33 | * cases, byte-swapping must be avoided for these devices (whereas | ||
34 | * other PCI devices, for example, will require swapping). Any | ||
35 | * SiByte-targetted kernel including IDE support will include this | ||
36 | * file. Probing of a Generic Bus for an IDE device is controlled by | ||
37 | * the definition of "SIBYTE_HAVE_IDE", which is provided by | ||
38 | * <asm/sibyte/board.h> for Broadcom boards. | ||
39 | */ | ||
40 | |||
41 | #include <linux/ide.h> | ||
42 | #include <linux/ioport.h> | ||
43 | #include <linux/kernel.h> | ||
44 | #include <linux/types.h> | ||
45 | #include <linux/platform_device.h> | ||
46 | |||
47 | #include <asm/io.h> | ||
48 | |||
49 | #include <asm/sibyte/board.h> | ||
50 | #include <asm/sibyte/sb1250_genbus.h> | ||
51 | #include <asm/sibyte/sb1250_regs.h> | ||
52 | |||
53 | #define DRV_NAME "ide-swarm" | ||
54 | |||
55 | static char swarm_ide_string[] = DRV_NAME; | ||
56 | |||
57 | static struct resource swarm_ide_resource = { | ||
58 | .name = "SWARM GenBus IDE", | ||
59 | .flags = IORESOURCE_MEM, | ||
60 | }; | ||
61 | |||
62 | static struct platform_device *swarm_ide_dev; | ||
63 | |||
64 | static const struct ide_port_info swarm_port_info = { | ||
65 | .name = DRV_NAME, | ||
66 | .host_flags = IDE_HFLAG_MMIO | IDE_HFLAG_NO_DMA, | ||
67 | }; | ||
68 | |||
69 | /* | ||
70 | * swarm_ide_probe - if the board header indicates the existence of | ||
71 | * Generic Bus IDE, allocate a HWIF for it. | ||
72 | */ | ||
73 | static int __devinit swarm_ide_probe(struct device *dev) | ||
74 | { | ||
75 | u8 __iomem *base; | ||
76 | struct ide_host *host; | ||
77 | phys_t offset, size; | ||
78 | int i, rc; | ||
79 | hw_regs_t hw, *hws[] = { &hw, NULL, NULL, NULL }; | ||
80 | |||
81 | if (!SIBYTE_HAVE_IDE) | ||
82 | return -ENODEV; | ||
83 | |||
84 | base = ioremap(A_IO_EXT_BASE, 0x800); | ||
85 | offset = __raw_readq(base + R_IO_EXT_REG(R_IO_EXT_START_ADDR, IDE_CS)); | ||
86 | size = __raw_readq(base + R_IO_EXT_REG(R_IO_EXT_MULT_SIZE, IDE_CS)); | ||
87 | iounmap(base); | ||
88 | |||
89 | offset = G_IO_START_ADDR(offset) << S_IO_ADDRBASE; | ||
90 | size = (G_IO_MULT_SIZE(size) + 1) << S_IO_REGSIZE; | ||
91 | if (offset < A_PHYS_GENBUS || offset >= A_PHYS_GENBUS_END) { | ||
92 | printk(KERN_INFO DRV_NAME | ||
93 | ": IDE interface at GenBus disabled\n"); | ||
94 | return -EBUSY; | ||
95 | } | ||
96 | |||
97 | printk(KERN_INFO DRV_NAME ": IDE interface at GenBus slot %i\n", | ||
98 | IDE_CS); | ||
99 | |||
100 | swarm_ide_resource.start = offset; | ||
101 | swarm_ide_resource.end = offset + size - 1; | ||
102 | if (request_resource(&iomem_resource, &swarm_ide_resource)) { | ||
103 | printk(KERN_ERR DRV_NAME | ||
104 | ": can't request I/O memory resource\n"); | ||
105 | return -EBUSY; | ||
106 | } | ||
107 | |||
108 | base = ioremap(offset, size); | ||
109 | |||
110 | for (i = 0; i <= 7; i++) | ||
111 | hw.io_ports_array[i] = | ||
112 | (unsigned long)(base + ((0x1f0 + i) << 5)); | ||
113 | hw.io_ports.ctl_addr = | ||
114 | (unsigned long)(base + (0x3f6 << 5)); | ||
115 | hw.irq = K_INT_GB_IDE; | ||
116 | hw.chipset = ide_generic; | ||
117 | |||
118 | rc = ide_host_add(&swarm_port_info, hws, &host); | ||
119 | if (rc) | ||
120 | goto err; | ||
121 | |||
122 | dev_set_drvdata(dev, host); | ||
123 | |||
124 | return 0; | ||
125 | err: | ||
126 | release_resource(&swarm_ide_resource); | ||
127 | iounmap(base); | ||
128 | return rc; | ||
129 | } | ||
130 | |||
131 | static struct device_driver swarm_ide_driver = { | ||
132 | .name = swarm_ide_string, | ||
133 | .bus = &platform_bus_type, | ||
134 | .probe = swarm_ide_probe, | ||
135 | }; | ||
136 | |||
137 | static void swarm_ide_platform_release(struct device *device) | ||
138 | { | ||
139 | struct platform_device *pldev; | ||
140 | |||
141 | /* free device */ | ||
142 | pldev = to_platform_device(device); | ||
143 | kfree(pldev); | ||
144 | } | ||
145 | |||
146 | static int __devinit swarm_ide_init_module(void) | ||
147 | { | ||
148 | struct platform_device *pldev; | ||
149 | int err; | ||
150 | |||
151 | printk(KERN_INFO "SWARM IDE driver\n"); | ||
152 | |||
153 | if (driver_register(&swarm_ide_driver)) { | ||
154 | printk(KERN_ERR "Driver registration failed\n"); | ||
155 | err = -ENODEV; | ||
156 | goto out; | ||
157 | } | ||
158 | |||
159 | if (!(pldev = kzalloc(sizeof (*pldev), GFP_KERNEL))) { | ||
160 | err = -ENOMEM; | ||
161 | goto out_unregister_driver; | ||
162 | } | ||
163 | |||
164 | pldev->name = swarm_ide_string; | ||
165 | pldev->id = 0; | ||
166 | pldev->dev.release = swarm_ide_platform_release; | ||
167 | |||
168 | if (platform_device_register(pldev)) { | ||
169 | err = -ENODEV; | ||
170 | goto out_free_pldev; | ||
171 | } | ||
172 | |||
173 | if (!pldev->dev.driver) { | ||
174 | /* | ||
175 | * The driver was not bound to this device, there was | ||
176 | * no hardware at this address. Unregister it, as the | ||
177 | * release fuction will take care of freeing the | ||
178 | * allocated structure | ||
179 | */ | ||
180 | platform_device_unregister (pldev); | ||
181 | } | ||
182 | |||
183 | swarm_ide_dev = pldev; | ||
184 | |||
185 | return 0; | ||
186 | |||
187 | out_free_pldev: | ||
188 | kfree(pldev); | ||
189 | |||
190 | out_unregister_driver: | ||
191 | driver_unregister(&swarm_ide_driver); | ||
192 | out: | ||
193 | return err; | ||
194 | } | ||
195 | |||
196 | module_init(swarm_ide_init_module); | ||
diff --git a/drivers/ide/pci/hpt366.c b/drivers/ide/pci/hpt366.c index eb107eef0dbc..c37ab1743819 100644 --- a/drivers/ide/pci/hpt366.c +++ b/drivers/ide/pci/hpt366.c | |||
@@ -613,6 +613,14 @@ static int check_in_drive_list(ide_drive_t *drive, const char **list) | |||
613 | return 0; | 613 | return 0; |
614 | } | 614 | } |
615 | 615 | ||
616 | static struct hpt_info *hpt3xx_get_info(struct device *dev) | ||
617 | { | ||
618 | struct ide_host *host = dev_get_drvdata(dev); | ||
619 | struct hpt_info *info = (struct hpt_info *)host->host_priv; | ||
620 | |||
621 | return dev == host->dev[1] ? info + 1 : info; | ||
622 | } | ||
623 | |||
616 | /* | 624 | /* |
617 | * The Marvell bridge chips used on the HighPoint SATA cards do not seem | 625 | * The Marvell bridge chips used on the HighPoint SATA cards do not seem |
618 | * to support the UltraDMA modes 1, 2, and 3 as well as any MWDMA modes... | 626 | * to support the UltraDMA modes 1, 2, and 3 as well as any MWDMA modes... |
@@ -621,9 +629,7 @@ static int check_in_drive_list(ide_drive_t *drive, const char **list) | |||
621 | static u8 hpt3xx_udma_filter(ide_drive_t *drive) | 629 | static u8 hpt3xx_udma_filter(ide_drive_t *drive) |
622 | { | 630 | { |
623 | ide_hwif_t *hwif = HWIF(drive); | 631 | ide_hwif_t *hwif = HWIF(drive); |
624 | struct pci_dev *dev = to_pci_dev(hwif->dev); | 632 | struct hpt_info *info = hpt3xx_get_info(hwif->dev); |
625 | struct ide_host *host = pci_get_drvdata(dev); | ||
626 | struct hpt_info *info = host->host_priv + (hwif->dev == host->dev[1]); | ||
627 | u8 mask = hwif->ultra_mask; | 633 | u8 mask = hwif->ultra_mask; |
628 | 634 | ||
629 | switch (info->chip_type) { | 635 | switch (info->chip_type) { |
@@ -662,9 +668,7 @@ static u8 hpt3xx_udma_filter(ide_drive_t *drive) | |||
662 | static u8 hpt3xx_mdma_filter(ide_drive_t *drive) | 668 | static u8 hpt3xx_mdma_filter(ide_drive_t *drive) |
663 | { | 669 | { |
664 | ide_hwif_t *hwif = HWIF(drive); | 670 | ide_hwif_t *hwif = HWIF(drive); |
665 | struct pci_dev *dev = to_pci_dev(hwif->dev); | 671 | struct hpt_info *info = hpt3xx_get_info(hwif->dev); |
666 | struct ide_host *host = pci_get_drvdata(dev); | ||
667 | struct hpt_info *info = host->host_priv + (hwif->dev == host->dev[1]); | ||
668 | 672 | ||
669 | switch (info->chip_type) { | 673 | switch (info->chip_type) { |
670 | case HPT372 : | 674 | case HPT372 : |
@@ -700,8 +704,7 @@ static void hpt3xx_set_mode(ide_drive_t *drive, const u8 speed) | |||
700 | { | 704 | { |
701 | ide_hwif_t *hwif = drive->hwif; | 705 | ide_hwif_t *hwif = drive->hwif; |
702 | struct pci_dev *dev = to_pci_dev(hwif->dev); | 706 | struct pci_dev *dev = to_pci_dev(hwif->dev); |
703 | struct ide_host *host = pci_get_drvdata(dev); | 707 | struct hpt_info *info = hpt3xx_get_info(hwif->dev); |
704 | struct hpt_info *info = host->host_priv + (hwif->dev == host->dev[1]); | ||
705 | struct hpt_timings *t = info->timings; | 708 | struct hpt_timings *t = info->timings; |
706 | u8 itr_addr = 0x40 + (drive->dn * 4); | 709 | u8 itr_addr = 0x40 + (drive->dn * 4); |
707 | u32 old_itr = 0; | 710 | u32 old_itr = 0; |
@@ -744,8 +747,7 @@ static void hpt3xx_maskproc(ide_drive_t *drive, int mask) | |||
744 | { | 747 | { |
745 | ide_hwif_t *hwif = HWIF(drive); | 748 | ide_hwif_t *hwif = HWIF(drive); |
746 | struct pci_dev *dev = to_pci_dev(hwif->dev); | 749 | struct pci_dev *dev = to_pci_dev(hwif->dev); |
747 | struct ide_host *host = pci_get_drvdata(dev); | 750 | struct hpt_info *info = hpt3xx_get_info(hwif->dev); |
748 | struct hpt_info *info = host->host_priv + (hwif->dev == host->dev[1]); | ||
749 | 751 | ||
750 | if (drive->quirk_list) { | 752 | if (drive->quirk_list) { |
751 | if (info->chip_type >= HPT370) { | 753 | if (info->chip_type >= HPT370) { |
@@ -973,8 +975,7 @@ static int __devinit hpt37x_calibrate_dpll(struct pci_dev *dev, u16 f_low, u16 f | |||
973 | static unsigned int __devinit init_chipset_hpt366(struct pci_dev *dev) | 975 | static unsigned int __devinit init_chipset_hpt366(struct pci_dev *dev) |
974 | { | 976 | { |
975 | unsigned long io_base = pci_resource_start(dev, 4); | 977 | unsigned long io_base = pci_resource_start(dev, 4); |
976 | struct ide_host *host = pci_get_drvdata(dev); | 978 | struct hpt_info *info = hpt3xx_get_info(&dev->dev); |
977 | struct hpt_info *info = host->host_priv + (&dev->dev == host->dev[1]); | ||
978 | const char *name = DRV_NAME; | 979 | const char *name = DRV_NAME; |
979 | u8 pci_clk, dpll_clk = 0; /* PCI and DPLL clock in MHz */ | 980 | u8 pci_clk, dpll_clk = 0; /* PCI and DPLL clock in MHz */ |
980 | u8 chip_type; | 981 | u8 chip_type; |
@@ -1217,8 +1218,7 @@ static unsigned int __devinit init_chipset_hpt366(struct pci_dev *dev) | |||
1217 | static u8 hpt3xx_cable_detect(ide_hwif_t *hwif) | 1218 | static u8 hpt3xx_cable_detect(ide_hwif_t *hwif) |
1218 | { | 1219 | { |
1219 | struct pci_dev *dev = to_pci_dev(hwif->dev); | 1220 | struct pci_dev *dev = to_pci_dev(hwif->dev); |
1220 | struct ide_host *host = pci_get_drvdata(dev); | 1221 | struct hpt_info *info = hpt3xx_get_info(hwif->dev); |
1221 | struct hpt_info *info = host->host_priv + (hwif->dev == host->dev[1]); | ||
1222 | u8 chip_type = info->chip_type; | 1222 | u8 chip_type = info->chip_type; |
1223 | u8 scr1 = 0, ata66 = hwif->channel ? 0x01 : 0x02; | 1223 | u8 scr1 = 0, ata66 = hwif->channel ? 0x01 : 0x02; |
1224 | 1224 | ||
@@ -1262,8 +1262,7 @@ static u8 hpt3xx_cable_detect(ide_hwif_t *hwif) | |||
1262 | static void __devinit init_hwif_hpt366(ide_hwif_t *hwif) | 1262 | static void __devinit init_hwif_hpt366(ide_hwif_t *hwif) |
1263 | { | 1263 | { |
1264 | struct pci_dev *dev = to_pci_dev(hwif->dev); | 1264 | struct pci_dev *dev = to_pci_dev(hwif->dev); |
1265 | struct ide_host *host = pci_get_drvdata(dev); | 1265 | struct hpt_info *info = hpt3xx_get_info(hwif->dev); |
1266 | struct hpt_info *info = host->host_priv + (hwif->dev == host->dev[1]); | ||
1267 | int serialize = HPT_SERIALIZE_IO; | 1266 | int serialize = HPT_SERIALIZE_IO; |
1268 | u8 chip_type = info->chip_type; | 1267 | u8 chip_type = info->chip_type; |
1269 | u8 new_mcr, old_mcr = 0; | 1268 | u8 new_mcr, old_mcr = 0; |
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c index f29dbb767e87..9559248f265b 100644 --- a/drivers/infiniband/hw/mlx4/qp.c +++ b/drivers/infiniband/hw/mlx4/qp.c | |||
@@ -1342,6 +1342,12 @@ static __be32 convert_access(int acc) | |||
1342 | static void set_fmr_seg(struct mlx4_wqe_fmr_seg *fseg, struct ib_send_wr *wr) | 1342 | static void set_fmr_seg(struct mlx4_wqe_fmr_seg *fseg, struct ib_send_wr *wr) |
1343 | { | 1343 | { |
1344 | struct mlx4_ib_fast_reg_page_list *mfrpl = to_mfrpl(wr->wr.fast_reg.page_list); | 1344 | struct mlx4_ib_fast_reg_page_list *mfrpl = to_mfrpl(wr->wr.fast_reg.page_list); |
1345 | int i; | ||
1346 | |||
1347 | for (i = 0; i < wr->wr.fast_reg.page_list_len; ++i) | ||
1348 | wr->wr.fast_reg.page_list->page_list[i] = | ||
1349 | cpu_to_be64(wr->wr.fast_reg.page_list->page_list[i] | | ||
1350 | MLX4_MTT_FLAG_PRESENT); | ||
1345 | 1351 | ||
1346 | fseg->flags = convert_access(wr->wr.fast_reg.access_flags); | 1352 | fseg->flags = convert_access(wr->wr.fast_reg.access_flags); |
1347 | fseg->mem_key = cpu_to_be32(wr->wr.fast_reg.rkey); | 1353 | fseg->mem_key = cpu_to_be32(wr->wr.fast_reg.rkey); |
diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c index 9f0b964b2c99..499d3cf83e1f 100644 --- a/drivers/infiniband/hw/nes/nes_cm.c +++ b/drivers/infiniband/hw/nes/nes_cm.c | |||
@@ -1956,13 +1956,6 @@ static int mini_cm_reject(struct nes_cm_core *cm_core, | |||
1956 | return ret; | 1956 | return ret; |
1957 | cleanup_retrans_entry(cm_node); | 1957 | cleanup_retrans_entry(cm_node); |
1958 | cm_node->state = NES_CM_STATE_CLOSED; | 1958 | cm_node->state = NES_CM_STATE_CLOSED; |
1959 | ret = send_fin(cm_node, NULL); | ||
1960 | |||
1961 | if (cm_node->accept_pend) { | ||
1962 | BUG_ON(!cm_node->listener); | ||
1963 | atomic_dec(&cm_node->listener->pend_accepts_cnt); | ||
1964 | BUG_ON(atomic_read(&cm_node->listener->pend_accepts_cnt) < 0); | ||
1965 | } | ||
1966 | 1959 | ||
1967 | ret = send_reset(cm_node, NULL); | 1960 | ret = send_reset(cm_node, NULL); |
1968 | return ret; | 1961 | return ret; |
@@ -2383,6 +2376,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp) | |||
2383 | atomic_inc(&cm_disconnects); | 2376 | atomic_inc(&cm_disconnects); |
2384 | cm_event.event = IW_CM_EVENT_DISCONNECT; | 2377 | cm_event.event = IW_CM_EVENT_DISCONNECT; |
2385 | if (last_ae == NES_AEQE_AEID_LLP_CONNECTION_RESET) { | 2378 | if (last_ae == NES_AEQE_AEID_LLP_CONNECTION_RESET) { |
2379 | issued_disconnect_reset = 1; | ||
2386 | cm_event.status = IW_CM_EVENT_STATUS_RESET; | 2380 | cm_event.status = IW_CM_EVENT_STATUS_RESET; |
2387 | nes_debug(NES_DBG_CM, "Generating a CM " | 2381 | nes_debug(NES_DBG_CM, "Generating a CM " |
2388 | "Disconnect Event (status reset) for " | 2382 | "Disconnect Event (status reset) for " |
@@ -2508,7 +2502,6 @@ static int nes_disconnect(struct nes_qp *nesqp, int abrupt) | |||
2508 | nes_debug(NES_DBG_CM, "Call close API\n"); | 2502 | nes_debug(NES_DBG_CM, "Call close API\n"); |
2509 | 2503 | ||
2510 | g_cm_core->api->close(g_cm_core, nesqp->cm_node); | 2504 | g_cm_core->api->close(g_cm_core, nesqp->cm_node); |
2511 | nesqp->cm_node = NULL; | ||
2512 | } | 2505 | } |
2513 | 2506 | ||
2514 | return ret; | 2507 | return ret; |
@@ -2837,6 +2830,7 @@ int nes_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) | |||
2837 | cm_node->apbvt_set = 1; | 2830 | cm_node->apbvt_set = 1; |
2838 | nesqp->cm_node = cm_node; | 2831 | nesqp->cm_node = cm_node; |
2839 | cm_node->nesqp = nesqp; | 2832 | cm_node->nesqp = nesqp; |
2833 | nes_add_ref(&nesqp->ibqp); | ||
2840 | 2834 | ||
2841 | return 0; | 2835 | return 0; |
2842 | } | 2836 | } |
@@ -3167,7 +3161,6 @@ static void cm_event_connect_error(struct nes_cm_event *event) | |||
3167 | if (ret) | 3161 | if (ret) |
3168 | printk(KERN_ERR "%s[%u] OFA CM event_handler returned, " | 3162 | printk(KERN_ERR "%s[%u] OFA CM event_handler returned, " |
3169 | "ret=%d\n", __func__, __LINE__, ret); | 3163 | "ret=%d\n", __func__, __LINE__, ret); |
3170 | nes_rem_ref(&nesqp->ibqp); | ||
3171 | cm_id->rem_ref(cm_id); | 3164 | cm_id->rem_ref(cm_id); |
3172 | 3165 | ||
3173 | rem_ref_cm_node(event->cm_node->cm_core, event->cm_node); | 3166 | rem_ref_cm_node(event->cm_node->cm_core, event->cm_node); |
diff --git a/drivers/infiniband/ulp/ipoib/ipoib.h b/drivers/infiniband/ulp/ipoib/ipoib.h index b0ffc9abe8c0..05eb41b8ab63 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib.h +++ b/drivers/infiniband/ulp/ipoib/ipoib.h | |||
@@ -293,6 +293,7 @@ struct ipoib_dev_priv { | |||
293 | 293 | ||
294 | struct delayed_work pkey_poll_task; | 294 | struct delayed_work pkey_poll_task; |
295 | struct delayed_work mcast_task; | 295 | struct delayed_work mcast_task; |
296 | struct work_struct carrier_on_task; | ||
296 | struct work_struct flush_light; | 297 | struct work_struct flush_light; |
297 | struct work_struct flush_normal; | 298 | struct work_struct flush_normal; |
298 | struct work_struct flush_heavy; | 299 | struct work_struct flush_heavy; |
@@ -464,6 +465,7 @@ int ipoib_dev_init(struct net_device *dev, struct ib_device *ca, int port); | |||
464 | void ipoib_dev_cleanup(struct net_device *dev); | 465 | void ipoib_dev_cleanup(struct net_device *dev); |
465 | 466 | ||
466 | void ipoib_mcast_join_task(struct work_struct *work); | 467 | void ipoib_mcast_join_task(struct work_struct *work); |
468 | void ipoib_mcast_carrier_on_task(struct work_struct *work); | ||
467 | void ipoib_mcast_send(struct net_device *dev, void *mgid, struct sk_buff *skb); | 469 | void ipoib_mcast_send(struct net_device *dev, void *mgid, struct sk_buff *skb); |
468 | 470 | ||
469 | void ipoib_mcast_restart_task(struct work_struct *work); | 471 | void ipoib_mcast_restart_task(struct work_struct *work); |
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c index 7e9e218738fa..e9ca3cb57d52 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c | |||
@@ -404,7 +404,7 @@ static void path_rec_completion(int status, | |||
404 | struct net_device *dev = path->dev; | 404 | struct net_device *dev = path->dev; |
405 | struct ipoib_dev_priv *priv = netdev_priv(dev); | 405 | struct ipoib_dev_priv *priv = netdev_priv(dev); |
406 | struct ipoib_ah *ah = NULL; | 406 | struct ipoib_ah *ah = NULL; |
407 | struct ipoib_ah *old_ah; | 407 | struct ipoib_ah *old_ah = NULL; |
408 | struct ipoib_neigh *neigh, *tn; | 408 | struct ipoib_neigh *neigh, *tn; |
409 | struct sk_buff_head skqueue; | 409 | struct sk_buff_head skqueue; |
410 | struct sk_buff *skb; | 410 | struct sk_buff *skb; |
@@ -428,12 +428,12 @@ static void path_rec_completion(int status, | |||
428 | 428 | ||
429 | spin_lock_irqsave(&priv->lock, flags); | 429 | spin_lock_irqsave(&priv->lock, flags); |
430 | 430 | ||
431 | old_ah = path->ah; | ||
432 | path->ah = ah; | ||
433 | |||
434 | if (ah) { | 431 | if (ah) { |
435 | path->pathrec = *pathrec; | 432 | path->pathrec = *pathrec; |
436 | 433 | ||
434 | old_ah = path->ah; | ||
435 | path->ah = ah; | ||
436 | |||
437 | ipoib_dbg(priv, "created address handle %p for LID 0x%04x, SL %d\n", | 437 | ipoib_dbg(priv, "created address handle %p for LID 0x%04x, SL %d\n", |
438 | ah, be16_to_cpu(pathrec->dlid), pathrec->sl); | 438 | ah, be16_to_cpu(pathrec->dlid), pathrec->sl); |
439 | 439 | ||
@@ -1075,6 +1075,7 @@ static void ipoib_setup(struct net_device *dev) | |||
1075 | 1075 | ||
1076 | INIT_DELAYED_WORK(&priv->pkey_poll_task, ipoib_pkey_poll); | 1076 | INIT_DELAYED_WORK(&priv->pkey_poll_task, ipoib_pkey_poll); |
1077 | INIT_DELAYED_WORK(&priv->mcast_task, ipoib_mcast_join_task); | 1077 | INIT_DELAYED_WORK(&priv->mcast_task, ipoib_mcast_join_task); |
1078 | INIT_WORK(&priv->carrier_on_task, ipoib_mcast_carrier_on_task); | ||
1078 | INIT_WORK(&priv->flush_light, ipoib_ib_dev_flush_light); | 1079 | INIT_WORK(&priv->flush_light, ipoib_ib_dev_flush_light); |
1079 | INIT_WORK(&priv->flush_normal, ipoib_ib_dev_flush_normal); | 1080 | INIT_WORK(&priv->flush_normal, ipoib_ib_dev_flush_normal); |
1080 | INIT_WORK(&priv->flush_heavy, ipoib_ib_dev_flush_heavy); | 1081 | INIT_WORK(&priv->flush_heavy, ipoib_ib_dev_flush_heavy); |
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c index ac33c8f3ea85..aae28620a6e5 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c | |||
@@ -366,6 +366,21 @@ static int ipoib_mcast_sendonly_join(struct ipoib_mcast *mcast) | |||
366 | return ret; | 366 | return ret; |
367 | } | 367 | } |
368 | 368 | ||
369 | void ipoib_mcast_carrier_on_task(struct work_struct *work) | ||
370 | { | ||
371 | struct ipoib_dev_priv *priv = container_of(work, struct ipoib_dev_priv, | ||
372 | carrier_on_task); | ||
373 | |||
374 | /* | ||
375 | * Take rtnl_lock to avoid racing with ipoib_stop() and | ||
376 | * turning the carrier back on while a device is being | ||
377 | * removed. | ||
378 | */ | ||
379 | rtnl_lock(); | ||
380 | netif_carrier_on(priv->dev); | ||
381 | rtnl_unlock(); | ||
382 | } | ||
383 | |||
369 | static int ipoib_mcast_join_complete(int status, | 384 | static int ipoib_mcast_join_complete(int status, |
370 | struct ib_sa_multicast *multicast) | 385 | struct ib_sa_multicast *multicast) |
371 | { | 386 | { |
@@ -392,16 +407,12 @@ static int ipoib_mcast_join_complete(int status, | |||
392 | &priv->mcast_task, 0); | 407 | &priv->mcast_task, 0); |
393 | mutex_unlock(&mcast_mutex); | 408 | mutex_unlock(&mcast_mutex); |
394 | 409 | ||
395 | if (mcast == priv->broadcast) { | 410 | /* |
396 | /* | 411 | * Defer carrier on work to ipoib_workqueue to avoid a |
397 | * Take RTNL lock here to avoid racing with | 412 | * deadlock on rtnl_lock here. |
398 | * ipoib_stop() and turning the carrier back | 413 | */ |
399 | * on while a device is being removed. | 414 | if (mcast == priv->broadcast) |
400 | */ | 415 | queue_work(ipoib_workqueue, &priv->carrier_on_task); |
401 | rtnl_lock(); | ||
402 | netif_carrier_on(dev); | ||
403 | rtnl_unlock(); | ||
404 | } | ||
405 | 416 | ||
406 | return 0; | 417 | return 0; |
407 | } | 418 | } |
diff --git a/drivers/input/mouse/bcm5974.c b/drivers/input/mouse/bcm5974.c index 18f4d7f6ce6d..2998a6ac9ae4 100644 --- a/drivers/input/mouse/bcm5974.c +++ b/drivers/input/mouse/bcm5974.c | |||
@@ -351,8 +351,9 @@ static int report_tp_state(struct bcm5974 *dev, int size) | |||
351 | #define BCM5974_WELLSPRING_MODE_REQUEST_VALUE 0x300 | 351 | #define BCM5974_WELLSPRING_MODE_REQUEST_VALUE 0x300 |
352 | #define BCM5974_WELLSPRING_MODE_REQUEST_INDEX 0 | 352 | #define BCM5974_WELLSPRING_MODE_REQUEST_INDEX 0 |
353 | #define BCM5974_WELLSPRING_MODE_VENDOR_VALUE 0x01 | 353 | #define BCM5974_WELLSPRING_MODE_VENDOR_VALUE 0x01 |
354 | #define BCM5974_WELLSPRING_MODE_NORMAL_VALUE 0x08 | ||
354 | 355 | ||
355 | static int bcm5974_wellspring_mode(struct bcm5974 *dev) | 356 | static int bcm5974_wellspring_mode(struct bcm5974 *dev, bool on) |
356 | { | 357 | { |
357 | char *data = kmalloc(8, GFP_KERNEL); | 358 | char *data = kmalloc(8, GFP_KERNEL); |
358 | int retval = 0, size; | 359 | int retval = 0, size; |
@@ -377,7 +378,9 @@ static int bcm5974_wellspring_mode(struct bcm5974 *dev) | |||
377 | } | 378 | } |
378 | 379 | ||
379 | /* apply the mode switch */ | 380 | /* apply the mode switch */ |
380 | data[0] = BCM5974_WELLSPRING_MODE_VENDOR_VALUE; | 381 | data[0] = on ? |
382 | BCM5974_WELLSPRING_MODE_VENDOR_VALUE : | ||
383 | BCM5974_WELLSPRING_MODE_NORMAL_VALUE; | ||
381 | 384 | ||
382 | /* write configuration */ | 385 | /* write configuration */ |
383 | size = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), | 386 | size = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), |
@@ -392,7 +395,8 @@ static int bcm5974_wellspring_mode(struct bcm5974 *dev) | |||
392 | goto out; | 395 | goto out; |
393 | } | 396 | } |
394 | 397 | ||
395 | dprintk(2, "bcm5974: switched to wellspring mode.\n"); | 398 | dprintk(2, "bcm5974: switched to %s mode.\n", |
399 | on ? "wellspring" : "normal"); | ||
396 | 400 | ||
397 | out: | 401 | out: |
398 | kfree(data); | 402 | kfree(data); |
@@ -481,7 +485,7 @@ exit: | |||
481 | */ | 485 | */ |
482 | static int bcm5974_start_traffic(struct bcm5974 *dev) | 486 | static int bcm5974_start_traffic(struct bcm5974 *dev) |
483 | { | 487 | { |
484 | if (bcm5974_wellspring_mode(dev)) { | 488 | if (bcm5974_wellspring_mode(dev, true)) { |
485 | dprintk(1, "bcm5974: mode switch failed\n"); | 489 | dprintk(1, "bcm5974: mode switch failed\n"); |
486 | goto error; | 490 | goto error; |
487 | } | 491 | } |
@@ -504,6 +508,7 @@ static void bcm5974_pause_traffic(struct bcm5974 *dev) | |||
504 | { | 508 | { |
505 | usb_kill_urb(dev->tp_urb); | 509 | usb_kill_urb(dev->tp_urb); |
506 | usb_kill_urb(dev->bt_urb); | 510 | usb_kill_urb(dev->bt_urb); |
511 | bcm5974_wellspring_mode(dev, false); | ||
507 | } | 512 | } |
508 | 513 | ||
509 | /* | 514 | /* |
diff --git a/drivers/input/touchscreen/jornada720_ts.c b/drivers/input/touchscreen/jornada720_ts.c index bf44f9d68342..c8b7e8a45c4d 100644 --- a/drivers/input/touchscreen/jornada720_ts.c +++ b/drivers/input/touchscreen/jornada720_ts.c | |||
@@ -119,8 +119,8 @@ static int __devinit jornada720_ts_probe(struct platform_device *pdev) | |||
119 | input_dev->id.bustype = BUS_HOST; | 119 | input_dev->id.bustype = BUS_HOST; |
120 | input_dev->dev.parent = &pdev->dev; | 120 | input_dev->dev.parent = &pdev->dev; |
121 | 121 | ||
122 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); | 122 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
123 | input_dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH); | 123 | input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); |
124 | input_set_abs_params(input_dev, ABS_X, 270, 3900, 0, 0); | 124 | input_set_abs_params(input_dev, ABS_X, 270, 3900, 0, 0); |
125 | input_set_abs_params(input_dev, ABS_Y, 180, 3700, 0, 0); | 125 | input_set_abs_params(input_dev, ABS_Y, 180, 3700, 0, 0); |
126 | 126 | ||
diff --git a/drivers/leds/leds-fsg.c b/drivers/leds/leds-fsg.c index be0e12144b8b..34935155c1c0 100644 --- a/drivers/leds/leds-fsg.c +++ b/drivers/leds/leds-fsg.c | |||
@@ -161,6 +161,16 @@ static int fsg_led_probe(struct platform_device *pdev) | |||
161 | { | 161 | { |
162 | int ret; | 162 | int ret; |
163 | 163 | ||
164 | /* Map the LED chip select address space */ | ||
165 | latch_address = (unsigned short *) ioremap(IXP4XX_EXP_BUS_BASE(2), 512); | ||
166 | if (!latch_address) { | ||
167 | ret = -ENOMEM; | ||
168 | goto failremap; | ||
169 | } | ||
170 | |||
171 | latch_value = 0xffff; | ||
172 | *latch_address = latch_value; | ||
173 | |||
164 | ret = led_classdev_register(&pdev->dev, &fsg_wlan_led); | 174 | ret = led_classdev_register(&pdev->dev, &fsg_wlan_led); |
165 | if (ret < 0) | 175 | if (ret < 0) |
166 | goto failwlan; | 176 | goto failwlan; |
@@ -185,20 +195,8 @@ static int fsg_led_probe(struct platform_device *pdev) | |||
185 | if (ret < 0) | 195 | if (ret < 0) |
186 | goto failring; | 196 | goto failring; |
187 | 197 | ||
188 | /* Map the LED chip select address space */ | ||
189 | latch_address = (unsigned short *) ioremap(IXP4XX_EXP_BUS_BASE(2), 512); | ||
190 | if (!latch_address) { | ||
191 | ret = -ENOMEM; | ||
192 | goto failremap; | ||
193 | } | ||
194 | |||
195 | latch_value = 0xffff; | ||
196 | *latch_address = latch_value; | ||
197 | |||
198 | return ret; | 198 | return ret; |
199 | 199 | ||
200 | failremap: | ||
201 | led_classdev_unregister(&fsg_ring_led); | ||
202 | failring: | 200 | failring: |
203 | led_classdev_unregister(&fsg_sync_led); | 201 | led_classdev_unregister(&fsg_sync_led); |
204 | failsync: | 202 | failsync: |
@@ -210,14 +208,14 @@ static int fsg_led_probe(struct platform_device *pdev) | |||
210 | failwan: | 208 | failwan: |
211 | led_classdev_unregister(&fsg_wlan_led); | 209 | led_classdev_unregister(&fsg_wlan_led); |
212 | failwlan: | 210 | failwlan: |
211 | iounmap(latch_address); | ||
212 | failremap: | ||
213 | 213 | ||
214 | return ret; | 214 | return ret; |
215 | } | 215 | } |
216 | 216 | ||
217 | static int fsg_led_remove(struct platform_device *pdev) | 217 | static int fsg_led_remove(struct platform_device *pdev) |
218 | { | 218 | { |
219 | iounmap(latch_address); | ||
220 | |||
221 | led_classdev_unregister(&fsg_wlan_led); | 219 | led_classdev_unregister(&fsg_wlan_led); |
222 | led_classdev_unregister(&fsg_wan_led); | 220 | led_classdev_unregister(&fsg_wan_led); |
223 | led_classdev_unregister(&fsg_sata_led); | 221 | led_classdev_unregister(&fsg_sata_led); |
@@ -225,6 +223,8 @@ static int fsg_led_remove(struct platform_device *pdev) | |||
225 | led_classdev_unregister(&fsg_sync_led); | 223 | led_classdev_unregister(&fsg_sync_led); |
226 | led_classdev_unregister(&fsg_ring_led); | 224 | led_classdev_unregister(&fsg_ring_led); |
227 | 225 | ||
226 | iounmap(latch_address); | ||
227 | |||
228 | return 0; | 228 | return 0; |
229 | } | 229 | } |
230 | 230 | ||
diff --git a/drivers/leds/leds-pca955x.c b/drivers/leds/leds-pca955x.c index 146c06972863..f508729123b5 100644 --- a/drivers/leds/leds-pca955x.c +++ b/drivers/leds/leds-pca955x.c | |||
@@ -248,11 +248,10 @@ static int __devinit pca955x_probe(struct i2c_client *client, | |||
248 | const struct i2c_device_id *id) | 248 | const struct i2c_device_id *id) |
249 | { | 249 | { |
250 | struct pca955x_led *pca955x; | 250 | struct pca955x_led *pca955x; |
251 | int i; | ||
252 | int err = -ENODEV; | ||
253 | struct pca955x_chipdef *chip; | 251 | struct pca955x_chipdef *chip; |
254 | struct i2c_adapter *adapter; | 252 | struct i2c_adapter *adapter; |
255 | struct led_platform_data *pdata; | 253 | struct led_platform_data *pdata; |
254 | int i, err; | ||
256 | 255 | ||
257 | chip = &pca955x_chipdefs[id->driver_data]; | 256 | chip = &pca955x_chipdefs[id->driver_data]; |
258 | adapter = to_i2c_adapter(client->dev.parent); | 257 | adapter = to_i2c_adapter(client->dev.parent); |
@@ -282,43 +281,41 @@ static int __devinit pca955x_probe(struct i2c_client *client, | |||
282 | } | 281 | } |
283 | } | 282 | } |
284 | 283 | ||
284 | pca955x = kzalloc(sizeof(*pca955x) * chip->bits, GFP_KERNEL); | ||
285 | if (!pca955x) | ||
286 | return -ENOMEM; | ||
287 | |||
288 | i2c_set_clientdata(client, pca955x); | ||
289 | |||
285 | for (i = 0; i < chip->bits; i++) { | 290 | for (i = 0; i < chip->bits; i++) { |
286 | pca955x = kzalloc(sizeof(struct pca955x_led), GFP_KERNEL); | 291 | pca955x[i].chipdef = chip; |
287 | if (!pca955x) { | 292 | pca955x[i].client = client; |
288 | err = -ENOMEM; | 293 | pca955x[i].led_num = i; |
289 | goto exit; | ||
290 | } | ||
291 | 294 | ||
292 | pca955x->chipdef = chip; | ||
293 | pca955x->client = client; | ||
294 | pca955x->led_num = i; | ||
295 | /* Platform data can specify LED names and default triggers */ | 295 | /* Platform data can specify LED names and default triggers */ |
296 | if (pdata) { | 296 | if (pdata) { |
297 | if (pdata->leds[i].name) | 297 | if (pdata->leds[i].name) |
298 | snprintf(pca955x->name, 32, "pca955x:%s", | 298 | snprintf(pca955x[i].name, |
299 | pdata->leds[i].name); | 299 | sizeof(pca955x[i].name), "pca955x:%s", |
300 | pdata->leds[i].name); | ||
300 | if (pdata->leds[i].default_trigger) | 301 | if (pdata->leds[i].default_trigger) |
301 | pca955x->led_cdev.default_trigger = | 302 | pca955x[i].led_cdev.default_trigger = |
302 | pdata->leds[i].default_trigger; | 303 | pdata->leds[i].default_trigger; |
303 | } else { | 304 | } else { |
304 | snprintf(pca955x->name, 32, "pca955x:%d", i); | 305 | snprintf(pca955x[i].name, sizeof(pca955x[i].name), |
306 | "pca955x:%d", i); | ||
305 | } | 307 | } |
306 | spin_lock_init(&pca955x->lock); | ||
307 | 308 | ||
308 | pca955x->led_cdev.name = pca955x->name; | 309 | spin_lock_init(&pca955x[i].lock); |
309 | pca955x->led_cdev.brightness_set = | ||
310 | pca955x_led_set; | ||
311 | 310 | ||
312 | /* | 311 | pca955x[i].led_cdev.name = pca955x[i].name; |
313 | * Client data is a pointer to the _first_ pca955x_led | 312 | pca955x[i].led_cdev.brightness_set = pca955x_led_set; |
314 | * struct | ||
315 | */ | ||
316 | if (i == 0) | ||
317 | i2c_set_clientdata(client, pca955x); | ||
318 | 313 | ||
319 | INIT_WORK(&(pca955x->work), pca955x_led_work); | 314 | INIT_WORK(&pca955x[i].work, pca955x_led_work); |
320 | 315 | ||
321 | led_classdev_register(&client->dev, &(pca955x->led_cdev)); | 316 | err = led_classdev_register(&client->dev, &pca955x[i].led_cdev); |
317 | if (err < 0) | ||
318 | goto exit; | ||
322 | } | 319 | } |
323 | 320 | ||
324 | /* Turn off LEDs */ | 321 | /* Turn off LEDs */ |
@@ -336,23 +333,32 @@ static int __devinit pca955x_probe(struct i2c_client *client, | |||
336 | pca955x_write_psc(client, 1, 0); | 333 | pca955x_write_psc(client, 1, 0); |
337 | 334 | ||
338 | return 0; | 335 | return 0; |
336 | |||
339 | exit: | 337 | exit: |
338 | while (i--) { | ||
339 | led_classdev_unregister(&pca955x[i].led_cdev); | ||
340 | cancel_work_sync(&pca955x[i].work); | ||
341 | } | ||
342 | |||
343 | kfree(pca955x); | ||
344 | i2c_set_clientdata(client, NULL); | ||
345 | |||
340 | return err; | 346 | return err; |
341 | } | 347 | } |
342 | 348 | ||
343 | static int __devexit pca955x_remove(struct i2c_client *client) | 349 | static int __devexit pca955x_remove(struct i2c_client *client) |
344 | { | 350 | { |
345 | struct pca955x_led *pca955x = i2c_get_clientdata(client); | 351 | struct pca955x_led *pca955x = i2c_get_clientdata(client); |
346 | int leds = pca955x->chipdef->bits; | ||
347 | int i; | 352 | int i; |
348 | 353 | ||
349 | for (i = 0; i < leds; i++) { | 354 | for (i = 0; i < pca955x->chipdef->bits; i++) { |
350 | led_classdev_unregister(&(pca955x->led_cdev)); | 355 | led_classdev_unregister(&pca955x[i].led_cdev); |
351 | cancel_work_sync(&(pca955x->work)); | 356 | cancel_work_sync(&pca955x[i].work); |
352 | kfree(pca955x); | ||
353 | pca955x = pca955x + 1; | ||
354 | } | 357 | } |
355 | 358 | ||
359 | kfree(pca955x); | ||
360 | i2c_set_clientdata(client, NULL); | ||
361 | |||
356 | return 0; | 362 | return 0; |
357 | } | 363 | } |
358 | 364 | ||
diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c index 71dd65aa31b6..c2fcf28b4c70 100644 --- a/drivers/md/dm-mpath.c +++ b/drivers/md/dm-mpath.c | |||
@@ -63,6 +63,7 @@ struct multipath { | |||
63 | 63 | ||
64 | const char *hw_handler_name; | 64 | const char *hw_handler_name; |
65 | struct work_struct activate_path; | 65 | struct work_struct activate_path; |
66 | struct pgpath *pgpath_to_activate; | ||
66 | unsigned nr_priority_groups; | 67 | unsigned nr_priority_groups; |
67 | struct list_head priority_groups; | 68 | struct list_head priority_groups; |
68 | unsigned pg_init_required; /* pg_init needs calling? */ | 69 | unsigned pg_init_required; /* pg_init needs calling? */ |
@@ -146,6 +147,7 @@ static struct priority_group *alloc_priority_group(void) | |||
146 | 147 | ||
147 | static void free_pgpaths(struct list_head *pgpaths, struct dm_target *ti) | 148 | static void free_pgpaths(struct list_head *pgpaths, struct dm_target *ti) |
148 | { | 149 | { |
150 | unsigned long flags; | ||
149 | struct pgpath *pgpath, *tmp; | 151 | struct pgpath *pgpath, *tmp; |
150 | struct multipath *m = ti->private; | 152 | struct multipath *m = ti->private; |
151 | 153 | ||
@@ -154,6 +156,10 @@ static void free_pgpaths(struct list_head *pgpaths, struct dm_target *ti) | |||
154 | if (m->hw_handler_name) | 156 | if (m->hw_handler_name) |
155 | scsi_dh_detach(bdev_get_queue(pgpath->path.dev->bdev)); | 157 | scsi_dh_detach(bdev_get_queue(pgpath->path.dev->bdev)); |
156 | dm_put_device(ti, pgpath->path.dev); | 158 | dm_put_device(ti, pgpath->path.dev); |
159 | spin_lock_irqsave(&m->lock, flags); | ||
160 | if (m->pgpath_to_activate == pgpath) | ||
161 | m->pgpath_to_activate = NULL; | ||
162 | spin_unlock_irqrestore(&m->lock, flags); | ||
157 | free_pgpath(pgpath); | 163 | free_pgpath(pgpath); |
158 | } | 164 | } |
159 | } | 165 | } |
@@ -421,6 +427,7 @@ static void process_queued_ios(struct work_struct *work) | |||
421 | __choose_pgpath(m); | 427 | __choose_pgpath(m); |
422 | 428 | ||
423 | pgpath = m->current_pgpath; | 429 | pgpath = m->current_pgpath; |
430 | m->pgpath_to_activate = m->current_pgpath; | ||
424 | 431 | ||
425 | if ((pgpath && !m->queue_io) || | 432 | if ((pgpath && !m->queue_io) || |
426 | (!pgpath && !m->queue_if_no_path)) | 433 | (!pgpath && !m->queue_if_no_path)) |
@@ -1093,8 +1100,15 @@ static void activate_path(struct work_struct *work) | |||
1093 | int ret; | 1100 | int ret; |
1094 | struct multipath *m = | 1101 | struct multipath *m = |
1095 | container_of(work, struct multipath, activate_path); | 1102 | container_of(work, struct multipath, activate_path); |
1096 | struct dm_path *path = &m->current_pgpath->path; | 1103 | struct dm_path *path; |
1104 | unsigned long flags; | ||
1097 | 1105 | ||
1106 | spin_lock_irqsave(&m->lock, flags); | ||
1107 | path = &m->pgpath_to_activate->path; | ||
1108 | m->pgpath_to_activate = NULL; | ||
1109 | spin_unlock_irqrestore(&m->lock, flags); | ||
1110 | if (!path) | ||
1111 | return; | ||
1098 | ret = scsi_dh_activate(bdev_get_queue(path->dev->bdev)); | 1112 | ret = scsi_dh_activate(bdev_get_queue(path->dev->bdev)); |
1099 | pg_init_done(path, ret); | 1113 | pg_init_done(path, ret); |
1100 | } | 1114 | } |
diff --git a/drivers/md/dm.c b/drivers/md/dm.c index bca448e11878..ace998ce59f6 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c | |||
@@ -837,12 +837,14 @@ static int dm_merge_bvec(struct request_queue *q, | |||
837 | struct dm_table *map = dm_get_table(md); | 837 | struct dm_table *map = dm_get_table(md); |
838 | struct dm_target *ti; | 838 | struct dm_target *ti; |
839 | sector_t max_sectors; | 839 | sector_t max_sectors; |
840 | int max_size; | 840 | int max_size = 0; |
841 | 841 | ||
842 | if (unlikely(!map)) | 842 | if (unlikely(!map)) |
843 | return 0; | 843 | goto out; |
844 | 844 | ||
845 | ti = dm_table_find_target(map, bvm->bi_sector); | 845 | ti = dm_table_find_target(map, bvm->bi_sector); |
846 | if (!dm_target_is_valid(ti)) | ||
847 | goto out_table; | ||
846 | 848 | ||
847 | /* | 849 | /* |
848 | * Find maximum amount of I/O that won't need splitting | 850 | * Find maximum amount of I/O that won't need splitting |
@@ -861,14 +863,16 @@ static int dm_merge_bvec(struct request_queue *q, | |||
861 | if (max_size && ti->type->merge) | 863 | if (max_size && ti->type->merge) |
862 | max_size = ti->type->merge(ti, bvm, biovec, max_size); | 864 | max_size = ti->type->merge(ti, bvm, biovec, max_size); |
863 | 865 | ||
866 | out_table: | ||
867 | dm_table_put(map); | ||
868 | |||
869 | out: | ||
864 | /* | 870 | /* |
865 | * Always allow an entire first page | 871 | * Always allow an entire first page |
866 | */ | 872 | */ |
867 | if (max_size <= biovec->bv_len && !(bvm->bi_size >> SECTOR_SHIFT)) | 873 | if (max_size <= biovec->bv_len && !(bvm->bi_size >> SECTOR_SHIFT)) |
868 | max_size = biovec->bv_len; | 874 | max_size = biovec->bv_len; |
869 | 875 | ||
870 | dm_table_put(map); | ||
871 | |||
872 | return max_size; | 876 | return max_size; |
873 | } | 877 | } |
874 | 878 | ||
diff --git a/drivers/md/md.c b/drivers/md/md.c index 4790c83d78d0..deeac4b44173 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -5761,7 +5761,11 @@ void md_do_sync(mddev_t *mddev) | |||
5761 | * time 'round when curr_resync == 2 | 5761 | * time 'round when curr_resync == 2 |
5762 | */ | 5762 | */ |
5763 | continue; | 5763 | continue; |
5764 | prepare_to_wait(&resync_wait, &wq, TASK_UNINTERRUPTIBLE); | 5764 | /* We need to wait 'interruptible' so as not to |
5765 | * contribute to the load average, and not to | ||
5766 | * be caught by 'softlockup' | ||
5767 | */ | ||
5768 | prepare_to_wait(&resync_wait, &wq, TASK_INTERRUPTIBLE); | ||
5765 | if (!kthread_should_stop() && | 5769 | if (!kthread_should_stop() && |
5766 | mddev2->curr_resync >= mddev->curr_resync) { | 5770 | mddev2->curr_resync >= mddev->curr_resync) { |
5767 | printk(KERN_INFO "md: delaying %s of %s" | 5771 | printk(KERN_INFO "md: delaying %s of %s" |
@@ -5769,6 +5773,8 @@ void md_do_sync(mddev_t *mddev) | |||
5769 | " share one or more physical units)\n", | 5773 | " share one or more physical units)\n", |
5770 | desc, mdname(mddev), mdname(mddev2)); | 5774 | desc, mdname(mddev), mdname(mddev2)); |
5771 | mddev_put(mddev2); | 5775 | mddev_put(mddev2); |
5776 | if (signal_pending(current)) | ||
5777 | flush_signals(current); | ||
5772 | schedule(); | 5778 | schedule(); |
5773 | finish_wait(&resync_wait, &wq); | 5779 | finish_wait(&resync_wait, &wq); |
5774 | goto try_again; | 5780 | goto try_again; |
diff --git a/drivers/media/common/tuners/tuner-xc2028.h b/drivers/media/common/tuners/tuner-xc2028.h index 216025cf5d4b..2c5b6282b569 100644 --- a/drivers/media/common/tuners/tuner-xc2028.h +++ b/drivers/media/common/tuners/tuner-xc2028.h | |||
@@ -10,6 +10,7 @@ | |||
10 | #include "dvb_frontend.h" | 10 | #include "dvb_frontend.h" |
11 | 11 | ||
12 | #define XC2028_DEFAULT_FIRMWARE "xc3028-v27.fw" | 12 | #define XC2028_DEFAULT_FIRMWARE "xc3028-v27.fw" |
13 | #define XC3028L_DEFAULT_FIRMWARE "xc3028L-v36.fw" | ||
13 | 14 | ||
14 | /* Dmoduler IF (kHz) */ | 15 | /* Dmoduler IF (kHz) */ |
15 | #define XC3028_FE_DEFAULT 0 /* Don't load SCODE */ | 16 | #define XC3028_FE_DEFAULT 0 /* Don't load SCODE */ |
diff --git a/drivers/media/dvb/b2c2/flexcop-fe-tuner.c b/drivers/media/dvb/b2c2/flexcop-fe-tuner.c index 4eed783f4bce..a127a4175c40 100644 --- a/drivers/media/dvb/b2c2/flexcop-fe-tuner.c +++ b/drivers/media/dvb/b2c2/flexcop-fe-tuner.c | |||
@@ -491,6 +491,7 @@ static struct s5h1420_config skystar2_rev2_7_s5h1420_config = { | |||
491 | .demod_address = 0x53, | 491 | .demod_address = 0x53, |
492 | .invert = 1, | 492 | .invert = 1, |
493 | .repeated_start_workaround = 1, | 493 | .repeated_start_workaround = 1, |
494 | .serial_mpeg = 1, | ||
494 | }; | 495 | }; |
495 | 496 | ||
496 | static struct itd1000_config skystar2_rev2_7_itd1000_config = { | 497 | static struct itd1000_config skystar2_rev2_7_itd1000_config = { |
diff --git a/drivers/media/dvb/dvb-core/dmxdev.c b/drivers/media/dvb/dvb-core/dmxdev.c index 069d847ba887..0c733c66a441 100644 --- a/drivers/media/dvb/dvb-core/dmxdev.c +++ b/drivers/media/dvb/dvb-core/dmxdev.c | |||
@@ -364,15 +364,16 @@ static int dvb_dmxdev_section_callback(const u8 *buffer1, size_t buffer1_len, | |||
364 | enum dmx_success success) | 364 | enum dmx_success success) |
365 | { | 365 | { |
366 | struct dmxdev_filter *dmxdevfilter = filter->priv; | 366 | struct dmxdev_filter *dmxdevfilter = filter->priv; |
367 | unsigned long flags; | ||
367 | int ret; | 368 | int ret; |
368 | 369 | ||
369 | if (dmxdevfilter->buffer.error) { | 370 | if (dmxdevfilter->buffer.error) { |
370 | wake_up(&dmxdevfilter->buffer.queue); | 371 | wake_up(&dmxdevfilter->buffer.queue); |
371 | return 0; | 372 | return 0; |
372 | } | 373 | } |
373 | spin_lock(&dmxdevfilter->dev->lock); | 374 | spin_lock_irqsave(&dmxdevfilter->dev->lock, flags); |
374 | if (dmxdevfilter->state != DMXDEV_STATE_GO) { | 375 | if (dmxdevfilter->state != DMXDEV_STATE_GO) { |
375 | spin_unlock(&dmxdevfilter->dev->lock); | 376 | spin_unlock_irqrestore(&dmxdevfilter->dev->lock, flags); |
376 | return 0; | 377 | return 0; |
377 | } | 378 | } |
378 | del_timer(&dmxdevfilter->timer); | 379 | del_timer(&dmxdevfilter->timer); |
@@ -391,7 +392,7 @@ static int dvb_dmxdev_section_callback(const u8 *buffer1, size_t buffer1_len, | |||
391 | } | 392 | } |
392 | if (dmxdevfilter->params.sec.flags & DMX_ONESHOT) | 393 | if (dmxdevfilter->params.sec.flags & DMX_ONESHOT) |
393 | dmxdevfilter->state = DMXDEV_STATE_DONE; | 394 | dmxdevfilter->state = DMXDEV_STATE_DONE; |
394 | spin_unlock(&dmxdevfilter->dev->lock); | 395 | spin_unlock_irqrestore(&dmxdevfilter->dev->lock, flags); |
395 | wake_up(&dmxdevfilter->buffer.queue); | 396 | wake_up(&dmxdevfilter->buffer.queue); |
396 | return 0; | 397 | return 0; |
397 | } | 398 | } |
@@ -403,11 +404,12 @@ static int dvb_dmxdev_ts_callback(const u8 *buffer1, size_t buffer1_len, | |||
403 | { | 404 | { |
404 | struct dmxdev_filter *dmxdevfilter = feed->priv; | 405 | struct dmxdev_filter *dmxdevfilter = feed->priv; |
405 | struct dvb_ringbuffer *buffer; | 406 | struct dvb_ringbuffer *buffer; |
407 | unsigned long flags; | ||
406 | int ret; | 408 | int ret; |
407 | 409 | ||
408 | spin_lock(&dmxdevfilter->dev->lock); | 410 | spin_lock_irqsave(&dmxdevfilter->dev->lock, flags); |
409 | if (dmxdevfilter->params.pes.output == DMX_OUT_DECODER) { | 411 | if (dmxdevfilter->params.pes.output == DMX_OUT_DECODER) { |
410 | spin_unlock(&dmxdevfilter->dev->lock); | 412 | spin_unlock_irqrestore(&dmxdevfilter->dev->lock, flags); |
411 | return 0; | 413 | return 0; |
412 | } | 414 | } |
413 | 415 | ||
@@ -417,7 +419,7 @@ static int dvb_dmxdev_ts_callback(const u8 *buffer1, size_t buffer1_len, | |||
417 | else | 419 | else |
418 | buffer = &dmxdevfilter->dev->dvr_buffer; | 420 | buffer = &dmxdevfilter->dev->dvr_buffer; |
419 | if (buffer->error) { | 421 | if (buffer->error) { |
420 | spin_unlock(&dmxdevfilter->dev->lock); | 422 | spin_unlock_irqrestore(&dmxdevfilter->dev->lock, flags); |
421 | wake_up(&buffer->queue); | 423 | wake_up(&buffer->queue); |
422 | return 0; | 424 | return 0; |
423 | } | 425 | } |
@@ -428,7 +430,7 @@ static int dvb_dmxdev_ts_callback(const u8 *buffer1, size_t buffer1_len, | |||
428 | dvb_ringbuffer_flush(buffer); | 430 | dvb_ringbuffer_flush(buffer); |
429 | buffer->error = ret; | 431 | buffer->error = ret; |
430 | } | 432 | } |
431 | spin_unlock(&dmxdevfilter->dev->lock); | 433 | spin_unlock_irqrestore(&dmxdevfilter->dev->lock, flags); |
432 | wake_up(&buffer->queue); | 434 | wake_up(&buffer->queue); |
433 | return 0; | 435 | return 0; |
434 | } | 436 | } |
diff --git a/drivers/media/dvb/dvb-core/dvb_demux.c b/drivers/media/dvb/dvb-core/dvb_demux.c index e2eca0b1fe7c..a2c1fd5d2f67 100644 --- a/drivers/media/dvb/dvb-core/dvb_demux.c +++ b/drivers/media/dvb/dvb-core/dvb_demux.c | |||
@@ -399,7 +399,9 @@ static void dvb_dmx_swfilter_packet(struct dvb_demux *demux, const u8 *buf) | |||
399 | void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf, | 399 | void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf, |
400 | size_t count) | 400 | size_t count) |
401 | { | 401 | { |
402 | spin_lock(&demux->lock); | 402 | unsigned long flags; |
403 | |||
404 | spin_lock_irqsave(&demux->lock, flags); | ||
403 | 405 | ||
404 | while (count--) { | 406 | while (count--) { |
405 | if (buf[0] == 0x47) | 407 | if (buf[0] == 0x47) |
@@ -407,16 +409,17 @@ void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf, | |||
407 | buf += 188; | 409 | buf += 188; |
408 | } | 410 | } |
409 | 411 | ||
410 | spin_unlock(&demux->lock); | 412 | spin_unlock_irqrestore(&demux->lock, flags); |
411 | } | 413 | } |
412 | 414 | ||
413 | EXPORT_SYMBOL(dvb_dmx_swfilter_packets); | 415 | EXPORT_SYMBOL(dvb_dmx_swfilter_packets); |
414 | 416 | ||
415 | void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count) | 417 | void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count) |
416 | { | 418 | { |
419 | unsigned long flags; | ||
417 | int p = 0, i, j; | 420 | int p = 0, i, j; |
418 | 421 | ||
419 | spin_lock(&demux->lock); | 422 | spin_lock_irqsave(&demux->lock, flags); |
420 | 423 | ||
421 | if (demux->tsbufp) { | 424 | if (demux->tsbufp) { |
422 | i = demux->tsbufp; | 425 | i = demux->tsbufp; |
@@ -449,17 +452,18 @@ void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count) | |||
449 | } | 452 | } |
450 | 453 | ||
451 | bailout: | 454 | bailout: |
452 | spin_unlock(&demux->lock); | 455 | spin_unlock_irqrestore(&demux->lock, flags); |
453 | } | 456 | } |
454 | 457 | ||
455 | EXPORT_SYMBOL(dvb_dmx_swfilter); | 458 | EXPORT_SYMBOL(dvb_dmx_swfilter); |
456 | 459 | ||
457 | void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf, size_t count) | 460 | void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf, size_t count) |
458 | { | 461 | { |
462 | unsigned long flags; | ||
459 | int p = 0, i, j; | 463 | int p = 0, i, j; |
460 | u8 tmppack[188]; | 464 | u8 tmppack[188]; |
461 | 465 | ||
462 | spin_lock(&demux->lock); | 466 | spin_lock_irqsave(&demux->lock, flags); |
463 | 467 | ||
464 | if (demux->tsbufp) { | 468 | if (demux->tsbufp) { |
465 | i = demux->tsbufp; | 469 | i = demux->tsbufp; |
@@ -500,7 +504,7 @@ void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf, size_t count) | |||
500 | } | 504 | } |
501 | 505 | ||
502 | bailout: | 506 | bailout: |
503 | spin_unlock(&demux->lock); | 507 | spin_unlock_irqrestore(&demux->lock, flags); |
504 | } | 508 | } |
505 | 509 | ||
506 | EXPORT_SYMBOL(dvb_dmx_swfilter_204); | 510 | EXPORT_SYMBOL(dvb_dmx_swfilter_204); |
diff --git a/drivers/media/dvb/frontends/s5h1420.c b/drivers/media/dvb/frontends/s5h1420.c index 747d3fa2e5e5..2e9fd2893ede 100644 --- a/drivers/media/dvb/frontends/s5h1420.c +++ b/drivers/media/dvb/frontends/s5h1420.c | |||
@@ -59,7 +59,7 @@ struct s5h1420_state { | |||
59 | * it does not support repeated-start, workaround: write addr-1 | 59 | * it does not support repeated-start, workaround: write addr-1 |
60 | * and then read | 60 | * and then read |
61 | */ | 61 | */ |
62 | u8 shadow[255]; | 62 | u8 shadow[256]; |
63 | }; | 63 | }; |
64 | 64 | ||
65 | static u32 s5h1420_getsymbolrate(struct s5h1420_state* state); | 65 | static u32 s5h1420_getsymbolrate(struct s5h1420_state* state); |
@@ -94,8 +94,11 @@ static u8 s5h1420_readreg(struct s5h1420_state *state, u8 reg) | |||
94 | if (ret != 3) | 94 | if (ret != 3) |
95 | return ret; | 95 | return ret; |
96 | } else { | 96 | } else { |
97 | ret = i2c_transfer(state->i2c, &msg[1], 2); | 97 | ret = i2c_transfer(state->i2c, &msg[1], 1); |
98 | if (ret != 2) | 98 | if (ret != 1) |
99 | return ret; | ||
100 | ret = i2c_transfer(state->i2c, &msg[2], 1); | ||
101 | if (ret != 1) | ||
99 | return ret; | 102 | return ret; |
100 | } | 103 | } |
101 | 104 | ||
@@ -823,7 +826,7 @@ static int s5h1420_init (struct dvb_frontend* fe) | |||
823 | struct s5h1420_state* state = fe->demodulator_priv; | 826 | struct s5h1420_state* state = fe->demodulator_priv; |
824 | 827 | ||
825 | /* disable power down and do reset */ | 828 | /* disable power down and do reset */ |
826 | state->CON_1_val = 0x10; | 829 | state->CON_1_val = state->config->serial_mpeg << 4; |
827 | s5h1420_writereg(state, 0x02, state->CON_1_val); | 830 | s5h1420_writereg(state, 0x02, state->CON_1_val); |
828 | msleep(10); | 831 | msleep(10); |
829 | s5h1420_reset(state); | 832 | s5h1420_reset(state); |
diff --git a/drivers/media/dvb/frontends/s5h1420.h b/drivers/media/dvb/frontends/s5h1420.h index 4c913f142bc4..ff308136d865 100644 --- a/drivers/media/dvb/frontends/s5h1420.h +++ b/drivers/media/dvb/frontends/s5h1420.h | |||
@@ -32,10 +32,12 @@ struct s5h1420_config | |||
32 | u8 demod_address; | 32 | u8 demod_address; |
33 | 33 | ||
34 | /* does the inversion require inversion? */ | 34 | /* does the inversion require inversion? */ |
35 | u8 invert : 1; | 35 | u8 invert:1; |
36 | 36 | ||
37 | u8 repeated_start_workaround : 1; | 37 | u8 repeated_start_workaround:1; |
38 | u8 cdclk_polarity : 1; /* 1 == falling edge, 0 == raising edge */ | 38 | u8 cdclk_polarity:1; /* 1 == falling edge, 0 == raising edge */ |
39 | |||
40 | u8 serial_mpeg:1; | ||
39 | }; | 41 | }; |
40 | 42 | ||
41 | #if defined(CONFIG_DVB_S5H1420) || (defined(CONFIG_DVB_S5H1420_MODULE) && defined(MODULE)) | 43 | #if defined(CONFIG_DVB_S5H1420) || (defined(CONFIG_DVB_S5H1420_MODULE) && defined(MODULE)) |
diff --git a/drivers/media/dvb/siano/sms-cards.c b/drivers/media/dvb/siano/sms-cards.c index cc5efb643f33..9da260fe3fd1 100644 --- a/drivers/media/dvb/siano/sms-cards.c +++ b/drivers/media/dvb/siano/sms-cards.c | |||
@@ -40,6 +40,8 @@ struct usb_device_id smsusb_id_table[] = { | |||
40 | .driver_info = SMS1XXX_BOARD_HAUPPAUGE_OKEMO_B }, | 40 | .driver_info = SMS1XXX_BOARD_HAUPPAUGE_OKEMO_B }, |
41 | { USB_DEVICE(0x2040, 0x5500), | 41 | { USB_DEVICE(0x2040, 0x5500), |
42 | .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, | 42 | .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, |
43 | { USB_DEVICE(0x2040, 0x5510), | ||
44 | .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, | ||
43 | { USB_DEVICE(0x2040, 0x5580), | 45 | { USB_DEVICE(0x2040, 0x5580), |
44 | .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, | 46 | .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, |
45 | { USB_DEVICE(0x2040, 0x5590), | 47 | { USB_DEVICE(0x2040, 0x5590), |
@@ -87,7 +89,7 @@ static struct sms_board sms_boards[] = { | |||
87 | .fw[DEVICE_MODE_DVBT_BDA] = "sms1xxx-nova-b-dvbt-01.fw", | 89 | .fw[DEVICE_MODE_DVBT_BDA] = "sms1xxx-nova-b-dvbt-01.fw", |
88 | }, | 90 | }, |
89 | [SMS1XXX_BOARD_HAUPPAUGE_WINDHAM] = { | 91 | [SMS1XXX_BOARD_HAUPPAUGE_WINDHAM] = { |
90 | .name = "Hauppauge WinTV-Nova-T-MiniStick", | 92 | .name = "Hauppauge WinTV MiniStick", |
91 | .type = SMS_NOVA_B0, | 93 | .type = SMS_NOVA_B0, |
92 | .fw[DEVICE_MODE_DVBT_BDA] = "sms1xxx-hcw-55xxx-dvbt-01.fw", | 94 | .fw[DEVICE_MODE_DVBT_BDA] = "sms1xxx-hcw-55xxx-dvbt-01.fw", |
93 | }, | 95 | }, |
diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig index ecbfa1b39b70..3e9e0dcd217e 100644 --- a/drivers/media/video/Kconfig +++ b/drivers/media/video/Kconfig | |||
@@ -968,7 +968,7 @@ config VIDEO_PXA27x | |||
968 | 968 | ||
969 | config VIDEO_SH_MOBILE_CEU | 969 | config VIDEO_SH_MOBILE_CEU |
970 | tristate "SuperH Mobile CEU Interface driver" | 970 | tristate "SuperH Mobile CEU Interface driver" |
971 | depends on VIDEO_DEV | 971 | depends on VIDEO_DEV && HAS_DMA |
972 | select SOC_CAMERA | 972 | select SOC_CAMERA |
973 | select VIDEOBUF_DMA_CONTIG | 973 | select VIDEOBUF_DMA_CONTIG |
974 | ---help--- | 974 | ---help--- |
diff --git a/drivers/media/video/bt8xx/bttv-driver.c b/drivers/media/video/bt8xx/bttv-driver.c index 6ae4cc860efe..933eaef41ead 100644 --- a/drivers/media/video/bt8xx/bttv-driver.c +++ b/drivers/media/video/bt8xx/bttv-driver.c | |||
@@ -3431,7 +3431,7 @@ static int radio_open(struct inode *inode, struct file *file) | |||
3431 | dprintk("bttv: open minor=%d\n",minor); | 3431 | dprintk("bttv: open minor=%d\n",minor); |
3432 | 3432 | ||
3433 | for (i = 0; i < bttv_num; i++) { | 3433 | for (i = 0; i < bttv_num; i++) { |
3434 | if (bttvs[i].radio_dev->minor == minor) { | 3434 | if (bttvs[i].radio_dev && bttvs[i].radio_dev->minor == minor) { |
3435 | btv = &bttvs[i]; | 3435 | btv = &bttvs[i]; |
3436 | break; | 3436 | break; |
3437 | } | 3437 | } |
diff --git a/drivers/media/video/cafe_ccic.c b/drivers/media/video/cafe_ccic.c index c149b7d712e5..5405c30dbb04 100644 --- a/drivers/media/video/cafe_ccic.c +++ b/drivers/media/video/cafe_ccic.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/module.h> | 19 | #include <linux/module.h> |
20 | #include <linux/init.h> | 20 | #include <linux/init.h> |
21 | #include <linux/fs.h> | 21 | #include <linux/fs.h> |
22 | #include <linux/mm.h> | ||
22 | #include <linux/pci.h> | 23 | #include <linux/pci.h> |
23 | #include <linux/i2c.h> | 24 | #include <linux/i2c.h> |
24 | #include <linux/interrupt.h> | 25 | #include <linux/interrupt.h> |
diff --git a/drivers/media/video/cpia2/cpia2_usb.c b/drivers/media/video/cpia2/cpia2_usb.c index a4574740350d..a8a199047cbd 100644 --- a/drivers/media/video/cpia2/cpia2_usb.c +++ b/drivers/media/video/cpia2/cpia2_usb.c | |||
@@ -632,7 +632,7 @@ int cpia2_usb_transfer_cmd(struct camera_data *cam, | |||
632 | static int submit_urbs(struct camera_data *cam) | 632 | static int submit_urbs(struct camera_data *cam) |
633 | { | 633 | { |
634 | struct urb *urb; | 634 | struct urb *urb; |
635 | int fx, err, i; | 635 | int fx, err, i, j; |
636 | 636 | ||
637 | for(i=0; i<NUM_SBUF; ++i) { | 637 | for(i=0; i<NUM_SBUF; ++i) { |
638 | if (cam->sbuf[i].data) | 638 | if (cam->sbuf[i].data) |
@@ -657,6 +657,9 @@ static int submit_urbs(struct camera_data *cam) | |||
657 | } | 657 | } |
658 | urb = usb_alloc_urb(FRAMES_PER_DESC, GFP_KERNEL); | 658 | urb = usb_alloc_urb(FRAMES_PER_DESC, GFP_KERNEL); |
659 | if (!urb) { | 659 | if (!urb) { |
660 | ERR("%s: usb_alloc_urb error!\n", __func__); | ||
661 | for (j = 0; j < i; j++) | ||
662 | usb_free_urb(cam->sbuf[j].urb); | ||
660 | return -ENOMEM; | 663 | return -ENOMEM; |
661 | } | 664 | } |
662 | 665 | ||
diff --git a/drivers/media/video/cx18/cx18-cards.c b/drivers/media/video/cx18/cx18-cards.c index 8fe5f38c4d7c..3cb9734ec07b 100644 --- a/drivers/media/video/cx18/cx18-cards.c +++ b/drivers/media/video/cx18/cx18-cards.c | |||
@@ -163,7 +163,7 @@ static const struct cx18_card cx18_card_h900 = { | |||
163 | }, | 163 | }, |
164 | .audio_inputs = { | 164 | .audio_inputs = { |
165 | { CX18_CARD_INPUT_AUD_TUNER, | 165 | { CX18_CARD_INPUT_AUD_TUNER, |
166 | CX18_AV_AUDIO8, 0 }, | 166 | CX18_AV_AUDIO5, 0 }, |
167 | { CX18_CARD_INPUT_LINE_IN1, | 167 | { CX18_CARD_INPUT_LINE_IN1, |
168 | CX18_AV_AUDIO_SERIAL1, 0 }, | 168 | CX18_AV_AUDIO_SERIAL1, 0 }, |
169 | }, | 169 | }, |
diff --git a/drivers/media/video/em28xx/em28xx-audio.c b/drivers/media/video/em28xx/em28xx-audio.c index 3c006103c1eb..ac3292d7646c 100644 --- a/drivers/media/video/em28xx/em28xx-audio.c +++ b/drivers/media/video/em28xx/em28xx-audio.c | |||
@@ -117,10 +117,10 @@ static void em28xx_audio_isocirq(struct urb *urb) | |||
117 | 117 | ||
118 | if (oldptr + length >= runtime->buffer_size) { | 118 | if (oldptr + length >= runtime->buffer_size) { |
119 | unsigned int cnt = | 119 | unsigned int cnt = |
120 | runtime->buffer_size - oldptr - 1; | 120 | runtime->buffer_size - oldptr; |
121 | memcpy(runtime->dma_area + oldptr * stride, cp, | 121 | memcpy(runtime->dma_area + oldptr * stride, cp, |
122 | cnt * stride); | 122 | cnt * stride); |
123 | memcpy(runtime->dma_area, cp + cnt, | 123 | memcpy(runtime->dma_area, cp + cnt * stride, |
124 | length * stride - cnt * stride); | 124 | length * stride - cnt * stride); |
125 | } else { | 125 | } else { |
126 | memcpy(runtime->dma_area + oldptr * stride, cp, | 126 | memcpy(runtime->dma_area + oldptr * stride, cp, |
@@ -161,8 +161,14 @@ static int em28xx_init_audio_isoc(struct em28xx *dev) | |||
161 | 161 | ||
162 | memset(dev->adev->transfer_buffer[i], 0x80, sb_size); | 162 | memset(dev->adev->transfer_buffer[i], 0x80, sb_size); |
163 | urb = usb_alloc_urb(EM28XX_NUM_AUDIO_PACKETS, GFP_ATOMIC); | 163 | urb = usb_alloc_urb(EM28XX_NUM_AUDIO_PACKETS, GFP_ATOMIC); |
164 | if (!urb) | 164 | if (!urb) { |
165 | em28xx_errdev("usb_alloc_urb failed!\n"); | ||
166 | for (j = 0; j < i; j++) { | ||
167 | usb_free_urb(dev->adev->urb[j]); | ||
168 | kfree(dev->adev->transfer_buffer[j]); | ||
169 | } | ||
165 | return -ENOMEM; | 170 | return -ENOMEM; |
171 | } | ||
166 | 172 | ||
167 | urb->dev = dev->udev; | 173 | urb->dev = dev->udev; |
168 | urb->context = dev; | 174 | urb->context = dev; |
diff --git a/drivers/media/video/em28xx/em28xx-cards.c b/drivers/media/video/em28xx/em28xx-cards.c index 452da70e719f..de943cf6c169 100644 --- a/drivers/media/video/em28xx/em28xx-cards.c +++ b/drivers/media/video/em28xx/em28xx-cards.c | |||
@@ -93,28 +93,6 @@ struct em28xx_board em28xx_boards[] = { | |||
93 | .amux = 0, | 93 | .amux = 0, |
94 | } }, | 94 | } }, |
95 | }, | 95 | }, |
96 | [EM2800_BOARD_KWORLD_USB2800] = { | ||
97 | .name = "Kworld USB2800", | ||
98 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
99 | .is_em2800 = 1, | ||
100 | .vchannels = 3, | ||
101 | .tuner_type = TUNER_PHILIPS_FCV1236D, | ||
102 | .tda9887_conf = TDA9887_PRESENT, | ||
103 | .decoder = EM28XX_SAA7113, | ||
104 | .input = { { | ||
105 | .type = EM28XX_VMUX_TELEVISION, | ||
106 | .vmux = SAA7115_COMPOSITE2, | ||
107 | .amux = 0, | ||
108 | }, { | ||
109 | .type = EM28XX_VMUX_COMPOSITE1, | ||
110 | .vmux = SAA7115_COMPOSITE0, | ||
111 | .amux = 1, | ||
112 | }, { | ||
113 | .type = EM28XX_VMUX_SVIDEO, | ||
114 | .vmux = SAA7115_SVIDEO3, | ||
115 | .amux = 1, | ||
116 | } }, | ||
117 | }, | ||
118 | [EM2820_BOARD_KWORLD_PVRTV2800RF] = { | 96 | [EM2820_BOARD_KWORLD_PVRTV2800RF] = { |
119 | .name = "Kworld PVR TV 2800 RF", | 97 | .name = "Kworld PVR TV 2800 RF", |
120 | .is_em2800 = 0, | 98 | .is_em2800 = 0, |
@@ -599,7 +577,7 @@ struct em28xx_board em28xx_boards[] = { | |||
599 | }, { | 577 | }, { |
600 | .type = EM28XX_VMUX_COMPOSITE1, | 578 | .type = EM28XX_VMUX_COMPOSITE1, |
601 | .vmux = TVP5150_COMPOSITE1, | 579 | .vmux = TVP5150_COMPOSITE1, |
602 | .amux = 1, | 580 | .amux = 3, |
603 | }, { | 581 | }, { |
604 | .type = EM28XX_VMUX_SVIDEO, | 582 | .type = EM28XX_VMUX_SVIDEO, |
605 | .vmux = TVP5150_SVIDEO, | 583 | .vmux = TVP5150_SVIDEO, |
@@ -952,22 +930,23 @@ struct em28xx_board em28xx_boards[] = { | |||
952 | }, | 930 | }, |
953 | [EM2880_BOARD_KWORLD_DVB_310U] = { | 931 | [EM2880_BOARD_KWORLD_DVB_310U] = { |
954 | .name = "KWorld DVB-T 310U", | 932 | .name = "KWorld DVB-T 310U", |
955 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
956 | .vchannels = 3, | 933 | .vchannels = 3, |
957 | .tuner_type = TUNER_XC2028, | 934 | .tuner_type = TUNER_XC2028, |
935 | .has_dvb = 1, | ||
936 | .mts_firmware = 1, | ||
958 | .decoder = EM28XX_TVP5150, | 937 | .decoder = EM28XX_TVP5150, |
959 | .input = { { | 938 | .input = { { |
960 | .type = EM28XX_VMUX_TELEVISION, | 939 | .type = EM28XX_VMUX_TELEVISION, |
961 | .vmux = TVP5150_COMPOSITE0, | 940 | .vmux = TVP5150_COMPOSITE0, |
962 | .amux = 0, | 941 | .amux = EM28XX_AMUX_VIDEO, |
963 | }, { | 942 | }, { |
964 | .type = EM28XX_VMUX_COMPOSITE1, | 943 | .type = EM28XX_VMUX_COMPOSITE1, |
965 | .vmux = TVP5150_COMPOSITE1, | 944 | .vmux = TVP5150_COMPOSITE1, |
966 | .amux = 1, | 945 | .amux = EM28XX_AMUX_AC97_LINE_IN, |
967 | }, { | 946 | }, { /* S-video has not been tested yet */ |
968 | .type = EM28XX_VMUX_SVIDEO, | 947 | .type = EM28XX_VMUX_SVIDEO, |
969 | .vmux = TVP5150_SVIDEO, | 948 | .vmux = TVP5150_SVIDEO, |
970 | .amux = 1, | 949 | .amux = EM28XX_AMUX_AC97_LINE_IN, |
971 | } }, | 950 | } }, |
972 | }, | 951 | }, |
973 | [EM2881_BOARD_DNT_DA2_HYBRID] = { | 952 | [EM2881_BOARD_DNT_DA2_HYBRID] = { |
@@ -1282,6 +1261,7 @@ static struct em28xx_reg_seq em2882_terratec_hybrid_xs_digital[] = { | |||
1282 | static struct em28xx_hash_table em28xx_eeprom_hash [] = { | 1261 | static struct em28xx_hash_table em28xx_eeprom_hash [] = { |
1283 | /* P/N: SA 60002070465 Tuner: TVF7533-MF */ | 1262 | /* P/N: SA 60002070465 Tuner: TVF7533-MF */ |
1284 | {0x6ce05a8f, EM2820_BOARD_PROLINK_PLAYTV_USB2, TUNER_YMEC_TVF_5533MF}, | 1263 | {0x6ce05a8f, EM2820_BOARD_PROLINK_PLAYTV_USB2, TUNER_YMEC_TVF_5533MF}, |
1264 | {0x966a0441, EM2880_BOARD_KWORLD_DVB_310U, TUNER_XC2028}, | ||
1285 | }; | 1265 | }; |
1286 | 1266 | ||
1287 | /* I2C devicelist hash table for devices with generic USB IDs */ | 1267 | /* I2C devicelist hash table for devices with generic USB IDs */ |
@@ -1552,9 +1532,12 @@ static void em28xx_setup_xc3028(struct em28xx *dev, struct xc2028_ctrl *ctl) | |||
1552 | /* djh - Not sure which demod we need here */ | 1532 | /* djh - Not sure which demod we need here */ |
1553 | ctl->demod = XC3028_FE_DEFAULT; | 1533 | ctl->demod = XC3028_FE_DEFAULT; |
1554 | break; | 1534 | break; |
1535 | case EM2880_BOARD_AMD_ATI_TV_WONDER_HD_600: | ||
1536 | ctl->demod = XC3028_FE_DEFAULT; | ||
1537 | ctl->fname = XC3028L_DEFAULT_FIRMWARE; | ||
1538 | break; | ||
1555 | case EM2883_BOARD_HAUPPAUGE_WINTV_HVR_950: | 1539 | case EM2883_BOARD_HAUPPAUGE_WINTV_HVR_950: |
1556 | case EM2880_BOARD_PINNACLE_PCTV_HD_PRO: | 1540 | case EM2880_BOARD_PINNACLE_PCTV_HD_PRO: |
1557 | case EM2880_BOARD_AMD_ATI_TV_WONDER_HD_600: | ||
1558 | /* FIXME: Better to specify the needed IF */ | 1541 | /* FIXME: Better to specify the needed IF */ |
1559 | ctl->demod = XC3028_FE_DEFAULT; | 1542 | ctl->demod = XC3028_FE_DEFAULT; |
1560 | break; | 1543 | break; |
@@ -1764,6 +1747,20 @@ void em28xx_card_setup(struct em28xx *dev) | |||
1764 | break; | 1747 | break; |
1765 | case EM2820_BOARD_UNKNOWN: | 1748 | case EM2820_BOARD_UNKNOWN: |
1766 | case EM2800_BOARD_UNKNOWN: | 1749 | case EM2800_BOARD_UNKNOWN: |
1750 | /* | ||
1751 | * The K-WORLD DVB-T 310U is detected as an MSI Digivox AD. | ||
1752 | * | ||
1753 | * This occurs because they share identical USB vendor and | ||
1754 | * product IDs. | ||
1755 | * | ||
1756 | * What we do here is look up the EEPROM hash of the K-WORLD | ||
1757 | * and if it is found then we decide that we do not have | ||
1758 | * a DIGIVOX and reset the device to the K-WORLD instead. | ||
1759 | * | ||
1760 | * This solution is only valid if they do not share eeprom | ||
1761 | * hash identities which has not been determined as yet. | ||
1762 | */ | ||
1763 | case EM2880_BOARD_MSI_DIGIVOX_AD: | ||
1767 | if (!em28xx_hint_board(dev)) | 1764 | if (!em28xx_hint_board(dev)) |
1768 | em28xx_set_model(dev); | 1765 | em28xx_set_model(dev); |
1769 | break; | 1766 | break; |
diff --git a/drivers/media/video/em28xx/em28xx-dvb.c b/drivers/media/video/em28xx/em28xx-dvb.c index 4b992bc0083c..d2b1a1a52689 100644 --- a/drivers/media/video/em28xx/em28xx-dvb.c +++ b/drivers/media/video/em28xx/em28xx-dvb.c | |||
@@ -452,6 +452,15 @@ static int dvb_init(struct em28xx *dev) | |||
452 | goto out_free; | 452 | goto out_free; |
453 | } | 453 | } |
454 | break; | 454 | break; |
455 | case EM2880_BOARD_KWORLD_DVB_310U: | ||
456 | dvb->frontend = dvb_attach(zl10353_attach, | ||
457 | &em28xx_zl10353_with_xc3028, | ||
458 | &dev->i2c_adap); | ||
459 | if (attach_xc3028(0x61, dev) < 0) { | ||
460 | result = -EINVAL; | ||
461 | goto out_free; | ||
462 | } | ||
463 | break; | ||
455 | default: | 464 | default: |
456 | printk(KERN_ERR "%s/2: The frontend of your DVB/ATSC card" | 465 | printk(KERN_ERR "%s/2: The frontend of your DVB/ATSC card" |
457 | " isn't supported yet\n", | 466 | " isn't supported yet\n", |
diff --git a/drivers/media/video/gspca/gspca.c b/drivers/media/video/gspca/gspca.c index 7be69284da03..ac95c55887df 100644 --- a/drivers/media/video/gspca/gspca.c +++ b/drivers/media/video/gspca/gspca.c | |||
@@ -459,6 +459,7 @@ static int create_urbs(struct gspca_dev *gspca_dev, | |||
459 | urb = usb_alloc_urb(npkt, GFP_KERNEL); | 459 | urb = usb_alloc_urb(npkt, GFP_KERNEL); |
460 | if (!urb) { | 460 | if (!urb) { |
461 | err("usb_alloc_urb failed"); | 461 | err("usb_alloc_urb failed"); |
462 | destroy_urbs(gspca_dev); | ||
462 | return -ENOMEM; | 463 | return -ENOMEM; |
463 | } | 464 | } |
464 | urb->transfer_buffer = usb_buffer_alloc(gspca_dev->dev, | 465 | urb->transfer_buffer = usb_buffer_alloc(gspca_dev->dev, |
@@ -468,8 +469,8 @@ static int create_urbs(struct gspca_dev *gspca_dev, | |||
468 | 469 | ||
469 | if (urb->transfer_buffer == NULL) { | 470 | if (urb->transfer_buffer == NULL) { |
470 | usb_free_urb(urb); | 471 | usb_free_urb(urb); |
471 | destroy_urbs(gspca_dev); | ||
472 | err("usb_buffer_urb failed"); | 472 | err("usb_buffer_urb failed"); |
473 | destroy_urbs(gspca_dev); | ||
473 | return -ENOMEM; | 474 | return -ENOMEM; |
474 | } | 475 | } |
475 | gspca_dev->urb[n] = urb; | 476 | gspca_dev->urb[n] = urb; |
diff --git a/drivers/media/video/gspca/pac7311.c b/drivers/media/video/gspca/pac7311.c index d4be51843286..ba865b7f1ed8 100644 --- a/drivers/media/video/gspca/pac7311.c +++ b/drivers/media/video/gspca/pac7311.c | |||
@@ -1063,6 +1063,7 @@ static __devinitdata struct usb_device_id device_table[] = { | |||
1063 | {USB_DEVICE(0x093a, 0x2621), .driver_info = SENSOR_PAC7302}, | 1063 | {USB_DEVICE(0x093a, 0x2621), .driver_info = SENSOR_PAC7302}, |
1064 | {USB_DEVICE(0x093a, 0x2624), .driver_info = SENSOR_PAC7302}, | 1064 | {USB_DEVICE(0x093a, 0x2624), .driver_info = SENSOR_PAC7302}, |
1065 | {USB_DEVICE(0x093a, 0x2626), .driver_info = SENSOR_PAC7302}, | 1065 | {USB_DEVICE(0x093a, 0x2626), .driver_info = SENSOR_PAC7302}, |
1066 | {USB_DEVICE(0x093a, 0x262a), .driver_info = SENSOR_PAC7302}, | ||
1066 | {} | 1067 | {} |
1067 | }; | 1068 | }; |
1068 | MODULE_DEVICE_TABLE(usb, device_table); | 1069 | MODULE_DEVICE_TABLE(usb, device_table); |
diff --git a/drivers/media/video/gspca/sonixb.c b/drivers/media/video/gspca/sonixb.c index 5dd78c6766ea..12b81ae526b7 100644 --- a/drivers/media/video/gspca/sonixb.c +++ b/drivers/media/video/gspca/sonixb.c | |||
@@ -232,7 +232,7 @@ static struct ctrl sd_ctrls[] = { | |||
232 | static struct v4l2_pix_format vga_mode[] = { | 232 | static struct v4l2_pix_format vga_mode[] = { |
233 | {160, 120, V4L2_PIX_FMT_SBGGR8, V4L2_FIELD_NONE, | 233 | {160, 120, V4L2_PIX_FMT_SBGGR8, V4L2_FIELD_NONE, |
234 | .bytesperline = 160, | 234 | .bytesperline = 160, |
235 | .sizeimage = 160 * 120 * 5 / 4, | 235 | .sizeimage = 160 * 120, |
236 | .colorspace = V4L2_COLORSPACE_SRGB, | 236 | .colorspace = V4L2_COLORSPACE_SRGB, |
237 | .priv = 2 | MODE_RAW}, | 237 | .priv = 2 | MODE_RAW}, |
238 | {160, 120, V4L2_PIX_FMT_SN9C10X, V4L2_FIELD_NONE, | 238 | {160, 120, V4L2_PIX_FMT_SN9C10X, V4L2_FIELD_NONE, |
@@ -264,7 +264,7 @@ static struct v4l2_pix_format sif_mode[] = { | |||
264 | .priv = 1 | MODE_REDUCED_SIF}, | 264 | .priv = 1 | MODE_REDUCED_SIF}, |
265 | {176, 144, V4L2_PIX_FMT_SBGGR8, V4L2_FIELD_NONE, | 265 | {176, 144, V4L2_PIX_FMT_SBGGR8, V4L2_FIELD_NONE, |
266 | .bytesperline = 176, | 266 | .bytesperline = 176, |
267 | .sizeimage = 176 * 144 * 5 / 4, | 267 | .sizeimage = 176 * 144, |
268 | .colorspace = V4L2_COLORSPACE_SRGB, | 268 | .colorspace = V4L2_COLORSPACE_SRGB, |
269 | .priv = 1 | MODE_RAW}, | 269 | .priv = 1 | MODE_RAW}, |
270 | {176, 144, V4L2_PIX_FMT_SN9C10X, V4L2_FIELD_NONE, | 270 | {176, 144, V4L2_PIX_FMT_SN9C10X, V4L2_FIELD_NONE, |
diff --git a/drivers/media/video/gspca/sonixj.c b/drivers/media/video/gspca/sonixj.c index d75b1d20b318..572b0f363b64 100644 --- a/drivers/media/video/gspca/sonixj.c +++ b/drivers/media/video/gspca/sonixj.c | |||
@@ -707,6 +707,7 @@ static void i2c_w8(struct gspca_dev *gspca_dev, | |||
707 | 0x08, 0, /* value, index */ | 707 | 0x08, 0, /* value, index */ |
708 | gspca_dev->usb_buf, 8, | 708 | gspca_dev->usb_buf, 8, |
709 | 500); | 709 | 500); |
710 | msleep(2); | ||
710 | } | 711 | } |
711 | 712 | ||
712 | /* read 5 bytes in gspca_dev->usb_buf */ | 713 | /* read 5 bytes in gspca_dev->usb_buf */ |
@@ -976,13 +977,13 @@ static int sd_init(struct gspca_dev *gspca_dev) | |||
976 | case BRIDGE_SN9C105: | 977 | case BRIDGE_SN9C105: |
977 | if (regF1 != 0x11) | 978 | if (regF1 != 0x11) |
978 | return -ENODEV; | 979 | return -ENODEV; |
979 | reg_w(gspca_dev, 0x02, regGpio, 2); | 980 | reg_w(gspca_dev, 0x01, regGpio, 2); |
980 | break; | 981 | break; |
981 | case BRIDGE_SN9C120: | 982 | case BRIDGE_SN9C120: |
982 | if (regF1 != 0x12) | 983 | if (regF1 != 0x12) |
983 | return -ENODEV; | 984 | return -ENODEV; |
984 | regGpio[1] = 0x70; | 985 | regGpio[1] = 0x70; |
985 | reg_w(gspca_dev, 0x02, regGpio, 2); | 986 | reg_w(gspca_dev, 0x01, regGpio, 2); |
986 | break; | 987 | break; |
987 | default: | 988 | default: |
988 | /* case BRIDGE_SN9C110: */ | 989 | /* case BRIDGE_SN9C110: */ |
@@ -1183,7 +1184,7 @@ static void sd_start(struct gspca_dev *gspca_dev) | |||
1183 | static const __u8 CA[] = { 0x28, 0xd8, 0x14, 0xec }; | 1184 | static const __u8 CA[] = { 0x28, 0xd8, 0x14, 0xec }; |
1184 | static const __u8 CE[] = { 0x32, 0xdd, 0x2d, 0xdd }; /* MI0360 */ | 1185 | static const __u8 CE[] = { 0x32, 0xdd, 0x2d, 0xdd }; /* MI0360 */ |
1185 | static const __u8 CE_ov76xx[] = | 1186 | static const __u8 CE_ov76xx[] = |
1186 | { 0x32, 0xdd, 0x32, 0xdd }; /* OV7630/48 */ | 1187 | { 0x32, 0xdd, 0x32, 0xdd }; |
1187 | 1188 | ||
1188 | sn9c1xx = sn_tb[(int) sd->sensor]; | 1189 | sn9c1xx = sn_tb[(int) sd->sensor]; |
1189 | configure_gpio(gspca_dev, sn9c1xx); | 1190 | configure_gpio(gspca_dev, sn9c1xx); |
@@ -1223,8 +1224,15 @@ static void sd_start(struct gspca_dev *gspca_dev) | |||
1223 | reg_w(gspca_dev, 0x20, gamma_def, sizeof gamma_def); | 1224 | reg_w(gspca_dev, 0x20, gamma_def, sizeof gamma_def); |
1224 | for (i = 0; i < 8; i++) | 1225 | for (i = 0; i < 8; i++) |
1225 | reg_w(gspca_dev, 0x84, reg84, sizeof reg84); | 1226 | reg_w(gspca_dev, 0x84, reg84, sizeof reg84); |
1227 | switch (sd->sensor) { | ||
1228 | case SENSOR_OV7660: | ||
1229 | reg_w1(gspca_dev, 0x9a, 0x05); | ||
1230 | break; | ||
1231 | default: | ||
1226 | reg_w1(gspca_dev, 0x9a, 0x08); | 1232 | reg_w1(gspca_dev, 0x9a, 0x08); |
1227 | reg_w1(gspca_dev, 0x99, 0x59); | 1233 | reg_w1(gspca_dev, 0x99, 0x59); |
1234 | break; | ||
1235 | } | ||
1228 | 1236 | ||
1229 | mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv; | 1237 | mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv; |
1230 | if (mode) | 1238 | if (mode) |
@@ -1275,8 +1283,8 @@ static void sd_start(struct gspca_dev *gspca_dev) | |||
1275 | /* reg1 = 0x44; */ | 1283 | /* reg1 = 0x44; */ |
1276 | /* reg1 = 0x46; (done) */ | 1284 | /* reg1 = 0x46; (done) */ |
1277 | } else { | 1285 | } else { |
1278 | reg17 = 0x22; /* 640 MCKSIZE */ | 1286 | reg17 = 0xa2; /* 640 */ |
1279 | reg1 = 0x06; | 1287 | reg1 = 0x44; |
1280 | } | 1288 | } |
1281 | break; | 1289 | break; |
1282 | } | 1290 | } |
@@ -1285,6 +1293,7 @@ static void sd_start(struct gspca_dev *gspca_dev) | |||
1285 | switch (sd->sensor) { | 1293 | switch (sd->sensor) { |
1286 | case SENSOR_OV7630: | 1294 | case SENSOR_OV7630: |
1287 | case SENSOR_OV7648: | 1295 | case SENSOR_OV7648: |
1296 | case SENSOR_OV7660: | ||
1288 | reg_w(gspca_dev, 0xce, CE_ov76xx, 4); | 1297 | reg_w(gspca_dev, 0xce, CE_ov76xx, 4); |
1289 | break; | 1298 | break; |
1290 | default: | 1299 | default: |
diff --git a/drivers/media/video/gspca/spca561.c b/drivers/media/video/gspca/spca561.c index cfbc9ebc5c5d..95fcfcb9e31b 100644 --- a/drivers/media/video/gspca/spca561.c +++ b/drivers/media/video/gspca/spca561.c | |||
@@ -225,7 +225,7 @@ static int i2c_read(struct gspca_dev *gspca_dev, __u16 reg, __u8 mode) | |||
225 | reg_w_val(gspca_dev->dev, 0x8802, (mode | 0x01)); | 225 | reg_w_val(gspca_dev->dev, 0x8802, (mode | 0x01)); |
226 | do { | 226 | do { |
227 | reg_r(gspca_dev, 0x8803, 1); | 227 | reg_r(gspca_dev, 0x8803, 1); |
228 | if (!gspca_dev->usb_buf) | 228 | if (!gspca_dev->usb_buf[0]) |
229 | break; | 229 | break; |
230 | } while (--retry); | 230 | } while (--retry); |
231 | if (retry == 0) | 231 | if (retry == 0) |
diff --git a/drivers/media/video/gspca/zc3xx.c b/drivers/media/video/gspca/zc3xx.c index 8d7c27e6ac77..d61ef727e0c2 100644 --- a/drivers/media/video/gspca/zc3xx.c +++ b/drivers/media/video/gspca/zc3xx.c | |||
@@ -6576,8 +6576,8 @@ static int setlightfreq(struct gspca_dev *gspca_dev) | |||
6576 | cs2102_60HZ, cs2102_60HZScale}, | 6576 | cs2102_60HZ, cs2102_60HZScale}, |
6577 | /* SENSOR_CS2102K 1 */ | 6577 | /* SENSOR_CS2102K 1 */ |
6578 | {cs2102_NoFliker, cs2102_NoFlikerScale, | 6578 | {cs2102_NoFliker, cs2102_NoFlikerScale, |
6579 | cs2102_50HZ, cs2102_50HZScale, | 6579 | NULL, NULL, /* currently disabled */ |
6580 | cs2102_60HZ, cs2102_60HZScale}, | 6580 | NULL, NULL}, |
6581 | /* SENSOR_GC0305 2 */ | 6581 | /* SENSOR_GC0305 2 */ |
6582 | {gc0305_NoFliker, gc0305_NoFliker, | 6582 | {gc0305_NoFliker, gc0305_NoFliker, |
6583 | gc0305_50HZ, gc0305_50HZ, | 6583 | gc0305_50HZ, gc0305_50HZ, |
diff --git a/drivers/media/video/ov511.c b/drivers/media/video/ov511.c index 3d3c48db45d9..c6852402c5e9 100644 --- a/drivers/media/video/ov511.c +++ b/drivers/media/video/ov511.c | |||
@@ -3591,7 +3591,7 @@ static int | |||
3591 | ov51x_init_isoc(struct usb_ov511 *ov) | 3591 | ov51x_init_isoc(struct usb_ov511 *ov) |
3592 | { | 3592 | { |
3593 | struct urb *urb; | 3593 | struct urb *urb; |
3594 | int fx, err, n, size; | 3594 | int fx, err, n, i, size; |
3595 | 3595 | ||
3596 | PDEBUG(3, "*** Initializing capture ***"); | 3596 | PDEBUG(3, "*** Initializing capture ***"); |
3597 | 3597 | ||
@@ -3662,6 +3662,8 @@ ov51x_init_isoc(struct usb_ov511 *ov) | |||
3662 | urb = usb_alloc_urb(FRAMES_PER_DESC, GFP_KERNEL); | 3662 | urb = usb_alloc_urb(FRAMES_PER_DESC, GFP_KERNEL); |
3663 | if (!urb) { | 3663 | if (!urb) { |
3664 | err("init isoc: usb_alloc_urb ret. NULL"); | 3664 | err("init isoc: usb_alloc_urb ret. NULL"); |
3665 | for (i = 0; i < n; i++) | ||
3666 | usb_free_urb(ov->sbuf[i].urb); | ||
3665 | return -ENOMEM; | 3667 | return -ENOMEM; |
3666 | } | 3668 | } |
3667 | ov->sbuf[n].urb = urb; | 3669 | ov->sbuf[n].urb = urb; |
@@ -5651,7 +5653,7 @@ static ssize_t show_exposure(struct device *cd, | |||
5651 | if (!ov->dev) | 5653 | if (!ov->dev) |
5652 | return -ENODEV; | 5654 | return -ENODEV; |
5653 | sensor_get_exposure(ov, &exp); | 5655 | sensor_get_exposure(ov, &exp); |
5654 | return sprintf(buf, "%d\n", exp >> 8); | 5656 | return sprintf(buf, "%d\n", exp); |
5655 | } | 5657 | } |
5656 | static DEVICE_ATTR(exposure, S_IRUGO, show_exposure, NULL); | 5658 | static DEVICE_ATTR(exposure, S_IRUGO, show_exposure, NULL); |
5657 | 5659 | ||
diff --git a/drivers/media/video/pvrusb2/pvrusb2-devattr.c b/drivers/media/video/pvrusb2/pvrusb2-devattr.c index 88e175168438..cbe2a3417851 100644 --- a/drivers/media/video/pvrusb2/pvrusb2-devattr.c +++ b/drivers/media/video/pvrusb2/pvrusb2-devattr.c | |||
@@ -489,6 +489,8 @@ static const struct pvr2_device_desc pvr2_device_751xx = { | |||
489 | struct usb_device_id pvr2_device_table[] = { | 489 | struct usb_device_id pvr2_device_table[] = { |
490 | { USB_DEVICE(0x2040, 0x2900), | 490 | { USB_DEVICE(0x2040, 0x2900), |
491 | .driver_info = (kernel_ulong_t)&pvr2_device_29xxx}, | 491 | .driver_info = (kernel_ulong_t)&pvr2_device_29xxx}, |
492 | { USB_DEVICE(0x2040, 0x2950), /* Logically identical to 2900 */ | ||
493 | .driver_info = (kernel_ulong_t)&pvr2_device_29xxx}, | ||
492 | { USB_DEVICE(0x2040, 0x2400), | 494 | { USB_DEVICE(0x2040, 0x2400), |
493 | .driver_info = (kernel_ulong_t)&pvr2_device_24xxx}, | 495 | .driver_info = (kernel_ulong_t)&pvr2_device_24xxx}, |
494 | { USB_DEVICE(0x1164, 0x0622), | 496 | { USB_DEVICE(0x1164, 0x0622), |
diff --git a/drivers/media/video/s2255drv.c b/drivers/media/video/s2255drv.c index b1d09d8e2b85..92b83feae366 100644 --- a/drivers/media/video/s2255drv.c +++ b/drivers/media/video/s2255drv.c | |||
@@ -669,7 +669,7 @@ static void s2255_fillbuff(struct s2255_dev *dev, struct s2255_buffer *buf, | |||
669 | (unsigned long)vbuf, pos); | 669 | (unsigned long)vbuf, pos); |
670 | /* tell v4l buffer was filled */ | 670 | /* tell v4l buffer was filled */ |
671 | 671 | ||
672 | buf->vb.field_count++; | 672 | buf->vb.field_count = dev->frame_count[chn] * 2; |
673 | do_gettimeofday(&ts); | 673 | do_gettimeofday(&ts); |
674 | buf->vb.ts = ts; | 674 | buf->vb.ts = ts; |
675 | buf->vb.state = VIDEOBUF_DONE; | 675 | buf->vb.state = VIDEOBUF_DONE; |
@@ -1268,6 +1268,7 @@ static int vidioc_streamon(struct file *file, void *priv, enum v4l2_buf_type i) | |||
1268 | dev->last_frame[chn] = -1; | 1268 | dev->last_frame[chn] = -1; |
1269 | dev->bad_payload[chn] = 0; | 1269 | dev->bad_payload[chn] = 0; |
1270 | dev->cur_frame[chn] = 0; | 1270 | dev->cur_frame[chn] = 0; |
1271 | dev->frame_count[chn] = 0; | ||
1271 | for (j = 0; j < SYS_FRAMES; j++) { | 1272 | for (j = 0; j < SYS_FRAMES; j++) { |
1272 | dev->buffer[chn].frame[j].ulState = 0; | 1273 | dev->buffer[chn].frame[j].ulState = 0; |
1273 | dev->buffer[chn].frame[j].cur_size = 0; | 1274 | dev->buffer[chn].frame[j].cur_size = 0; |
diff --git a/drivers/media/video/uvc/uvc_ctrl.c b/drivers/media/video/uvc/uvc_ctrl.c index 6ef3e5297de8..feab12aa2c7b 100644 --- a/drivers/media/video/uvc/uvc_ctrl.c +++ b/drivers/media/video/uvc/uvc_ctrl.c | |||
@@ -592,7 +592,7 @@ int uvc_query_v4l2_ctrl(struct uvc_video_device *video, | |||
592 | if (ctrl == NULL) | 592 | if (ctrl == NULL) |
593 | return -EINVAL; | 593 | return -EINVAL; |
594 | 594 | ||
595 | data = kmalloc(8, GFP_KERNEL); | 595 | data = kmalloc(ctrl->info->size, GFP_KERNEL); |
596 | if (data == NULL) | 596 | if (data == NULL) |
597 | return -ENOMEM; | 597 | return -ENOMEM; |
598 | 598 | ||
diff --git a/drivers/media/video/w9968cf.c b/drivers/media/video/w9968cf.c index 168baabe4659..11edf79f57be 100644 --- a/drivers/media/video/w9968cf.c +++ b/drivers/media/video/w9968cf.c | |||
@@ -911,7 +911,6 @@ static int w9968cf_start_transfer(struct w9968cf_device* cam) | |||
911 | 911 | ||
912 | for (i = 0; i < W9968CF_URBS; i++) { | 912 | for (i = 0; i < W9968CF_URBS; i++) { |
913 | urb = usb_alloc_urb(W9968CF_ISO_PACKETS, GFP_KERNEL); | 913 | urb = usb_alloc_urb(W9968CF_ISO_PACKETS, GFP_KERNEL); |
914 | cam->urb[i] = urb; | ||
915 | if (!urb) { | 914 | if (!urb) { |
916 | for (j = 0; j < i; j++) | 915 | for (j = 0; j < i; j++) |
917 | usb_free_urb(cam->urb[j]); | 916 | usb_free_urb(cam->urb[j]); |
@@ -919,6 +918,7 @@ static int w9968cf_start_transfer(struct w9968cf_device* cam) | |||
919 | return -ENOMEM; | 918 | return -ENOMEM; |
920 | } | 919 | } |
921 | 920 | ||
921 | cam->urb[i] = urb; | ||
922 | urb->dev = udev; | 922 | urb->dev = udev; |
923 | urb->context = (void*)cam; | 923 | urb->context = (void*)cam; |
924 | urb->pipe = usb_rcvisocpipe(udev, 1); | 924 | urb->pipe = usb_rcvisocpipe(udev, 1); |
diff --git a/drivers/media/video/wm8739.c b/drivers/media/video/wm8739.c index 95c79ad80487..54ac3fe26ec2 100644 --- a/drivers/media/video/wm8739.c +++ b/drivers/media/video/wm8739.c | |||
@@ -274,10 +274,8 @@ static int wm8739_probe(struct i2c_client *client, | |||
274 | client->addr << 1, client->adapter->name); | 274 | client->addr << 1, client->adapter->name); |
275 | 275 | ||
276 | state = kmalloc(sizeof(struct wm8739_state), GFP_KERNEL); | 276 | state = kmalloc(sizeof(struct wm8739_state), GFP_KERNEL); |
277 | if (state == NULL) { | 277 | if (state == NULL) |
278 | kfree(client); | ||
279 | return -ENOMEM; | 278 | return -ENOMEM; |
280 | } | ||
281 | state->vol_l = 0x17; /* 0dB */ | 279 | state->vol_l = 0x17; /* 0dB */ |
282 | state->vol_r = 0x17; /* 0dB */ | 280 | state->vol_r = 0x17; /* 0dB */ |
283 | state->muted = 0; | 281 | state->muted = 0; |
diff --git a/drivers/media/video/zoran_card.c b/drivers/media/video/zoran_card.c index d842a7cb99d2..3282be730298 100644 --- a/drivers/media/video/zoran_card.c +++ b/drivers/media/video/zoran_card.c | |||
@@ -988,7 +988,7 @@ zoran_open_init_params (struct zoran *zr) | |||
988 | zr->v4l_grab_seq = 0; | 988 | zr->v4l_grab_seq = 0; |
989 | zr->v4l_settings.width = 192; | 989 | zr->v4l_settings.width = 192; |
990 | zr->v4l_settings.height = 144; | 990 | zr->v4l_settings.height = 144; |
991 | zr->v4l_settings.format = &zoran_formats[4]; /* YUY2 - YUV-4:2:2 packed */ | 991 | zr->v4l_settings.format = &zoran_formats[7]; /* YUY2 - YUV-4:2:2 packed */ |
992 | zr->v4l_settings.bytesperline = | 992 | zr->v4l_settings.bytesperline = |
993 | zr->v4l_settings.width * | 993 | zr->v4l_settings.width * |
994 | ((zr->v4l_settings.format->depth + 7) / 8); | 994 | ((zr->v4l_settings.format->depth + 7) / 8); |
diff --git a/drivers/media/video/zoran_driver.c b/drivers/media/video/zoran_driver.c index ec6f59674b10..2dab9eea4def 100644 --- a/drivers/media/video/zoran_driver.c +++ b/drivers/media/video/zoran_driver.c | |||
@@ -134,7 +134,7 @@ const struct zoran_format zoran_formats[] = { | |||
134 | }, { | 134 | }, { |
135 | .name = "16-bit RGB BE", | 135 | .name = "16-bit RGB BE", |
136 | ZFMT(-1, | 136 | ZFMT(-1, |
137 | V4L2_PIX_FMT_RGB565, V4L2_COLORSPACE_SRGB), | 137 | V4L2_PIX_FMT_RGB565X, V4L2_COLORSPACE_SRGB), |
138 | .depth = 16, | 138 | .depth = 16, |
139 | .flags = ZORAN_FORMAT_CAPTURE | | 139 | .flags = ZORAN_FORMAT_CAPTURE | |
140 | ZORAN_FORMAT_OVERLAY, | 140 | ZORAN_FORMAT_OVERLAY, |
@@ -2737,7 +2737,8 @@ zoran_do_ioctl (struct inode *inode, | |||
2737 | fh->v4l_settings.format->fourcc; | 2737 | fh->v4l_settings.format->fourcc; |
2738 | fmt->fmt.pix.colorspace = | 2738 | fmt->fmt.pix.colorspace = |
2739 | fh->v4l_settings.format->colorspace; | 2739 | fh->v4l_settings.format->colorspace; |
2740 | fmt->fmt.pix.bytesperline = 0; | 2740 | fmt->fmt.pix.bytesperline = |
2741 | fh->v4l_settings.bytesperline; | ||
2741 | if (BUZ_MAX_HEIGHT < | 2742 | if (BUZ_MAX_HEIGHT < |
2742 | (fh->v4l_settings.height * 2)) | 2743 | (fh->v4l_settings.height * 2)) |
2743 | fmt->fmt.pix.field = | 2744 | fmt->fmt.pix.field = |
@@ -2833,13 +2834,6 @@ zoran_do_ioctl (struct inode *inode, | |||
2833 | fmt->fmt.pix.pixelformat, | 2834 | fmt->fmt.pix.pixelformat, |
2834 | (char *) &printformat); | 2835 | (char *) &printformat); |
2835 | 2836 | ||
2836 | if (fmt->fmt.pix.bytesperline > 0) { | ||
2837 | dprintk(5, | ||
2838 | KERN_ERR "%s: bpl not supported\n", | ||
2839 | ZR_DEVNAME(zr)); | ||
2840 | return -EINVAL; | ||
2841 | } | ||
2842 | |||
2843 | /* we can be requested to do JPEG/raw playback/capture */ | 2837 | /* we can be requested to do JPEG/raw playback/capture */ |
2844 | if (! | 2838 | if (! |
2845 | (fmt->type == V4L2_BUF_TYPE_VIDEO_CAPTURE || | 2839 | (fmt->type == V4L2_BUF_TYPE_VIDEO_CAPTURE || |
@@ -2923,6 +2917,7 @@ zoran_do_ioctl (struct inode *inode, | |||
2923 | fh->jpg_buffers.buffer_size = | 2917 | fh->jpg_buffers.buffer_size = |
2924 | zoran_v4l2_calc_bufsize(&fh-> | 2918 | zoran_v4l2_calc_bufsize(&fh-> |
2925 | jpg_settings); | 2919 | jpg_settings); |
2920 | fmt->fmt.pix.bytesperline = 0; | ||
2926 | fmt->fmt.pix.sizeimage = | 2921 | fmt->fmt.pix.sizeimage = |
2927 | fh->jpg_buffers.buffer_size; | 2922 | fh->jpg_buffers.buffer_size; |
2928 | 2923 | ||
@@ -2979,6 +2974,8 @@ zoran_do_ioctl (struct inode *inode, | |||
2979 | 2974 | ||
2980 | /* tell the user the | 2975 | /* tell the user the |
2981 | * results/missing stuff */ | 2976 | * results/missing stuff */ |
2977 | fmt->fmt.pix.bytesperline = | ||
2978 | fh->v4l_settings.bytesperline; | ||
2982 | fmt->fmt.pix.sizeimage = | 2979 | fmt->fmt.pix.sizeimage = |
2983 | fh->v4l_settings.height * | 2980 | fh->v4l_settings.height * |
2984 | fh->v4l_settings.bytesperline; | 2981 | fh->v4l_settings.bytesperline; |
diff --git a/drivers/memstick/core/memstick.c b/drivers/memstick/core/memstick.c index a38005008a20..cea46906408e 100644 --- a/drivers/memstick/core/memstick.c +++ b/drivers/memstick/core/memstick.c | |||
@@ -185,7 +185,7 @@ static void memstick_free(struct device *dev) | |||
185 | } | 185 | } |
186 | 186 | ||
187 | static struct class memstick_host_class = { | 187 | static struct class memstick_host_class = { |
188 | .name = "memstick_host", | 188 | .name = "memstick_host", |
189 | .dev_release = memstick_free | 189 | .dev_release = memstick_free |
190 | }; | 190 | }; |
191 | 191 | ||
@@ -264,7 +264,7 @@ EXPORT_SYMBOL(memstick_new_req); | |||
264 | * @sg - TPC argument | 264 | * @sg - TPC argument |
265 | */ | 265 | */ |
266 | void memstick_init_req_sg(struct memstick_request *mrq, unsigned char tpc, | 266 | void memstick_init_req_sg(struct memstick_request *mrq, unsigned char tpc, |
267 | struct scatterlist *sg) | 267 | const struct scatterlist *sg) |
268 | { | 268 | { |
269 | mrq->tpc = tpc; | 269 | mrq->tpc = tpc; |
270 | if (tpc & 8) | 270 | if (tpc & 8) |
@@ -294,7 +294,7 @@ EXPORT_SYMBOL(memstick_init_req_sg); | |||
294 | * user supplied buffer. | 294 | * user supplied buffer. |
295 | */ | 295 | */ |
296 | void memstick_init_req(struct memstick_request *mrq, unsigned char tpc, | 296 | void memstick_init_req(struct memstick_request *mrq, unsigned char tpc, |
297 | void *buf, size_t length) | 297 | const void *buf, size_t length) |
298 | { | 298 | { |
299 | mrq->tpc = tpc; | 299 | mrq->tpc = tpc; |
300 | if (tpc & 8) | 300 | if (tpc & 8) |
@@ -439,7 +439,7 @@ static void memstick_check(struct work_struct *work) | |||
439 | if (!host->card) { | 439 | if (!host->card) { |
440 | if (memstick_power_on(host)) | 440 | if (memstick_power_on(host)) |
441 | goto out_power_off; | 441 | goto out_power_off; |
442 | } else | 442 | } else if (host->card->stop) |
443 | host->card->stop(host->card); | 443 | host->card->stop(host->card); |
444 | 444 | ||
445 | card = memstick_alloc_card(host); | 445 | card = memstick_alloc_card(host); |
@@ -458,7 +458,7 @@ static void memstick_check(struct work_struct *work) | |||
458 | || !(host->card->check(host->card))) { | 458 | || !(host->card->check(host->card))) { |
459 | device_unregister(&host->card->dev); | 459 | device_unregister(&host->card->dev); |
460 | host->card = NULL; | 460 | host->card = NULL; |
461 | } else | 461 | } else if (host->card->start) |
462 | host->card->start(host->card); | 462 | host->card->start(host->card); |
463 | } | 463 | } |
464 | 464 | ||
diff --git a/drivers/memstick/core/mspro_block.c b/drivers/memstick/core/mspro_block.c index 44b1817f2f2f..d2d2318dafa4 100644 --- a/drivers/memstick/core/mspro_block.c +++ b/drivers/memstick/core/mspro_block.c | |||
@@ -30,6 +30,8 @@ module_param(major, int, 0644); | |||
30 | #define MSPRO_BLOCK_SIGNATURE 0xa5c3 | 30 | #define MSPRO_BLOCK_SIGNATURE 0xa5c3 |
31 | #define MSPRO_BLOCK_MAX_ATTRIBUTES 41 | 31 | #define MSPRO_BLOCK_MAX_ATTRIBUTES 41 |
32 | 32 | ||
33 | #define MSPRO_BLOCK_PART_SHIFT 3 | ||
34 | |||
33 | enum { | 35 | enum { |
34 | MSPRO_BLOCK_ID_SYSINFO = 0x10, | 36 | MSPRO_BLOCK_ID_SYSINFO = 0x10, |
35 | MSPRO_BLOCK_ID_MODELNAME = 0x15, | 37 | MSPRO_BLOCK_ID_MODELNAME = 0x15, |
@@ -195,7 +197,7 @@ static int mspro_block_bd_open(struct inode *inode, struct file *filp) | |||
195 | static int mspro_block_disk_release(struct gendisk *disk) | 197 | static int mspro_block_disk_release(struct gendisk *disk) |
196 | { | 198 | { |
197 | struct mspro_block_data *msb = disk->private_data; | 199 | struct mspro_block_data *msb = disk->private_data; |
198 | int disk_id = disk->first_minor >> MEMSTICK_PART_SHIFT; | 200 | int disk_id = disk->first_minor >> MSPRO_BLOCK_PART_SHIFT; |
199 | 201 | ||
200 | mutex_lock(&mspro_block_disk_lock); | 202 | mutex_lock(&mspro_block_disk_lock); |
201 | 203 | ||
@@ -877,6 +879,7 @@ static int mspro_block_switch_interface(struct memstick_dev *card) | |||
877 | struct mspro_block_data *msb = memstick_get_drvdata(card); | 879 | struct mspro_block_data *msb = memstick_get_drvdata(card); |
878 | int rc = 0; | 880 | int rc = 0; |
879 | 881 | ||
882 | try_again: | ||
880 | if (msb->caps & MEMSTICK_CAP_PAR4) | 883 | if (msb->caps & MEMSTICK_CAP_PAR4) |
881 | rc = mspro_block_set_interface(card, MEMSTICK_SYS_PAR4); | 884 | rc = mspro_block_set_interface(card, MEMSTICK_SYS_PAR4); |
882 | else | 885 | else |
@@ -930,6 +933,18 @@ static int mspro_block_switch_interface(struct memstick_dev *card) | |||
930 | rc = memstick_set_rw_addr(card); | 933 | rc = memstick_set_rw_addr(card); |
931 | if (!rc) | 934 | if (!rc) |
932 | rc = mspro_block_set_interface(card, msb->system); | 935 | rc = mspro_block_set_interface(card, msb->system); |
936 | |||
937 | if (!rc) { | ||
938 | msleep(150); | ||
939 | rc = mspro_block_wait_for_ced(card); | ||
940 | if (rc) | ||
941 | return rc; | ||
942 | |||
943 | if (msb->caps & MEMSTICK_CAP_PAR8) { | ||
944 | msb->caps &= ~MEMSTICK_CAP_PAR8; | ||
945 | goto try_again; | ||
946 | } | ||
947 | } | ||
933 | } | 948 | } |
934 | return rc; | 949 | return rc; |
935 | } | 950 | } |
@@ -1117,14 +1132,16 @@ static int mspro_block_init_card(struct memstick_dev *card) | |||
1117 | return -EIO; | 1132 | return -EIO; |
1118 | 1133 | ||
1119 | msb->caps = host->caps; | 1134 | msb->caps = host->caps; |
1120 | rc = mspro_block_switch_interface(card); | 1135 | |
1136 | msleep(150); | ||
1137 | rc = mspro_block_wait_for_ced(card); | ||
1121 | if (rc) | 1138 | if (rc) |
1122 | return rc; | 1139 | return rc; |
1123 | 1140 | ||
1124 | msleep(200); | 1141 | rc = mspro_block_switch_interface(card); |
1125 | rc = mspro_block_wait_for_ced(card); | ||
1126 | if (rc) | 1142 | if (rc) |
1127 | return rc; | 1143 | return rc; |
1144 | |||
1128 | dev_dbg(&card->dev, "card activated\n"); | 1145 | dev_dbg(&card->dev, "card activated\n"); |
1129 | if (msb->system != MEMSTICK_SYS_SERIAL) | 1146 | if (msb->system != MEMSTICK_SYS_SERIAL) |
1130 | msb->caps |= MEMSTICK_CAP_AUTO_GET_INT; | 1147 | msb->caps |= MEMSTICK_CAP_AUTO_GET_INT; |
@@ -1192,12 +1209,12 @@ static int mspro_block_init_disk(struct memstick_dev *card) | |||
1192 | if (rc) | 1209 | if (rc) |
1193 | return rc; | 1210 | return rc; |
1194 | 1211 | ||
1195 | if ((disk_id << MEMSTICK_PART_SHIFT) > 255) { | 1212 | if ((disk_id << MSPRO_BLOCK_PART_SHIFT) > 255) { |
1196 | rc = -ENOSPC; | 1213 | rc = -ENOSPC; |
1197 | goto out_release_id; | 1214 | goto out_release_id; |
1198 | } | 1215 | } |
1199 | 1216 | ||
1200 | msb->disk = alloc_disk(1 << MEMSTICK_PART_SHIFT); | 1217 | msb->disk = alloc_disk(1 << MSPRO_BLOCK_PART_SHIFT); |
1201 | if (!msb->disk) { | 1218 | if (!msb->disk) { |
1202 | rc = -ENOMEM; | 1219 | rc = -ENOMEM; |
1203 | goto out_release_id; | 1220 | goto out_release_id; |
@@ -1220,7 +1237,7 @@ static int mspro_block_init_disk(struct memstick_dev *card) | |||
1220 | MSPRO_BLOCK_MAX_PAGES * msb->page_size); | 1237 | MSPRO_BLOCK_MAX_PAGES * msb->page_size); |
1221 | 1238 | ||
1222 | msb->disk->major = major; | 1239 | msb->disk->major = major; |
1223 | msb->disk->first_minor = disk_id << MEMSTICK_PART_SHIFT; | 1240 | msb->disk->first_minor = disk_id << MSPRO_BLOCK_PART_SHIFT; |
1224 | msb->disk->fops = &ms_block_bdops; | 1241 | msb->disk->fops = &ms_block_bdops; |
1225 | msb->usage_count = 1; | 1242 | msb->usage_count = 1; |
1226 | msb->disk->private_data = msb; | 1243 | msb->disk->private_data = msb; |
@@ -1416,7 +1433,7 @@ out_unlock: | |||
1416 | 1433 | ||
1417 | static struct memstick_device_id mspro_block_id_tbl[] = { | 1434 | static struct memstick_device_id mspro_block_id_tbl[] = { |
1418 | {MEMSTICK_MATCH_ALL, MEMSTICK_TYPE_PRO, MEMSTICK_CATEGORY_STORAGE_DUO, | 1435 | {MEMSTICK_MATCH_ALL, MEMSTICK_TYPE_PRO, MEMSTICK_CATEGORY_STORAGE_DUO, |
1419 | MEMSTICK_CLASS_GENERIC_DUO}, | 1436 | MEMSTICK_CLASS_DUO}, |
1420 | {} | 1437 | {} |
1421 | }; | 1438 | }; |
1422 | 1439 | ||
diff --git a/drivers/memstick/host/jmb38x_ms.c b/drivers/memstick/host/jmb38x_ms.c index 3485c63d20b0..2fb95a5b72eb 100644 --- a/drivers/memstick/host/jmb38x_ms.c +++ b/drivers/memstick/host/jmb38x_ms.c | |||
@@ -81,6 +81,8 @@ struct jmb38x_ms { | |||
81 | #define TPC_CODE_SZ_MASK 0x00000700 | 81 | #define TPC_CODE_SZ_MASK 0x00000700 |
82 | #define TPC_DATA_SZ_MASK 0x00000007 | 82 | #define TPC_DATA_SZ_MASK 0x00000007 |
83 | 83 | ||
84 | #define HOST_CONTROL_TDELAY_EN 0x00040000 | ||
85 | #define HOST_CONTROL_HW_OC_P 0x00010000 | ||
84 | #define HOST_CONTROL_RESET_REQ 0x00008000 | 86 | #define HOST_CONTROL_RESET_REQ 0x00008000 |
85 | #define HOST_CONTROL_REI 0x00004000 | 87 | #define HOST_CONTROL_REI 0x00004000 |
86 | #define HOST_CONTROL_LED 0x00000400 | 88 | #define HOST_CONTROL_LED 0x00000400 |
@@ -88,6 +90,7 @@ struct jmb38x_ms { | |||
88 | #define HOST_CONTROL_RESET 0x00000100 | 90 | #define HOST_CONTROL_RESET 0x00000100 |
89 | #define HOST_CONTROL_POWER_EN 0x00000080 | 91 | #define HOST_CONTROL_POWER_EN 0x00000080 |
90 | #define HOST_CONTROL_CLOCK_EN 0x00000040 | 92 | #define HOST_CONTROL_CLOCK_EN 0x00000040 |
93 | #define HOST_CONTROL_REO 0x00000008 | ||
91 | #define HOST_CONTROL_IF_SHIFT 4 | 94 | #define HOST_CONTROL_IF_SHIFT 4 |
92 | 95 | ||
93 | #define HOST_CONTROL_IF_SERIAL 0x0 | 96 | #define HOST_CONTROL_IF_SERIAL 0x0 |
@@ -133,11 +136,15 @@ struct jmb38x_ms { | |||
133 | #define PAD_PU_PD_ON_MS_SOCK1 0x0f0f0000 | 136 | #define PAD_PU_PD_ON_MS_SOCK1 0x0f0f0000 |
134 | 137 | ||
135 | #define CLOCK_CONTROL_40MHZ 0x00000001 | 138 | #define CLOCK_CONTROL_40MHZ 0x00000001 |
136 | #define CLOCK_CONTROL_50MHZ 0x00000002 | 139 | #define CLOCK_CONTROL_50MHZ 0x0000000a |
137 | #define CLOCK_CONTROL_60MHZ 0x00000008 | 140 | #define CLOCK_CONTROL_60MHZ 0x00000008 |
138 | #define CLOCK_CONTROL_62_5MHZ 0x0000000c | 141 | #define CLOCK_CONTROL_62_5MHZ 0x0000000c |
139 | #define CLOCK_CONTROL_OFF 0x00000000 | 142 | #define CLOCK_CONTROL_OFF 0x00000000 |
140 | 143 | ||
144 | #define PCI_CTL_CLOCK_DLY_ADDR 0x000000b0 | ||
145 | #define PCI_CTL_CLOCK_DLY_MASK_A 0x00000f00 | ||
146 | #define PCI_CTL_CLOCK_DLY_MASK_B 0x0000f000 | ||
147 | |||
141 | enum { | 148 | enum { |
142 | CMD_READY = 0x01, | 149 | CMD_READY = 0x01, |
143 | FIFO_READY = 0x02, | 150 | FIFO_READY = 0x02, |
@@ -367,8 +374,7 @@ static int jmb38x_ms_issue_cmd(struct memstick_host *msh) | |||
367 | return host->req->error; | 374 | return host->req->error; |
368 | } | 375 | } |
369 | 376 | ||
370 | dev_dbg(&msh->dev, "control %08x\n", | 377 | dev_dbg(&msh->dev, "control %08x\n", readl(host->addr + HOST_CONTROL)); |
371 | readl(host->addr + HOST_CONTROL)); | ||
372 | dev_dbg(&msh->dev, "status %08x\n", readl(host->addr + INT_STATUS)); | 378 | dev_dbg(&msh->dev, "status %08x\n", readl(host->addr + INT_STATUS)); |
373 | dev_dbg(&msh->dev, "hstatus %08x\n", readl(host->addr + STATUS)); | 379 | dev_dbg(&msh->dev, "hstatus %08x\n", readl(host->addr + STATUS)); |
374 | 380 | ||
@@ -637,7 +643,7 @@ static int jmb38x_ms_reset(struct jmb38x_ms_host *host) | |||
637 | ndelay(20); | 643 | ndelay(20); |
638 | } | 644 | } |
639 | dev_dbg(&host->chip->pdev->dev, "reset_req timeout\n"); | 645 | dev_dbg(&host->chip->pdev->dev, "reset_req timeout\n"); |
640 | return -EIO; | 646 | /* return -EIO; */ |
641 | 647 | ||
642 | reset_next: | 648 | reset_next: |
643 | writel(HOST_CONTROL_RESET | HOST_CONTROL_CLOCK_EN | 649 | writel(HOST_CONTROL_RESET | HOST_CONTROL_CLOCK_EN |
@@ -680,7 +686,9 @@ static int jmb38x_ms_set_param(struct memstick_host *msh, | |||
680 | 686 | ||
681 | host_ctl = 7; | 687 | host_ctl = 7; |
682 | host_ctl |= HOST_CONTROL_POWER_EN | 688 | host_ctl |= HOST_CONTROL_POWER_EN |
683 | | HOST_CONTROL_CLOCK_EN; | 689 | | HOST_CONTROL_CLOCK_EN |
690 | | HOST_CONTROL_HW_OC_P | ||
691 | | HOST_CONTROL_TDELAY_EN; | ||
684 | writel(host_ctl, host->addr + HOST_CONTROL); | 692 | writel(host_ctl, host->addr + HOST_CONTROL); |
685 | 693 | ||
686 | writel(host->id ? PAD_PU_PD_ON_MS_SOCK1 | 694 | writel(host->id ? PAD_PU_PD_ON_MS_SOCK1 |
@@ -704,33 +712,40 @@ static int jmb38x_ms_set_param(struct memstick_host *msh, | |||
704 | break; | 712 | break; |
705 | case MEMSTICK_INTERFACE: | 713 | case MEMSTICK_INTERFACE: |
706 | host_ctl &= ~(3 << HOST_CONTROL_IF_SHIFT); | 714 | host_ctl &= ~(3 << HOST_CONTROL_IF_SHIFT); |
715 | pci_read_config_dword(host->chip->pdev, | ||
716 | PCI_CTL_CLOCK_DLY_ADDR, | ||
717 | &clock_delay); | ||
718 | clock_delay &= host->id ? ~PCI_CTL_CLOCK_DLY_MASK_B | ||
719 | : ~PCI_CTL_CLOCK_DLY_MASK_A; | ||
707 | 720 | ||
708 | if (value == MEMSTICK_SERIAL) { | 721 | if (value == MEMSTICK_SERIAL) { |
709 | host_ctl &= ~HOST_CONTROL_FAST_CLK; | 722 | host_ctl &= ~HOST_CONTROL_FAST_CLK; |
723 | host_ctl &= ~HOST_CONTROL_REO; | ||
710 | host_ctl |= HOST_CONTROL_IF_SERIAL | 724 | host_ctl |= HOST_CONTROL_IF_SERIAL |
711 | << HOST_CONTROL_IF_SHIFT; | 725 | << HOST_CONTROL_IF_SHIFT; |
712 | host_ctl |= HOST_CONTROL_REI; | 726 | host_ctl |= HOST_CONTROL_REI; |
713 | clock_ctl = CLOCK_CONTROL_40MHZ; | 727 | clock_ctl = CLOCK_CONTROL_40MHZ; |
714 | clock_delay = 0; | ||
715 | } else if (value == MEMSTICK_PAR4) { | 728 | } else if (value == MEMSTICK_PAR4) { |
716 | host_ctl |= HOST_CONTROL_FAST_CLK; | 729 | host_ctl |= HOST_CONTROL_FAST_CLK | HOST_CONTROL_REO; |
717 | host_ctl |= HOST_CONTROL_IF_PAR4 | 730 | host_ctl |= HOST_CONTROL_IF_PAR4 |
718 | << HOST_CONTROL_IF_SHIFT; | 731 | << HOST_CONTROL_IF_SHIFT; |
719 | host_ctl &= ~HOST_CONTROL_REI; | 732 | host_ctl &= ~HOST_CONTROL_REI; |
720 | clock_ctl = CLOCK_CONTROL_40MHZ; | 733 | clock_ctl = CLOCK_CONTROL_40MHZ; |
721 | clock_delay = 4; | 734 | clock_delay |= host->id ? (4 << 12) : (4 << 8); |
722 | } else if (value == MEMSTICK_PAR8) { | 735 | } else if (value == MEMSTICK_PAR8) { |
723 | host_ctl |= HOST_CONTROL_FAST_CLK; | 736 | host_ctl |= HOST_CONTROL_FAST_CLK; |
724 | host_ctl |= HOST_CONTROL_IF_PAR8 | 737 | host_ctl |= HOST_CONTROL_IF_PAR8 |
725 | << HOST_CONTROL_IF_SHIFT; | 738 | << HOST_CONTROL_IF_SHIFT; |
726 | host_ctl &= ~HOST_CONTROL_REI; | 739 | host_ctl &= ~(HOST_CONTROL_REI | HOST_CONTROL_REO); |
727 | clock_ctl = CLOCK_CONTROL_60MHZ; | 740 | clock_ctl = CLOCK_CONTROL_50MHZ; |
728 | clock_delay = 0; | ||
729 | } else | 741 | } else |
730 | return -EINVAL; | 742 | return -EINVAL; |
743 | |||
731 | writel(host_ctl, host->addr + HOST_CONTROL); | 744 | writel(host_ctl, host->addr + HOST_CONTROL); |
732 | writel(clock_ctl, host->addr + CLOCK_CONTROL); | 745 | writel(clock_ctl, host->addr + CLOCK_CONTROL); |
733 | writel(clock_delay, host->addr + CLOCK_DELAY); | 746 | pci_write_config_dword(host->chip->pdev, |
747 | PCI_CTL_CLOCK_DLY_ADDR, | ||
748 | clock_delay); | ||
734 | break; | 749 | break; |
735 | }; | 750 | }; |
736 | return 0; | 751 | return 0; |
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index 10c44d3fe01a..68dc8d9eb24e 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig | |||
@@ -21,7 +21,7 @@ config MFD_SM501 | |||
21 | 21 | ||
22 | config MFD_SM501_GPIO | 22 | config MFD_SM501_GPIO |
23 | bool "Export GPIO via GPIO layer" | 23 | bool "Export GPIO via GPIO layer" |
24 | depends on MFD_SM501 && HAVE_GPIO_LIB | 24 | depends on MFD_SM501 && GPIOLIB |
25 | ---help--- | 25 | ---help--- |
26 | This option uses the gpio library layer to export the 64 GPIO | 26 | This option uses the gpio library layer to export the 64 GPIO |
27 | lines on the SM501. The platform data is used to supply the | 27 | lines on the SM501. The platform data is used to supply the |
@@ -29,7 +29,7 @@ config MFD_SM501_GPIO | |||
29 | 29 | ||
30 | config MFD_ASIC3 | 30 | config MFD_ASIC3 |
31 | bool "Support for Compaq ASIC3" | 31 | bool "Support for Compaq ASIC3" |
32 | depends on GENERIC_HARDIRQS && HAVE_GPIO_LIB && ARM | 32 | depends on GENERIC_HARDIRQS && GPIOLIB && ARM |
33 | ---help--- | 33 | ---help--- |
34 | This driver supports the ASIC3 multifunction chip found on many | 34 | This driver supports the ASIC3 multifunction chip found on many |
35 | PDAs (mainly iPAQ and HTC based ones) | 35 | PDAs (mainly iPAQ and HTC based ones) |
diff --git a/drivers/mfd/asic3.c b/drivers/mfd/asic3.c index bc2a807f210d..ba5aa2008273 100644 --- a/drivers/mfd/asic3.c +++ b/drivers/mfd/asic3.c | |||
@@ -312,7 +312,6 @@ static int __init asic3_irq_probe(struct platform_device *pdev) | |||
312 | struct asic3 *asic = platform_get_drvdata(pdev); | 312 | struct asic3 *asic = platform_get_drvdata(pdev); |
313 | unsigned long clksel = 0; | 313 | unsigned long clksel = 0; |
314 | unsigned int irq, irq_base; | 314 | unsigned int irq, irq_base; |
315 | int map_size; | ||
316 | int ret; | 315 | int ret; |
317 | 316 | ||
318 | ret = platform_get_irq(pdev, 0); | 317 | ret = platform_get_irq(pdev, 0); |
@@ -534,6 +533,7 @@ static int __init asic3_probe(struct platform_device *pdev) | |||
534 | struct asic3 *asic; | 533 | struct asic3 *asic; |
535 | struct resource *mem; | 534 | struct resource *mem; |
536 | unsigned long clksel; | 535 | unsigned long clksel; |
536 | int map_size; | ||
537 | int ret = 0; | 537 | int ret = 0; |
538 | 538 | ||
539 | asic = kzalloc(sizeof(struct asic3), GFP_KERNEL); | 539 | asic = kzalloc(sizeof(struct asic3), GFP_KERNEL); |
diff --git a/drivers/misc/eeepc-laptop.c b/drivers/misc/eeepc-laptop.c index facdb9893c84..1ee8501e90f1 100644 --- a/drivers/misc/eeepc-laptop.c +++ b/drivers/misc/eeepc-laptop.c | |||
@@ -450,12 +450,14 @@ static int eeepc_get_fan_pwm(void) | |||
450 | int value = 0; | 450 | int value = 0; |
451 | 451 | ||
452 | read_acpi_int(NULL, EEEPC_EC_FAN_PWM, &value); | 452 | read_acpi_int(NULL, EEEPC_EC_FAN_PWM, &value); |
453 | value = value * 255 / 100; | ||
453 | return (value); | 454 | return (value); |
454 | } | 455 | } |
455 | 456 | ||
456 | static void eeepc_set_fan_pwm(int value) | 457 | static void eeepc_set_fan_pwm(int value) |
457 | { | 458 | { |
458 | value = SENSORS_LIMIT(value, 0, 100); | 459 | value = SENSORS_LIMIT(value, 0, 255); |
460 | value = value * 100 / 255; | ||
459 | ec_write(EEEPC_EC_SC02, value); | 461 | ec_write(EEEPC_EC_SC02, value); |
460 | } | 462 | } |
461 | 463 | ||
@@ -520,15 +522,23 @@ static ssize_t show_sys_hwmon(int (*get)(void), char *buf) | |||
520 | static SENSOR_DEVICE_ATTR(_name, _mode, show_##_name, store_##_name, 0); | 522 | static SENSOR_DEVICE_ATTR(_name, _mode, show_##_name, store_##_name, 0); |
521 | 523 | ||
522 | EEEPC_CREATE_SENSOR_ATTR(fan1_input, S_IRUGO, eeepc_get_fan_rpm, NULL); | 524 | EEEPC_CREATE_SENSOR_ATTR(fan1_input, S_IRUGO, eeepc_get_fan_rpm, NULL); |
523 | EEEPC_CREATE_SENSOR_ATTR(fan1_pwm, S_IRUGO | S_IWUSR, | 525 | EEEPC_CREATE_SENSOR_ATTR(pwm1, S_IRUGO | S_IWUSR, |
524 | eeepc_get_fan_pwm, eeepc_set_fan_pwm); | 526 | eeepc_get_fan_pwm, eeepc_set_fan_pwm); |
525 | EEEPC_CREATE_SENSOR_ATTR(pwm1_enable, S_IRUGO | S_IWUSR, | 527 | EEEPC_CREATE_SENSOR_ATTR(pwm1_enable, S_IRUGO | S_IWUSR, |
526 | eeepc_get_fan_ctrl, eeepc_set_fan_ctrl); | 528 | eeepc_get_fan_ctrl, eeepc_set_fan_ctrl); |
527 | 529 | ||
530 | static ssize_t | ||
531 | show_name(struct device *dev, struct device_attribute *attr, char *buf) | ||
532 | { | ||
533 | return sprintf(buf, "eeepc\n"); | ||
534 | } | ||
535 | static SENSOR_DEVICE_ATTR(name, S_IRUGO, show_name, NULL, 0); | ||
536 | |||
528 | static struct attribute *hwmon_attributes[] = { | 537 | static struct attribute *hwmon_attributes[] = { |
529 | &sensor_dev_attr_fan1_pwm.dev_attr.attr, | 538 | &sensor_dev_attr_pwm1.dev_attr.attr, |
530 | &sensor_dev_attr_fan1_input.dev_attr.attr, | 539 | &sensor_dev_attr_fan1_input.dev_attr.attr, |
531 | &sensor_dev_attr_pwm1_enable.dev_attr.attr, | 540 | &sensor_dev_attr_pwm1_enable.dev_attr.attr, |
541 | &sensor_dev_attr_name.dev_attr.attr, | ||
532 | NULL | 542 | NULL |
533 | }; | 543 | }; |
534 | 544 | ||
diff --git a/drivers/misc/sgi-gru/grufile.c b/drivers/misc/sgi-gru/grufile.c index 23c91f5f6b61..d61cee796efd 100644 --- a/drivers/misc/sgi-gru/grufile.c +++ b/drivers/misc/sgi-gru/grufile.c | |||
@@ -445,6 +445,9 @@ static void __exit gru_exit(void) | |||
445 | int order = get_order(sizeof(struct gru_state) * | 445 | int order = get_order(sizeof(struct gru_state) * |
446 | GRU_CHIPLETS_PER_BLADE); | 446 | GRU_CHIPLETS_PER_BLADE); |
447 | 447 | ||
448 | if (!IS_UV()) | ||
449 | return; | ||
450 | |||
448 | for (i = 0; i < GRU_CHIPLETS_PER_BLADE; i++) | 451 | for (i = 0; i < GRU_CHIPLETS_PER_BLADE; i++) |
449 | free_irq(IRQ_GRU + i, NULL); | 452 | free_irq(IRQ_GRU + i, NULL); |
450 | 453 | ||
diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c index 6986f3926244..ebc8b9d77613 100644 --- a/drivers/mmc/card/block.c +++ b/drivers/mmc/card/block.c | |||
@@ -615,14 +615,19 @@ static struct mmc_driver mmc_driver = { | |||
615 | 615 | ||
616 | static int __init mmc_blk_init(void) | 616 | static int __init mmc_blk_init(void) |
617 | { | 617 | { |
618 | int res = -ENOMEM; | 618 | int res; |
619 | 619 | ||
620 | res = register_blkdev(MMC_BLOCK_MAJOR, "mmc"); | 620 | res = register_blkdev(MMC_BLOCK_MAJOR, "mmc"); |
621 | if (res) | 621 | if (res) |
622 | goto out; | 622 | goto out; |
623 | 623 | ||
624 | return mmc_register_driver(&mmc_driver); | 624 | res = mmc_register_driver(&mmc_driver); |
625 | if (res) | ||
626 | goto out2; | ||
625 | 627 | ||
628 | return 0; | ||
629 | out2: | ||
630 | unregister_blkdev(MMC_BLOCK_MAJOR, "mmc"); | ||
626 | out: | 631 | out: |
627 | return res; | 632 | return res; |
628 | } | 633 | } |
diff --git a/drivers/mmc/card/mmc_test.c b/drivers/mmc/card/mmc_test.c index f26b01d811ae..b92b172074ee 100644 --- a/drivers/mmc/card/mmc_test.c +++ b/drivers/mmc/card/mmc_test.c | |||
@@ -1040,7 +1040,7 @@ static const struct mmc_test_case mmc_test_cases[] = { | |||
1040 | 1040 | ||
1041 | }; | 1041 | }; |
1042 | 1042 | ||
1043 | static struct mutex mmc_test_lock; | 1043 | static DEFINE_MUTEX(mmc_test_lock); |
1044 | 1044 | ||
1045 | static void mmc_test_run(struct mmc_test_card *test, int testcase) | 1045 | static void mmc_test_run(struct mmc_test_card *test, int testcase) |
1046 | { | 1046 | { |
@@ -1171,8 +1171,6 @@ static int mmc_test_probe(struct mmc_card *card) | |||
1171 | if ((card->type != MMC_TYPE_MMC) && (card->type != MMC_TYPE_SD)) | 1171 | if ((card->type != MMC_TYPE_MMC) && (card->type != MMC_TYPE_SD)) |
1172 | return -ENODEV; | 1172 | return -ENODEV; |
1173 | 1173 | ||
1174 | mutex_init(&mmc_test_lock); | ||
1175 | |||
1176 | ret = device_create_file(&card->dev, &dev_attr_test); | 1174 | ret = device_create_file(&card->dev, &dev_attr_test); |
1177 | if (ret) | 1175 | if (ret) |
1178 | return ret; | 1176 | return ret; |
diff --git a/drivers/mmc/host/atmel-mci.c b/drivers/mmc/host/atmel-mci.c index 0bd06f5bd62f..00008967ef7a 100644 --- a/drivers/mmc/host/atmel-mci.c +++ b/drivers/mmc/host/atmel-mci.c | |||
@@ -195,7 +195,9 @@ static int atmci_regs_show(struct seq_file *s, void *v) | |||
195 | 195 | ||
196 | /* Grab a more or less consistent snapshot */ | 196 | /* Grab a more or less consistent snapshot */ |
197 | spin_lock_irq(&host->mmc->lock); | 197 | spin_lock_irq(&host->mmc->lock); |
198 | clk_enable(host->mck); | ||
198 | memcpy_fromio(buf, host->regs, MCI_REGS_SIZE); | 199 | memcpy_fromio(buf, host->regs, MCI_REGS_SIZE); |
200 | clk_disable(host->mck); | ||
199 | spin_unlock_irq(&host->mmc->lock); | 201 | spin_unlock_irq(&host->mmc->lock); |
200 | 202 | ||
201 | seq_printf(s, "MR:\t0x%08x%s%s CLKDIV=%u\n", | 203 | seq_printf(s, "MR:\t0x%08x%s%s CLKDIV=%u\n", |
@@ -216,6 +218,8 @@ static int atmci_regs_show(struct seq_file *s, void *v) | |||
216 | atmci_show_status_reg(s, "SR", buf[MCI_SR / 4]); | 218 | atmci_show_status_reg(s, "SR", buf[MCI_SR / 4]); |
217 | atmci_show_status_reg(s, "IMR", buf[MCI_IMR / 4]); | 219 | atmci_show_status_reg(s, "IMR", buf[MCI_IMR / 4]); |
218 | 220 | ||
221 | kfree(buf); | ||
222 | |||
219 | return 0; | 223 | return 0; |
220 | } | 224 | } |
221 | 225 | ||
@@ -237,7 +241,6 @@ static void atmci_init_debugfs(struct atmel_mci *host) | |||
237 | struct mmc_host *mmc; | 241 | struct mmc_host *mmc; |
238 | struct dentry *root; | 242 | struct dentry *root; |
239 | struct dentry *node; | 243 | struct dentry *node; |
240 | struct resource *res; | ||
241 | 244 | ||
242 | mmc = host->mmc; | 245 | mmc = host->mmc; |
243 | root = mmc->debugfs_root; | 246 | root = mmc->debugfs_root; |
@@ -251,9 +254,6 @@ static void atmci_init_debugfs(struct atmel_mci *host) | |||
251 | if (!node) | 254 | if (!node) |
252 | goto err; | 255 | goto err; |
253 | 256 | ||
254 | res = platform_get_resource(host->pdev, IORESOURCE_MEM, 0); | ||
255 | node->d_inode->i_size = res->end - res->start + 1; | ||
256 | |||
257 | node = debugfs_create_file("req", S_IRUSR, root, host, &atmci_req_fops); | 257 | node = debugfs_create_file("req", S_IRUSR, root, host, &atmci_req_fops); |
258 | if (!node) | 258 | if (!node) |
259 | goto err; | 259 | goto err; |
@@ -426,8 +426,6 @@ static u32 atmci_submit_data(struct mmc_host *mmc, struct mmc_data *data) | |||
426 | host->sg = NULL; | 426 | host->sg = NULL; |
427 | host->data = data; | 427 | host->data = data; |
428 | 428 | ||
429 | mci_writel(host, BLKR, MCI_BCNT(data->blocks) | ||
430 | | MCI_BLKLEN(data->blksz)); | ||
431 | dev_vdbg(&mmc->class_dev, "BLKR=0x%08x\n", | 429 | dev_vdbg(&mmc->class_dev, "BLKR=0x%08x\n", |
432 | MCI_BCNT(data->blocks) | MCI_BLKLEN(data->blksz)); | 430 | MCI_BCNT(data->blocks) | MCI_BLKLEN(data->blksz)); |
433 | 431 | ||
@@ -483,6 +481,10 @@ static void atmci_request(struct mmc_host *mmc, struct mmc_request *mrq) | |||
483 | if (data->blocks > 1 && data->blksz & 3) | 481 | if (data->blocks > 1 && data->blksz & 3) |
484 | goto fail; | 482 | goto fail; |
485 | atmci_set_timeout(host, data); | 483 | atmci_set_timeout(host, data); |
484 | |||
485 | /* Must set block count/size before sending command */ | ||
486 | mci_writel(host, BLKR, MCI_BCNT(data->blocks) | ||
487 | | MCI_BLKLEN(data->blksz)); | ||
486 | } | 488 | } |
487 | 489 | ||
488 | iflags = MCI_CMDRDY; | 490 | iflags = MCI_CMDRDY; |
@@ -1059,6 +1061,10 @@ static int __init atmci_probe(struct platform_device *pdev) | |||
1059 | host->present = !gpio_get_value(host->detect_pin); | 1061 | host->present = !gpio_get_value(host->detect_pin); |
1060 | } | 1062 | } |
1061 | } | 1063 | } |
1064 | |||
1065 | if (!gpio_is_valid(host->detect_pin)) | ||
1066 | mmc->caps |= MMC_CAP_NEEDS_POLL; | ||
1067 | |||
1062 | if (gpio_is_valid(host->wp_pin)) { | 1068 | if (gpio_is_valid(host->wp_pin)) { |
1063 | if (gpio_request(host->wp_pin, "mmc_wp")) { | 1069 | if (gpio_request(host->wp_pin, "mmc_wp")) { |
1064 | dev_dbg(&mmc->class_dev, "no WP pin available\n"); | 1070 | dev_dbg(&mmc->class_dev, "no WP pin available\n"); |
diff --git a/drivers/mmc/host/tmio_mmc.h b/drivers/mmc/host/tmio_mmc.h index 9e647a06054f..ba2b4240a86a 100644 --- a/drivers/mmc/host/tmio_mmc.h +++ b/drivers/mmc/host/tmio_mmc.h | |||
@@ -159,10 +159,10 @@ static inline void tmio_mmc_kunmap_atomic(struct tmio_mmc_host *host, | |||
159 | #define STATUS_TO_TEXT(a) \ | 159 | #define STATUS_TO_TEXT(a) \ |
160 | do { \ | 160 | do { \ |
161 | if (status & TMIO_STAT_##a) \ | 161 | if (status & TMIO_STAT_##a) \ |
162 | printf(#a); \ | 162 | printk(#a); \ |
163 | } while (0) | 163 | } while (0) |
164 | 164 | ||
165 | void debug_status(u32 status) | 165 | void pr_debug_status(u32 status) |
166 | { | 166 | { |
167 | printk(KERN_DEBUG "status: %08x = ", status); | 167 | printk(KERN_DEBUG "status: %08x = ", status); |
168 | STATUS_TO_TEXT(CARD_REMOVE); | 168 | STATUS_TO_TEXT(CARD_REMOVE); |
diff --git a/drivers/net/bnx2.h b/drivers/net/bnx2.h index c3c579f98ed0..dfacd31f7ed0 100644 --- a/drivers/net/bnx2.h +++ b/drivers/net/bnx2.h | |||
@@ -6597,7 +6597,7 @@ struct flash_spec { | |||
6597 | 6597 | ||
6598 | struct bnx2_irq { | 6598 | struct bnx2_irq { |
6599 | irq_handler_t handler; | 6599 | irq_handler_t handler; |
6600 | u16 vector; | 6600 | unsigned int vector; |
6601 | u8 requested; | 6601 | u8 requested; |
6602 | char name[16]; | 6602 | char name[16]; |
6603 | }; | 6603 | }; |
diff --git a/drivers/net/e100.c b/drivers/net/e100.c index 453115acaad2..5cf78d612c45 100644 --- a/drivers/net/e100.c +++ b/drivers/net/e100.c | |||
@@ -2738,9 +2738,7 @@ static int __devinit e100_probe(struct pci_dev *pdev, | |||
2738 | nic->flags |= wol_magic; | 2738 | nic->flags |= wol_magic; |
2739 | 2739 | ||
2740 | /* ack any pending wake events, disable PME */ | 2740 | /* ack any pending wake events, disable PME */ |
2741 | err = pci_enable_wake(pdev, 0, 0); | 2741 | pci_pme_active(pdev, false); |
2742 | if (err) | ||
2743 | DPRINTK(PROBE, ERR, "Error clearing wake event\n"); | ||
2744 | 2742 | ||
2745 | strcpy(netdev->name, "eth%d"); | 2743 | strcpy(netdev->name, "eth%d"); |
2746 | if((err = register_netdev(netdev))) { | 2744 | if((err = register_netdev(netdev))) { |
diff --git a/drivers/net/e1000/e1000_hw.c b/drivers/net/e1000/e1000_hw.c index 9d6edf3e73f9..d04eef53571e 100644 --- a/drivers/net/e1000/e1000_hw.c +++ b/drivers/net/e1000/e1000_hw.c | |||
@@ -144,6 +144,8 @@ static s32 e1000_host_if_read_cookie(struct e1000_hw *hw, u8 *buffer); | |||
144 | static u8 e1000_calculate_mng_checksum(char *buffer, u32 length); | 144 | static u8 e1000_calculate_mng_checksum(char *buffer, u32 length); |
145 | static s32 e1000_configure_kmrn_for_10_100(struct e1000_hw *hw, u16 duplex); | 145 | static s32 e1000_configure_kmrn_for_10_100(struct e1000_hw *hw, u16 duplex); |
146 | static s32 e1000_configure_kmrn_for_1000(struct e1000_hw *hw); | 146 | static s32 e1000_configure_kmrn_for_1000(struct e1000_hw *hw); |
147 | static s32 e1000_do_read_eeprom(struct e1000_hw *hw, u16 offset, u16 words, u16 *data); | ||
148 | static s32 e1000_do_write_eeprom(struct e1000_hw *hw, u16 offset, u16 words, u16 *data); | ||
147 | 149 | ||
148 | /* IGP cable length table */ | 150 | /* IGP cable length table */ |
149 | static const | 151 | static const |
@@ -168,6 +170,8 @@ u16 e1000_igp_2_cable_length_table[IGP02E1000_AGC_LENGTH_TABLE_SIZE] = | |||
168 | 83, 89, 95, 100, 105, 109, 113, 116, 119, 122, 124, | 170 | 83, 89, 95, 100, 105, 109, 113, 116, 119, 122, 124, |
169 | 104, 109, 114, 118, 121, 124}; | 171 | 104, 109, 114, 118, 121, 124}; |
170 | 172 | ||
173 | static DEFINE_SPINLOCK(e1000_eeprom_lock); | ||
174 | |||
171 | /****************************************************************************** | 175 | /****************************************************************************** |
172 | * Set the phy type member in the hw struct. | 176 | * Set the phy type member in the hw struct. |
173 | * | 177 | * |
@@ -4904,6 +4908,15 @@ static s32 e1000_spi_eeprom_ready(struct e1000_hw *hw) | |||
4904 | *****************************************************************************/ | 4908 | *****************************************************************************/ |
4905 | s32 e1000_read_eeprom(struct e1000_hw *hw, u16 offset, u16 words, u16 *data) | 4909 | s32 e1000_read_eeprom(struct e1000_hw *hw, u16 offset, u16 words, u16 *data) |
4906 | { | 4910 | { |
4911 | s32 ret; | ||
4912 | spin_lock(&e1000_eeprom_lock); | ||
4913 | ret = e1000_do_read_eeprom(hw, offset, words, data); | ||
4914 | spin_unlock(&e1000_eeprom_lock); | ||
4915 | return ret; | ||
4916 | } | ||
4917 | |||
4918 | static s32 e1000_do_read_eeprom(struct e1000_hw *hw, u16 offset, u16 words, u16 *data) | ||
4919 | { | ||
4907 | struct e1000_eeprom_info *eeprom = &hw->eeprom; | 4920 | struct e1000_eeprom_info *eeprom = &hw->eeprom; |
4908 | u32 i = 0; | 4921 | u32 i = 0; |
4909 | 4922 | ||
@@ -5236,6 +5249,16 @@ s32 e1000_update_eeprom_checksum(struct e1000_hw *hw) | |||
5236 | *****************************************************************************/ | 5249 | *****************************************************************************/ |
5237 | s32 e1000_write_eeprom(struct e1000_hw *hw, u16 offset, u16 words, u16 *data) | 5250 | s32 e1000_write_eeprom(struct e1000_hw *hw, u16 offset, u16 words, u16 *data) |
5238 | { | 5251 | { |
5252 | s32 ret; | ||
5253 | spin_lock(&e1000_eeprom_lock); | ||
5254 | ret = e1000_do_write_eeprom(hw, offset, words, data); | ||
5255 | spin_unlock(&e1000_eeprom_lock); | ||
5256 | return ret; | ||
5257 | } | ||
5258 | |||
5259 | |||
5260 | static s32 e1000_do_write_eeprom(struct e1000_hw *hw, u16 offset, u16 words, u16 *data) | ||
5261 | { | ||
5239 | struct e1000_eeprom_info *eeprom = &hw->eeprom; | 5262 | struct e1000_eeprom_info *eeprom = &hw->eeprom; |
5240 | s32 status = 0; | 5263 | s32 status = 0; |
5241 | 5264 | ||
diff --git a/drivers/net/e1000e/e1000.h b/drivers/net/e1000e/e1000.h index ac4e506b4f88..5ea6b60fa377 100644 --- a/drivers/net/e1000e/e1000.h +++ b/drivers/net/e1000e/e1000.h | |||
@@ -257,7 +257,6 @@ struct e1000_adapter { | |||
257 | struct net_device *netdev; | 257 | struct net_device *netdev; |
258 | struct pci_dev *pdev; | 258 | struct pci_dev *pdev; |
259 | struct net_device_stats net_stats; | 259 | struct net_device_stats net_stats; |
260 | spinlock_t stats_lock; /* prevent concurrent stats updates */ | ||
261 | 260 | ||
262 | /* structs defined in e1000_hw.h */ | 261 | /* structs defined in e1000_hw.h */ |
263 | struct e1000_hw hw; | 262 | struct e1000_hw hw; |
@@ -284,6 +283,8 @@ struct e1000_adapter { | |||
284 | unsigned long led_status; | 283 | unsigned long led_status; |
285 | 284 | ||
286 | unsigned int flags; | 285 | unsigned int flags; |
286 | struct work_struct downshift_task; | ||
287 | struct work_struct update_phy_task; | ||
287 | }; | 288 | }; |
288 | 289 | ||
289 | struct e1000_info { | 290 | struct e1000_info { |
@@ -305,6 +306,7 @@ struct e1000_info { | |||
305 | #define FLAG_HAS_CTRLEXT_ON_LOAD (1 << 5) | 306 | #define FLAG_HAS_CTRLEXT_ON_LOAD (1 << 5) |
306 | #define FLAG_HAS_SWSM_ON_LOAD (1 << 6) | 307 | #define FLAG_HAS_SWSM_ON_LOAD (1 << 6) |
307 | #define FLAG_HAS_JUMBO_FRAMES (1 << 7) | 308 | #define FLAG_HAS_JUMBO_FRAMES (1 << 7) |
309 | #define FLAG_READ_ONLY_NVM (1 << 8) | ||
308 | #define FLAG_IS_ICH (1 << 9) | 310 | #define FLAG_IS_ICH (1 << 9) |
309 | #define FLAG_HAS_SMART_POWER_DOWN (1 << 11) | 311 | #define FLAG_HAS_SMART_POWER_DOWN (1 << 11) |
310 | #define FLAG_IS_QUAD_PORT_A (1 << 12) | 312 | #define FLAG_IS_QUAD_PORT_A (1 << 12) |
@@ -385,6 +387,7 @@ extern bool e1000e_enable_mng_pass_thru(struct e1000_hw *hw); | |||
385 | extern bool e1000e_get_laa_state_82571(struct e1000_hw *hw); | 387 | extern bool e1000e_get_laa_state_82571(struct e1000_hw *hw); |
386 | extern void e1000e_set_laa_state_82571(struct e1000_hw *hw, bool state); | 388 | extern void e1000e_set_laa_state_82571(struct e1000_hw *hw, bool state); |
387 | 389 | ||
390 | extern void e1000e_write_protect_nvm_ich8lan(struct e1000_hw *hw); | ||
388 | extern void e1000e_set_kmrn_lock_loss_workaround_ich8lan(struct e1000_hw *hw, | 391 | extern void e1000e_set_kmrn_lock_loss_workaround_ich8lan(struct e1000_hw *hw, |
389 | bool state); | 392 | bool state); |
390 | extern void e1000e_igp3_phy_powerdown_workaround_ich8lan(struct e1000_hw *hw); | 393 | extern void e1000e_igp3_phy_powerdown_workaround_ich8lan(struct e1000_hw *hw); |
diff --git a/drivers/net/e1000e/ethtool.c b/drivers/net/e1000e/ethtool.c index e21c9e0f3738..33a3ff17b5d0 100644 --- a/drivers/net/e1000e/ethtool.c +++ b/drivers/net/e1000e/ethtool.c | |||
@@ -432,6 +432,10 @@ static void e1000_get_regs(struct net_device *netdev, | |||
432 | regs_buff[11] = er32(TIDV); | 432 | regs_buff[11] = er32(TIDV); |
433 | 433 | ||
434 | regs_buff[12] = adapter->hw.phy.type; /* PHY type (IGP=1, M88=0) */ | 434 | regs_buff[12] = adapter->hw.phy.type; /* PHY type (IGP=1, M88=0) */ |
435 | |||
436 | /* ethtool doesn't use anything past this point, so all this | ||
437 | * code is likely legacy junk for apps that may or may not | ||
438 | * exist */ | ||
435 | if (hw->phy.type == e1000_phy_m88) { | 439 | if (hw->phy.type == e1000_phy_m88) { |
436 | e1e_rphy(hw, M88E1000_PHY_SPEC_STATUS, &phy_data); | 440 | e1e_rphy(hw, M88E1000_PHY_SPEC_STATUS, &phy_data); |
437 | regs_buff[13] = (u32)phy_data; /* cable length */ | 441 | regs_buff[13] = (u32)phy_data; /* cable length */ |
@@ -447,7 +451,7 @@ static void e1000_get_regs(struct net_device *netdev, | |||
447 | regs_buff[22] = adapter->phy_stats.receive_errors; | 451 | regs_buff[22] = adapter->phy_stats.receive_errors; |
448 | regs_buff[23] = regs_buff[13]; /* mdix mode */ | 452 | regs_buff[23] = regs_buff[13]; /* mdix mode */ |
449 | } | 453 | } |
450 | regs_buff[21] = adapter->phy_stats.idle_errors; /* phy idle errors */ | 454 | regs_buff[21] = 0; /* was idle_errors */ |
451 | e1e_rphy(hw, PHY_1000T_STATUS, &phy_data); | 455 | e1e_rphy(hw, PHY_1000T_STATUS, &phy_data); |
452 | regs_buff[24] = (u32)phy_data; /* phy local receiver status */ | 456 | regs_buff[24] = (u32)phy_data; /* phy local receiver status */ |
453 | regs_buff[25] = regs_buff[24]; /* phy remote receiver status */ | 457 | regs_buff[25] = regs_buff[24]; /* phy remote receiver status */ |
@@ -529,6 +533,9 @@ static int e1000_set_eeprom(struct net_device *netdev, | |||
529 | if (eeprom->magic != (adapter->pdev->vendor | (adapter->pdev->device << 16))) | 533 | if (eeprom->magic != (adapter->pdev->vendor | (adapter->pdev->device << 16))) |
530 | return -EFAULT; | 534 | return -EFAULT; |
531 | 535 | ||
536 | if (adapter->flags & FLAG_READ_ONLY_NVM) | ||
537 | return -EINVAL; | ||
538 | |||
532 | max_len = hw->nvm.word_size * 2; | 539 | max_len = hw->nvm.word_size * 2; |
533 | 540 | ||
534 | first_word = eeprom->offset >> 1; | 541 | first_word = eeprom->offset >> 1; |
diff --git a/drivers/net/e1000e/ich8lan.c b/drivers/net/e1000e/ich8lan.c index 9e38452a738c..bcd2bc477af2 100644 --- a/drivers/net/e1000e/ich8lan.c +++ b/drivers/net/e1000e/ich8lan.c | |||
@@ -58,6 +58,7 @@ | |||
58 | #define ICH_FLASH_HSFCTL 0x0006 | 58 | #define ICH_FLASH_HSFCTL 0x0006 |
59 | #define ICH_FLASH_FADDR 0x0008 | 59 | #define ICH_FLASH_FADDR 0x0008 |
60 | #define ICH_FLASH_FDATA0 0x0010 | 60 | #define ICH_FLASH_FDATA0 0x0010 |
61 | #define ICH_FLASH_PR0 0x0074 | ||
61 | 62 | ||
62 | #define ICH_FLASH_READ_COMMAND_TIMEOUT 500 | 63 | #define ICH_FLASH_READ_COMMAND_TIMEOUT 500 |
63 | #define ICH_FLASH_WRITE_COMMAND_TIMEOUT 500 | 64 | #define ICH_FLASH_WRITE_COMMAND_TIMEOUT 500 |
@@ -150,6 +151,19 @@ union ich8_hws_flash_regacc { | |||
150 | u16 regval; | 151 | u16 regval; |
151 | }; | 152 | }; |
152 | 153 | ||
154 | /* ICH Flash Protected Region */ | ||
155 | union ich8_flash_protected_range { | ||
156 | struct ich8_pr { | ||
157 | u32 base:13; /* 0:12 Protected Range Base */ | ||
158 | u32 reserved1:2; /* 13:14 Reserved */ | ||
159 | u32 rpe:1; /* 15 Read Protection Enable */ | ||
160 | u32 limit:13; /* 16:28 Protected Range Limit */ | ||
161 | u32 reserved2:2; /* 29:30 Reserved */ | ||
162 | u32 wpe:1; /* 31 Write Protection Enable */ | ||
163 | } range; | ||
164 | u32 regval; | ||
165 | }; | ||
166 | |||
153 | static s32 e1000_setup_link_ich8lan(struct e1000_hw *hw); | 167 | static s32 e1000_setup_link_ich8lan(struct e1000_hw *hw); |
154 | static void e1000_clear_hw_cntrs_ich8lan(struct e1000_hw *hw); | 168 | static void e1000_clear_hw_cntrs_ich8lan(struct e1000_hw *hw); |
155 | static void e1000_initialize_hw_bits_ich8lan(struct e1000_hw *hw); | 169 | static void e1000_initialize_hw_bits_ich8lan(struct e1000_hw *hw); |
@@ -366,6 +380,9 @@ static s32 e1000_get_variants_ich8lan(struct e1000_adapter *adapter) | |||
366 | return 0; | 380 | return 0; |
367 | } | 381 | } |
368 | 382 | ||
383 | static DEFINE_MUTEX(nvm_mutex); | ||
384 | static pid_t nvm_owner = -1; | ||
385 | |||
369 | /** | 386 | /** |
370 | * e1000_acquire_swflag_ich8lan - Acquire software control flag | 387 | * e1000_acquire_swflag_ich8lan - Acquire software control flag |
371 | * @hw: pointer to the HW structure | 388 | * @hw: pointer to the HW structure |
@@ -379,6 +396,15 @@ static s32 e1000_acquire_swflag_ich8lan(struct e1000_hw *hw) | |||
379 | u32 extcnf_ctrl; | 396 | u32 extcnf_ctrl; |
380 | u32 timeout = PHY_CFG_TIMEOUT; | 397 | u32 timeout = PHY_CFG_TIMEOUT; |
381 | 398 | ||
399 | might_sleep(); | ||
400 | |||
401 | if (!mutex_trylock(&nvm_mutex)) { | ||
402 | WARN(1, KERN_ERR "e1000e mutex contention. Owned by pid %d\n", | ||
403 | nvm_owner); | ||
404 | mutex_lock(&nvm_mutex); | ||
405 | } | ||
406 | nvm_owner = current->pid; | ||
407 | |||
382 | while (timeout) { | 408 | while (timeout) { |
383 | extcnf_ctrl = er32(EXTCNF_CTRL); | 409 | extcnf_ctrl = er32(EXTCNF_CTRL); |
384 | extcnf_ctrl |= E1000_EXTCNF_CTRL_SWFLAG; | 410 | extcnf_ctrl |= E1000_EXTCNF_CTRL_SWFLAG; |
@@ -393,6 +419,8 @@ static s32 e1000_acquire_swflag_ich8lan(struct e1000_hw *hw) | |||
393 | 419 | ||
394 | if (!timeout) { | 420 | if (!timeout) { |
395 | hw_dbg(hw, "FW or HW has locked the resource for too long.\n"); | 421 | hw_dbg(hw, "FW or HW has locked the resource for too long.\n"); |
422 | nvm_owner = -1; | ||
423 | mutex_unlock(&nvm_mutex); | ||
396 | return -E1000_ERR_CONFIG; | 424 | return -E1000_ERR_CONFIG; |
397 | } | 425 | } |
398 | 426 | ||
@@ -414,6 +442,9 @@ static void e1000_release_swflag_ich8lan(struct e1000_hw *hw) | |||
414 | extcnf_ctrl = er32(EXTCNF_CTRL); | 442 | extcnf_ctrl = er32(EXTCNF_CTRL); |
415 | extcnf_ctrl &= ~E1000_EXTCNF_CTRL_SWFLAG; | 443 | extcnf_ctrl &= ~E1000_EXTCNF_CTRL_SWFLAG; |
416 | ew32(EXTCNF_CTRL, extcnf_ctrl); | 444 | ew32(EXTCNF_CTRL, extcnf_ctrl); |
445 | |||
446 | nvm_owner = -1; | ||
447 | mutex_unlock(&nvm_mutex); | ||
417 | } | 448 | } |
418 | 449 | ||
419 | /** | 450 | /** |
@@ -1284,6 +1315,7 @@ static s32 e1000_update_nvm_checksum_ich8lan(struct e1000_hw *hw) | |||
1284 | * programming failed. | 1315 | * programming failed. |
1285 | */ | 1316 | */ |
1286 | if (ret_val) { | 1317 | if (ret_val) { |
1318 | /* Possibly read-only, see e1000e_write_protect_nvm_ich8lan() */ | ||
1287 | hw_dbg(hw, "Flash commit failed.\n"); | 1319 | hw_dbg(hw, "Flash commit failed.\n"); |
1288 | e1000_release_swflag_ich8lan(hw); | 1320 | e1000_release_swflag_ich8lan(hw); |
1289 | return ret_val; | 1321 | return ret_val; |
@@ -1374,6 +1406,49 @@ static s32 e1000_validate_nvm_checksum_ich8lan(struct e1000_hw *hw) | |||
1374 | } | 1406 | } |
1375 | 1407 | ||
1376 | /** | 1408 | /** |
1409 | * e1000e_write_protect_nvm_ich8lan - Make the NVM read-only | ||
1410 | * @hw: pointer to the HW structure | ||
1411 | * | ||
1412 | * To prevent malicious write/erase of the NVM, set it to be read-only | ||
1413 | * so that the hardware ignores all write/erase cycles of the NVM via | ||
1414 | * the flash control registers. The shadow-ram copy of the NVM will | ||
1415 | * still be updated, however any updates to this copy will not stick | ||
1416 | * across driver reloads. | ||
1417 | **/ | ||
1418 | void e1000e_write_protect_nvm_ich8lan(struct e1000_hw *hw) | ||
1419 | { | ||
1420 | union ich8_flash_protected_range pr0; | ||
1421 | union ich8_hws_flash_status hsfsts; | ||
1422 | u32 gfpreg; | ||
1423 | s32 ret_val; | ||
1424 | |||
1425 | ret_val = e1000_acquire_swflag_ich8lan(hw); | ||
1426 | if (ret_val) | ||
1427 | return; | ||
1428 | |||
1429 | gfpreg = er32flash(ICH_FLASH_GFPREG); | ||
1430 | |||
1431 | /* Write-protect GbE Sector of NVM */ | ||
1432 | pr0.regval = er32flash(ICH_FLASH_PR0); | ||
1433 | pr0.range.base = gfpreg & FLASH_GFPREG_BASE_MASK; | ||
1434 | pr0.range.limit = ((gfpreg >> 16) & FLASH_GFPREG_BASE_MASK); | ||
1435 | pr0.range.wpe = true; | ||
1436 | ew32flash(ICH_FLASH_PR0, pr0.regval); | ||
1437 | |||
1438 | /* | ||
1439 | * Lock down a subset of GbE Flash Control Registers, e.g. | ||
1440 | * PR0 to prevent the write-protection from being lifted. | ||
1441 | * Once FLOCKDN is set, the registers protected by it cannot | ||
1442 | * be written until FLOCKDN is cleared by a hardware reset. | ||
1443 | */ | ||
1444 | hsfsts.regval = er16flash(ICH_FLASH_HSFSTS); | ||
1445 | hsfsts.hsf_status.flockdn = true; | ||
1446 | ew32flash(ICH_FLASH_HSFSTS, hsfsts.regval); | ||
1447 | |||
1448 | e1000_release_swflag_ich8lan(hw); | ||
1449 | } | ||
1450 | |||
1451 | /** | ||
1377 | * e1000_write_flash_data_ich8lan - Writes bytes to the NVM | 1452 | * e1000_write_flash_data_ich8lan - Writes bytes to the NVM |
1378 | * @hw: pointer to the HW structure | 1453 | * @hw: pointer to the HW structure |
1379 | * @offset: The offset (in bytes) of the byte/word to read. | 1454 | * @offset: The offset (in bytes) of the byte/word to read. |
@@ -1720,6 +1795,9 @@ static s32 e1000_reset_hw_ich8lan(struct e1000_hw *hw) | |||
1720 | ew32(CTRL, (ctrl | E1000_CTRL_RST)); | 1795 | ew32(CTRL, (ctrl | E1000_CTRL_RST)); |
1721 | msleep(20); | 1796 | msleep(20); |
1722 | 1797 | ||
1798 | /* release the swflag because it is not reset by hardware reset */ | ||
1799 | e1000_release_swflag_ich8lan(hw); | ||
1800 | |||
1723 | ret_val = e1000e_get_auto_rd_done(hw); | 1801 | ret_val = e1000e_get_auto_rd_done(hw); |
1724 | if (ret_val) { | 1802 | if (ret_val) { |
1725 | /* | 1803 | /* |
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c index d266510c8a94..b81c4237b5d3 100644 --- a/drivers/net/e1000e/netdev.c +++ b/drivers/net/e1000e/netdev.c | |||
@@ -47,7 +47,7 @@ | |||
47 | 47 | ||
48 | #include "e1000.h" | 48 | #include "e1000.h" |
49 | 49 | ||
50 | #define DRV_VERSION "0.3.3.3-k2" | 50 | #define DRV_VERSION "0.3.3.3-k6" |
51 | char e1000e_driver_name[] = "e1000e"; | 51 | char e1000e_driver_name[] = "e1000e"; |
52 | const char e1000e_driver_version[] = DRV_VERSION; | 52 | const char e1000e_driver_version[] = DRV_VERSION; |
53 | 53 | ||
@@ -1115,6 +1115,14 @@ static void e1000_clean_rx_ring(struct e1000_adapter *adapter) | |||
1115 | writel(0, adapter->hw.hw_addr + rx_ring->tail); | 1115 | writel(0, adapter->hw.hw_addr + rx_ring->tail); |
1116 | } | 1116 | } |
1117 | 1117 | ||
1118 | static void e1000e_downshift_workaround(struct work_struct *work) | ||
1119 | { | ||
1120 | struct e1000_adapter *adapter = container_of(work, | ||
1121 | struct e1000_adapter, downshift_task); | ||
1122 | |||
1123 | e1000e_gig_downshift_workaround_ich8lan(&adapter->hw); | ||
1124 | } | ||
1125 | |||
1118 | /** | 1126 | /** |
1119 | * e1000_intr_msi - Interrupt Handler | 1127 | * e1000_intr_msi - Interrupt Handler |
1120 | * @irq: interrupt number | 1128 | * @irq: interrupt number |
@@ -1139,7 +1147,7 @@ static irqreturn_t e1000_intr_msi(int irq, void *data) | |||
1139 | */ | 1147 | */ |
1140 | if ((adapter->flags & FLAG_LSC_GIG_SPEED_DROP) && | 1148 | if ((adapter->flags & FLAG_LSC_GIG_SPEED_DROP) && |
1141 | (!(er32(STATUS) & E1000_STATUS_LU))) | 1149 | (!(er32(STATUS) & E1000_STATUS_LU))) |
1142 | e1000e_gig_downshift_workaround_ich8lan(hw); | 1150 | schedule_work(&adapter->downshift_task); |
1143 | 1151 | ||
1144 | /* | 1152 | /* |
1145 | * 80003ES2LAN workaround-- For packet buffer work-around on | 1153 | * 80003ES2LAN workaround-- For packet buffer work-around on |
@@ -1205,7 +1213,7 @@ static irqreturn_t e1000_intr(int irq, void *data) | |||
1205 | */ | 1213 | */ |
1206 | if ((adapter->flags & FLAG_LSC_GIG_SPEED_DROP) && | 1214 | if ((adapter->flags & FLAG_LSC_GIG_SPEED_DROP) && |
1207 | (!(er32(STATUS) & E1000_STATUS_LU))) | 1215 | (!(er32(STATUS) & E1000_STATUS_LU))) |
1208 | e1000e_gig_downshift_workaround_ich8lan(hw); | 1216 | schedule_work(&adapter->downshift_task); |
1209 | 1217 | ||
1210 | /* | 1218 | /* |
1211 | * 80003ES2LAN workaround-- | 1219 | * 80003ES2LAN workaround-- |
@@ -2592,8 +2600,6 @@ static int __devinit e1000_sw_init(struct e1000_adapter *adapter) | |||
2592 | /* Explicitly disable IRQ since the NIC can be in any state. */ | 2600 | /* Explicitly disable IRQ since the NIC can be in any state. */ |
2593 | e1000_irq_disable(adapter); | 2601 | e1000_irq_disable(adapter); |
2594 | 2602 | ||
2595 | spin_lock_init(&adapter->stats_lock); | ||
2596 | |||
2597 | set_bit(__E1000_DOWN, &adapter->state); | 2603 | set_bit(__E1000_DOWN, &adapter->state); |
2598 | return 0; | 2604 | return 0; |
2599 | 2605 | ||
@@ -2912,6 +2918,21 @@ static int e1000_set_mac(struct net_device *netdev, void *p) | |||
2912 | return 0; | 2918 | return 0; |
2913 | } | 2919 | } |
2914 | 2920 | ||
2921 | /** | ||
2922 | * e1000e_update_phy_task - work thread to update phy | ||
2923 | * @work: pointer to our work struct | ||
2924 | * | ||
2925 | * this worker thread exists because we must acquire a | ||
2926 | * semaphore to read the phy, which we could msleep while | ||
2927 | * waiting for it, and we can't msleep in a timer. | ||
2928 | **/ | ||
2929 | static void e1000e_update_phy_task(struct work_struct *work) | ||
2930 | { | ||
2931 | struct e1000_adapter *adapter = container_of(work, | ||
2932 | struct e1000_adapter, update_phy_task); | ||
2933 | e1000_get_phy_info(&adapter->hw); | ||
2934 | } | ||
2935 | |||
2915 | /* | 2936 | /* |
2916 | * Need to wait a few seconds after link up to get diagnostic information from | 2937 | * Need to wait a few seconds after link up to get diagnostic information from |
2917 | * the phy | 2938 | * the phy |
@@ -2919,7 +2940,7 @@ static int e1000_set_mac(struct net_device *netdev, void *p) | |||
2919 | static void e1000_update_phy_info(unsigned long data) | 2940 | static void e1000_update_phy_info(unsigned long data) |
2920 | { | 2941 | { |
2921 | struct e1000_adapter *adapter = (struct e1000_adapter *) data; | 2942 | struct e1000_adapter *adapter = (struct e1000_adapter *) data; |
2922 | e1000_get_phy_info(&adapter->hw); | 2943 | schedule_work(&adapter->update_phy_task); |
2923 | } | 2944 | } |
2924 | 2945 | ||
2925 | /** | 2946 | /** |
@@ -2930,10 +2951,6 @@ void e1000e_update_stats(struct e1000_adapter *adapter) | |||
2930 | { | 2951 | { |
2931 | struct e1000_hw *hw = &adapter->hw; | 2952 | struct e1000_hw *hw = &adapter->hw; |
2932 | struct pci_dev *pdev = adapter->pdev; | 2953 | struct pci_dev *pdev = adapter->pdev; |
2933 | unsigned long irq_flags; | ||
2934 | u16 phy_tmp; | ||
2935 | |||
2936 | #define PHY_IDLE_ERROR_COUNT_MASK 0x00FF | ||
2937 | 2954 | ||
2938 | /* | 2955 | /* |
2939 | * Prevent stats update while adapter is being reset, or if the pci | 2956 | * Prevent stats update while adapter is being reset, or if the pci |
@@ -2944,14 +2961,6 @@ void e1000e_update_stats(struct e1000_adapter *adapter) | |||
2944 | if (pci_channel_offline(pdev)) | 2961 | if (pci_channel_offline(pdev)) |
2945 | return; | 2962 | return; |
2946 | 2963 | ||
2947 | spin_lock_irqsave(&adapter->stats_lock, irq_flags); | ||
2948 | |||
2949 | /* | ||
2950 | * these counters are modified from e1000_adjust_tbi_stats, | ||
2951 | * called from the interrupt context, so they must only | ||
2952 | * be written while holding adapter->stats_lock | ||
2953 | */ | ||
2954 | |||
2955 | adapter->stats.crcerrs += er32(CRCERRS); | 2964 | adapter->stats.crcerrs += er32(CRCERRS); |
2956 | adapter->stats.gprc += er32(GPRC); | 2965 | adapter->stats.gprc += er32(GPRC); |
2957 | adapter->stats.gorc += er32(GORCL); | 2966 | adapter->stats.gorc += er32(GORCL); |
@@ -3022,21 +3031,10 @@ void e1000e_update_stats(struct e1000_adapter *adapter) | |||
3022 | 3031 | ||
3023 | /* Tx Dropped needs to be maintained elsewhere */ | 3032 | /* Tx Dropped needs to be maintained elsewhere */ |
3024 | 3033 | ||
3025 | /* Phy Stats */ | ||
3026 | if (hw->phy.media_type == e1000_media_type_copper) { | ||
3027 | if ((adapter->link_speed == SPEED_1000) && | ||
3028 | (!e1e_rphy(hw, PHY_1000T_STATUS, &phy_tmp))) { | ||
3029 | phy_tmp &= PHY_IDLE_ERROR_COUNT_MASK; | ||
3030 | adapter->phy_stats.idle_errors += phy_tmp; | ||
3031 | } | ||
3032 | } | ||
3033 | |||
3034 | /* Management Stats */ | 3034 | /* Management Stats */ |
3035 | adapter->stats.mgptc += er32(MGTPTC); | 3035 | adapter->stats.mgptc += er32(MGTPTC); |
3036 | adapter->stats.mgprc += er32(MGTPRC); | 3036 | adapter->stats.mgprc += er32(MGTPRC); |
3037 | adapter->stats.mgpdc += er32(MGTPDC); | 3037 | adapter->stats.mgpdc += er32(MGTPDC); |
3038 | |||
3039 | spin_unlock_irqrestore(&adapter->stats_lock, irq_flags); | ||
3040 | } | 3038 | } |
3041 | 3039 | ||
3042 | /** | 3040 | /** |
@@ -3048,10 +3046,6 @@ static void e1000_phy_read_status(struct e1000_adapter *adapter) | |||
3048 | struct e1000_hw *hw = &adapter->hw; | 3046 | struct e1000_hw *hw = &adapter->hw; |
3049 | struct e1000_phy_regs *phy = &adapter->phy_regs; | 3047 | struct e1000_phy_regs *phy = &adapter->phy_regs; |
3050 | int ret_val; | 3048 | int ret_val; |
3051 | unsigned long irq_flags; | ||
3052 | |||
3053 | |||
3054 | spin_lock_irqsave(&adapter->stats_lock, irq_flags); | ||
3055 | 3049 | ||
3056 | if ((er32(STATUS) & E1000_STATUS_LU) && | 3050 | if ((er32(STATUS) & E1000_STATUS_LU) && |
3057 | (adapter->hw.phy.media_type == e1000_media_type_copper)) { | 3051 | (adapter->hw.phy.media_type == e1000_media_type_copper)) { |
@@ -3082,8 +3076,6 @@ static void e1000_phy_read_status(struct e1000_adapter *adapter) | |||
3082 | phy->stat1000 = 0; | 3076 | phy->stat1000 = 0; |
3083 | phy->estatus = (ESTATUS_1000_TFULL | ESTATUS_1000_THALF); | 3077 | phy->estatus = (ESTATUS_1000_TFULL | ESTATUS_1000_THALF); |
3084 | } | 3078 | } |
3085 | |||
3086 | spin_unlock_irqrestore(&adapter->stats_lock, irq_flags); | ||
3087 | } | 3079 | } |
3088 | 3080 | ||
3089 | static void e1000_print_link_info(struct e1000_adapter *adapter) | 3081 | static void e1000_print_link_info(struct e1000_adapter *adapter) |
@@ -4467,6 +4459,8 @@ static int __devinit e1000_probe(struct pci_dev *pdev, | |||
4467 | 4459 | ||
4468 | adapter->bd_number = cards_found++; | 4460 | adapter->bd_number = cards_found++; |
4469 | 4461 | ||
4462 | e1000e_check_options(adapter); | ||
4463 | |||
4470 | /* setup adapter struct */ | 4464 | /* setup adapter struct */ |
4471 | err = e1000_sw_init(adapter); | 4465 | err = e1000_sw_init(adapter); |
4472 | if (err) | 4466 | if (err) |
@@ -4482,6 +4476,10 @@ static int __devinit e1000_probe(struct pci_dev *pdev, | |||
4482 | if (err) | 4476 | if (err) |
4483 | goto err_hw_init; | 4477 | goto err_hw_init; |
4484 | 4478 | ||
4479 | if ((adapter->flags & FLAG_IS_ICH) && | ||
4480 | (adapter->flags & FLAG_READ_ONLY_NVM)) | ||
4481 | e1000e_write_protect_nvm_ich8lan(&adapter->hw); | ||
4482 | |||
4485 | hw->mac.ops.get_bus_info(&adapter->hw); | 4483 | hw->mac.ops.get_bus_info(&adapter->hw); |
4486 | 4484 | ||
4487 | adapter->hw.phy.autoneg_wait_to_complete = 0; | 4485 | adapter->hw.phy.autoneg_wait_to_complete = 0; |
@@ -4572,8 +4570,8 @@ static int __devinit e1000_probe(struct pci_dev *pdev, | |||
4572 | 4570 | ||
4573 | INIT_WORK(&adapter->reset_task, e1000_reset_task); | 4571 | INIT_WORK(&adapter->reset_task, e1000_reset_task); |
4574 | INIT_WORK(&adapter->watchdog_task, e1000_watchdog_task); | 4572 | INIT_WORK(&adapter->watchdog_task, e1000_watchdog_task); |
4575 | 4573 | INIT_WORK(&adapter->downshift_task, e1000e_downshift_workaround); | |
4576 | e1000e_check_options(adapter); | 4574 | INIT_WORK(&adapter->update_phy_task, e1000e_update_phy_task); |
4577 | 4575 | ||
4578 | /* Initialize link parameters. User can change them with ethtool */ | 4576 | /* Initialize link parameters. User can change them with ethtool */ |
4579 | adapter->hw.mac.autoneg = 1; | 4577 | adapter->hw.mac.autoneg = 1; |
diff --git a/drivers/net/e1000e/param.c b/drivers/net/e1000e/param.c index ed912e023a72..d91dbf7ba434 100644 --- a/drivers/net/e1000e/param.c +++ b/drivers/net/e1000e/param.c | |||
@@ -133,6 +133,15 @@ E1000_PARAM(SmartPowerDownEnable, "Enable PHY smart power down"); | |||
133 | */ | 133 | */ |
134 | E1000_PARAM(KumeranLockLoss, "Enable Kumeran lock loss workaround"); | 134 | E1000_PARAM(KumeranLockLoss, "Enable Kumeran lock loss workaround"); |
135 | 135 | ||
136 | /* | ||
137 | * Write Protect NVM | ||
138 | * | ||
139 | * Valid Range: 0, 1 | ||
140 | * | ||
141 | * Default Value: 1 (enabled) | ||
142 | */ | ||
143 | E1000_PARAM(WriteProtectNVM, "Write-protect NVM [WARNING: disabling this can lead to corrupted NVM]"); | ||
144 | |||
136 | struct e1000_option { | 145 | struct e1000_option { |
137 | enum { enable_option, range_option, list_option } type; | 146 | enum { enable_option, range_option, list_option } type; |
138 | const char *name; | 147 | const char *name; |
@@ -388,4 +397,25 @@ void __devinit e1000e_check_options(struct e1000_adapter *adapter) | |||
388 | opt.def); | 397 | opt.def); |
389 | } | 398 | } |
390 | } | 399 | } |
400 | { /* Write-protect NVM */ | ||
401 | const struct e1000_option opt = { | ||
402 | .type = enable_option, | ||
403 | .name = "Write-protect NVM", | ||
404 | .err = "defaulting to Enabled", | ||
405 | .def = OPTION_ENABLED | ||
406 | }; | ||
407 | |||
408 | if (adapter->flags & FLAG_IS_ICH) { | ||
409 | if (num_WriteProtectNVM > bd) { | ||
410 | unsigned int write_protect_nvm = WriteProtectNVM[bd]; | ||
411 | e1000_validate_option(&write_protect_nvm, &opt, | ||
412 | adapter); | ||
413 | if (write_protect_nvm) | ||
414 | adapter->flags |= FLAG_READ_ONLY_NVM; | ||
415 | } else { | ||
416 | if (opt.def) | ||
417 | adapter->flags |= FLAG_READ_ONLY_NVM; | ||
418 | } | ||
419 | } | ||
420 | } | ||
391 | } | 421 | } |
diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c index 0b6ecef9a849..eeb55ed2152d 100644 --- a/drivers/net/forcedeth.c +++ b/drivers/net/forcedeth.c | |||
@@ -5643,6 +5643,7 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i | |||
5643 | dev->dev_addr[4] = (np->orig_mac[0] >> 8) & 0xff; | 5643 | dev->dev_addr[4] = (np->orig_mac[0] >> 8) & 0xff; |
5644 | dev->dev_addr[5] = (np->orig_mac[0] >> 0) & 0xff; | 5644 | dev->dev_addr[5] = (np->orig_mac[0] >> 0) & 0xff; |
5645 | writel(txreg|NVREG_TRANSMITPOLL_MAC_ADDR_REV, base + NvRegTransmitPoll); | 5645 | writel(txreg|NVREG_TRANSMITPOLL_MAC_ADDR_REV, base + NvRegTransmitPoll); |
5646 | printk(KERN_DEBUG "nv_probe: set workaround bit for reversed mac addr\n"); | ||
5646 | } | 5647 | } |
5647 | memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len); | 5648 | memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len); |
5648 | 5649 | ||
@@ -5890,14 +5891,12 @@ static void nv_restore_phy(struct net_device *dev) | |||
5890 | } | 5891 | } |
5891 | } | 5892 | } |
5892 | 5893 | ||
5893 | static void __devexit nv_remove(struct pci_dev *pci_dev) | 5894 | static void nv_restore_mac_addr(struct pci_dev *pci_dev) |
5894 | { | 5895 | { |
5895 | struct net_device *dev = pci_get_drvdata(pci_dev); | 5896 | struct net_device *dev = pci_get_drvdata(pci_dev); |
5896 | struct fe_priv *np = netdev_priv(dev); | 5897 | struct fe_priv *np = netdev_priv(dev); |
5897 | u8 __iomem *base = get_hwbase(dev); | 5898 | u8 __iomem *base = get_hwbase(dev); |
5898 | 5899 | ||
5899 | unregister_netdev(dev); | ||
5900 | |||
5901 | /* special op: write back the misordered MAC address - otherwise | 5900 | /* special op: write back the misordered MAC address - otherwise |
5902 | * the next nv_probe would see a wrong address. | 5901 | * the next nv_probe would see a wrong address. |
5903 | */ | 5902 | */ |
@@ -5905,6 +5904,15 @@ static void __devexit nv_remove(struct pci_dev *pci_dev) | |||
5905 | writel(np->orig_mac[1], base + NvRegMacAddrB); | 5904 | writel(np->orig_mac[1], base + NvRegMacAddrB); |
5906 | writel(readl(base + NvRegTransmitPoll) & ~NVREG_TRANSMITPOLL_MAC_ADDR_REV, | 5905 | writel(readl(base + NvRegTransmitPoll) & ~NVREG_TRANSMITPOLL_MAC_ADDR_REV, |
5907 | base + NvRegTransmitPoll); | 5906 | base + NvRegTransmitPoll); |
5907 | } | ||
5908 | |||
5909 | static void __devexit nv_remove(struct pci_dev *pci_dev) | ||
5910 | { | ||
5911 | struct net_device *dev = pci_get_drvdata(pci_dev); | ||
5912 | |||
5913 | unregister_netdev(dev); | ||
5914 | |||
5915 | nv_restore_mac_addr(pci_dev); | ||
5908 | 5916 | ||
5909 | /* restore any phy related changes */ | 5917 | /* restore any phy related changes */ |
5910 | nv_restore_phy(dev); | 5918 | nv_restore_phy(dev); |
@@ -5975,6 +5983,8 @@ static void nv_shutdown(struct pci_dev *pdev) | |||
5975 | if (netif_running(dev)) | 5983 | if (netif_running(dev)) |
5976 | nv_close(dev); | 5984 | nv_close(dev); |
5977 | 5985 | ||
5986 | nv_restore_mac_addr(pdev); | ||
5987 | |||
5978 | pci_disable_device(pdev); | 5988 | pci_disable_device(pdev); |
5979 | if (system_state == SYSTEM_POWER_OFF) { | 5989 | if (system_state == SYSTEM_POWER_OFF) { |
5980 | if (pci_enable_wake(pdev, PCI_D3cold, np->wolenabled)) | 5990 | if (pci_enable_wake(pdev, PCI_D3cold, np->wolenabled)) |
diff --git a/drivers/net/hp-plus.c b/drivers/net/hp-plus.c index 8239939554bc..fbbd3e660c27 100644 --- a/drivers/net/hp-plus.c +++ b/drivers/net/hp-plus.c | |||
@@ -139,7 +139,7 @@ static int __init do_hpp_probe(struct net_device *dev) | |||
139 | #ifndef MODULE | 139 | #ifndef MODULE |
140 | struct net_device * __init hp_plus_probe(int unit) | 140 | struct net_device * __init hp_plus_probe(int unit) |
141 | { | 141 | { |
142 | struct net_device *dev = alloc_ei_netdev(); | 142 | struct net_device *dev = alloc_eip_netdev(); |
143 | int err; | 143 | int err; |
144 | 144 | ||
145 | if (!dev) | 145 | if (!dev) |
@@ -284,7 +284,7 @@ hpp_open(struct net_device *dev) | |||
284 | int option_reg; | 284 | int option_reg; |
285 | int retval; | 285 | int retval; |
286 | 286 | ||
287 | if ((retval = request_irq(dev->irq, ei_interrupt, 0, dev->name, dev))) { | 287 | if ((retval = request_irq(dev->irq, eip_interrupt, 0, dev->name, dev))) { |
288 | return retval; | 288 | return retval; |
289 | } | 289 | } |
290 | 290 | ||
@@ -302,7 +302,7 @@ hpp_open(struct net_device *dev) | |||
302 | /* Select the operational page. */ | 302 | /* Select the operational page. */ |
303 | outw(Perf_Page, ioaddr + HP_PAGING); | 303 | outw(Perf_Page, ioaddr + HP_PAGING); |
304 | 304 | ||
305 | ei_open(dev); | 305 | eip_open(dev); |
306 | return 0; | 306 | return 0; |
307 | } | 307 | } |
308 | 308 | ||
@@ -313,7 +313,7 @@ hpp_close(struct net_device *dev) | |||
313 | int option_reg = inw(ioaddr + HPP_OPTION); | 313 | int option_reg = inw(ioaddr + HPP_OPTION); |
314 | 314 | ||
315 | free_irq(dev->irq, dev); | 315 | free_irq(dev->irq, dev); |
316 | ei_close(dev); | 316 | eip_close(dev); |
317 | outw((option_reg & ~EnableIRQ) | MemDisable | NICReset | ChipReset, | 317 | outw((option_reg & ~EnableIRQ) | MemDisable | NICReset | ChipReset, |
318 | ioaddr + HPP_OPTION); | 318 | ioaddr + HPP_OPTION); |
319 | 319 | ||
diff --git a/drivers/net/mlx4/mr.c b/drivers/net/mlx4/mr.c index 62071d9c4a55..d1dd5b48dbd1 100644 --- a/drivers/net/mlx4/mr.c +++ b/drivers/net/mlx4/mr.c | |||
@@ -67,11 +67,10 @@ struct mlx4_mpt_entry { | |||
67 | #define MLX4_MPT_FLAG_PHYSICAL (1 << 9) | 67 | #define MLX4_MPT_FLAG_PHYSICAL (1 << 9) |
68 | #define MLX4_MPT_FLAG_REGION (1 << 8) | 68 | #define MLX4_MPT_FLAG_REGION (1 << 8) |
69 | 69 | ||
70 | #define MLX4_MPT_PD_FLAG_FAST_REG (1 << 26) | 70 | #define MLX4_MPT_PD_FLAG_FAST_REG (1 << 27) |
71 | #define MLX4_MPT_PD_FLAG_RAE (1 << 28) | ||
71 | #define MLX4_MPT_PD_FLAG_EN_INV (3 << 24) | 72 | #define MLX4_MPT_PD_FLAG_EN_INV (3 << 24) |
72 | 73 | ||
73 | #define MLX4_MTT_FLAG_PRESENT 1 | ||
74 | |||
75 | #define MLX4_MPT_STATUS_SW 0xF0 | 74 | #define MLX4_MPT_STATUS_SW 0xF0 |
76 | #define MLX4_MPT_STATUS_HW 0x00 | 75 | #define MLX4_MPT_STATUS_HW 0x00 |
77 | 76 | ||
@@ -348,7 +347,10 @@ int mlx4_mr_enable(struct mlx4_dev *dev, struct mlx4_mr *mr) | |||
348 | if (mr->mtt.order >= 0 && mr->mtt.page_shift == 0) { | 347 | if (mr->mtt.order >= 0 && mr->mtt.page_shift == 0) { |
349 | /* fast register MR in free state */ | 348 | /* fast register MR in free state */ |
350 | mpt_entry->flags |= cpu_to_be32(MLX4_MPT_FLAG_FREE); | 349 | mpt_entry->flags |= cpu_to_be32(MLX4_MPT_FLAG_FREE); |
351 | mpt_entry->pd_flags |= cpu_to_be32(MLX4_MPT_PD_FLAG_FAST_REG); | 350 | mpt_entry->pd_flags |= cpu_to_be32(MLX4_MPT_PD_FLAG_FAST_REG | |
351 | MLX4_MPT_PD_FLAG_RAE); | ||
352 | mpt_entry->mtt_sz = cpu_to_be32((1 << mr->mtt.order) * | ||
353 | MLX4_MTT_ENTRY_PER_SEG); | ||
352 | } else { | 354 | } else { |
353 | mpt_entry->flags |= cpu_to_be32(MLX4_MPT_FLAG_SW_OWNS); | 355 | mpt_entry->flags |= cpu_to_be32(MLX4_MPT_FLAG_SW_OWNS); |
354 | } | 356 | } |
diff --git a/drivers/net/niu.c b/drivers/net/niu.c index e4765b713aba..e3be81eba8a4 100644 --- a/drivers/net/niu.c +++ b/drivers/net/niu.c | |||
@@ -5984,6 +5984,56 @@ static void niu_netif_start(struct niu *np) | |||
5984 | niu_enable_interrupts(np, 1); | 5984 | niu_enable_interrupts(np, 1); |
5985 | } | 5985 | } |
5986 | 5986 | ||
5987 | static void niu_reset_buffers(struct niu *np) | ||
5988 | { | ||
5989 | int i, j, k, err; | ||
5990 | |||
5991 | if (np->rx_rings) { | ||
5992 | for (i = 0; i < np->num_rx_rings; i++) { | ||
5993 | struct rx_ring_info *rp = &np->rx_rings[i]; | ||
5994 | |||
5995 | for (j = 0, k = 0; j < MAX_RBR_RING_SIZE; j++) { | ||
5996 | struct page *page; | ||
5997 | |||
5998 | page = rp->rxhash[j]; | ||
5999 | while (page) { | ||
6000 | struct page *next = | ||
6001 | (struct page *) page->mapping; | ||
6002 | u64 base = page->index; | ||
6003 | base = base >> RBR_DESCR_ADDR_SHIFT; | ||
6004 | rp->rbr[k++] = cpu_to_le32(base); | ||
6005 | page = next; | ||
6006 | } | ||
6007 | } | ||
6008 | for (; k < MAX_RBR_RING_SIZE; k++) { | ||
6009 | err = niu_rbr_add_page(np, rp, GFP_ATOMIC, k); | ||
6010 | if (unlikely(err)) | ||
6011 | break; | ||
6012 | } | ||
6013 | |||
6014 | rp->rbr_index = rp->rbr_table_size - 1; | ||
6015 | rp->rcr_index = 0; | ||
6016 | rp->rbr_pending = 0; | ||
6017 | rp->rbr_refill_pending = 0; | ||
6018 | } | ||
6019 | } | ||
6020 | if (np->tx_rings) { | ||
6021 | for (i = 0; i < np->num_tx_rings; i++) { | ||
6022 | struct tx_ring_info *rp = &np->tx_rings[i]; | ||
6023 | |||
6024 | for (j = 0; j < MAX_TX_RING_SIZE; j++) { | ||
6025 | if (rp->tx_buffs[j].skb) | ||
6026 | (void) release_tx_packet(np, rp, j); | ||
6027 | } | ||
6028 | |||
6029 | rp->pending = MAX_TX_RING_SIZE; | ||
6030 | rp->prod = 0; | ||
6031 | rp->cons = 0; | ||
6032 | rp->wrap_bit = 0; | ||
6033 | } | ||
6034 | } | ||
6035 | } | ||
6036 | |||
5987 | static void niu_reset_task(struct work_struct *work) | 6037 | static void niu_reset_task(struct work_struct *work) |
5988 | { | 6038 | { |
5989 | struct niu *np = container_of(work, struct niu, reset_task); | 6039 | struct niu *np = container_of(work, struct niu, reset_task); |
@@ -6006,6 +6056,12 @@ static void niu_reset_task(struct work_struct *work) | |||
6006 | 6056 | ||
6007 | niu_stop_hw(np); | 6057 | niu_stop_hw(np); |
6008 | 6058 | ||
6059 | spin_unlock_irqrestore(&np->lock, flags); | ||
6060 | |||
6061 | niu_reset_buffers(np); | ||
6062 | |||
6063 | spin_lock_irqsave(&np->lock, flags); | ||
6064 | |||
6009 | err = niu_init_hw(np); | 6065 | err = niu_init_hw(np); |
6010 | if (!err) { | 6066 | if (!err) { |
6011 | np->timer.expires = jiffies + HZ; | 6067 | np->timer.expires = jiffies + HZ; |
diff --git a/drivers/net/wireless/ath9k/beacon.c b/drivers/net/wireless/ath9k/beacon.c index caf569401a34..00a0eaa08866 100644 --- a/drivers/net/wireless/ath9k/beacon.c +++ b/drivers/net/wireless/ath9k/beacon.c | |||
@@ -209,6 +209,7 @@ static struct ath_buf *ath_beacon_generate(struct ath_softc *sc, int if_id) | |||
209 | unsigned int curlen; | 209 | unsigned int curlen; |
210 | struct ath_txq *cabq; | 210 | struct ath_txq *cabq; |
211 | struct ath_txq *mcastq; | 211 | struct ath_txq *mcastq; |
212 | struct ieee80211_tx_info *info; | ||
212 | avp = sc->sc_vaps[if_id]; | 213 | avp = sc->sc_vaps[if_id]; |
213 | 214 | ||
214 | mcastq = &avp->av_mcastq; | 215 | mcastq = &avp->av_mcastq; |
@@ -232,6 +233,18 @@ static struct ath_buf *ath_beacon_generate(struct ath_softc *sc, int if_id) | |||
232 | */ | 233 | */ |
233 | curlen = skb->len; | 234 | curlen = skb->len; |
234 | 235 | ||
236 | info = IEEE80211_SKB_CB(skb); | ||
237 | if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ) { | ||
238 | /* | ||
239 | * TODO: make sure the seq# gets assigned properly (vs. other | ||
240 | * TX frames) | ||
241 | */ | ||
242 | struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; | ||
243 | sc->seq_no += 0x10; | ||
244 | hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG); | ||
245 | hdr->seq_ctrl |= cpu_to_le16(sc->seq_no); | ||
246 | } | ||
247 | |||
235 | /* XXX: spin_lock_bh should not be used here, but sparse bitches | 248 | /* XXX: spin_lock_bh should not be used here, but sparse bitches |
236 | * otherwise. We should fix sparse :) */ | 249 | * otherwise. We should fix sparse :) */ |
237 | spin_lock_bh(&mcastq->axq_lock); | 250 | spin_lock_bh(&mcastq->axq_lock); |
diff --git a/drivers/net/wireless/ath9k/core.c b/drivers/net/wireless/ath9k/core.c index f6c45288d0e7..87e37bc39145 100644 --- a/drivers/net/wireless/ath9k/core.c +++ b/drivers/net/wireless/ath9k/core.c | |||
@@ -294,8 +294,6 @@ static int ath_stop(struct ath_softc *sc) | |||
294 | * hardware is gone (invalid). | 294 | * hardware is gone (invalid). |
295 | */ | 295 | */ |
296 | 296 | ||
297 | if (!sc->sc_invalid) | ||
298 | ath9k_hw_set_interrupts(ah, 0); | ||
299 | ath_draintxq(sc, false); | 297 | ath_draintxq(sc, false); |
300 | if (!sc->sc_invalid) { | 298 | if (!sc->sc_invalid) { |
301 | ath_stoprecv(sc); | 299 | ath_stoprecv(sc); |
@@ -797,6 +795,12 @@ int ath_open(struct ath_softc *sc, struct ath9k_channel *initial_chan) | |||
797 | if (ah->ah_caps.hw_caps & ATH9K_HW_CAP_HT) | 795 | if (ah->ah_caps.hw_caps & ATH9K_HW_CAP_HT) |
798 | sc->sc_imask |= ATH9K_INT_CST; | 796 | sc->sc_imask |= ATH9K_INT_CST; |
799 | 797 | ||
798 | /* Note: We disable MIB interrupts for now as we don't yet | ||
799 | * handle processing ANI, otherwise you will get an interrupt | ||
800 | * storm after about 7 hours of usage making the system unusable | ||
801 | * with huge latency. Once we do have ANI processing included | ||
802 | * we can re-enable this interrupt. */ | ||
803 | #if 0 | ||
800 | /* | 804 | /* |
801 | * Enable MIB interrupts when there are hardware phy counters. | 805 | * Enable MIB interrupts when there are hardware phy counters. |
802 | * Note we only do this (at the moment) for station mode. | 806 | * Note we only do this (at the moment) for station mode. |
@@ -804,6 +808,7 @@ int ath_open(struct ath_softc *sc, struct ath9k_channel *initial_chan) | |||
804 | if (ath9k_hw_phycounters(ah) && | 808 | if (ath9k_hw_phycounters(ah) && |
805 | ((sc->sc_opmode == ATH9K_M_STA) || (sc->sc_opmode == ATH9K_M_IBSS))) | 809 | ((sc->sc_opmode == ATH9K_M_STA) || (sc->sc_opmode == ATH9K_M_IBSS))) |
806 | sc->sc_imask |= ATH9K_INT_MIB; | 810 | sc->sc_imask |= ATH9K_INT_MIB; |
811 | #endif | ||
807 | /* | 812 | /* |
808 | * Some hardware processes the TIM IE and fires an | 813 | * Some hardware processes the TIM IE and fires an |
809 | * interrupt when the TIM bit is set. For hardware | 814 | * interrupt when the TIM bit is set. For hardware |
@@ -1336,6 +1341,8 @@ void ath_deinit(struct ath_softc *sc) | |||
1336 | 1341 | ||
1337 | DPRINTF(sc, ATH_DBG_CONFIG, "%s\n", __func__); | 1342 | DPRINTF(sc, ATH_DBG_CONFIG, "%s\n", __func__); |
1338 | 1343 | ||
1344 | tasklet_kill(&sc->intr_tq); | ||
1345 | tasklet_kill(&sc->bcon_tasklet); | ||
1339 | ath_stop(sc); | 1346 | ath_stop(sc); |
1340 | if (!sc->sc_invalid) | 1347 | if (!sc->sc_invalid) |
1341 | ath9k_hw_setpower(sc->sc_ah, ATH9K_PM_AWAKE); | 1348 | ath9k_hw_setpower(sc->sc_ah, ATH9K_PM_AWAKE); |
diff --git a/drivers/net/wireless/ath9k/core.h b/drivers/net/wireless/ath9k/core.h index 673b3d81133a..2f84093331ee 100644 --- a/drivers/net/wireless/ath9k/core.h +++ b/drivers/net/wireless/ath9k/core.h | |||
@@ -974,7 +974,6 @@ struct ath_softc { | |||
974 | u32 sc_keymax; /* size of key cache */ | 974 | u32 sc_keymax; /* size of key cache */ |
975 | DECLARE_BITMAP(sc_keymap, ATH_KEYMAX); /* key use bit map */ | 975 | DECLARE_BITMAP(sc_keymap, ATH_KEYMAX); /* key use bit map */ |
976 | u8 sc_splitmic; /* split TKIP MIC keys */ | 976 | u8 sc_splitmic; /* split TKIP MIC keys */ |
977 | int sc_keytype; | ||
978 | 977 | ||
979 | /* RX */ | 978 | /* RX */ |
980 | struct list_head sc_rxbuf; | 979 | struct list_head sc_rxbuf; |
@@ -992,6 +991,7 @@ struct ath_softc { | |||
992 | u32 sc_txintrperiod; /* tx interrupt batching */ | 991 | u32 sc_txintrperiod; /* tx interrupt batching */ |
993 | int sc_haltype2q[ATH9K_WME_AC_VO+1]; /* HAL WME AC -> h/w qnum */ | 992 | int sc_haltype2q[ATH9K_WME_AC_VO+1]; /* HAL WME AC -> h/w qnum */ |
994 | u32 sc_ant_tx[8]; /* recent tx frames/antenna */ | 993 | u32 sc_ant_tx[8]; /* recent tx frames/antenna */ |
994 | u16 seq_no; /* TX sequence number */ | ||
995 | 995 | ||
996 | /* Beacon */ | 996 | /* Beacon */ |
997 | struct ath9k_tx_queue_info sc_beacon_qi; | 997 | struct ath9k_tx_queue_info sc_beacon_qi; |
diff --git a/drivers/net/wireless/ath9k/main.c b/drivers/net/wireless/ath9k/main.c index c5107f269f24..acebdf1d20a8 100644 --- a/drivers/net/wireless/ath9k/main.c +++ b/drivers/net/wireless/ath9k/main.c | |||
@@ -206,8 +206,6 @@ static int ath_key_config(struct ath_softc *sc, | |||
206 | if (!ret) | 206 | if (!ret) |
207 | return -EIO; | 207 | return -EIO; |
208 | 208 | ||
209 | if (mac) | ||
210 | sc->sc_keytype = hk.kv_type; | ||
211 | return 0; | 209 | return 0; |
212 | } | 210 | } |
213 | 211 | ||
@@ -369,6 +367,20 @@ static int ath9k_tx(struct ieee80211_hw *hw, | |||
369 | { | 367 | { |
370 | struct ath_softc *sc = hw->priv; | 368 | struct ath_softc *sc = hw->priv; |
371 | int hdrlen, padsize; | 369 | int hdrlen, padsize; |
370 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); | ||
371 | |||
372 | /* | ||
373 | * As a temporary workaround, assign seq# here; this will likely need | ||
374 | * to be cleaned up to work better with Beacon transmission and virtual | ||
375 | * BSSes. | ||
376 | */ | ||
377 | if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ) { | ||
378 | struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; | ||
379 | if (info->flags & IEEE80211_TX_CTL_FIRST_FRAGMENT) | ||
380 | sc->seq_no += 0x10; | ||
381 | hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG); | ||
382 | hdr->seq_ctrl |= cpu_to_le16(sc->seq_no); | ||
383 | } | ||
372 | 384 | ||
373 | /* Add the padding after the header if this is not already done */ | 385 | /* Add the padding after the header if this is not already done */ |
374 | hdrlen = ieee80211_get_hdrlen_from_skb(skb); | 386 | hdrlen = ieee80211_get_hdrlen_from_skb(skb); |
@@ -764,7 +776,6 @@ static int ath9k_set_key(struct ieee80211_hw *hw, | |||
764 | case DISABLE_KEY: | 776 | case DISABLE_KEY: |
765 | ath_key_delete(sc, key); | 777 | ath_key_delete(sc, key); |
766 | clear_bit(key->keyidx, sc->sc_keymap); | 778 | clear_bit(key->keyidx, sc->sc_keymap); |
767 | sc->sc_keytype = ATH9K_CIPHER_CLR; | ||
768 | break; | 779 | break; |
769 | default: | 780 | default: |
770 | ret = -EINVAL; | 781 | ret = -EINVAL; |
@@ -1400,10 +1411,17 @@ static void ath_pci_remove(struct pci_dev *pdev) | |||
1400 | { | 1411 | { |
1401 | struct ieee80211_hw *hw = pci_get_drvdata(pdev); | 1412 | struct ieee80211_hw *hw = pci_get_drvdata(pdev); |
1402 | struct ath_softc *sc = hw->priv; | 1413 | struct ath_softc *sc = hw->priv; |
1414 | enum ath9k_int status; | ||
1403 | 1415 | ||
1404 | if (pdev->irq) | 1416 | if (pdev->irq) { |
1417 | ath9k_hw_set_interrupts(sc->sc_ah, 0); | ||
1418 | /* clear the ISR */ | ||
1419 | ath9k_hw_getisr(sc->sc_ah, &status); | ||
1420 | sc->sc_invalid = 1; | ||
1405 | free_irq(pdev->irq, sc); | 1421 | free_irq(pdev->irq, sc); |
1422 | } | ||
1406 | ath_detach(sc); | 1423 | ath_detach(sc); |
1424 | |||
1407 | pci_iounmap(pdev, sc->mem); | 1425 | pci_iounmap(pdev, sc->mem); |
1408 | pci_release_region(pdev, 0); | 1426 | pci_release_region(pdev, 0); |
1409 | pci_disable_device(pdev); | 1427 | pci_disable_device(pdev); |
diff --git a/drivers/net/wireless/ath9k/xmit.c b/drivers/net/wireless/ath9k/xmit.c index 550129f717e2..8b332e11a656 100644 --- a/drivers/net/wireless/ath9k/xmit.c +++ b/drivers/net/wireless/ath9k/xmit.c | |||
@@ -315,11 +315,11 @@ static int ath_tx_prepare(struct ath_softc *sc, | |||
315 | txctl->keyix = tx_info->control.hw_key->hw_key_idx; | 315 | txctl->keyix = tx_info->control.hw_key->hw_key_idx; |
316 | txctl->frmlen += tx_info->control.icv_len; | 316 | txctl->frmlen += tx_info->control.icv_len; |
317 | 317 | ||
318 | if (sc->sc_keytype == ATH9K_CIPHER_WEP) | 318 | if (tx_info->control.hw_key->alg == ALG_WEP) |
319 | txctl->keytype = ATH9K_KEY_TYPE_WEP; | 319 | txctl->keytype = ATH9K_KEY_TYPE_WEP; |
320 | else if (sc->sc_keytype == ATH9K_CIPHER_TKIP) | 320 | else if (tx_info->control.hw_key->alg == ALG_TKIP) |
321 | txctl->keytype = ATH9K_KEY_TYPE_TKIP; | 321 | txctl->keytype = ATH9K_KEY_TYPE_TKIP; |
322 | else if (sc->sc_keytype == ATH9K_CIPHER_AES_CCM) | 322 | else if (tx_info->control.hw_key->alg == ALG_CCMP) |
323 | txctl->keytype = ATH9K_KEY_TYPE_AES; | 323 | txctl->keytype = ATH9K_KEY_TYPE_AES; |
324 | } | 324 | } |
325 | 325 | ||
diff --git a/drivers/net/wireless/b43/rfkill.c b/drivers/net/wireless/b43/rfkill.c index fec5645944a4..34ae125d5384 100644 --- a/drivers/net/wireless/b43/rfkill.c +++ b/drivers/net/wireless/b43/rfkill.c | |||
@@ -43,23 +43,6 @@ static bool b43_is_hw_radio_enabled(struct b43_wldev *dev) | |||
43 | return 0; | 43 | return 0; |
44 | } | 44 | } |
45 | 45 | ||
46 | /* Update the rfkill state */ | ||
47 | static void b43_rfkill_update_state(struct b43_wldev *dev) | ||
48 | { | ||
49 | struct b43_rfkill *rfk = &(dev->wl->rfkill); | ||
50 | |||
51 | if (!dev->radio_hw_enable) { | ||
52 | rfk->rfkill->state = RFKILL_STATE_HARD_BLOCKED; | ||
53 | return; | ||
54 | } | ||
55 | |||
56 | if (!dev->phy.radio_on) | ||
57 | rfk->rfkill->state = RFKILL_STATE_SOFT_BLOCKED; | ||
58 | else | ||
59 | rfk->rfkill->state = RFKILL_STATE_UNBLOCKED; | ||
60 | |||
61 | } | ||
62 | |||
63 | /* The poll callback for the hardware button. */ | 46 | /* The poll callback for the hardware button. */ |
64 | static void b43_rfkill_poll(struct input_polled_dev *poll_dev) | 47 | static void b43_rfkill_poll(struct input_polled_dev *poll_dev) |
65 | { | 48 | { |
@@ -77,7 +60,6 @@ static void b43_rfkill_poll(struct input_polled_dev *poll_dev) | |||
77 | if (unlikely(enabled != dev->radio_hw_enable)) { | 60 | if (unlikely(enabled != dev->radio_hw_enable)) { |
78 | dev->radio_hw_enable = enabled; | 61 | dev->radio_hw_enable = enabled; |
79 | report_change = 1; | 62 | report_change = 1; |
80 | b43_rfkill_update_state(dev); | ||
81 | b43info(wl, "Radio hardware status changed to %s\n", | 63 | b43info(wl, "Radio hardware status changed to %s\n", |
82 | enabled ? "ENABLED" : "DISABLED"); | 64 | enabled ? "ENABLED" : "DISABLED"); |
83 | } | 65 | } |
diff --git a/drivers/net/wireless/b43legacy/rfkill.c b/drivers/net/wireless/b43legacy/rfkill.c index 476add97e974..b32bf6a94f19 100644 --- a/drivers/net/wireless/b43legacy/rfkill.c +++ b/drivers/net/wireless/b43legacy/rfkill.c | |||
@@ -44,23 +44,6 @@ static bool b43legacy_is_hw_radio_enabled(struct b43legacy_wldev *dev) | |||
44 | return 0; | 44 | return 0; |
45 | } | 45 | } |
46 | 46 | ||
47 | /* Update the rfkill state */ | ||
48 | static void b43legacy_rfkill_update_state(struct b43legacy_wldev *dev) | ||
49 | { | ||
50 | struct b43legacy_rfkill *rfk = &(dev->wl->rfkill); | ||
51 | |||
52 | if (!dev->radio_hw_enable) { | ||
53 | rfk->rfkill->state = RFKILL_STATE_HARD_BLOCKED; | ||
54 | return; | ||
55 | } | ||
56 | |||
57 | if (!dev->phy.radio_on) | ||
58 | rfk->rfkill->state = RFKILL_STATE_SOFT_BLOCKED; | ||
59 | else | ||
60 | rfk->rfkill->state = RFKILL_STATE_UNBLOCKED; | ||
61 | |||
62 | } | ||
63 | |||
64 | /* The poll callback for the hardware button. */ | 47 | /* The poll callback for the hardware button. */ |
65 | static void b43legacy_rfkill_poll(struct input_polled_dev *poll_dev) | 48 | static void b43legacy_rfkill_poll(struct input_polled_dev *poll_dev) |
66 | { | 49 | { |
@@ -78,7 +61,6 @@ static void b43legacy_rfkill_poll(struct input_polled_dev *poll_dev) | |||
78 | if (unlikely(enabled != dev->radio_hw_enable)) { | 61 | if (unlikely(enabled != dev->radio_hw_enable)) { |
79 | dev->radio_hw_enable = enabled; | 62 | dev->radio_hw_enable = enabled; |
80 | report_change = 1; | 63 | report_change = 1; |
81 | b43legacy_rfkill_update_state(dev); | ||
82 | b43legacyinfo(wl, "Radio hardware status changed to %s\n", | 64 | b43legacyinfo(wl, "Radio hardware status changed to %s\n", |
83 | enabled ? "ENABLED" : "DISABLED"); | 65 | enabled ? "ENABLED" : "DISABLED"); |
84 | } | 66 | } |
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c index da8b7433e3a6..a60ae86bd5c9 100644 --- a/drivers/net/wireless/zd1211rw/zd_usb.c +++ b/drivers/net/wireless/zd1211rw/zd_usb.c | |||
@@ -58,6 +58,7 @@ static struct usb_device_id usb_ids[] = { | |||
58 | { USB_DEVICE(0x0586, 0x3407), .driver_info = DEVICE_ZD1211 }, | 58 | { USB_DEVICE(0x0586, 0x3407), .driver_info = DEVICE_ZD1211 }, |
59 | { USB_DEVICE(0x129b, 0x1666), .driver_info = DEVICE_ZD1211 }, | 59 | { USB_DEVICE(0x129b, 0x1666), .driver_info = DEVICE_ZD1211 }, |
60 | { USB_DEVICE(0x157e, 0x300a), .driver_info = DEVICE_ZD1211 }, | 60 | { USB_DEVICE(0x157e, 0x300a), .driver_info = DEVICE_ZD1211 }, |
61 | { USB_DEVICE(0x0105, 0x145f), .driver_info = DEVICE_ZD1211 }, | ||
61 | /* ZD1211B */ | 62 | /* ZD1211B */ |
62 | { USB_DEVICE(0x0ace, 0x1215), .driver_info = DEVICE_ZD1211B }, | 63 | { USB_DEVICE(0x0ace, 0x1215), .driver_info = DEVICE_ZD1211B }, |
63 | { USB_DEVICE(0x157e, 0x300d), .driver_info = DEVICE_ZD1211B }, | 64 | { USB_DEVICE(0x157e, 0x300d), .driver_info = DEVICE_ZD1211B }, |
diff --git a/drivers/pci/hotplug/fakephp.c b/drivers/pci/hotplug/fakephp.c index 40337a06c18a..146ca9cd1567 100644 --- a/drivers/pci/hotplug/fakephp.c +++ b/drivers/pci/hotplug/fakephp.c | |||
@@ -320,15 +320,15 @@ static int disable_slot(struct hotplug_slot *slot) | |||
320 | return -ENODEV; | 320 | return -ENODEV; |
321 | } | 321 | } |
322 | 322 | ||
323 | /* remove the device from the pci core */ | ||
324 | pci_remove_bus_device(dev); | ||
325 | |||
323 | /* queue work item to blow away this sysfs entry and other | 326 | /* queue work item to blow away this sysfs entry and other |
324 | * parts. | 327 | * parts. |
325 | */ | 328 | */ |
326 | INIT_WORK(&dslot->remove_work, remove_slot_worker); | 329 | INIT_WORK(&dslot->remove_work, remove_slot_worker); |
327 | queue_work(dummyphp_wq, &dslot->remove_work); | 330 | queue_work(dummyphp_wq, &dslot->remove_work); |
328 | 331 | ||
329 | /* blow away this sysfs entry and other parts. */ | ||
330 | remove_slot(dslot); | ||
331 | |||
332 | pci_dev_put(dev); | 332 | pci_dev_put(dev); |
333 | } | 333 | } |
334 | return 0; | 334 | return 0; |
diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c index ab31f5ba665d..9d934ddee956 100644 --- a/drivers/pci/hotplug/pciehp_hpc.c +++ b/drivers/pci/hotplug/pciehp_hpc.c | |||
@@ -258,7 +258,7 @@ static int pcie_poll_cmd(struct controller *ctrl) | |||
258 | return 1; | 258 | return 1; |
259 | } | 259 | } |
260 | } | 260 | } |
261 | while (timeout > 1000) { | 261 | while (timeout > 0) { |
262 | msleep(10); | 262 | msleep(10); |
263 | timeout -= 10; | 263 | timeout -= 10; |
264 | if (!pciehp_readw(ctrl, SLOTSTATUS, &slot_status)) { | 264 | if (!pciehp_readw(ctrl, SLOTSTATUS, &slot_status)) { |
diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c index 8d0e60ac849c..c3edcdc08e72 100644 --- a/drivers/pci/intel-iommu.c +++ b/drivers/pci/intel-iommu.c | |||
@@ -2348,11 +2348,34 @@ static void __init iommu_exit_mempool(void) | |||
2348 | 2348 | ||
2349 | } | 2349 | } |
2350 | 2350 | ||
2351 | static int blacklist_iommu(const struct dmi_system_id *id) | ||
2352 | { | ||
2353 | printk(KERN_INFO "%s detected; disabling IOMMU\n", | ||
2354 | id->ident); | ||
2355 | dmar_disabled = 1; | ||
2356 | return 0; | ||
2357 | } | ||
2358 | |||
2359 | static struct dmi_system_id __initdata intel_iommu_dmi_table[] = { | ||
2360 | { /* Some DG33BU BIOS revisions advertised non-existent VT-d */ | ||
2361 | .callback = blacklist_iommu, | ||
2362 | .ident = "Intel DG33BU", | ||
2363 | { DMI_MATCH(DMI_BOARD_VENDOR, "Intel Corporation"), | ||
2364 | DMI_MATCH(DMI_BOARD_NAME, "DG33BU"), | ||
2365 | } | ||
2366 | }, | ||
2367 | { } | ||
2368 | }; | ||
2369 | |||
2370 | |||
2351 | void __init detect_intel_iommu(void) | 2371 | void __init detect_intel_iommu(void) |
2352 | { | 2372 | { |
2353 | if (swiotlb || no_iommu || iommu_detected || dmar_disabled) | 2373 | if (swiotlb || no_iommu || iommu_detected || dmar_disabled) |
2354 | return; | 2374 | return; |
2355 | if (early_dmar_detect()) { | 2375 | if (early_dmar_detect()) { |
2376 | dmi_check_system(intel_iommu_dmi_table); | ||
2377 | if (dmar_disabled) | ||
2378 | return; | ||
2356 | iommu_detected = 1; | 2379 | iommu_detected = 1; |
2357 | } | 2380 | } |
2358 | } | 2381 | } |
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c index 9c718583a237..77baff022f71 100644 --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c | |||
@@ -16,6 +16,7 @@ | |||
16 | 16 | ||
17 | 17 | ||
18 | #include <linux/kernel.h> | 18 | #include <linux/kernel.h> |
19 | #include <linux/sched.h> | ||
19 | #include <linux/pci.h> | 20 | #include <linux/pci.h> |
20 | #include <linux/stat.h> | 21 | #include <linux/stat.h> |
21 | #include <linux/topology.h> | 22 | #include <linux/topology.h> |
@@ -484,6 +485,21 @@ pci_mmap_legacy_mem(struct kobject *kobj, struct bin_attribute *attr, | |||
484 | #endif /* HAVE_PCI_LEGACY */ | 485 | #endif /* HAVE_PCI_LEGACY */ |
485 | 486 | ||
486 | #ifdef HAVE_PCI_MMAP | 487 | #ifdef HAVE_PCI_MMAP |
488 | |||
489 | static int pci_mmap_fits(struct pci_dev *pdev, int resno, struct vm_area_struct *vma) | ||
490 | { | ||
491 | unsigned long nr, start, size; | ||
492 | |||
493 | nr = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT; | ||
494 | start = vma->vm_pgoff; | ||
495 | size = pci_resource_len(pdev, resno) >> PAGE_SHIFT; | ||
496 | if (start < size && size - start >= nr) | ||
497 | return 1; | ||
498 | WARN(1, "process \"%s\" tried to map 0x%08lx-0x%08lx on %s BAR %d (size 0x%08lx)\n", | ||
499 | current->comm, start, start+nr, pci_name(pdev), resno, size); | ||
500 | return 0; | ||
501 | } | ||
502 | |||
487 | /** | 503 | /** |
488 | * pci_mmap_resource - map a PCI resource into user memory space | 504 | * pci_mmap_resource - map a PCI resource into user memory space |
489 | * @kobj: kobject for mapping | 505 | * @kobj: kobject for mapping |
@@ -510,6 +526,9 @@ pci_mmap_resource(struct kobject *kobj, struct bin_attribute *attr, | |||
510 | if (i >= PCI_ROM_RESOURCE) | 526 | if (i >= PCI_ROM_RESOURCE) |
511 | return -ENODEV; | 527 | return -ENODEV; |
512 | 528 | ||
529 | if (!pci_mmap_fits(pdev, i, vma)) | ||
530 | return -EINVAL; | ||
531 | |||
513 | /* pci_mmap_page_range() expects the same kind of entry as coming | 532 | /* pci_mmap_page_range() expects the same kind of entry as coming |
514 | * from /proc/bus/pci/ which is a "user visible" value. If this is | 533 | * from /proc/bus/pci/ which is a "user visible" value. If this is |
515 | * different from the resource itself, arch will do necessary fixup. | 534 | * different from the resource itself, arch will do necessary fixup. |
diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c index 9a7c9e1408a4..851f5b83cdbc 100644 --- a/drivers/pci/pcie/aspm.c +++ b/drivers/pci/pcie/aspm.c | |||
@@ -527,7 +527,7 @@ static int pcie_aspm_sanity_check(struct pci_dev *pdev) | |||
527 | */ | 527 | */ |
528 | pci_read_config_dword(child_dev, child_pos + PCI_EXP_DEVCAP, | 528 | pci_read_config_dword(child_dev, child_pos + PCI_EXP_DEVCAP, |
529 | ®32); | 529 | ®32); |
530 | if (!(reg32 & PCI_EXP_DEVCAP_RBER && !aspm_force)) { | 530 | if (!(reg32 & PCI_EXP_DEVCAP_RBER) && !aspm_force) { |
531 | printk("Pre-1.1 PCIe device detected, " | 531 | printk("Pre-1.1 PCIe device detected, " |
532 | "disable ASPM for %s. It can be enabled forcedly" | 532 | "disable ASPM for %s. It can be enabled forcedly" |
533 | " with 'pcie_aspm=force'\n", pci_name(pdev)); | 533 | " with 'pcie_aspm=force'\n", pci_name(pdev)); |
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index cce2f4cb1fbf..36698e57b97f 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c | |||
@@ -304,6 +304,9 @@ static int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type, | |||
304 | } else { | 304 | } else { |
305 | res->start = l64; | 305 | res->start = l64; |
306 | res->end = l64 + sz64; | 306 | res->end = l64 + sz64; |
307 | printk(KERN_DEBUG "PCI: %s reg %x 64bit mmio: [%llx, %llx]\n", | ||
308 | pci_name(dev), pos, (unsigned long long)res->start, | ||
309 | (unsigned long long)res->end); | ||
307 | } | 310 | } |
308 | } else { | 311 | } else { |
309 | sz = pci_size(l, sz, mask); | 312 | sz = pci_size(l, sz, mask); |
@@ -313,6 +316,9 @@ static int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type, | |||
313 | 316 | ||
314 | res->start = l; | 317 | res->start = l; |
315 | res->end = l + sz; | 318 | res->end = l + sz; |
319 | printk(KERN_DEBUG "PCI: %s reg %x %s: [%llx, %llx]\n", pci_name(dev), | ||
320 | pos, (res->flags & IORESOURCE_IO) ? "io port":"32bit mmio", | ||
321 | (unsigned long long)res->start, (unsigned long long)res->end); | ||
316 | } | 322 | } |
317 | 323 | ||
318 | out: | 324 | out: |
@@ -383,7 +389,9 @@ void __devinit pci_read_bridge_bases(struct pci_bus *child) | |||
383 | res->start = base; | 389 | res->start = base; |
384 | if (!res->end) | 390 | if (!res->end) |
385 | res->end = limit + 0xfff; | 391 | res->end = limit + 0xfff; |
386 | printk(KERN_INFO "PCI: bridge %s io port: [%llx, %llx]\n", pci_name(dev), res->start, res->end); | 392 | printk(KERN_DEBUG "PCI: bridge %s io port: [%llx, %llx]\n", |
393 | pci_name(dev), (unsigned long long) res->start, | ||
394 | (unsigned long long) res->end); | ||
387 | } | 395 | } |
388 | 396 | ||
389 | res = child->resource[1]; | 397 | res = child->resource[1]; |
@@ -395,7 +403,9 @@ void __devinit pci_read_bridge_bases(struct pci_bus *child) | |||
395 | res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM; | 403 | res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM; |
396 | res->start = base; | 404 | res->start = base; |
397 | res->end = limit + 0xfffff; | 405 | res->end = limit + 0xfffff; |
398 | printk(KERN_INFO "PCI: bridge %s 32bit mmio: [%llx, %llx]\n", pci_name(dev), res->start, res->end); | 406 | printk(KERN_DEBUG "PCI: bridge %s 32bit mmio: [%llx, %llx]\n", |
407 | pci_name(dev), (unsigned long long) res->start, | ||
408 | (unsigned long long) res->end); | ||
399 | } | 409 | } |
400 | 410 | ||
401 | res = child->resource[2]; | 411 | res = child->resource[2]; |
@@ -431,7 +441,9 @@ void __devinit pci_read_bridge_bases(struct pci_bus *child) | |||
431 | res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM | IORESOURCE_PREFETCH; | 441 | res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM | IORESOURCE_PREFETCH; |
432 | res->start = base; | 442 | res->start = base; |
433 | res->end = limit + 0xfffff; | 443 | res->end = limit + 0xfffff; |
434 | printk(KERN_INFO "PCI: bridge %s %sbit mmio pref: [%llx, %llx]\n", pci_name(dev), (res->flags & PCI_PREF_RANGE_TYPE_64)?"64":"32",res->start, res->end); | 444 | printk(KERN_DEBUG "PCI: bridge %s %sbit mmio pref: [%llx, %llx]\n", |
445 | pci_name(dev), (res->flags & PCI_PREF_RANGE_TYPE_64) ? "64" : "32", | ||
446 | (unsigned long long) res->start, (unsigned long long) res->end); | ||
435 | } | 447 | } |
436 | } | 448 | } |
437 | 449 | ||
diff --git a/drivers/pci/search.c b/drivers/pci/search.c index 3b3b5f178797..4edfc4731bd4 100644 --- a/drivers/pci/search.c +++ b/drivers/pci/search.c | |||
@@ -162,7 +162,7 @@ EXPORT_SYMBOL(pci_find_slot); | |||
162 | * time. | 162 | * time. |
163 | */ | 163 | */ |
164 | struct pci_dev *pci_find_device(unsigned int vendor, unsigned int device, | 164 | struct pci_dev *pci_find_device(unsigned int vendor, unsigned int device, |
165 | const struct pci_dev *from) | 165 | struct pci_dev *from) |
166 | { | 166 | { |
167 | struct pci_dev *pdev; | 167 | struct pci_dev *pdev; |
168 | 168 | ||
@@ -263,7 +263,7 @@ static int match_pci_dev_by_id(struct device *dev, void *data) | |||
263 | * this file. | 263 | * this file. |
264 | */ | 264 | */ |
265 | static struct pci_dev *pci_get_dev_by_id(const struct pci_device_id *id, | 265 | static struct pci_dev *pci_get_dev_by_id(const struct pci_device_id *id, |
266 | const struct pci_dev *from) | 266 | struct pci_dev *from) |
267 | { | 267 | { |
268 | struct device *dev; | 268 | struct device *dev; |
269 | struct device *dev_start = NULL; | 269 | struct device *dev_start = NULL; |
@@ -303,7 +303,7 @@ static struct pci_dev *pci_get_dev_by_id(const struct pci_device_id *id, | |||
303 | */ | 303 | */ |
304 | struct pci_dev *pci_get_subsys(unsigned int vendor, unsigned int device, | 304 | struct pci_dev *pci_get_subsys(unsigned int vendor, unsigned int device, |
305 | unsigned int ss_vendor, unsigned int ss_device, | 305 | unsigned int ss_vendor, unsigned int ss_device, |
306 | const struct pci_dev *from) | 306 | struct pci_dev *from) |
307 | { | 307 | { |
308 | struct pci_dev *pdev; | 308 | struct pci_dev *pdev; |
309 | struct pci_device_id *id; | 309 | struct pci_device_id *id; |
diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c index 1aad599816f7..3abbfad9ddab 100644 --- a/drivers/pci/setup-bus.c +++ b/drivers/pci/setup-bus.c | |||
@@ -540,7 +540,11 @@ static void pci_bus_dump_res(struct pci_bus *bus) | |||
540 | if (!res) | 540 | if (!res) |
541 | continue; | 541 | continue; |
542 | 542 | ||
543 | printk(KERN_INFO "bus: %02x index %x %s: [%llx, %llx]\n", bus->number, i, (res->flags & IORESOURCE_IO)? "io port":"mmio", res->start, res->end); | 543 | printk(KERN_INFO "bus: %02x index %x %s: [%llx, %llx]\n", |
544 | bus->number, i, | ||
545 | (res->flags & IORESOURCE_IO) ? "io port" : "mmio", | ||
546 | (unsigned long long) res->start, | ||
547 | (unsigned long long) res->end); | ||
544 | } | 548 | } |
545 | } | 549 | } |
546 | 550 | ||
diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c index 4174d9656e35..34c83d3ca0fa 100644 --- a/drivers/pcmcia/ds.c +++ b/drivers/pcmcia/ds.c | |||
@@ -427,6 +427,18 @@ static int pcmcia_device_probe(struct device * dev) | |||
427 | p_drv = to_pcmcia_drv(dev->driver); | 427 | p_drv = to_pcmcia_drv(dev->driver); |
428 | s = p_dev->socket; | 428 | s = p_dev->socket; |
429 | 429 | ||
430 | /* The PCMCIA code passes the match data in via dev->driver_data | ||
431 | * which is an ugly hack. Once the driver probe is called it may | ||
432 | * and often will overwrite the match data so we must save it first | ||
433 | * | ||
434 | * handle pseudo multifunction devices: | ||
435 | * there are at most two pseudo multifunction devices. | ||
436 | * if we're matching against the first, schedule a | ||
437 | * call which will then check whether there are two | ||
438 | * pseudo devices, and if not, add the second one. | ||
439 | */ | ||
440 | did = p_dev->dev.driver_data; | ||
441 | |||
430 | ds_dbg(1, "trying to bind %s to %s\n", p_dev->dev.bus_id, | 442 | ds_dbg(1, "trying to bind %s to %s\n", p_dev->dev.bus_id, |
431 | p_drv->drv.name); | 443 | p_drv->drv.name); |
432 | 444 | ||
@@ -455,21 +467,14 @@ static int pcmcia_device_probe(struct device * dev) | |||
455 | goto put_module; | 467 | goto put_module; |
456 | } | 468 | } |
457 | 469 | ||
458 | /* handle pseudo multifunction devices: | ||
459 | * there are at most two pseudo multifunction devices. | ||
460 | * if we're matching against the first, schedule a | ||
461 | * call which will then check whether there are two | ||
462 | * pseudo devices, and if not, add the second one. | ||
463 | */ | ||
464 | did = p_dev->dev.driver_data; | ||
465 | if (did && (did->match_flags & PCMCIA_DEV_ID_MATCH_DEVICE_NO) && | 470 | if (did && (did->match_flags & PCMCIA_DEV_ID_MATCH_DEVICE_NO) && |
466 | (p_dev->socket->device_count == 1) && (p_dev->device_no == 0)) | 471 | (p_dev->socket->device_count == 1) && (p_dev->device_no == 0)) |
467 | pcmcia_add_device_later(p_dev->socket, 0); | 472 | pcmcia_add_device_later(p_dev->socket, 0); |
468 | 473 | ||
469 | put_module: | 474 | put_module: |
470 | if (ret) | 475 | if (ret) |
471 | module_put(p_drv->owner); | 476 | module_put(p_drv->owner); |
472 | put_dev: | 477 | put_dev: |
473 | if (ret) | 478 | if (ret) |
474 | put_device(dev); | 479 | put_device(dev); |
475 | return (ret); | 480 | return (ret); |
diff --git a/drivers/pcmcia/soc_common.c b/drivers/pcmcia/soc_common.c index c48f3f69bdaf..da3972153226 100644 --- a/drivers/pcmcia/soc_common.c +++ b/drivers/pcmcia/soc_common.c | |||
@@ -748,7 +748,9 @@ int soc_common_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops | |||
748 | 748 | ||
749 | add_timer(&skt->poll_timer); | 749 | add_timer(&skt->poll_timer); |
750 | 750 | ||
751 | device_create_file(&skt->socket.dev, &dev_attr_status); | 751 | ret = device_create_file(&skt->socket.dev, &dev_attr_status); |
752 | if (ret) | ||
753 | goto out_err_8; | ||
752 | } | 754 | } |
753 | 755 | ||
754 | dev_set_drvdata(dev, sinfo); | 756 | dev_set_drvdata(dev, sinfo); |
@@ -758,6 +760,8 @@ int soc_common_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops | |||
758 | do { | 760 | do { |
759 | skt = &sinfo->skt[i]; | 761 | skt = &sinfo->skt[i]; |
760 | 762 | ||
763 | device_remove_file(&skt->socket.dev, &dev_attr_status); | ||
764 | out_err_8: | ||
761 | del_timer_sync(&skt->poll_timer); | 765 | del_timer_sync(&skt->poll_timer); |
762 | pcmcia_unregister_socket(&skt->socket); | 766 | pcmcia_unregister_socket(&skt->socket); |
763 | 767 | ||
diff --git a/drivers/rtc/rtc-dev.c b/drivers/rtc/rtc-dev.c index f118252f3a9f..52e2743b04ec 100644 --- a/drivers/rtc/rtc-dev.c +++ b/drivers/rtc/rtc-dev.c | |||
@@ -422,6 +422,12 @@ done: | |||
422 | return err; | 422 | return err; |
423 | } | 423 | } |
424 | 424 | ||
425 | static int rtc_dev_fasync(int fd, struct file *file, int on) | ||
426 | { | ||
427 | struct rtc_device *rtc = file->private_data; | ||
428 | return fasync_helper(fd, file, on, &rtc->async_queue); | ||
429 | } | ||
430 | |||
425 | static int rtc_dev_release(struct inode *inode, struct file *file) | 431 | static int rtc_dev_release(struct inode *inode, struct file *file) |
426 | { | 432 | { |
427 | struct rtc_device *rtc = file->private_data; | 433 | struct rtc_device *rtc = file->private_data; |
@@ -434,16 +440,13 @@ static int rtc_dev_release(struct inode *inode, struct file *file) | |||
434 | if (rtc->ops->release) | 440 | if (rtc->ops->release) |
435 | rtc->ops->release(rtc->dev.parent); | 441 | rtc->ops->release(rtc->dev.parent); |
436 | 442 | ||
443 | if (file->f_flags & FASYNC) | ||
444 | rtc_dev_fasync(-1, file, 0); | ||
445 | |||
437 | clear_bit_unlock(RTC_DEV_BUSY, &rtc->flags); | 446 | clear_bit_unlock(RTC_DEV_BUSY, &rtc->flags); |
438 | return 0; | 447 | return 0; |
439 | } | 448 | } |
440 | 449 | ||
441 | static int rtc_dev_fasync(int fd, struct file *file, int on) | ||
442 | { | ||
443 | struct rtc_device *rtc = file->private_data; | ||
444 | return fasync_helper(fd, file, on, &rtc->async_queue); | ||
445 | } | ||
446 | |||
447 | static const struct file_operations rtc_dev_fops = { | 450 | static const struct file_operations rtc_dev_fops = { |
448 | .owner = THIS_MODULE, | 451 | .owner = THIS_MODULE, |
449 | .llseek = no_llseek, | 452 | .llseek = no_llseek, |
diff --git a/drivers/s390/cio/ccwgroup.c b/drivers/s390/cio/ccwgroup.c index e0ce65fca4e7..9a50f245774b 100644 --- a/drivers/s390/cio/ccwgroup.c +++ b/drivers/s390/cio/ccwgroup.c | |||
@@ -113,7 +113,8 @@ ccwgroup_release (struct device *dev) | |||
113 | 113 | ||
114 | for (i = 0; i < gdev->count; i++) { | 114 | for (i = 0; i < gdev->count; i++) { |
115 | if (gdev->cdev[i]) { | 115 | if (gdev->cdev[i]) { |
116 | dev_set_drvdata(&gdev->cdev[i]->dev, NULL); | 116 | if (dev_get_drvdata(&gdev->cdev[i]->dev) == gdev) |
117 | dev_set_drvdata(&gdev->cdev[i]->dev, NULL); | ||
117 | put_device(&gdev->cdev[i]->dev); | 118 | put_device(&gdev->cdev[i]->dev); |
118 | } | 119 | } |
119 | } | 120 | } |
@@ -296,6 +297,7 @@ error: | |||
296 | if (dev_get_drvdata(&gdev->cdev[i]->dev) == gdev) | 297 | if (dev_get_drvdata(&gdev->cdev[i]->dev) == gdev) |
297 | dev_set_drvdata(&gdev->cdev[i]->dev, NULL); | 298 | dev_set_drvdata(&gdev->cdev[i]->dev, NULL); |
298 | put_device(&gdev->cdev[i]->dev); | 299 | put_device(&gdev->cdev[i]->dev); |
300 | gdev->cdev[i] = NULL; | ||
299 | } | 301 | } |
300 | mutex_unlock(&gdev->reg_mutex); | 302 | mutex_unlock(&gdev->reg_mutex); |
301 | put_device(&gdev->dev); | 303 | put_device(&gdev->dev); |
diff --git a/drivers/s390/cio/cio.c b/drivers/s390/cio/cio.c index 5954b905e3ca..326f4cc7f92c 100644 --- a/drivers/s390/cio/cio.c +++ b/drivers/s390/cio/cio.c | |||
@@ -174,6 +174,7 @@ cio_start_key (struct subchannel *sch, /* subchannel structure */ | |||
174 | CIO_TRACE_EVENT(4, sch->dev.bus_id); | 174 | CIO_TRACE_EVENT(4, sch->dev.bus_id); |
175 | 175 | ||
176 | orb = &to_io_private(sch)->orb; | 176 | orb = &to_io_private(sch)->orb; |
177 | memset(orb, 0, sizeof(union orb)); | ||
177 | /* sch is always under 2G. */ | 178 | /* sch is always under 2G. */ |
178 | orb->cmd.intparm = (u32)(addr_t)sch; | 179 | orb->cmd.intparm = (u32)(addr_t)sch; |
179 | orb->cmd.fmt = 1; | 180 | orb->cmd.fmt = 1; |
diff --git a/drivers/s390/cio/qdio_setup.c b/drivers/s390/cio/qdio_setup.c index 1679e2f91c94..a0b6b46e7466 100644 --- a/drivers/s390/cio/qdio_setup.c +++ b/drivers/s390/cio/qdio_setup.c | |||
@@ -447,51 +447,36 @@ void qdio_print_subchannel_info(struct qdio_irq *irq_ptr, | |||
447 | { | 447 | { |
448 | char s[80]; | 448 | char s[80]; |
449 | 449 | ||
450 | sprintf(s, "%s sc:%x ", cdev->dev.bus_id, irq_ptr->schid.sch_no); | 450 | sprintf(s, "qdio: %s ", dev_name(&cdev->dev)); |
451 | |||
452 | switch (irq_ptr->qib.qfmt) { | 451 | switch (irq_ptr->qib.qfmt) { |
453 | case QDIO_QETH_QFMT: | 452 | case QDIO_QETH_QFMT: |
454 | sprintf(s + strlen(s), "OSADE "); | 453 | sprintf(s + strlen(s), "OSA "); |
455 | break; | 454 | break; |
456 | case QDIO_ZFCP_QFMT: | 455 | case QDIO_ZFCP_QFMT: |
457 | sprintf(s + strlen(s), "ZFCP "); | 456 | sprintf(s + strlen(s), "ZFCP "); |
458 | break; | 457 | break; |
459 | case QDIO_IQDIO_QFMT: | 458 | case QDIO_IQDIO_QFMT: |
460 | sprintf(s + strlen(s), "HiperSockets "); | 459 | sprintf(s + strlen(s), "HS "); |
461 | break; | 460 | break; |
462 | } | 461 | } |
463 | sprintf(s + strlen(s), "using: "); | 462 | sprintf(s + strlen(s), "on SC %x using ", irq_ptr->schid.sch_no); |
464 | 463 | sprintf(s + strlen(s), "AI:%d ", is_thinint_irq(irq_ptr)); | |
465 | if (!is_thinint_irq(irq_ptr)) | 464 | sprintf(s + strlen(s), "QEBSM:%d ", (irq_ptr->sch_token) ? 1 : 0); |
466 | sprintf(s + strlen(s), "no"); | 465 | sprintf(s + strlen(s), "PCI:%d ", |
467 | sprintf(s + strlen(s), "AdapterInterrupts "); | 466 | (irq_ptr->qib.ac & QIB_AC_OUTBOUND_PCI_SUPPORTED) ? 1 : 0); |
468 | if (!(irq_ptr->sch_token != 0)) | 467 | sprintf(s + strlen(s), "TDD:%d ", css_general_characteristics.aif_tdd); |
469 | sprintf(s + strlen(s), "no"); | 468 | sprintf(s + strlen(s), "SIGA:"); |
470 | sprintf(s + strlen(s), "QEBSM "); | 469 | sprintf(s + strlen(s), "%s", (irq_ptr->siga_flag.input) ? "R" : " "); |
471 | if (!(irq_ptr->qib.ac & QIB_AC_OUTBOUND_PCI_SUPPORTED)) | 470 | sprintf(s + strlen(s), "%s", (irq_ptr->siga_flag.output) ? "W" : " "); |
472 | sprintf(s + strlen(s), "no"); | 471 | sprintf(s + strlen(s), "%s", (irq_ptr->siga_flag.sync) ? "S" : " "); |
473 | sprintf(s + strlen(s), "OutboundPCI "); | 472 | sprintf(s + strlen(s), "%s", |
474 | if (!css_general_characteristics.aif_tdd) | 473 | (!irq_ptr->siga_flag.no_sync_ti) ? "A" : " "); |
475 | sprintf(s + strlen(s), "no"); | 474 | sprintf(s + strlen(s), "%s", |
476 | sprintf(s + strlen(s), "TDD\n"); | 475 | (!irq_ptr->siga_flag.no_sync_out_ti) ? "O" : " "); |
477 | printk(KERN_INFO "qdio: %s", s); | 476 | sprintf(s + strlen(s), "%s", |
478 | 477 | (!irq_ptr->siga_flag.no_sync_out_pci) ? "P" : " "); | |
479 | memset(s, 0, sizeof(s)); | ||
480 | sprintf(s, "%s SIGA required: ", cdev->dev.bus_id); | ||
481 | if (irq_ptr->siga_flag.input) | ||
482 | sprintf(s + strlen(s), "Read "); | ||
483 | if (irq_ptr->siga_flag.output) | ||
484 | sprintf(s + strlen(s), "Write "); | ||
485 | if (irq_ptr->siga_flag.sync) | ||
486 | sprintf(s + strlen(s), "Sync "); | ||
487 | if (!irq_ptr->siga_flag.no_sync_ti) | ||
488 | sprintf(s + strlen(s), "SyncAI "); | ||
489 | if (!irq_ptr->siga_flag.no_sync_out_ti) | ||
490 | sprintf(s + strlen(s), "SyncOutAI "); | ||
491 | if (!irq_ptr->siga_flag.no_sync_out_pci) | ||
492 | sprintf(s + strlen(s), "SyncOutPCI"); | ||
493 | sprintf(s + strlen(s), "\n"); | 478 | sprintf(s + strlen(s), "\n"); |
494 | printk(KERN_INFO "qdio: %s", s); | 479 | printk(KERN_INFO "%s", s); |
495 | } | 480 | } |
496 | 481 | ||
497 | int __init qdio_setup_init(void) | 482 | int __init qdio_setup_init(void) |
diff --git a/drivers/s390/scsi/zfcp_ccw.c b/drivers/s390/scsi/zfcp_ccw.c index 391dd29749f8..51b6a05f4d12 100644 --- a/drivers/s390/scsi/zfcp_ccw.c +++ b/drivers/s390/scsi/zfcp_ccw.c | |||
@@ -152,10 +152,8 @@ static int zfcp_ccw_set_offline(struct ccw_device *ccw_device) | |||
152 | */ | 152 | */ |
153 | static int zfcp_ccw_notify(struct ccw_device *ccw_device, int event) | 153 | static int zfcp_ccw_notify(struct ccw_device *ccw_device, int event) |
154 | { | 154 | { |
155 | struct zfcp_adapter *adapter; | 155 | struct zfcp_adapter *adapter = dev_get_drvdata(&ccw_device->dev); |
156 | 156 | ||
157 | down(&zfcp_data.config_sema); | ||
158 | adapter = dev_get_drvdata(&ccw_device->dev); | ||
159 | switch (event) { | 157 | switch (event) { |
160 | case CIO_GONE: | 158 | case CIO_GONE: |
161 | dev_warn(&adapter->ccw_device->dev, "device gone\n"); | 159 | dev_warn(&adapter->ccw_device->dev, "device gone\n"); |
@@ -174,8 +172,6 @@ static int zfcp_ccw_notify(struct ccw_device *ccw_device, int event) | |||
174 | 89, NULL); | 172 | 89, NULL); |
175 | break; | 173 | break; |
176 | } | 174 | } |
177 | zfcp_erp_wait(adapter); | ||
178 | up(&zfcp_data.config_sema); | ||
179 | return 1; | 175 | return 1; |
180 | } | 176 | } |
181 | 177 | ||
diff --git a/drivers/s390/scsi/zfcp_fc.c b/drivers/s390/scsi/zfcp_fc.c index e984469bb98b..56196c98c07b 100644 --- a/drivers/s390/scsi/zfcp_fc.c +++ b/drivers/s390/scsi/zfcp_fc.c | |||
@@ -39,18 +39,6 @@ struct zfcp_gpn_ft { | |||
39 | struct scatterlist sg_resp[ZFCP_GPN_FT_BUFFERS]; | 39 | struct scatterlist sg_resp[ZFCP_GPN_FT_BUFFERS]; |
40 | }; | 40 | }; |
41 | 41 | ||
42 | static struct zfcp_port *zfcp_get_port_by_did(struct zfcp_adapter *adapter, | ||
43 | u32 d_id) | ||
44 | { | ||
45 | struct zfcp_port *port; | ||
46 | |||
47 | list_for_each_entry(port, &adapter->port_list_head, list) | ||
48 | if ((port->d_id == d_id) && | ||
49 | !atomic_test_mask(ZFCP_STATUS_COMMON_REMOVE, &port->status)) | ||
50 | return port; | ||
51 | return NULL; | ||
52 | } | ||
53 | |||
54 | static void _zfcp_fc_incoming_rscn(struct zfcp_fsf_req *fsf_req, u32 range, | 42 | static void _zfcp_fc_incoming_rscn(struct zfcp_fsf_req *fsf_req, u32 range, |
55 | struct fcp_rscn_element *elem) | 43 | struct fcp_rscn_element *elem) |
56 | { | 44 | { |
@@ -341,12 +329,13 @@ void zfcp_test_link(struct zfcp_port *port) | |||
341 | 329 | ||
342 | zfcp_port_get(port); | 330 | zfcp_port_get(port); |
343 | retval = zfcp_fc_adisc(port); | 331 | retval = zfcp_fc_adisc(port); |
344 | if (retval == 0 || retval == -EBUSY) | 332 | if (retval == 0) |
345 | return; | 333 | return; |
346 | 334 | ||
347 | /* send of ADISC was not possible */ | 335 | /* send of ADISC was not possible */ |
348 | zfcp_port_put(port); | 336 | zfcp_port_put(port); |
349 | zfcp_erp_port_forced_reopen(port, 0, 65, NULL); | 337 | if (retval != -EBUSY) |
338 | zfcp_erp_port_forced_reopen(port, 0, 65, NULL); | ||
350 | } | 339 | } |
351 | 340 | ||
352 | static int zfcp_scan_get_nameserver(struct zfcp_adapter *adapter) | 341 | static int zfcp_scan_get_nameserver(struct zfcp_adapter *adapter) |
@@ -363,7 +352,6 @@ static int zfcp_scan_get_nameserver(struct zfcp_adapter *adapter) | |||
363 | if (ret) | 352 | if (ret) |
364 | return ret; | 353 | return ret; |
365 | zfcp_erp_wait(adapter); | 354 | zfcp_erp_wait(adapter); |
366 | zfcp_port_put(adapter->nameserver_port); | ||
367 | } | 355 | } |
368 | return !atomic_test_mask(ZFCP_STATUS_COMMON_UNBLOCKED, | 356 | return !atomic_test_mask(ZFCP_STATUS_COMMON_UNBLOCKED, |
369 | &adapter->nameserver_port->status); | 357 | &adapter->nameserver_port->status); |
@@ -475,7 +463,7 @@ static int zfcp_scan_eval_gpn_ft(struct zfcp_gpn_ft *gpn_ft) | |||
475 | struct zfcp_adapter *adapter = ct->port->adapter; | 463 | struct zfcp_adapter *adapter = ct->port->adapter; |
476 | struct zfcp_port *port, *tmp; | 464 | struct zfcp_port *port, *tmp; |
477 | u32 d_id; | 465 | u32 d_id; |
478 | int ret = 0, x; | 466 | int ret = 0, x, last = 0; |
479 | 467 | ||
480 | if (ct->status) | 468 | if (ct->status) |
481 | return -EIO; | 469 | return -EIO; |
@@ -492,19 +480,24 @@ static int zfcp_scan_eval_gpn_ft(struct zfcp_gpn_ft *gpn_ft) | |||
492 | down(&zfcp_data.config_sema); | 480 | down(&zfcp_data.config_sema); |
493 | 481 | ||
494 | /* first entry is the header */ | 482 | /* first entry is the header */ |
495 | for (x = 1; x < ZFCP_GPN_FT_MAX_ENTRIES; x++) { | 483 | for (x = 1; x < ZFCP_GPN_FT_MAX_ENTRIES && !last; x++) { |
496 | if (x % (ZFCP_GPN_FT_ENTRIES + 1)) | 484 | if (x % (ZFCP_GPN_FT_ENTRIES + 1)) |
497 | acc++; | 485 | acc++; |
498 | else | 486 | else |
499 | acc = sg_virt(++sg); | 487 | acc = sg_virt(++sg); |
500 | 488 | ||
489 | last = acc->control & 0x80; | ||
501 | d_id = acc->port_id[0] << 16 | acc->port_id[1] << 8 | | 490 | d_id = acc->port_id[0] << 16 | acc->port_id[1] << 8 | |
502 | acc->port_id[2]; | 491 | acc->port_id[2]; |
503 | 492 | ||
504 | /* skip the adapter's port and known remote ports */ | 493 | /* skip the adapter's port and known remote ports */ |
505 | if (acc->wwpn == fc_host_port_name(adapter->scsi_host) || | 494 | if (acc->wwpn == fc_host_port_name(adapter->scsi_host)) |
506 | zfcp_get_port_by_did(adapter, d_id)) | 495 | continue; |
496 | port = zfcp_get_port_by_wwpn(adapter, acc->wwpn); | ||
497 | if (port) { | ||
498 | zfcp_port_get(port); | ||
507 | continue; | 499 | continue; |
500 | } | ||
508 | 501 | ||
509 | port = zfcp_port_enqueue(adapter, acc->wwpn, | 502 | port = zfcp_port_enqueue(adapter, acc->wwpn, |
510 | ZFCP_STATUS_PORT_DID_DID | | 503 | ZFCP_STATUS_PORT_DID_DID | |
@@ -513,8 +506,6 @@ static int zfcp_scan_eval_gpn_ft(struct zfcp_gpn_ft *gpn_ft) | |||
513 | ret = PTR_ERR(port); | 506 | ret = PTR_ERR(port); |
514 | else | 507 | else |
515 | zfcp_erp_port_reopen(port, 0, 149, NULL); | 508 | zfcp_erp_port_reopen(port, 0, 149, NULL); |
516 | if (acc->control & 0x80) /* last entry */ | ||
517 | break; | ||
518 | } | 509 | } |
519 | 510 | ||
520 | zfcp_erp_wait(adapter); | 511 | zfcp_erp_wait(adapter); |
diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c index 19c1ca913874..49dbeb754e5f 100644 --- a/drivers/s390/scsi/zfcp_fsf.c +++ b/drivers/s390/scsi/zfcp_fsf.c | |||
@@ -710,10 +710,10 @@ static void zfcp_fsf_exchange_port_data_handler(struct zfcp_fsf_req *req) | |||
710 | 710 | ||
711 | static int zfcp_fsf_sbal_check(struct zfcp_qdio_queue *queue) | 711 | static int zfcp_fsf_sbal_check(struct zfcp_qdio_queue *queue) |
712 | { | 712 | { |
713 | spin_lock(&queue->lock); | 713 | spin_lock_bh(&queue->lock); |
714 | if (atomic_read(&queue->count)) | 714 | if (atomic_read(&queue->count)) |
715 | return 1; | 715 | return 1; |
716 | spin_unlock(&queue->lock); | 716 | spin_unlock_bh(&queue->lock); |
717 | return 0; | 717 | return 0; |
718 | } | 718 | } |
719 | 719 | ||
@@ -722,13 +722,13 @@ static int zfcp_fsf_req_sbal_get(struct zfcp_adapter *adapter) | |||
722 | long ret; | 722 | long ret; |
723 | struct zfcp_qdio_queue *req_q = &adapter->req_q; | 723 | struct zfcp_qdio_queue *req_q = &adapter->req_q; |
724 | 724 | ||
725 | spin_unlock(&req_q->lock); | 725 | spin_unlock_bh(&req_q->lock); |
726 | ret = wait_event_interruptible_timeout(adapter->request_wq, | 726 | ret = wait_event_interruptible_timeout(adapter->request_wq, |
727 | zfcp_fsf_sbal_check(req_q), 5 * HZ); | 727 | zfcp_fsf_sbal_check(req_q), 5 * HZ); |
728 | if (ret > 0) | 728 | if (ret > 0) |
729 | return 0; | 729 | return 0; |
730 | 730 | ||
731 | spin_lock(&req_q->lock); | 731 | spin_lock_bh(&req_q->lock); |
732 | return -EIO; | 732 | return -EIO; |
733 | } | 733 | } |
734 | 734 | ||
@@ -870,14 +870,14 @@ int zfcp_fsf_status_read(struct zfcp_adapter *adapter) | |||
870 | volatile struct qdio_buffer_element *sbale; | 870 | volatile struct qdio_buffer_element *sbale; |
871 | int retval = -EIO; | 871 | int retval = -EIO; |
872 | 872 | ||
873 | spin_lock(&adapter->req_q.lock); | 873 | spin_lock_bh(&adapter->req_q.lock); |
874 | if (zfcp_fsf_req_sbal_get(adapter)) | 874 | if (zfcp_fsf_req_sbal_get(adapter)) |
875 | goto out; | 875 | goto out; |
876 | 876 | ||
877 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_UNSOLICITED_STATUS, | 877 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_UNSOLICITED_STATUS, |
878 | ZFCP_REQ_NO_QTCB, | 878 | ZFCP_REQ_NO_QTCB, |
879 | adapter->pool.fsf_req_status_read); | 879 | adapter->pool.fsf_req_status_read); |
880 | if (unlikely(IS_ERR(req))) { | 880 | if (IS_ERR(req)) { |
881 | retval = PTR_ERR(req); | 881 | retval = PTR_ERR(req); |
882 | goto out; | 882 | goto out; |
883 | } | 883 | } |
@@ -910,7 +910,7 @@ failed_buf: | |||
910 | zfcp_fsf_req_free(req); | 910 | zfcp_fsf_req_free(req); |
911 | zfcp_hba_dbf_event_fsf_unsol("fail", adapter, NULL); | 911 | zfcp_hba_dbf_event_fsf_unsol("fail", adapter, NULL); |
912 | out: | 912 | out: |
913 | spin_unlock(&adapter->req_q.lock); | 913 | spin_unlock_bh(&adapter->req_q.lock); |
914 | return retval; | 914 | return retval; |
915 | } | 915 | } |
916 | 916 | ||
@@ -988,7 +988,7 @@ struct zfcp_fsf_req *zfcp_fsf_abort_fcp_command(unsigned long old_req_id, | |||
988 | goto out; | 988 | goto out; |
989 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_ABORT_FCP_CMND, | 989 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_ABORT_FCP_CMND, |
990 | req_flags, adapter->pool.fsf_req_abort); | 990 | req_flags, adapter->pool.fsf_req_abort); |
991 | if (unlikely(IS_ERR(req))) | 991 | if (IS_ERR(req)) |
992 | goto out; | 992 | goto out; |
993 | 993 | ||
994 | if (unlikely(!(atomic_read(&unit->status) & | 994 | if (unlikely(!(atomic_read(&unit->status) & |
@@ -1106,13 +1106,13 @@ int zfcp_fsf_send_ct(struct zfcp_send_ct *ct, mempool_t *pool, | |||
1106 | struct zfcp_fsf_req *req; | 1106 | struct zfcp_fsf_req *req; |
1107 | int ret = -EIO; | 1107 | int ret = -EIO; |
1108 | 1108 | ||
1109 | spin_lock(&adapter->req_q.lock); | 1109 | spin_lock_bh(&adapter->req_q.lock); |
1110 | if (zfcp_fsf_req_sbal_get(adapter)) | 1110 | if (zfcp_fsf_req_sbal_get(adapter)) |
1111 | goto out; | 1111 | goto out; |
1112 | 1112 | ||
1113 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_SEND_GENERIC, | 1113 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_SEND_GENERIC, |
1114 | ZFCP_REQ_AUTO_CLEANUP, pool); | 1114 | ZFCP_REQ_AUTO_CLEANUP, pool); |
1115 | if (unlikely(IS_ERR(req))) { | 1115 | if (IS_ERR(req)) { |
1116 | ret = PTR_ERR(req); | 1116 | ret = PTR_ERR(req); |
1117 | goto out; | 1117 | goto out; |
1118 | } | 1118 | } |
@@ -1148,7 +1148,7 @@ failed_send: | |||
1148 | if (erp_action) | 1148 | if (erp_action) |
1149 | erp_action->fsf_req = NULL; | 1149 | erp_action->fsf_req = NULL; |
1150 | out: | 1150 | out: |
1151 | spin_unlock(&adapter->req_q.lock); | 1151 | spin_unlock_bh(&adapter->req_q.lock); |
1152 | return ret; | 1152 | return ret; |
1153 | } | 1153 | } |
1154 | 1154 | ||
@@ -1223,7 +1223,7 @@ int zfcp_fsf_send_els(struct zfcp_send_els *els) | |||
1223 | goto out; | 1223 | goto out; |
1224 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_SEND_ELS, | 1224 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_SEND_ELS, |
1225 | ZFCP_REQ_AUTO_CLEANUP, NULL); | 1225 | ZFCP_REQ_AUTO_CLEANUP, NULL); |
1226 | if (unlikely(IS_ERR(req))) { | 1226 | if (IS_ERR(req)) { |
1227 | ret = PTR_ERR(req); | 1227 | ret = PTR_ERR(req); |
1228 | goto out; | 1228 | goto out; |
1229 | } | 1229 | } |
@@ -1263,14 +1263,14 @@ int zfcp_fsf_exchange_config_data(struct zfcp_erp_action *erp_action) | |||
1263 | struct zfcp_adapter *adapter = erp_action->adapter; | 1263 | struct zfcp_adapter *adapter = erp_action->adapter; |
1264 | int retval = -EIO; | 1264 | int retval = -EIO; |
1265 | 1265 | ||
1266 | spin_lock(&adapter->req_q.lock); | 1266 | spin_lock_bh(&adapter->req_q.lock); |
1267 | if (!atomic_read(&adapter->req_q.count)) | 1267 | if (!atomic_read(&adapter->req_q.count)) |
1268 | goto out; | 1268 | goto out; |
1269 | req = zfcp_fsf_req_create(adapter, | 1269 | req = zfcp_fsf_req_create(adapter, |
1270 | FSF_QTCB_EXCHANGE_CONFIG_DATA, | 1270 | FSF_QTCB_EXCHANGE_CONFIG_DATA, |
1271 | ZFCP_REQ_AUTO_CLEANUP, | 1271 | ZFCP_REQ_AUTO_CLEANUP, |
1272 | adapter->pool.fsf_req_erp); | 1272 | adapter->pool.fsf_req_erp); |
1273 | if (unlikely(IS_ERR(req))) { | 1273 | if (IS_ERR(req)) { |
1274 | retval = PTR_ERR(req); | 1274 | retval = PTR_ERR(req); |
1275 | goto out; | 1275 | goto out; |
1276 | } | 1276 | } |
@@ -1295,7 +1295,7 @@ int zfcp_fsf_exchange_config_data(struct zfcp_erp_action *erp_action) | |||
1295 | erp_action->fsf_req = NULL; | 1295 | erp_action->fsf_req = NULL; |
1296 | } | 1296 | } |
1297 | out: | 1297 | out: |
1298 | spin_unlock(&adapter->req_q.lock); | 1298 | spin_unlock_bh(&adapter->req_q.lock); |
1299 | return retval; | 1299 | return retval; |
1300 | } | 1300 | } |
1301 | 1301 | ||
@@ -1306,13 +1306,13 @@ int zfcp_fsf_exchange_config_data_sync(struct zfcp_adapter *adapter, | |||
1306 | struct zfcp_fsf_req *req = NULL; | 1306 | struct zfcp_fsf_req *req = NULL; |
1307 | int retval = -EIO; | 1307 | int retval = -EIO; |
1308 | 1308 | ||
1309 | spin_lock(&adapter->req_q.lock); | 1309 | spin_lock_bh(&adapter->req_q.lock); |
1310 | if (zfcp_fsf_req_sbal_get(adapter)) | 1310 | if (zfcp_fsf_req_sbal_get(adapter)) |
1311 | goto out; | 1311 | goto out; |
1312 | 1312 | ||
1313 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_EXCHANGE_CONFIG_DATA, | 1313 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_EXCHANGE_CONFIG_DATA, |
1314 | 0, NULL); | 1314 | 0, NULL); |
1315 | if (unlikely(IS_ERR(req))) { | 1315 | if (IS_ERR(req)) { |
1316 | retval = PTR_ERR(req); | 1316 | retval = PTR_ERR(req); |
1317 | goto out; | 1317 | goto out; |
1318 | } | 1318 | } |
@@ -1334,7 +1334,7 @@ int zfcp_fsf_exchange_config_data_sync(struct zfcp_adapter *adapter, | |||
1334 | zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT); | 1334 | zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT); |
1335 | retval = zfcp_fsf_req_send(req); | 1335 | retval = zfcp_fsf_req_send(req); |
1336 | out: | 1336 | out: |
1337 | spin_unlock(&adapter->req_q.lock); | 1337 | spin_unlock_bh(&adapter->req_q.lock); |
1338 | if (!retval) | 1338 | if (!retval) |
1339 | wait_event(req->completion_wq, | 1339 | wait_event(req->completion_wq, |
1340 | req->status & ZFCP_STATUS_FSFREQ_COMPLETED); | 1340 | req->status & ZFCP_STATUS_FSFREQ_COMPLETED); |
@@ -1359,13 +1359,13 @@ int zfcp_fsf_exchange_port_data(struct zfcp_erp_action *erp_action) | |||
1359 | if (!(adapter->adapter_features & FSF_FEATURE_HBAAPI_MANAGEMENT)) | 1359 | if (!(adapter->adapter_features & FSF_FEATURE_HBAAPI_MANAGEMENT)) |
1360 | return -EOPNOTSUPP; | 1360 | return -EOPNOTSUPP; |
1361 | 1361 | ||
1362 | spin_lock(&adapter->req_q.lock); | 1362 | spin_lock_bh(&adapter->req_q.lock); |
1363 | if (!atomic_read(&adapter->req_q.count)) | 1363 | if (!atomic_read(&adapter->req_q.count)) |
1364 | goto out; | 1364 | goto out; |
1365 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_EXCHANGE_PORT_DATA, | 1365 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_EXCHANGE_PORT_DATA, |
1366 | ZFCP_REQ_AUTO_CLEANUP, | 1366 | ZFCP_REQ_AUTO_CLEANUP, |
1367 | adapter->pool.fsf_req_erp); | 1367 | adapter->pool.fsf_req_erp); |
1368 | if (unlikely(IS_ERR(req))) { | 1368 | if (IS_ERR(req)) { |
1369 | retval = PTR_ERR(req); | 1369 | retval = PTR_ERR(req); |
1370 | goto out; | 1370 | goto out; |
1371 | } | 1371 | } |
@@ -1385,7 +1385,7 @@ int zfcp_fsf_exchange_port_data(struct zfcp_erp_action *erp_action) | |||
1385 | erp_action->fsf_req = NULL; | 1385 | erp_action->fsf_req = NULL; |
1386 | } | 1386 | } |
1387 | out: | 1387 | out: |
1388 | spin_unlock(&adapter->req_q.lock); | 1388 | spin_unlock_bh(&adapter->req_q.lock); |
1389 | return retval; | 1389 | return retval; |
1390 | } | 1390 | } |
1391 | 1391 | ||
@@ -1405,13 +1405,13 @@ int zfcp_fsf_exchange_port_data_sync(struct zfcp_adapter *adapter, | |||
1405 | if (!(adapter->adapter_features & FSF_FEATURE_HBAAPI_MANAGEMENT)) | 1405 | if (!(adapter->adapter_features & FSF_FEATURE_HBAAPI_MANAGEMENT)) |
1406 | return -EOPNOTSUPP; | 1406 | return -EOPNOTSUPP; |
1407 | 1407 | ||
1408 | spin_lock(&adapter->req_q.lock); | 1408 | spin_lock_bh(&adapter->req_q.lock); |
1409 | if (!atomic_read(&adapter->req_q.count)) | 1409 | if (!atomic_read(&adapter->req_q.count)) |
1410 | goto out; | 1410 | goto out; |
1411 | 1411 | ||
1412 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_EXCHANGE_PORT_DATA, 0, | 1412 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_EXCHANGE_PORT_DATA, 0, |
1413 | NULL); | 1413 | NULL); |
1414 | if (unlikely(IS_ERR(req))) { | 1414 | if (IS_ERR(req)) { |
1415 | retval = PTR_ERR(req); | 1415 | retval = PTR_ERR(req); |
1416 | goto out; | 1416 | goto out; |
1417 | } | 1417 | } |
@@ -1427,7 +1427,7 @@ int zfcp_fsf_exchange_port_data_sync(struct zfcp_adapter *adapter, | |||
1427 | zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT); | 1427 | zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT); |
1428 | retval = zfcp_fsf_req_send(req); | 1428 | retval = zfcp_fsf_req_send(req); |
1429 | out: | 1429 | out: |
1430 | spin_unlock(&adapter->req_q.lock); | 1430 | spin_unlock_bh(&adapter->req_q.lock); |
1431 | if (!retval) | 1431 | if (!retval) |
1432 | wait_event(req->completion_wq, | 1432 | wait_event(req->completion_wq, |
1433 | req->status & ZFCP_STATUS_FSFREQ_COMPLETED); | 1433 | req->status & ZFCP_STATUS_FSFREQ_COMPLETED); |
@@ -1531,7 +1531,7 @@ int zfcp_fsf_open_port(struct zfcp_erp_action *erp_action) | |||
1531 | struct zfcp_fsf_req *req; | 1531 | struct zfcp_fsf_req *req; |
1532 | int retval = -EIO; | 1532 | int retval = -EIO; |
1533 | 1533 | ||
1534 | spin_lock(&adapter->req_q.lock); | 1534 | spin_lock_bh(&adapter->req_q.lock); |
1535 | if (zfcp_fsf_req_sbal_get(adapter)) | 1535 | if (zfcp_fsf_req_sbal_get(adapter)) |
1536 | goto out; | 1536 | goto out; |
1537 | 1537 | ||
@@ -1539,7 +1539,7 @@ int zfcp_fsf_open_port(struct zfcp_erp_action *erp_action) | |||
1539 | FSF_QTCB_OPEN_PORT_WITH_DID, | 1539 | FSF_QTCB_OPEN_PORT_WITH_DID, |
1540 | ZFCP_REQ_AUTO_CLEANUP, | 1540 | ZFCP_REQ_AUTO_CLEANUP, |
1541 | adapter->pool.fsf_req_erp); | 1541 | adapter->pool.fsf_req_erp); |
1542 | if (unlikely(IS_ERR(req))) { | 1542 | if (IS_ERR(req)) { |
1543 | retval = PTR_ERR(req); | 1543 | retval = PTR_ERR(req); |
1544 | goto out; | 1544 | goto out; |
1545 | } | 1545 | } |
@@ -1562,7 +1562,7 @@ int zfcp_fsf_open_port(struct zfcp_erp_action *erp_action) | |||
1562 | erp_action->fsf_req = NULL; | 1562 | erp_action->fsf_req = NULL; |
1563 | } | 1563 | } |
1564 | out: | 1564 | out: |
1565 | spin_unlock(&adapter->req_q.lock); | 1565 | spin_unlock_bh(&adapter->req_q.lock); |
1566 | return retval; | 1566 | return retval; |
1567 | } | 1567 | } |
1568 | 1568 | ||
@@ -1603,14 +1603,14 @@ int zfcp_fsf_close_port(struct zfcp_erp_action *erp_action) | |||
1603 | struct zfcp_fsf_req *req; | 1603 | struct zfcp_fsf_req *req; |
1604 | int retval = -EIO; | 1604 | int retval = -EIO; |
1605 | 1605 | ||
1606 | spin_lock(&adapter->req_q.lock); | 1606 | spin_lock_bh(&adapter->req_q.lock); |
1607 | if (zfcp_fsf_req_sbal_get(adapter)) | 1607 | if (zfcp_fsf_req_sbal_get(adapter)) |
1608 | goto out; | 1608 | goto out; |
1609 | 1609 | ||
1610 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_CLOSE_PORT, | 1610 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_CLOSE_PORT, |
1611 | ZFCP_REQ_AUTO_CLEANUP, | 1611 | ZFCP_REQ_AUTO_CLEANUP, |
1612 | adapter->pool.fsf_req_erp); | 1612 | adapter->pool.fsf_req_erp); |
1613 | if (unlikely(IS_ERR(req))) { | 1613 | if (IS_ERR(req)) { |
1614 | retval = PTR_ERR(req); | 1614 | retval = PTR_ERR(req); |
1615 | goto out; | 1615 | goto out; |
1616 | } | 1616 | } |
@@ -1633,7 +1633,7 @@ int zfcp_fsf_close_port(struct zfcp_erp_action *erp_action) | |||
1633 | erp_action->fsf_req = NULL; | 1633 | erp_action->fsf_req = NULL; |
1634 | } | 1634 | } |
1635 | out: | 1635 | out: |
1636 | spin_unlock(&adapter->req_q.lock); | 1636 | spin_unlock_bh(&adapter->req_q.lock); |
1637 | return retval; | 1637 | return retval; |
1638 | } | 1638 | } |
1639 | 1639 | ||
@@ -1700,14 +1700,14 @@ int zfcp_fsf_close_physical_port(struct zfcp_erp_action *erp_action) | |||
1700 | struct zfcp_fsf_req *req; | 1700 | struct zfcp_fsf_req *req; |
1701 | int retval = -EIO; | 1701 | int retval = -EIO; |
1702 | 1702 | ||
1703 | spin_lock(&adapter->req_q.lock); | 1703 | spin_lock_bh(&adapter->req_q.lock); |
1704 | if (zfcp_fsf_req_sbal_get(adapter)) | 1704 | if (zfcp_fsf_req_sbal_get(adapter)) |
1705 | goto out; | 1705 | goto out; |
1706 | 1706 | ||
1707 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_CLOSE_PHYSICAL_PORT, | 1707 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_CLOSE_PHYSICAL_PORT, |
1708 | ZFCP_REQ_AUTO_CLEANUP, | 1708 | ZFCP_REQ_AUTO_CLEANUP, |
1709 | adapter->pool.fsf_req_erp); | 1709 | adapter->pool.fsf_req_erp); |
1710 | if (unlikely(IS_ERR(req))) { | 1710 | if (IS_ERR(req)) { |
1711 | retval = PTR_ERR(req); | 1711 | retval = PTR_ERR(req); |
1712 | goto out; | 1712 | goto out; |
1713 | } | 1713 | } |
@@ -1731,7 +1731,7 @@ int zfcp_fsf_close_physical_port(struct zfcp_erp_action *erp_action) | |||
1731 | erp_action->fsf_req = NULL; | 1731 | erp_action->fsf_req = NULL; |
1732 | } | 1732 | } |
1733 | out: | 1733 | out: |
1734 | spin_unlock(&adapter->req_q.lock); | 1734 | spin_unlock_bh(&adapter->req_q.lock); |
1735 | return retval; | 1735 | return retval; |
1736 | } | 1736 | } |
1737 | 1737 | ||
@@ -1875,14 +1875,14 @@ int zfcp_fsf_open_unit(struct zfcp_erp_action *erp_action) | |||
1875 | struct zfcp_fsf_req *req; | 1875 | struct zfcp_fsf_req *req; |
1876 | int retval = -EIO; | 1876 | int retval = -EIO; |
1877 | 1877 | ||
1878 | spin_lock(&adapter->req_q.lock); | 1878 | spin_lock_bh(&adapter->req_q.lock); |
1879 | if (zfcp_fsf_req_sbal_get(adapter)) | 1879 | if (zfcp_fsf_req_sbal_get(adapter)) |
1880 | goto out; | 1880 | goto out; |
1881 | 1881 | ||
1882 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_OPEN_LUN, | 1882 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_OPEN_LUN, |
1883 | ZFCP_REQ_AUTO_CLEANUP, | 1883 | ZFCP_REQ_AUTO_CLEANUP, |
1884 | adapter->pool.fsf_req_erp); | 1884 | adapter->pool.fsf_req_erp); |
1885 | if (unlikely(IS_ERR(req))) { | 1885 | if (IS_ERR(req)) { |
1886 | retval = PTR_ERR(req); | 1886 | retval = PTR_ERR(req); |
1887 | goto out; | 1887 | goto out; |
1888 | } | 1888 | } |
@@ -1910,7 +1910,7 @@ int zfcp_fsf_open_unit(struct zfcp_erp_action *erp_action) | |||
1910 | erp_action->fsf_req = NULL; | 1910 | erp_action->fsf_req = NULL; |
1911 | } | 1911 | } |
1912 | out: | 1912 | out: |
1913 | spin_unlock(&adapter->req_q.lock); | 1913 | spin_unlock_bh(&adapter->req_q.lock); |
1914 | return retval; | 1914 | return retval; |
1915 | } | 1915 | } |
1916 | 1916 | ||
@@ -1965,13 +1965,13 @@ int zfcp_fsf_close_unit(struct zfcp_erp_action *erp_action) | |||
1965 | struct zfcp_fsf_req *req; | 1965 | struct zfcp_fsf_req *req; |
1966 | int retval = -EIO; | 1966 | int retval = -EIO; |
1967 | 1967 | ||
1968 | spin_lock(&adapter->req_q.lock); | 1968 | spin_lock_bh(&adapter->req_q.lock); |
1969 | if (zfcp_fsf_req_sbal_get(adapter)) | 1969 | if (zfcp_fsf_req_sbal_get(adapter)) |
1970 | goto out; | 1970 | goto out; |
1971 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_CLOSE_LUN, | 1971 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_CLOSE_LUN, |
1972 | ZFCP_REQ_AUTO_CLEANUP, | 1972 | ZFCP_REQ_AUTO_CLEANUP, |
1973 | adapter->pool.fsf_req_erp); | 1973 | adapter->pool.fsf_req_erp); |
1974 | if (unlikely(IS_ERR(req))) { | 1974 | if (IS_ERR(req)) { |
1975 | retval = PTR_ERR(req); | 1975 | retval = PTR_ERR(req); |
1976 | goto out; | 1976 | goto out; |
1977 | } | 1977 | } |
@@ -1995,7 +1995,7 @@ int zfcp_fsf_close_unit(struct zfcp_erp_action *erp_action) | |||
1995 | erp_action->fsf_req = NULL; | 1995 | erp_action->fsf_req = NULL; |
1996 | } | 1996 | } |
1997 | out: | 1997 | out: |
1998 | spin_unlock(&adapter->req_q.lock); | 1998 | spin_unlock_bh(&adapter->req_q.lock); |
1999 | return retval; | 1999 | return retval; |
2000 | } | 2000 | } |
2001 | 2001 | ||
@@ -2228,7 +2228,7 @@ int zfcp_fsf_send_fcp_command_task(struct zfcp_adapter *adapter, | |||
2228 | goto out; | 2228 | goto out; |
2229 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_FCP_CMND, req_flags, | 2229 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_FCP_CMND, req_flags, |
2230 | adapter->pool.fsf_req_scsi); | 2230 | adapter->pool.fsf_req_scsi); |
2231 | if (unlikely(IS_ERR(req))) { | 2231 | if (IS_ERR(req)) { |
2232 | retval = PTR_ERR(req); | 2232 | retval = PTR_ERR(req); |
2233 | goto out; | 2233 | goto out; |
2234 | } | 2234 | } |
@@ -2351,7 +2351,7 @@ struct zfcp_fsf_req *zfcp_fsf_send_fcp_ctm(struct zfcp_adapter *adapter, | |||
2351 | goto out; | 2351 | goto out; |
2352 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_FCP_CMND, req_flags, | 2352 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_FCP_CMND, req_flags, |
2353 | adapter->pool.fsf_req_scsi); | 2353 | adapter->pool.fsf_req_scsi); |
2354 | if (unlikely(IS_ERR(req))) | 2354 | if (IS_ERR(req)) |
2355 | goto out; | 2355 | goto out; |
2356 | 2356 | ||
2357 | req->status |= ZFCP_STATUS_FSFREQ_TASK_MANAGEMENT; | 2357 | req->status |= ZFCP_STATUS_FSFREQ_TASK_MANAGEMENT; |
@@ -2417,12 +2417,12 @@ struct zfcp_fsf_req *zfcp_fsf_control_file(struct zfcp_adapter *adapter, | |||
2417 | return ERR_PTR(-EINVAL); | 2417 | return ERR_PTR(-EINVAL); |
2418 | } | 2418 | } |
2419 | 2419 | ||
2420 | spin_lock(&adapter->req_q.lock); | 2420 | spin_lock_bh(&adapter->req_q.lock); |
2421 | if (zfcp_fsf_req_sbal_get(adapter)) | 2421 | if (zfcp_fsf_req_sbal_get(adapter)) |
2422 | goto out; | 2422 | goto out; |
2423 | 2423 | ||
2424 | req = zfcp_fsf_req_create(adapter, fsf_cfdc->command, 0, NULL); | 2424 | req = zfcp_fsf_req_create(adapter, fsf_cfdc->command, 0, NULL); |
2425 | if (unlikely(IS_ERR(req))) { | 2425 | if (IS_ERR(req)) { |
2426 | retval = -EPERM; | 2426 | retval = -EPERM; |
2427 | goto out; | 2427 | goto out; |
2428 | } | 2428 | } |
@@ -2447,7 +2447,7 @@ struct zfcp_fsf_req *zfcp_fsf_control_file(struct zfcp_adapter *adapter, | |||
2447 | zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT); | 2447 | zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT); |
2448 | retval = zfcp_fsf_req_send(req); | 2448 | retval = zfcp_fsf_req_send(req); |
2449 | out: | 2449 | out: |
2450 | spin_unlock(&adapter->req_q.lock); | 2450 | spin_unlock_bh(&adapter->req_q.lock); |
2451 | 2451 | ||
2452 | if (!retval) { | 2452 | if (!retval) { |
2453 | wait_event(req->completion_wq, | 2453 | wait_event(req->completion_wq, |
diff --git a/drivers/s390/scsi/zfcp_qdio.c b/drivers/s390/scsi/zfcp_qdio.c index d6dbd653fde9..69d632d851d9 100644 --- a/drivers/s390/scsi/zfcp_qdio.c +++ b/drivers/s390/scsi/zfcp_qdio.c | |||
@@ -423,9 +423,9 @@ void zfcp_qdio_close(struct zfcp_adapter *adapter) | |||
423 | 423 | ||
424 | /* clear QDIOUP flag, thus do_QDIO is not called during qdio_shutdown */ | 424 | /* clear QDIOUP flag, thus do_QDIO is not called during qdio_shutdown */ |
425 | req_q = &adapter->req_q; | 425 | req_q = &adapter->req_q; |
426 | spin_lock(&req_q->lock); | 426 | spin_lock_bh(&req_q->lock); |
427 | atomic_clear_mask(ZFCP_STATUS_ADAPTER_QDIOUP, &adapter->status); | 427 | atomic_clear_mask(ZFCP_STATUS_ADAPTER_QDIOUP, &adapter->status); |
428 | spin_unlock(&req_q->lock); | 428 | spin_unlock_bh(&req_q->lock); |
429 | 429 | ||
430 | qdio_shutdown(adapter->ccw_device, QDIO_FLAG_CLEANUP_USING_CLEAR); | 430 | qdio_shutdown(adapter->ccw_device, QDIO_FLAG_CLEANUP_USING_CLEAR); |
431 | 431 | ||
diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig index c7f06298bd3c..4e0322b1c1ea 100644 --- a/drivers/scsi/Kconfig +++ b/drivers/scsi/Kconfig | |||
@@ -63,7 +63,7 @@ comment "SCSI support type (disk, tape, CD-ROM)" | |||
63 | config BLK_DEV_SD | 63 | config BLK_DEV_SD |
64 | tristate "SCSI disk support" | 64 | tristate "SCSI disk support" |
65 | depends on SCSI | 65 | depends on SCSI |
66 | select CRC_T10DIF | 66 | select CRC_T10DIF if BLK_DEV_INTEGRITY |
67 | ---help--- | 67 | ---help--- |
68 | If you want to use SCSI hard disks, Fibre Channel disks, | 68 | If you want to use SCSI hard disks, Fibre Channel disks, |
69 | Serial ATA (SATA) or Parallel ATA (PATA) hard disks, | 69 | Serial ATA (SATA) or Parallel ATA (PATA) hard disks, |
diff --git a/drivers/scsi/device_handler/scsi_dh_alua.c b/drivers/scsi/device_handler/scsi_dh_alua.c index 994da56fffed..708e475896b9 100644 --- a/drivers/scsi/device_handler/scsi_dh_alua.c +++ b/drivers/scsi/device_handler/scsi_dh_alua.c | |||
@@ -425,7 +425,7 @@ static int alua_check_sense(struct scsi_device *sdev, | |||
425 | /* | 425 | /* |
426 | * LUN Not Accessible - ALUA state transition | 426 | * LUN Not Accessible - ALUA state transition |
427 | */ | 427 | */ |
428 | return NEEDS_RETRY; | 428 | return ADD_TO_MLQUEUE; |
429 | if (sense_hdr->asc == 0x04 && sense_hdr->ascq == 0x0b) | 429 | if (sense_hdr->asc == 0x04 && sense_hdr->ascq == 0x0b) |
430 | /* | 430 | /* |
431 | * LUN Not Accessible -- Target port in standby state | 431 | * LUN Not Accessible -- Target port in standby state |
@@ -447,18 +447,18 @@ static int alua_check_sense(struct scsi_device *sdev, | |||
447 | /* | 447 | /* |
448 | * Power On, Reset, or Bus Device Reset, just retry. | 448 | * Power On, Reset, or Bus Device Reset, just retry. |
449 | */ | 449 | */ |
450 | return NEEDS_RETRY; | 450 | return ADD_TO_MLQUEUE; |
451 | if (sense_hdr->asc == 0x2a && sense_hdr->ascq == 0x06) { | 451 | if (sense_hdr->asc == 0x2a && sense_hdr->ascq == 0x06) { |
452 | /* | 452 | /* |
453 | * ALUA state changed | 453 | * ALUA state changed |
454 | */ | 454 | */ |
455 | return NEEDS_RETRY; | 455 | return ADD_TO_MLQUEUE; |
456 | } | 456 | } |
457 | if (sense_hdr->asc == 0x2a && sense_hdr->ascq == 0x07) { | 457 | if (sense_hdr->asc == 0x2a && sense_hdr->ascq == 0x07) { |
458 | /* | 458 | /* |
459 | * Implicit ALUA state transition failed | 459 | * Implicit ALUA state transition failed |
460 | */ | 460 | */ |
461 | return NEEDS_RETRY; | 461 | return ADD_TO_MLQUEUE; |
462 | } | 462 | } |
463 | break; | 463 | break; |
464 | } | 464 | } |
@@ -490,7 +490,7 @@ static int alua_stpg(struct scsi_device *sdev, int state, | |||
490 | if (!err) | 490 | if (!err) |
491 | return SCSI_DH_IO; | 491 | return SCSI_DH_IO; |
492 | err = alua_check_sense(sdev, &sense_hdr); | 492 | err = alua_check_sense(sdev, &sense_hdr); |
493 | if (retry > 0 && err == NEEDS_RETRY) { | 493 | if (retry > 0 && err == ADD_TO_MLQUEUE) { |
494 | retry--; | 494 | retry--; |
495 | goto retry; | 495 | goto retry; |
496 | } | 496 | } |
@@ -535,7 +535,7 @@ static int alua_rtpg(struct scsi_device *sdev, struct alua_dh_data *h) | |||
535 | return SCSI_DH_IO; | 535 | return SCSI_DH_IO; |
536 | 536 | ||
537 | err = alua_check_sense(sdev, &sense_hdr); | 537 | err = alua_check_sense(sdev, &sense_hdr); |
538 | if (err == NEEDS_RETRY) | 538 | if (err == ADD_TO_MLQUEUE) |
539 | goto retry; | 539 | goto retry; |
540 | sdev_printk(KERN_INFO, sdev, | 540 | sdev_printk(KERN_INFO, sdev, |
541 | "%s: rtpg sense code %02x/%02x/%02x\n", | 541 | "%s: rtpg sense code %02x/%02x/%02x\n", |
diff --git a/drivers/scsi/device_handler/scsi_dh_emc.c b/drivers/scsi/device_handler/scsi_dh_emc.c index b9d23e9e9a44..ef693e8412e9 100644 --- a/drivers/scsi/device_handler/scsi_dh_emc.c +++ b/drivers/scsi/device_handler/scsi_dh_emc.c | |||
@@ -439,7 +439,7 @@ static int clariion_check_sense(struct scsi_device *sdev, | |||
439 | * Unit Attention Code. This is the first IO | 439 | * Unit Attention Code. This is the first IO |
440 | * to the new path, so just retry. | 440 | * to the new path, so just retry. |
441 | */ | 441 | */ |
442 | return NEEDS_RETRY; | 442 | return ADD_TO_MLQUEUE; |
443 | break; | 443 | break; |
444 | } | 444 | } |
445 | 445 | ||
@@ -514,7 +514,7 @@ retry: | |||
514 | return SCSI_DH_IO; | 514 | return SCSI_DH_IO; |
515 | 515 | ||
516 | err = clariion_check_sense(sdev, &sshdr); | 516 | err = clariion_check_sense(sdev, &sshdr); |
517 | if (retry > 0 && err == NEEDS_RETRY) { | 517 | if (retry > 0 && err == ADD_TO_MLQUEUE) { |
518 | retry--; | 518 | retry--; |
519 | goto retry; | 519 | goto retry; |
520 | } | 520 | } |
diff --git a/drivers/scsi/device_handler/scsi_dh_rdac.c b/drivers/scsi/device_handler/scsi_dh_rdac.c index 2dee69da35cf..6e2f130d56de 100644 --- a/drivers/scsi/device_handler/scsi_dh_rdac.c +++ b/drivers/scsi/device_handler/scsi_dh_rdac.c | |||
@@ -551,7 +551,7 @@ static int rdac_check_sense(struct scsi_device *sdev, | |||
551 | * | 551 | * |
552 | * Just retry and wait. | 552 | * Just retry and wait. |
553 | */ | 553 | */ |
554 | return NEEDS_RETRY; | 554 | return ADD_TO_MLQUEUE; |
555 | break; | 555 | break; |
556 | case ILLEGAL_REQUEST: | 556 | case ILLEGAL_REQUEST: |
557 | if (sense_hdr->asc == 0x94 && sense_hdr->ascq == 0x01) { | 557 | if (sense_hdr->asc == 0x94 && sense_hdr->ascq == 0x01) { |
@@ -568,7 +568,7 @@ static int rdac_check_sense(struct scsi_device *sdev, | |||
568 | /* | 568 | /* |
569 | * Power On, Reset, or Bus Device Reset, just retry. | 569 | * Power On, Reset, or Bus Device Reset, just retry. |
570 | */ | 570 | */ |
571 | return NEEDS_RETRY; | 571 | return ADD_TO_MLQUEUE; |
572 | break; | 572 | break; |
573 | } | 573 | } |
574 | /* success just means we do not care what scsi-ml does */ | 574 | /* success just means we do not care what scsi-ml does */ |
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index 45a3b93eed57..bf41887cdd65 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c | |||
@@ -1834,7 +1834,6 @@ clear_risc_ints: | |||
1834 | WRT_REG_WORD(®->isp.hccr, HCCR_CLR_HOST_INT); | 1834 | WRT_REG_WORD(®->isp.hccr, HCCR_CLR_HOST_INT); |
1835 | } | 1835 | } |
1836 | spin_unlock_irq(&ha->hardware_lock); | 1836 | spin_unlock_irq(&ha->hardware_lock); |
1837 | ha->isp_ops->enable_intrs(ha); | ||
1838 | 1837 | ||
1839 | fail: | 1838 | fail: |
1840 | return ret; | 1839 | return ret; |
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 26afe44265c7..6d0f0e5f2827 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c | |||
@@ -1740,6 +1740,8 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
1740 | if (ret) | 1740 | if (ret) |
1741 | goto probe_failed; | 1741 | goto probe_failed; |
1742 | 1742 | ||
1743 | ha->isp_ops->enable_intrs(ha); | ||
1744 | |||
1743 | scsi_scan_host(host); | 1745 | scsi_scan_host(host); |
1744 | 1746 | ||
1745 | qla2x00_alloc_sysfs_attr(ha); | 1747 | qla2x00_alloc_sysfs_attr(ha); |
diff --git a/drivers/scsi/qlogicpti.c b/drivers/scsi/qlogicpti.c index 4a1cf6377f6c..905350896725 100644 --- a/drivers/scsi/qlogicpti.c +++ b/drivers/scsi/qlogicpti.c | |||
@@ -914,6 +914,7 @@ static inline int load_cmd(struct scsi_cmnd *Cmnd, struct Command_Entry *cmd, | |||
914 | ds[i].d_count = sg_dma_len(s); | 914 | ds[i].d_count = sg_dma_len(s); |
915 | } | 915 | } |
916 | sg_count -= n; | 916 | sg_count -= n; |
917 | sg = s; | ||
917 | } | 918 | } |
918 | } else { | 919 | } else { |
919 | cmd->dataseg[0].d_base = 0; | 920 | cmd->dataseg[0].d_base = 0; |
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c index 880051c89bde..39ce3aba1dac 100644 --- a/drivers/scsi/scsi_error.c +++ b/drivers/scsi/scsi_error.c | |||
@@ -391,7 +391,7 @@ static int scsi_check_sense(struct scsi_cmnd *scmd) | |||
391 | 391 | ||
392 | case HARDWARE_ERROR: | 392 | case HARDWARE_ERROR: |
393 | if (scmd->device->retry_hwerror) | 393 | if (scmd->device->retry_hwerror) |
394 | return NEEDS_RETRY; | 394 | return ADD_TO_MLQUEUE; |
395 | else | 395 | else |
396 | return SUCCESS; | 396 | return SUCCESS; |
397 | 397 | ||
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index ff5d56b3ee4d..62307bd794a9 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c | |||
@@ -852,7 +852,7 @@ static void scsi_end_bidi_request(struct scsi_cmnd *cmd) | |||
852 | void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes) | 852 | void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes) |
853 | { | 853 | { |
854 | int result = cmd->result; | 854 | int result = cmd->result; |
855 | int this_count = scsi_bufflen(cmd); | 855 | int this_count; |
856 | struct request_queue *q = cmd->device->request_queue; | 856 | struct request_queue *q = cmd->device->request_queue; |
857 | struct request *req = cmd->request; | 857 | struct request *req = cmd->request; |
858 | int error = 0; | 858 | int error = 0; |
@@ -908,6 +908,7 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes) | |||
908 | */ | 908 | */ |
909 | if (scsi_end_request(cmd, error, good_bytes, result == 0) == NULL) | 909 | if (scsi_end_request(cmd, error, good_bytes, result == 0) == NULL) |
910 | return; | 910 | return; |
911 | this_count = blk_rq_bytes(req); | ||
911 | 912 | ||
912 | /* good_bytes = 0, or (inclusive) there were leftovers and | 913 | /* good_bytes = 0, or (inclusive) there were leftovers and |
913 | * result = 0, so scsi_end_request couldn't retry. | 914 | * result = 0, so scsi_end_request couldn't retry. |
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c index 84b4879cff11..34d0de6cd511 100644 --- a/drivers/scsi/scsi_scan.c +++ b/drivers/scsi/scsi_scan.c | |||
@@ -1080,7 +1080,8 @@ static int scsi_probe_and_add_lun(struct scsi_target *starget, | |||
1080 | * PDT=1Fh none (no FDD connected to the requested logical unit) | 1080 | * PDT=1Fh none (no FDD connected to the requested logical unit) |
1081 | */ | 1081 | */ |
1082 | if (((result[0] >> 5) == 1 || starget->pdt_1f_for_no_lun) && | 1082 | if (((result[0] >> 5) == 1 || starget->pdt_1f_for_no_lun) && |
1083 | (result[0] & 0x1f) == 0x1f) { | 1083 | (result[0] & 0x1f) == 0x1f && |
1084 | !scsi_is_wlun(lun)) { | ||
1084 | SCSI_LOG_SCAN_BUS(3, printk(KERN_INFO | 1085 | SCSI_LOG_SCAN_BUS(3, printk(KERN_INFO |
1085 | "scsi scan: peripheral device type" | 1086 | "scsi scan: peripheral device type" |
1086 | " of 31, no device added\n")); | 1087 | " of 31, no device added\n")); |
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 2a2bc89aba83..e5e7d7856454 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c | |||
@@ -1875,7 +1875,6 @@ static int sd_probe(struct device *dev) | |||
1875 | 1875 | ||
1876 | dev_set_drvdata(dev, sdkp); | 1876 | dev_set_drvdata(dev, sdkp); |
1877 | add_disk(gd); | 1877 | add_disk(gd); |
1878 | blk_register_filter(gd); | ||
1879 | sd_dif_config_host(sdkp); | 1878 | sd_dif_config_host(sdkp); |
1880 | 1879 | ||
1881 | sd_printk(KERN_NOTICE, sdkp, "Attached SCSI %sdisk\n", | 1880 | sd_printk(KERN_NOTICE, sdkp, "Attached SCSI %sdisk\n", |
@@ -1909,7 +1908,6 @@ static int sd_remove(struct device *dev) | |||
1909 | struct scsi_disk *sdkp = dev_get_drvdata(dev); | 1908 | struct scsi_disk *sdkp = dev_get_drvdata(dev); |
1910 | 1909 | ||
1911 | device_del(&sdkp->dev); | 1910 | device_del(&sdkp->dev); |
1912 | blk_unregister_filter(sdkp->disk); | ||
1913 | del_gendisk(sdkp->disk); | 1911 | del_gendisk(sdkp->disk); |
1914 | sd_shutdown(dev); | 1912 | sd_shutdown(dev); |
1915 | 1913 | ||
diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c index 3292965bfd84..27f5bfd1def3 100644 --- a/drivers/scsi/sr.c +++ b/drivers/scsi/sr.c | |||
@@ -656,7 +656,6 @@ static int sr_probe(struct device *dev) | |||
656 | dev_set_drvdata(dev, cd); | 656 | dev_set_drvdata(dev, cd); |
657 | disk->flags |= GENHD_FL_REMOVABLE; | 657 | disk->flags |= GENHD_FL_REMOVABLE; |
658 | add_disk(disk); | 658 | add_disk(disk); |
659 | blk_register_filter(disk); | ||
660 | 659 | ||
661 | sdev_printk(KERN_DEBUG, sdev, | 660 | sdev_printk(KERN_DEBUG, sdev, |
662 | "Attached scsi CD-ROM %s\n", cd->cdi.name); | 661 | "Attached scsi CD-ROM %s\n", cd->cdi.name); |
@@ -895,7 +894,6 @@ static int sr_remove(struct device *dev) | |||
895 | { | 894 | { |
896 | struct scsi_cd *cd = dev_get_drvdata(dev); | 895 | struct scsi_cd *cd = dev_get_drvdata(dev); |
897 | 896 | ||
898 | blk_unregister_filter(cd->disk); | ||
899 | del_gendisk(cd->disk); | 897 | del_gendisk(cd->disk); |
900 | 898 | ||
901 | mutex_lock(&sr_ref_mutex); | 899 | mutex_lock(&sr_ref_mutex); |
diff --git a/drivers/serial/atmel_serial.c b/drivers/serial/atmel_serial.c index 3a6da80b081c..61fb8b6d19af 100644 --- a/drivers/serial/atmel_serial.c +++ b/drivers/serial/atmel_serial.c | |||
@@ -131,7 +131,8 @@ struct atmel_uart_char { | |||
131 | struct atmel_uart_port { | 131 | struct atmel_uart_port { |
132 | struct uart_port uart; /* uart */ | 132 | struct uart_port uart; /* uart */ |
133 | struct clk *clk; /* uart clock */ | 133 | struct clk *clk; /* uart clock */ |
134 | unsigned short suspended; /* is port suspended? */ | 134 | int may_wakeup; /* cached value of device_may_wakeup for times we need to disable it */ |
135 | u32 backup_imr; /* IMR saved during suspend */ | ||
135 | int break_active; /* break being received */ | 136 | int break_active; /* break being received */ |
136 | 137 | ||
137 | short use_dma_rx; /* enable PDC receiver */ | 138 | short use_dma_rx; /* enable PDC receiver */ |
@@ -984,8 +985,15 @@ static void atmel_serial_pm(struct uart_port *port, unsigned int state, | |||
984 | * This is called on uart_open() or a resume event. | 985 | * This is called on uart_open() or a resume event. |
985 | */ | 986 | */ |
986 | clk_enable(atmel_port->clk); | 987 | clk_enable(atmel_port->clk); |
988 | |||
989 | /* re-enable interrupts if we disabled some on suspend */ | ||
990 | UART_PUT_IER(port, atmel_port->backup_imr); | ||
987 | break; | 991 | break; |
988 | case 3: | 992 | case 3: |
993 | /* Back up the interrupt mask and disable all interrupts */ | ||
994 | atmel_port->backup_imr = UART_GET_IMR(port); | ||
995 | UART_PUT_IDR(port, -1); | ||
996 | |||
989 | /* | 997 | /* |
990 | * Disable the peripheral clock for this serial port. | 998 | * Disable the peripheral clock for this serial port. |
991 | * This is called on uart_close() or a suspend event. | 999 | * This is called on uart_close() or a suspend event. |
@@ -1475,13 +1483,12 @@ static int atmel_serial_suspend(struct platform_device *pdev, | |||
1475 | cpu_relax(); | 1483 | cpu_relax(); |
1476 | } | 1484 | } |
1477 | 1485 | ||
1478 | if (device_may_wakeup(&pdev->dev) | 1486 | /* we can not wake up if we're running on slow clock */ |
1479 | && !atmel_serial_clk_will_stop()) | 1487 | atmel_port->may_wakeup = device_may_wakeup(&pdev->dev); |
1480 | enable_irq_wake(port->irq); | 1488 | if (atmel_serial_clk_will_stop()) |
1481 | else { | 1489 | device_set_wakeup_enable(&pdev->dev, 0); |
1482 | uart_suspend_port(&atmel_uart, port); | 1490 | |
1483 | atmel_port->suspended = 1; | 1491 | uart_suspend_port(&atmel_uart, port); |
1484 | } | ||
1485 | 1492 | ||
1486 | return 0; | 1493 | return 0; |
1487 | } | 1494 | } |
@@ -1491,11 +1498,8 @@ static int atmel_serial_resume(struct platform_device *pdev) | |||
1491 | struct uart_port *port = platform_get_drvdata(pdev); | 1498 | struct uart_port *port = platform_get_drvdata(pdev); |
1492 | struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); | 1499 | struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); |
1493 | 1500 | ||
1494 | if (atmel_port->suspended) { | 1501 | uart_resume_port(&atmel_uart, port); |
1495 | uart_resume_port(&atmel_uart, port); | 1502 | device_set_wakeup_enable(&pdev->dev, atmel_port->may_wakeup); |
1496 | atmel_port->suspended = 0; | ||
1497 | } else | ||
1498 | disable_irq_wake(port->irq); | ||
1499 | 1503 | ||
1500 | return 0; | 1504 | return 0; |
1501 | } | 1505 | } |
@@ -1513,6 +1517,8 @@ static int __devinit atmel_serial_probe(struct platform_device *pdev) | |||
1513 | BUILD_BUG_ON(!is_power_of_2(ATMEL_SERIAL_RINGSIZE)); | 1517 | BUILD_BUG_ON(!is_power_of_2(ATMEL_SERIAL_RINGSIZE)); |
1514 | 1518 | ||
1515 | port = &atmel_ports[pdev->id]; | 1519 | port = &atmel_ports[pdev->id]; |
1520 | port->backup_imr = 0; | ||
1521 | |||
1516 | atmel_init_port(port, pdev); | 1522 | atmel_init_port(port, pdev); |
1517 | 1523 | ||
1518 | if (!atmel_use_dma_rx(&port->uart)) { | 1524 | if (!atmel_use_dma_rx(&port->uart)) { |
diff --git a/drivers/serial/imx.c b/drivers/serial/imx.c index 6a29f9330a73..3f90f1bbbbcd 100644 --- a/drivers/serial/imx.c +++ b/drivers/serial/imx.c | |||
@@ -127,8 +127,13 @@ | |||
127 | #define UCR3_RXDSEN (1<<6) /* Receive status interrupt enable */ | 127 | #define UCR3_RXDSEN (1<<6) /* Receive status interrupt enable */ |
128 | #define UCR3_AIRINTEN (1<<5) /* Async IR wake interrupt enable */ | 128 | #define UCR3_AIRINTEN (1<<5) /* Async IR wake interrupt enable */ |
129 | #define UCR3_AWAKEN (1<<4) /* Async wake interrupt enable */ | 129 | #define UCR3_AWAKEN (1<<4) /* Async wake interrupt enable */ |
130 | #define UCR3_REF25 (1<<3) /* Ref freq 25 MHz */ | 130 | #ifdef CONFIG_ARCH_IMX |
131 | #define UCR3_REF30 (1<<2) /* Ref Freq 30 MHz */ | 131 | #define UCR3_REF25 (1<<3) /* Ref freq 25 MHz, only on mx1 */ |
132 | #define UCR3_REF30 (1<<2) /* Ref Freq 30 MHz, only on mx1 */ | ||
133 | #endif | ||
134 | #if defined CONFIG_ARCH_MX2 || defined CONFIG_ARCH_MX3 | ||
135 | #define UCR3_RXDMUXSEL (1<<2) /* RXD Muxed Input Select, on mx2/mx3 */ | ||
136 | #endif | ||
132 | #define UCR3_INVT (1<<1) /* Inverted Infrared transmission */ | 137 | #define UCR3_INVT (1<<1) /* Inverted Infrared transmission */ |
133 | #define UCR3_BPEN (1<<0) /* Preset registers enable */ | 138 | #define UCR3_BPEN (1<<0) /* Preset registers enable */ |
134 | #define UCR4_CTSTL_32 (32<<10) /* CTS trigger level (32 chars) */ | 139 | #define UCR4_CTSTL_32 (32<<10) /* CTS trigger level (32 chars) */ |
@@ -445,7 +450,7 @@ static irqreturn_t imx_int(int irq, void *dev_id) | |||
445 | readl(sport->port.membase + UCR1) & UCR1_TXMPTYEN) | 450 | readl(sport->port.membase + UCR1) & UCR1_TXMPTYEN) |
446 | imx_txint(irq, dev_id); | 451 | imx_txint(irq, dev_id); |
447 | 452 | ||
448 | if (sts & USR1_RTSS) | 453 | if (sts & USR1_RTSD) |
449 | imx_rtsint(irq, dev_id); | 454 | imx_rtsint(irq, dev_id); |
450 | 455 | ||
451 | return IRQ_HANDLED; | 456 | return IRQ_HANDLED; |
@@ -598,6 +603,12 @@ static int imx_startup(struct uart_port *port) | |||
598 | temp |= (UCR2_RXEN | UCR2_TXEN); | 603 | temp |= (UCR2_RXEN | UCR2_TXEN); |
599 | writel(temp, sport->port.membase + UCR2); | 604 | writel(temp, sport->port.membase + UCR2); |
600 | 605 | ||
606 | #if defined CONFIG_ARCH_MX2 || defined CONFIG_ARCH_MX3 | ||
607 | temp = readl(sport->port.membase + UCR3); | ||
608 | temp |= UCR3_RXDMUXSEL; | ||
609 | writel(temp, sport->port.membase + UCR3); | ||
610 | #endif | ||
611 | |||
601 | /* | 612 | /* |
602 | * Enable modem status interrupts | 613 | * Enable modem status interrupts |
603 | */ | 614 | */ |
@@ -1133,13 +1144,19 @@ static int serial_imx_probe(struct platform_device *pdev) | |||
1133 | if(pdata && (pdata->flags & IMXUART_HAVE_RTSCTS)) | 1144 | if(pdata && (pdata->flags & IMXUART_HAVE_RTSCTS)) |
1134 | sport->have_rtscts = 1; | 1145 | sport->have_rtscts = 1; |
1135 | 1146 | ||
1136 | if (pdata->init) | 1147 | if (pdata->init) { |
1137 | pdata->init(pdev); | 1148 | ret = pdata->init(pdev); |
1149 | if (ret) | ||
1150 | goto clkput; | ||
1151 | } | ||
1138 | 1152 | ||
1139 | uart_add_one_port(&imx_reg, &sport->port); | 1153 | uart_add_one_port(&imx_reg, &sport->port); |
1140 | platform_set_drvdata(pdev, &sport->port); | 1154 | platform_set_drvdata(pdev, &sport->port); |
1141 | 1155 | ||
1142 | return 0; | 1156 | return 0; |
1157 | clkput: | ||
1158 | clk_put(sport->clk); | ||
1159 | clk_disable(sport->clk); | ||
1143 | unmap: | 1160 | unmap: |
1144 | iounmap(sport->port.membase); | 1161 | iounmap(sport->port.membase); |
1145 | free: | 1162 | free: |
diff --git a/drivers/spi/orion_spi.c b/drivers/spi/orion_spi.c index c4eaacd6e553..b872bfaf4bd2 100644 --- a/drivers/spi/orion_spi.c +++ b/drivers/spi/orion_spi.c | |||
@@ -427,7 +427,7 @@ static int orion_spi_transfer(struct spi_device *spi, struct spi_message *m) | |||
427 | goto msg_rejected; | 427 | goto msg_rejected; |
428 | } | 428 | } |
429 | 429 | ||
430 | if (t->speed_hz < orion_spi->min_speed) { | 430 | if (t->speed_hz && t->speed_hz < orion_spi->min_speed) { |
431 | dev_err(&spi->dev, | 431 | dev_err(&spi->dev, |
432 | "message rejected : " | 432 | "message rejected : " |
433 | "device min speed (%d Hz) exceeds " | 433 | "device min speed (%d Hz) exceeds " |
diff --git a/drivers/spi/pxa2xx_spi.c b/drivers/spi/pxa2xx_spi.c index 34c7c9875681..d47d3636227f 100644 --- a/drivers/spi/pxa2xx_spi.c +++ b/drivers/spi/pxa2xx_spi.c | |||
@@ -47,9 +47,10 @@ MODULE_ALIAS("platform:pxa2xx-spi"); | |||
47 | 47 | ||
48 | #define MAX_BUSES 3 | 48 | #define MAX_BUSES 3 |
49 | 49 | ||
50 | #define DMA_INT_MASK (DCSR_ENDINTR | DCSR_STARTINTR | DCSR_BUSERR) | 50 | #define DMA_INT_MASK (DCSR_ENDINTR | DCSR_STARTINTR | DCSR_BUSERR) |
51 | #define RESET_DMA_CHANNEL (DCSR_NODESC | DMA_INT_MASK) | 51 | #define RESET_DMA_CHANNEL (DCSR_NODESC | DMA_INT_MASK) |
52 | #define IS_DMA_ALIGNED(x) (((u32)(x)&0x07)==0) | 52 | #define IS_DMA_ALIGNED(x) ((((u32)(x)) & 0x07) == 0) |
53 | #define MAX_DMA_LEN 8191 | ||
53 | 54 | ||
54 | /* | 55 | /* |
55 | * for testing SSCR1 changes that require SSP restart, basically | 56 | * for testing SSCR1 changes that require SSP restart, basically |
@@ -144,7 +145,6 @@ struct driver_data { | |||
144 | size_t tx_map_len; | 145 | size_t tx_map_len; |
145 | u8 n_bytes; | 146 | u8 n_bytes; |
146 | u32 dma_width; | 147 | u32 dma_width; |
147 | int cs_change; | ||
148 | int (*write)(struct driver_data *drv_data); | 148 | int (*write)(struct driver_data *drv_data); |
149 | int (*read)(struct driver_data *drv_data); | 149 | int (*read)(struct driver_data *drv_data); |
150 | irqreturn_t (*transfer_handler)(struct driver_data *drv_data); | 150 | irqreturn_t (*transfer_handler)(struct driver_data *drv_data); |
@@ -406,8 +406,45 @@ static void giveback(struct driver_data *drv_data) | |||
406 | struct spi_transfer, | 406 | struct spi_transfer, |
407 | transfer_list); | 407 | transfer_list); |
408 | 408 | ||
409 | /* Delay if requested before any change in chip select */ | ||
410 | if (last_transfer->delay_usecs) | ||
411 | udelay(last_transfer->delay_usecs); | ||
412 | |||
413 | /* Drop chip select UNLESS cs_change is true or we are returning | ||
414 | * a message with an error, or next message is for another chip | ||
415 | */ | ||
409 | if (!last_transfer->cs_change) | 416 | if (!last_transfer->cs_change) |
410 | drv_data->cs_control(PXA2XX_CS_DEASSERT); | 417 | drv_data->cs_control(PXA2XX_CS_DEASSERT); |
418 | else { | ||
419 | struct spi_message *next_msg; | ||
420 | |||
421 | /* Holding of cs was hinted, but we need to make sure | ||
422 | * the next message is for the same chip. Don't waste | ||
423 | * time with the following tests unless this was hinted. | ||
424 | * | ||
425 | * We cannot postpone this until pump_messages, because | ||
426 | * after calling msg->complete (below) the driver that | ||
427 | * sent the current message could be unloaded, which | ||
428 | * could invalidate the cs_control() callback... | ||
429 | */ | ||
430 | |||
431 | /* get a pointer to the next message, if any */ | ||
432 | spin_lock_irqsave(&drv_data->lock, flags); | ||
433 | if (list_empty(&drv_data->queue)) | ||
434 | next_msg = NULL; | ||
435 | else | ||
436 | next_msg = list_entry(drv_data->queue.next, | ||
437 | struct spi_message, queue); | ||
438 | spin_unlock_irqrestore(&drv_data->lock, flags); | ||
439 | |||
440 | /* see if the next and current messages point | ||
441 | * to the same chip | ||
442 | */ | ||
443 | if (next_msg && next_msg->spi != msg->spi) | ||
444 | next_msg = NULL; | ||
445 | if (!next_msg || msg->state == ERROR_STATE) | ||
446 | drv_data->cs_control(PXA2XX_CS_DEASSERT); | ||
447 | } | ||
411 | 448 | ||
412 | msg->state = NULL; | 449 | msg->state = NULL; |
413 | if (msg->complete) | 450 | if (msg->complete) |
@@ -490,10 +527,9 @@ static void dma_transfer_complete(struct driver_data *drv_data) | |||
490 | msg->actual_length += drv_data->len - | 527 | msg->actual_length += drv_data->len - |
491 | (drv_data->rx_end - drv_data->rx); | 528 | (drv_data->rx_end - drv_data->rx); |
492 | 529 | ||
493 | /* Release chip select if requested, transfer delays are | 530 | /* Transfer delays and chip select release are |
494 | * handled in pump_transfers */ | 531 | * handled in pump_transfers or giveback |
495 | if (drv_data->cs_change) | 532 | */ |
496 | drv_data->cs_control(PXA2XX_CS_DEASSERT); | ||
497 | 533 | ||
498 | /* Move to next transfer */ | 534 | /* Move to next transfer */ |
499 | msg->state = next_transfer(drv_data); | 535 | msg->state = next_transfer(drv_data); |
@@ -602,10 +638,9 @@ static void int_transfer_complete(struct driver_data *drv_data) | |||
602 | drv_data->cur_msg->actual_length += drv_data->len - | 638 | drv_data->cur_msg->actual_length += drv_data->len - |
603 | (drv_data->rx_end - drv_data->rx); | 639 | (drv_data->rx_end - drv_data->rx); |
604 | 640 | ||
605 | /* Release chip select if requested, transfer delays are | 641 | /* Transfer delays and chip select release are |
606 | * handled in pump_transfers */ | 642 | * handled in pump_transfers or giveback |
607 | if (drv_data->cs_change) | 643 | */ |
608 | drv_data->cs_control(PXA2XX_CS_DEASSERT); | ||
609 | 644 | ||
610 | /* Move to next transfer */ | 645 | /* Move to next transfer */ |
611 | drv_data->cur_msg->state = next_transfer(drv_data); | 646 | drv_data->cur_msg->state = next_transfer(drv_data); |
@@ -840,23 +875,40 @@ static void pump_transfers(unsigned long data) | |||
840 | return; | 875 | return; |
841 | } | 876 | } |
842 | 877 | ||
843 | /* Delay if requested at end of transfer*/ | 878 | /* Delay if requested at end of transfer before CS change */ |
844 | if (message->state == RUNNING_STATE) { | 879 | if (message->state == RUNNING_STATE) { |
845 | previous = list_entry(transfer->transfer_list.prev, | 880 | previous = list_entry(transfer->transfer_list.prev, |
846 | struct spi_transfer, | 881 | struct spi_transfer, |
847 | transfer_list); | 882 | transfer_list); |
848 | if (previous->delay_usecs) | 883 | if (previous->delay_usecs) |
849 | udelay(previous->delay_usecs); | 884 | udelay(previous->delay_usecs); |
885 | |||
886 | /* Drop chip select only if cs_change is requested */ | ||
887 | if (previous->cs_change) | ||
888 | drv_data->cs_control(PXA2XX_CS_DEASSERT); | ||
850 | } | 889 | } |
851 | 890 | ||
852 | /* Check transfer length */ | 891 | /* Check for transfers that need multiple DMA segments */ |
853 | if (transfer->len > 8191) | 892 | if (transfer->len > MAX_DMA_LEN && chip->enable_dma) { |
854 | { | 893 | |
855 | dev_warn(&drv_data->pdev->dev, "pump_transfers: transfer " | 894 | /* reject already-mapped transfers; PIO won't always work */ |
856 | "length greater than 8191\n"); | 895 | if (message->is_dma_mapped |
857 | message->status = -EINVAL; | 896 | || transfer->rx_dma || transfer->tx_dma) { |
858 | giveback(drv_data); | 897 | dev_err(&drv_data->pdev->dev, |
859 | return; | 898 | "pump_transfers: mapped transfer length " |
899 | "of %u is greater than %d\n", | ||
900 | transfer->len, MAX_DMA_LEN); | ||
901 | message->status = -EINVAL; | ||
902 | giveback(drv_data); | ||
903 | return; | ||
904 | } | ||
905 | |||
906 | /* warn ... we force this to PIO mode */ | ||
907 | if (printk_ratelimit()) | ||
908 | dev_warn(&message->spi->dev, "pump_transfers: " | ||
909 | "DMA disabled for transfer length %ld " | ||
910 | "greater than %d\n", | ||
911 | (long)drv_data->len, MAX_DMA_LEN); | ||
860 | } | 912 | } |
861 | 913 | ||
862 | /* Setup the transfer state based on the type of transfer */ | 914 | /* Setup the transfer state based on the type of transfer */ |
@@ -878,7 +930,6 @@ static void pump_transfers(unsigned long data) | |||
878 | drv_data->len = transfer->len & DCMD_LENGTH; | 930 | drv_data->len = transfer->len & DCMD_LENGTH; |
879 | drv_data->write = drv_data->tx ? chip->write : null_writer; | 931 | drv_data->write = drv_data->tx ? chip->write : null_writer; |
880 | drv_data->read = drv_data->rx ? chip->read : null_reader; | 932 | drv_data->read = drv_data->rx ? chip->read : null_reader; |
881 | drv_data->cs_change = transfer->cs_change; | ||
882 | 933 | ||
883 | /* Change speed and bit per word on a per transfer */ | 934 | /* Change speed and bit per word on a per transfer */ |
884 | cr0 = chip->cr0; | 935 | cr0 = chip->cr0; |
@@ -925,7 +976,7 @@ static void pump_transfers(unsigned long data) | |||
925 | &dma_thresh)) | 976 | &dma_thresh)) |
926 | if (printk_ratelimit()) | 977 | if (printk_ratelimit()) |
927 | dev_warn(&message->spi->dev, | 978 | dev_warn(&message->spi->dev, |
928 | "pump_transfer: " | 979 | "pump_transfers: " |
929 | "DMA burst size reduced to " | 980 | "DMA burst size reduced to " |
930 | "match bits_per_word\n"); | 981 | "match bits_per_word\n"); |
931 | } | 982 | } |
@@ -939,8 +990,23 @@ static void pump_transfers(unsigned long data) | |||
939 | 990 | ||
940 | message->state = RUNNING_STATE; | 991 | message->state = RUNNING_STATE; |
941 | 992 | ||
942 | /* Try to map dma buffer and do a dma transfer if successful */ | 993 | /* Try to map dma buffer and do a dma transfer if successful, but |
943 | if ((drv_data->dma_mapped = map_dma_buffers(drv_data))) { | 994 | * only if the length is non-zero and less than MAX_DMA_LEN. |
995 | * | ||
996 | * Zero-length non-descriptor DMA is illegal on PXA2xx; force use | ||
997 | * of PIO instead. Care is needed above because the transfer may | ||
998 | * have have been passed with buffers that are already dma mapped. | ||
999 | * A zero-length transfer in PIO mode will not try to write/read | ||
1000 | * to/from the buffers | ||
1001 | * | ||
1002 | * REVISIT large transfers are exactly where we most want to be | ||
1003 | * using DMA. If this happens much, split those transfers into | ||
1004 | * multiple DMA segments rather than forcing PIO. | ||
1005 | */ | ||
1006 | drv_data->dma_mapped = 0; | ||
1007 | if (drv_data->len > 0 && drv_data->len <= MAX_DMA_LEN) | ||
1008 | drv_data->dma_mapped = map_dma_buffers(drv_data); | ||
1009 | if (drv_data->dma_mapped) { | ||
944 | 1010 | ||
945 | /* Ensure we have the correct interrupt handler */ | 1011 | /* Ensure we have the correct interrupt handler */ |
946 | drv_data->transfer_handler = dma_transfer; | 1012 | drv_data->transfer_handler = dma_transfer; |
diff --git a/drivers/spi/spi_mpc83xx.c b/drivers/spi/spi_mpc83xx.c index 070c6219e2d6..ac0e3e4b3c54 100644 --- a/drivers/spi/spi_mpc83xx.c +++ b/drivers/spi/spi_mpc83xx.c | |||
@@ -267,16 +267,13 @@ int mpc83xx_spi_setup_transfer(struct spi_device *spi, struct spi_transfer *t) | |||
267 | cs->hw_mode |= SPMODE_LEN(bits_per_word); | 267 | cs->hw_mode |= SPMODE_LEN(bits_per_word); |
268 | 268 | ||
269 | if ((mpc83xx_spi->spibrg / hz) > 64) { | 269 | if ((mpc83xx_spi->spibrg / hz) > 64) { |
270 | cs->hw_mode |= SPMODE_DIV16; | ||
270 | pm = mpc83xx_spi->spibrg / (hz * 64); | 271 | pm = mpc83xx_spi->spibrg / (hz * 64); |
271 | if (pm > 16) { | 272 | if (pm > 16) { |
272 | cs->hw_mode |= SPMODE_DIV16; | 273 | dev_err(&spi->dev, "Requested speed is too " |
273 | pm /= 16; | 274 | "low: %d Hz. Will use %d Hz instead.\n", |
274 | if (pm > 16) { | 275 | hz, mpc83xx_spi->spibrg / 1024); |
275 | dev_err(&spi->dev, "Requested speed is too " | 276 | pm = 16; |
276 | "low: %d Hz. Will use %d Hz instead.\n", | ||
277 | hz, mpc83xx_spi->spibrg / 1024); | ||
278 | pm = 16; | ||
279 | } | ||
280 | } | 277 | } |
281 | } else | 278 | } else |
282 | pm = mpc83xx_spi->spibrg / (hz * 4); | 279 | pm = mpc83xx_spi->spibrg / (hz * 4); |
@@ -315,11 +312,20 @@ static int mpc83xx_spi_bufs(struct spi_device *spi, struct spi_transfer *t) | |||
315 | if (t->bits_per_word) | 312 | if (t->bits_per_word) |
316 | bits_per_word = t->bits_per_word; | 313 | bits_per_word = t->bits_per_word; |
317 | len = t->len; | 314 | len = t->len; |
318 | if (bits_per_word > 8) | 315 | if (bits_per_word > 8) { |
316 | /* invalid length? */ | ||
317 | if (len & 1) | ||
318 | return -EINVAL; | ||
319 | len /= 2; | 319 | len /= 2; |
320 | if (bits_per_word > 16) | 320 | } |
321 | if (bits_per_word > 16) { | ||
322 | /* invalid length? */ | ||
323 | if (len & 1) | ||
324 | return -EINVAL; | ||
321 | len /= 2; | 325 | len /= 2; |
326 | } | ||
322 | mpc83xx_spi->count = len; | 327 | mpc83xx_spi->count = len; |
328 | |||
323 | INIT_COMPLETION(mpc83xx_spi->done); | 329 | INIT_COMPLETION(mpc83xx_spi->done); |
324 | 330 | ||
325 | /* enable rx ints */ | 331 | /* enable rx ints */ |
diff --git a/drivers/spi/spi_s3c24xx.c b/drivers/spi/spi_s3c24xx.c index 98abc73c1a1d..3eb414b84a9d 100644 --- a/drivers/spi/spi_s3c24xx.c +++ b/drivers/spi/spi_s3c24xx.c | |||
@@ -430,7 +430,7 @@ static int s3c24xx_spi_resume(struct platform_device *pdev) | |||
430 | #endif | 430 | #endif |
431 | 431 | ||
432 | MODULE_ALIAS("platform:s3c2410-spi"); | 432 | MODULE_ALIAS("platform:s3c2410-spi"); |
433 | static struct platform_driver s3c24xx_spidrv = { | 433 | static struct platform_driver s3c24xx_spi_driver = { |
434 | .remove = __exit_p(s3c24xx_spi_remove), | 434 | .remove = __exit_p(s3c24xx_spi_remove), |
435 | .suspend = s3c24xx_spi_suspend, | 435 | .suspend = s3c24xx_spi_suspend, |
436 | .resume = s3c24xx_spi_resume, | 436 | .resume = s3c24xx_spi_resume, |
@@ -442,12 +442,12 @@ static struct platform_driver s3c24xx_spidrv = { | |||
442 | 442 | ||
443 | static int __init s3c24xx_spi_init(void) | 443 | static int __init s3c24xx_spi_init(void) |
444 | { | 444 | { |
445 | return platform_driver_probe(&s3c24xx_spidrv, s3c24xx_spi_probe); | 445 | return platform_driver_probe(&s3c24xx_spi_driver, s3c24xx_spi_probe); |
446 | } | 446 | } |
447 | 447 | ||
448 | static void __exit s3c24xx_spi_exit(void) | 448 | static void __exit s3c24xx_spi_exit(void) |
449 | { | 449 | { |
450 | platform_driver_unregister(&s3c24xx_spidrv); | 450 | platform_driver_unregister(&s3c24xx_spi_driver); |
451 | } | 451 | } |
452 | 452 | ||
453 | module_init(s3c24xx_spi_init); | 453 | module_init(s3c24xx_spi_init); |
diff --git a/drivers/ssb/main.c b/drivers/ssb/main.c index 87ab2443e66d..0ffabf5c0b60 100644 --- a/drivers/ssb/main.c +++ b/drivers/ssb/main.c | |||
@@ -471,6 +471,7 @@ static int ssb_devices_register(struct ssb_bus *bus) | |||
471 | #endif | 471 | #endif |
472 | break; | 472 | break; |
473 | case SSB_BUSTYPE_SSB: | 473 | case SSB_BUSTYPE_SSB: |
474 | dev->dma_mask = &dev->coherent_dma_mask; | ||
474 | break; | 475 | break; |
475 | } | 476 | } |
476 | 477 | ||
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c index 8abd4e59bf4a..8ab389dca2b9 100644 --- a/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c | |||
@@ -1876,7 +1876,8 @@ int usb_add_hcd(struct usb_hcd *hcd, | |||
1876 | * with IRQF_SHARED. As usb_hcd_irq() will always disable | 1876 | * with IRQF_SHARED. As usb_hcd_irq() will always disable |
1877 | * interrupts we can remove it here. | 1877 | * interrupts we can remove it here. |
1878 | */ | 1878 | */ |
1879 | irqflags &= ~IRQF_DISABLED; | 1879 | if (irqflags & IRQF_SHARED) |
1880 | irqflags &= ~IRQF_DISABLED; | ||
1880 | 1881 | ||
1881 | snprintf(hcd->irq_descr, sizeof(hcd->irq_descr), "%s:usb%d", | 1882 | snprintf(hcd->irq_descr, sizeof(hcd->irq_descr), "%s:usb%d", |
1882 | hcd->driver->description, hcd->self.busnum); | 1883 | hcd->driver->description, hcd->self.busnum); |
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 6a5cb018383d..d99963873e37 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c | |||
@@ -2683,35 +2683,17 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1, | |||
2683 | USB_PORT_STAT_C_ENABLE); | 2683 | USB_PORT_STAT_C_ENABLE); |
2684 | #endif | 2684 | #endif |
2685 | 2685 | ||
2686 | /* Try to use the debounce delay for protection against | ||
2687 | * port-enable changes caused, for example, by EMI. | ||
2688 | */ | ||
2689 | if (portchange & (USB_PORT_STAT_C_CONNECTION | | ||
2690 | USB_PORT_STAT_C_ENABLE)) { | ||
2691 | status = hub_port_debounce(hub, port1); | ||
2692 | if (status < 0) { | ||
2693 | if (printk_ratelimit()) | ||
2694 | dev_err (hub_dev, "connect-debounce failed, " | ||
2695 | "port %d disabled\n", port1); | ||
2696 | portstatus &= ~USB_PORT_STAT_CONNECTION; | ||
2697 | } else { | ||
2698 | portstatus = status; | ||
2699 | } | ||
2700 | } | ||
2701 | |||
2702 | /* Try to resuscitate an existing device */ | 2686 | /* Try to resuscitate an existing device */ |
2703 | udev = hdev->children[port1-1]; | 2687 | udev = hdev->children[port1-1]; |
2704 | if ((portstatus & USB_PORT_STAT_CONNECTION) && udev && | 2688 | if ((portstatus & USB_PORT_STAT_CONNECTION) && udev && |
2705 | udev->state != USB_STATE_NOTATTACHED) { | 2689 | udev->state != USB_STATE_NOTATTACHED) { |
2706 | |||
2707 | usb_lock_device(udev); | 2690 | usb_lock_device(udev); |
2708 | if (portstatus & USB_PORT_STAT_ENABLE) { | 2691 | if (portstatus & USB_PORT_STAT_ENABLE) { |
2709 | status = 0; /* Nothing to do */ | 2692 | status = 0; /* Nothing to do */ |
2710 | } else if (!udev->persist_enabled) { | ||
2711 | status = -ENODEV; /* Mustn't resuscitate */ | ||
2712 | 2693 | ||
2713 | #ifdef CONFIG_USB_SUSPEND | 2694 | #ifdef CONFIG_USB_SUSPEND |
2714 | } else if (udev->state == USB_STATE_SUSPENDED) { | 2695 | } else if (udev->state == USB_STATE_SUSPENDED && |
2696 | udev->persist_enabled) { | ||
2715 | /* For a suspended device, treat this as a | 2697 | /* For a suspended device, treat this as a |
2716 | * remote wakeup event. | 2698 | * remote wakeup event. |
2717 | */ | 2699 | */ |
@@ -2726,7 +2708,7 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1, | |||
2726 | #endif | 2708 | #endif |
2727 | 2709 | ||
2728 | } else { | 2710 | } else { |
2729 | status = usb_reset_device(udev); | 2711 | status = -ENODEV; /* Don't resuscitate */ |
2730 | } | 2712 | } |
2731 | usb_unlock_device(udev); | 2713 | usb_unlock_device(udev); |
2732 | 2714 | ||
@@ -2741,6 +2723,19 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1, | |||
2741 | usb_disconnect(&hdev->children[port1-1]); | 2723 | usb_disconnect(&hdev->children[port1-1]); |
2742 | clear_bit(port1, hub->change_bits); | 2724 | clear_bit(port1, hub->change_bits); |
2743 | 2725 | ||
2726 | if (portchange & (USB_PORT_STAT_C_CONNECTION | | ||
2727 | USB_PORT_STAT_C_ENABLE)) { | ||
2728 | status = hub_port_debounce(hub, port1); | ||
2729 | if (status < 0) { | ||
2730 | if (printk_ratelimit()) | ||
2731 | dev_err(hub_dev, "connect-debounce failed, " | ||
2732 | "port %d disabled\n", port1); | ||
2733 | portstatus &= ~USB_PORT_STAT_CONNECTION; | ||
2734 | } else { | ||
2735 | portstatus = status; | ||
2736 | } | ||
2737 | } | ||
2738 | |||
2744 | /* Return now if debouncing failed or nothing is connected */ | 2739 | /* Return now if debouncing failed or nothing is connected */ |
2745 | if (!(portstatus & USB_PORT_STAT_CONNECTION)) { | 2740 | if (!(portstatus & USB_PORT_STAT_CONNECTION)) { |
2746 | 2741 | ||
@@ -2748,7 +2743,7 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1, | |||
2748 | if ((wHubCharacteristics & HUB_CHAR_LPSM) < 2 | 2743 | if ((wHubCharacteristics & HUB_CHAR_LPSM) < 2 |
2749 | && !(portstatus & (1 << USB_PORT_FEAT_POWER))) | 2744 | && !(portstatus & (1 << USB_PORT_FEAT_POWER))) |
2750 | set_port_feature(hdev, port1, USB_PORT_FEAT_POWER); | 2745 | set_port_feature(hdev, port1, USB_PORT_FEAT_POWER); |
2751 | 2746 | ||
2752 | if (portstatus & USB_PORT_STAT_ENABLE) | 2747 | if (portstatus & USB_PORT_STAT_ENABLE) |
2753 | goto done; | 2748 | goto done; |
2754 | return; | 2749 | return; |
diff --git a/drivers/usb/gadget/fsl_usb2_udc.c b/drivers/usb/gadget/fsl_usb2_udc.c index 1cfccf102a2d..45ad556169f1 100644 --- a/drivers/usb/gadget/fsl_usb2_udc.c +++ b/drivers/usb/gadget/fsl_usb2_udc.c | |||
@@ -223,7 +223,7 @@ static int dr_controller_setup(struct fsl_udc *udc) | |||
223 | fsl_writel(tmp, &dr_regs->endpointlistaddr); | 223 | fsl_writel(tmp, &dr_regs->endpointlistaddr); |
224 | 224 | ||
225 | VDBG("vir[qh_base] is %p phy[qh_base] is 0x%8x reg is 0x%8x", | 225 | VDBG("vir[qh_base] is %p phy[qh_base] is 0x%8x reg is 0x%8x", |
226 | (int)udc->ep_qh, (int)tmp, | 226 | udc->ep_qh, (int)tmp, |
227 | fsl_readl(&dr_regs->endpointlistaddr)); | 227 | fsl_readl(&dr_regs->endpointlistaddr)); |
228 | 228 | ||
229 | /* Config PHY interface */ | 229 | /* Config PHY interface */ |
diff --git a/drivers/usb/gadget/omap_udc.c b/drivers/usb/gadget/omap_udc.c index 574c53831a05..bb54cca4c543 100644 --- a/drivers/usb/gadget/omap_udc.c +++ b/drivers/usb/gadget/omap_udc.c | |||
@@ -787,7 +787,7 @@ static void dma_channel_claim(struct omap_ep *ep, unsigned channel) | |||
787 | omap_set_dma_dest_params(ep->lch, | 787 | omap_set_dma_dest_params(ep->lch, |
788 | OMAP_DMA_PORT_TIPB, | 788 | OMAP_DMA_PORT_TIPB, |
789 | OMAP_DMA_AMODE_CONSTANT, | 789 | OMAP_DMA_AMODE_CONSTANT, |
790 | (unsigned long) io_v2p(UDC_DATA_DMA), | 790 | UDC_DATA_DMA, |
791 | 0, 0); | 791 | 0, 0); |
792 | } | 792 | } |
793 | } else { | 793 | } else { |
@@ -804,7 +804,7 @@ static void dma_channel_claim(struct omap_ep *ep, unsigned channel) | |||
804 | omap_set_dma_src_params(ep->lch, | 804 | omap_set_dma_src_params(ep->lch, |
805 | OMAP_DMA_PORT_TIPB, | 805 | OMAP_DMA_PORT_TIPB, |
806 | OMAP_DMA_AMODE_CONSTANT, | 806 | OMAP_DMA_AMODE_CONSTANT, |
807 | (unsigned long) io_v2p(UDC_DATA_DMA), | 807 | UDC_DATA_DMA, |
808 | 0, 0); | 808 | 0, 0); |
809 | /* EMIFF or SDRC */ | 809 | /* EMIFF or SDRC */ |
810 | omap_set_dma_dest_burst_mode(ep->lch, | 810 | omap_set_dma_dest_burst_mode(ep->lch, |
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index d9d53f289caf..8409e0705d63 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c | |||
@@ -145,16 +145,6 @@ static int handshake (struct ehci_hcd *ehci, void __iomem *ptr, | |||
145 | return -ETIMEDOUT; | 145 | return -ETIMEDOUT; |
146 | } | 146 | } |
147 | 147 | ||
148 | static int handshake_on_error_set_halt(struct ehci_hcd *ehci, void __iomem *ptr, | ||
149 | u32 mask, u32 done, int usec) | ||
150 | { | ||
151 | int error = handshake(ehci, ptr, mask, done, usec); | ||
152 | if (error) | ||
153 | ehci_to_hcd(ehci)->state = HC_STATE_HALT; | ||
154 | |||
155 | return error; | ||
156 | } | ||
157 | |||
158 | /* force HC to halt state from unknown (EHCI spec section 2.3) */ | 148 | /* force HC to halt state from unknown (EHCI spec section 2.3) */ |
159 | static int ehci_halt (struct ehci_hcd *ehci) | 149 | static int ehci_halt (struct ehci_hcd *ehci) |
160 | { | 150 | { |
@@ -173,6 +163,22 @@ static int ehci_halt (struct ehci_hcd *ehci) | |||
173 | STS_HALT, STS_HALT, 16 * 125); | 163 | STS_HALT, STS_HALT, 16 * 125); |
174 | } | 164 | } |
175 | 165 | ||
166 | static int handshake_on_error_set_halt(struct ehci_hcd *ehci, void __iomem *ptr, | ||
167 | u32 mask, u32 done, int usec) | ||
168 | { | ||
169 | int error; | ||
170 | |||
171 | error = handshake(ehci, ptr, mask, done, usec); | ||
172 | if (error) { | ||
173 | ehci_halt(ehci); | ||
174 | ehci_to_hcd(ehci)->state = HC_STATE_HALT; | ||
175 | ehci_err(ehci, "force halt; handhake %p %08x %08x -> %d\n", | ||
176 | ptr, mask, done, error); | ||
177 | } | ||
178 | |||
179 | return error; | ||
180 | } | ||
181 | |||
176 | /* put TDI/ARC silicon into EHCI mode */ | 182 | /* put TDI/ARC silicon into EHCI mode */ |
177 | static void tdi_reset (struct ehci_hcd *ehci) | 183 | static void tdi_reset (struct ehci_hcd *ehci) |
178 | { | 184 | { |
diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c index b7853c8bac0f..4a0c5a78b2ed 100644 --- a/drivers/usb/host/ehci-sched.c +++ b/drivers/usb/host/ehci-sched.c | |||
@@ -437,6 +437,9 @@ static int enable_periodic (struct ehci_hcd *ehci) | |||
437 | u32 cmd; | 437 | u32 cmd; |
438 | int status; | 438 | int status; |
439 | 439 | ||
440 | if (ehci->periodic_sched++) | ||
441 | return 0; | ||
442 | |||
440 | /* did clearing PSE did take effect yet? | 443 | /* did clearing PSE did take effect yet? |
441 | * takes effect only at frame boundaries... | 444 | * takes effect only at frame boundaries... |
442 | */ | 445 | */ |
@@ -461,6 +464,9 @@ static int disable_periodic (struct ehci_hcd *ehci) | |||
461 | u32 cmd; | 464 | u32 cmd; |
462 | int status; | 465 | int status; |
463 | 466 | ||
467 | if (--ehci->periodic_sched) | ||
468 | return 0; | ||
469 | |||
464 | /* did setting PSE not take effect yet? | 470 | /* did setting PSE not take effect yet? |
465 | * takes effect only at frame boundaries... | 471 | * takes effect only at frame boundaries... |
466 | */ | 472 | */ |
@@ -544,13 +550,10 @@ static int qh_link_periodic (struct ehci_hcd *ehci, struct ehci_qh *qh) | |||
544 | : (qh->usecs * 8); | 550 | : (qh->usecs * 8); |
545 | 551 | ||
546 | /* maybe enable periodic schedule processing */ | 552 | /* maybe enable periodic schedule processing */ |
547 | if (!ehci->periodic_sched++) | 553 | return enable_periodic(ehci); |
548 | return enable_periodic (ehci); | ||
549 | |||
550 | return 0; | ||
551 | } | 554 | } |
552 | 555 | ||
553 | static void qh_unlink_periodic (struct ehci_hcd *ehci, struct ehci_qh *qh) | 556 | static int qh_unlink_periodic(struct ehci_hcd *ehci, struct ehci_qh *qh) |
554 | { | 557 | { |
555 | unsigned i; | 558 | unsigned i; |
556 | unsigned period; | 559 | unsigned period; |
@@ -586,9 +589,7 @@ static void qh_unlink_periodic (struct ehci_hcd *ehci, struct ehci_qh *qh) | |||
586 | qh_put (qh); | 589 | qh_put (qh); |
587 | 590 | ||
588 | /* maybe turn off periodic schedule */ | 591 | /* maybe turn off periodic schedule */ |
589 | ehci->periodic_sched--; | 592 | return disable_periodic(ehci); |
590 | if (!ehci->periodic_sched) | ||
591 | (void) disable_periodic (ehci); | ||
592 | } | 593 | } |
593 | 594 | ||
594 | static void intr_deschedule (struct ehci_hcd *ehci, struct ehci_qh *qh) | 595 | static void intr_deschedule (struct ehci_hcd *ehci, struct ehci_qh *qh) |
@@ -1562,9 +1563,7 @@ itd_link_urb ( | |||
1562 | urb->hcpriv = NULL; | 1563 | urb->hcpriv = NULL; |
1563 | 1564 | ||
1564 | timer_action (ehci, TIMER_IO_WATCHDOG); | 1565 | timer_action (ehci, TIMER_IO_WATCHDOG); |
1565 | if (unlikely (!ehci->periodic_sched++)) | 1566 | return enable_periodic(ehci); |
1566 | return enable_periodic (ehci); | ||
1567 | return 0; | ||
1568 | } | 1567 | } |
1569 | 1568 | ||
1570 | #define ISO_ERRS (EHCI_ISOC_BUF_ERR | EHCI_ISOC_BABBLE | EHCI_ISOC_XACTERR) | 1569 | #define ISO_ERRS (EHCI_ISOC_BUF_ERR | EHCI_ISOC_BABBLE | EHCI_ISOC_XACTERR) |
@@ -1642,7 +1641,7 @@ itd_complete ( | |||
1642 | ehci_urb_done(ehci, urb, 0); | 1641 | ehci_urb_done(ehci, urb, 0); |
1643 | retval = true; | 1642 | retval = true; |
1644 | urb = NULL; | 1643 | urb = NULL; |
1645 | ehci->periodic_sched--; | 1644 | (void) disable_periodic(ehci); |
1646 | ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--; | 1645 | ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--; |
1647 | 1646 | ||
1648 | if (unlikely (list_empty (&stream->td_list))) { | 1647 | if (unlikely (list_empty (&stream->td_list))) { |
@@ -1951,9 +1950,7 @@ sitd_link_urb ( | |||
1951 | urb->hcpriv = NULL; | 1950 | urb->hcpriv = NULL; |
1952 | 1951 | ||
1953 | timer_action (ehci, TIMER_IO_WATCHDOG); | 1952 | timer_action (ehci, TIMER_IO_WATCHDOG); |
1954 | if (!ehci->periodic_sched++) | 1953 | return enable_periodic(ehci); |
1955 | return enable_periodic (ehci); | ||
1956 | return 0; | ||
1957 | } | 1954 | } |
1958 | 1955 | ||
1959 | /*-------------------------------------------------------------------------*/ | 1956 | /*-------------------------------------------------------------------------*/ |
@@ -2019,7 +2016,7 @@ sitd_complete ( | |||
2019 | ehci_urb_done(ehci, urb, 0); | 2016 | ehci_urb_done(ehci, urb, 0); |
2020 | retval = true; | 2017 | retval = true; |
2021 | urb = NULL; | 2018 | urb = NULL; |
2022 | ehci->periodic_sched--; | 2019 | (void) disable_periodic(ehci); |
2023 | ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--; | 2020 | ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--; |
2024 | 2021 | ||
2025 | if (list_empty (&stream->td_list)) { | 2022 | if (list_empty (&stream->td_list)) { |
@@ -2243,8 +2240,7 @@ restart: | |||
2243 | if (unlikely (modified)) { | 2240 | if (unlikely (modified)) { |
2244 | if (likely(ehci->periodic_sched > 0)) | 2241 | if (likely(ehci->periodic_sched > 0)) |
2245 | goto restart; | 2242 | goto restart; |
2246 | /* maybe we can short-circuit this scan! */ | 2243 | /* short-circuit this scan */ |
2247 | disable_periodic(ehci); | ||
2248 | now_uframe = clock; | 2244 | now_uframe = clock; |
2249 | break; | 2245 | break; |
2250 | } | 2246 | } |
diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig index a0017486ad4e..58b2b8fc9439 100644 --- a/drivers/usb/musb/Kconfig +++ b/drivers/usb/musb/Kconfig | |||
@@ -9,6 +9,7 @@ comment "Enable Host or Gadget support to see Inventra options" | |||
9 | # (M)HDRC = (Multipoint) Highspeed Dual-Role Controller | 9 | # (M)HDRC = (Multipoint) Highspeed Dual-Role Controller |
10 | config USB_MUSB_HDRC | 10 | config USB_MUSB_HDRC |
11 | depends on (USB || USB_GADGET) && HAVE_CLK | 11 | depends on (USB || USB_GADGET) && HAVE_CLK |
12 | depends on !SUPERH | ||
12 | select TWL4030_USB if MACH_OMAP_3430SDP | 13 | select TWL4030_USB if MACH_OMAP_3430SDP |
13 | tristate 'Inventra Highspeed Dual Role Controller (TI, ...)' | 14 | tristate 'Inventra Highspeed Dual Role Controller (TI, ...)' |
14 | help | 15 | help |
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index c5b8f0296fcf..128e949db47c 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c | |||
@@ -100,8 +100,8 @@ | |||
100 | #include <linux/io.h> | 100 | #include <linux/io.h> |
101 | 101 | ||
102 | #ifdef CONFIG_ARM | 102 | #ifdef CONFIG_ARM |
103 | #include <asm/arch/hardware.h> | 103 | #include <mach/hardware.h> |
104 | #include <asm/arch/memory.h> | 104 | #include <mach/memory.h> |
105 | #include <asm/mach-types.h> | 105 | #include <asm/mach-types.h> |
106 | #endif | 106 | #endif |
107 | 107 | ||
diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c index 298b22e6ad0d..9d2dcb121c5e 100644 --- a/drivers/usb/musb/omap2430.c +++ b/drivers/usb/musb/omap2430.c | |||
@@ -35,8 +35,8 @@ | |||
35 | #include <linux/io.h> | 35 | #include <linux/io.h> |
36 | 36 | ||
37 | #include <asm/mach-types.h> | 37 | #include <asm/mach-types.h> |
38 | #include <asm/arch/hardware.h> | 38 | #include <mach/hardware.h> |
39 | #include <asm/arch/mux.h> | 39 | #include <mach/mux.h> |
40 | 40 | ||
41 | #include "musb_core.h" | 41 | #include "musb_core.h" |
42 | #include "omap2430.h" | 42 | #include "omap2430.h" |
diff --git a/drivers/usb/musb/omap2430.h b/drivers/usb/musb/omap2430.h index 786a62071f72..dc7670718cd2 100644 --- a/drivers/usb/musb/omap2430.h +++ b/drivers/usb/musb/omap2430.h | |||
@@ -11,8 +11,8 @@ | |||
11 | #define __MUSB_OMAP243X_H__ | 11 | #define __MUSB_OMAP243X_H__ |
12 | 12 | ||
13 | #if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3430) | 13 | #if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3430) |
14 | #include <asm/arch/hardware.h> | 14 | #include <mach/hardware.h> |
15 | #include <asm/arch/usb.h> | 15 | #include <mach/usb.h> |
16 | 16 | ||
17 | /* | 17 | /* |
18 | * OMAP2430-specific definitions | 18 | * OMAP2430-specific definitions |
diff --git a/drivers/usb/serial/cp2101.c b/drivers/usb/serial/cp2101.c index 442cba69cce5..1279553381e3 100644 --- a/drivers/usb/serial/cp2101.c +++ b/drivers/usb/serial/cp2101.c | |||
@@ -72,6 +72,7 @@ static struct usb_device_id id_table [] = { | |||
72 | { USB_DEVICE(0x10C4, 0x80CA) }, /* Degree Controls Inc */ | 72 | { USB_DEVICE(0x10C4, 0x80CA) }, /* Degree Controls Inc */ |
73 | { USB_DEVICE(0x10C4, 0x80DD) }, /* Tracient RFID */ | 73 | { USB_DEVICE(0x10C4, 0x80DD) }, /* Tracient RFID */ |
74 | { USB_DEVICE(0x10C4, 0x80F6) }, /* Suunto sports instrument */ | 74 | { USB_DEVICE(0x10C4, 0x80F6) }, /* Suunto sports instrument */ |
75 | { USB_DEVICE(0x10C4, 0x8115) }, /* Arygon NFC/Mifare Reader */ | ||
75 | { USB_DEVICE(0x10C4, 0x813D) }, /* Burnside Telecom Deskmobile */ | 76 | { USB_DEVICE(0x10C4, 0x813D) }, /* Burnside Telecom Deskmobile */ |
76 | { USB_DEVICE(0x10C4, 0x814A) }, /* West Mountain Radio RIGblaster P&P */ | 77 | { USB_DEVICE(0x10C4, 0x814A) }, /* West Mountain Radio RIGblaster P&P */ |
77 | { USB_DEVICE(0x10C4, 0x814B) }, /* West Mountain Radio RIGtalk */ | 78 | { USB_DEVICE(0x10C4, 0x814B) }, /* West Mountain Radio RIGtalk */ |
@@ -83,6 +84,7 @@ static struct usb_device_id id_table [] = { | |||
83 | { USB_DEVICE(0x10C4, 0x81E7) }, /* Aerocomm Radio */ | 84 | { USB_DEVICE(0x10C4, 0x81E7) }, /* Aerocomm Radio */ |
84 | { USB_DEVICE(0x10C4, 0x8218) }, /* Lipowsky Industrie Elektronik GmbH, HARP-1 */ | 85 | { USB_DEVICE(0x10C4, 0x8218) }, /* Lipowsky Industrie Elektronik GmbH, HARP-1 */ |
85 | { USB_DEVICE(0x10c4, 0x8293) }, /* Telegesys ETRX2USB */ | 86 | { USB_DEVICE(0x10c4, 0x8293) }, /* Telegesys ETRX2USB */ |
87 | { USB_DEVICE(0x10C4, 0x8341) }, /* Siemens MC35PU GPRS Modem */ | ||
86 | { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */ | 88 | { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */ |
87 | { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */ | 89 | { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */ |
88 | { USB_DEVICE(0x10C4, 0xF001) }, /* Elan Digital Systems USBscope50 */ | 90 | { USB_DEVICE(0x10C4, 0xF001) }, /* Elan Digital Systems USBscope50 */ |
@@ -93,6 +95,7 @@ static struct usb_device_id id_table [] = { | |||
93 | { USB_DEVICE(0x13AD, 0x9999) }, /* Baltech card reader */ | 95 | { USB_DEVICE(0x13AD, 0x9999) }, /* Baltech card reader */ |
94 | { USB_DEVICE(0x166A, 0x0303) }, /* Clipsal 5500PCU C-Bus USB interface */ | 96 | { USB_DEVICE(0x166A, 0x0303) }, /* Clipsal 5500PCU C-Bus USB interface */ |
95 | { USB_DEVICE(0x16D6, 0x0001) }, /* Jablotron serial interface */ | 97 | { USB_DEVICE(0x16D6, 0x0001) }, /* Jablotron serial interface */ |
98 | { USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */ | ||
96 | { } /* Terminating Entry */ | 99 | { } /* Terminating Entry */ |
97 | }; | 100 | }; |
98 | 101 | ||
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index 984f6eff4c47..3dc93b542b30 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c | |||
@@ -654,6 +654,9 @@ static struct usb_device_id id_table_combined [] = { | |||
654 | .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, | 654 | .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, |
655 | { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID_USB60F) }, | 655 | { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID_USB60F) }, |
656 | { USB_DEVICE(FTDI_VID, FTDI_REU_TINY_PID) }, | 656 | { USB_DEVICE(FTDI_VID, FTDI_REU_TINY_PID) }, |
657 | { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO4x4_PID) }, | ||
658 | { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DGQG_PID) }, | ||
659 | { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DUSB_PID) }, | ||
657 | { }, /* Optional parameter entry */ | 660 | { }, /* Optional parameter entry */ |
658 | { } /* Terminating entry */ | 661 | { } /* Terminating entry */ |
659 | }; | 662 | }; |
diff --git a/drivers/usb/serial/ftdi_sio.h b/drivers/usb/serial/ftdi_sio.h index 382265bba969..8a5b6df3a976 100644 --- a/drivers/usb/serial/ftdi_sio.h +++ b/drivers/usb/serial/ftdi_sio.h | |||
@@ -750,6 +750,7 @@ | |||
750 | 750 | ||
751 | #define PAPOUCH_VID 0x5050 /* Vendor ID */ | 751 | #define PAPOUCH_VID 0x5050 /* Vendor ID */ |
752 | #define PAPOUCH_TMU_PID 0x0400 /* TMU USB Thermometer */ | 752 | #define PAPOUCH_TMU_PID 0x0400 /* TMU USB Thermometer */ |
753 | #define PAPOUCH_QUIDO4x4_PID 0x0900 /* Quido 4/4 Module */ | ||
753 | 754 | ||
754 | /* | 755 | /* |
755 | * ACG Identification Technologies GmbH products (http://www.acg.de/). | 756 | * ACG Identification Technologies GmbH products (http://www.acg.de/). |
@@ -838,6 +839,10 @@ | |||
838 | /* Rig Expert Ukraine devices */ | 839 | /* Rig Expert Ukraine devices */ |
839 | #define FTDI_REU_TINY_PID 0xED22 /* RigExpert Tiny */ | 840 | #define FTDI_REU_TINY_PID 0xED22 /* RigExpert Tiny */ |
840 | 841 | ||
842 | /* Domintell products http://www.domintell.com */ | ||
843 | #define FTDI_DOMINTELL_DGQG_PID 0xEF50 /* Master */ | ||
844 | #define FTDI_DOMINTELL_DUSB_PID 0xEF51 /* DUSB01 module */ | ||
845 | |||
841 | /* Commands */ | 846 | /* Commands */ |
842 | #define FTDI_SIO_RESET 0 /* Reset the port */ | 847 | #define FTDI_SIO_RESET 0 /* Reset the port */ |
843 | #define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */ | 848 | #define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */ |
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index 9f9cd36455f4..73f8277f88f2 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c | |||
@@ -218,6 +218,7 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po | |||
218 | /* ZTE PRODUCTS */ | 218 | /* ZTE PRODUCTS */ |
219 | #define ZTE_VENDOR_ID 0x19d2 | 219 | #define ZTE_VENDOR_ID 0x19d2 |
220 | #define ZTE_PRODUCT_MF628 0x0015 | 220 | #define ZTE_PRODUCT_MF628 0x0015 |
221 | #define ZTE_PRODUCT_CDMA_TECH 0xfffe | ||
221 | 222 | ||
222 | static struct usb_device_id option_ids[] = { | 223 | static struct usb_device_id option_ids[] = { |
223 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) }, | 224 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) }, |
@@ -347,6 +348,7 @@ static struct usb_device_id option_ids[] = { | |||
347 | { USB_DEVICE(MAXON_VENDOR_ID, 0x6280) }, /* BP3-USB & BP3-EXT HSDPA */ | 348 | { USB_DEVICE(MAXON_VENDOR_ID, 0x6280) }, /* BP3-USB & BP3-EXT HSDPA */ |
348 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) }, | 349 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) }, |
349 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) }, | 350 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) }, |
351 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH) }, | ||
350 | { } /* Terminating entry */ | 352 | { } /* Terminating entry */ |
351 | }; | 353 | }; |
352 | MODULE_DEVICE_TABLE(usb, option_ids); | 354 | MODULE_DEVICE_TABLE(usb, option_ids); |
diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c index 706033753adb..ea1a103c99be 100644 --- a/drivers/usb/serial/sierra.c +++ b/drivers/usb/serial/sierra.c | |||
@@ -14,7 +14,7 @@ | |||
14 | Whom based his on the Keyspan driver by Hugh Blemings <hugh@blemings.org> | 14 | Whom based his on the Keyspan driver by Hugh Blemings <hugh@blemings.org> |
15 | */ | 15 | */ |
16 | 16 | ||
17 | #define DRIVER_VERSION "v.1.2.13a" | 17 | #define DRIVER_VERSION "v.1.3.2" |
18 | #define DRIVER_AUTHOR "Kevin Lloyd <klloyd@sierrawireless.com>" | 18 | #define DRIVER_AUTHOR "Kevin Lloyd <klloyd@sierrawireless.com>" |
19 | #define DRIVER_DESC "USB Driver for Sierra Wireless USB modems" | 19 | #define DRIVER_DESC "USB Driver for Sierra Wireless USB modems" |
20 | 20 | ||
@@ -30,9 +30,6 @@ | |||
30 | 30 | ||
31 | #define SWIMS_USB_REQUEST_SetPower 0x00 | 31 | #define SWIMS_USB_REQUEST_SetPower 0x00 |
32 | #define SWIMS_USB_REQUEST_SetNmea 0x07 | 32 | #define SWIMS_USB_REQUEST_SetNmea 0x07 |
33 | #define SWIMS_USB_REQUEST_SetMode 0x0B | ||
34 | #define SWIMS_USB_REQUEST_GetSwocInfo 0x0A | ||
35 | #define SWIMS_SET_MODE_Modem 0x0001 | ||
36 | 33 | ||
37 | /* per port private data */ | 34 | /* per port private data */ |
38 | #define N_IN_URB 4 | 35 | #define N_IN_URB 4 |
@@ -163,7 +160,7 @@ static struct usb_device_id id_table [] = { | |||
163 | { USB_DEVICE(0x1199, 0x0017) }, /* Sierra Wireless EM5625 */ | 160 | { USB_DEVICE(0x1199, 0x0017) }, /* Sierra Wireless EM5625 */ |
164 | { USB_DEVICE(0x1199, 0x0018) }, /* Sierra Wireless MC5720 */ | 161 | { USB_DEVICE(0x1199, 0x0018) }, /* Sierra Wireless MC5720 */ |
165 | { USB_DEVICE(0x1199, 0x0218) }, /* Sierra Wireless MC5720 */ | 162 | { USB_DEVICE(0x1199, 0x0218) }, /* Sierra Wireless MC5720 */ |
166 | { USB_DEVICE(0x0f30, 0x1b1d) }, /* Sierra Wireless MC5720 */ | 163 | { USB_DEVICE(0x03f0, 0x1b1d) }, /* HP ev2200 a.k.a MC5720 */ |
167 | { USB_DEVICE(0x1199, 0x0020) }, /* Sierra Wireless MC5725 */ | 164 | { USB_DEVICE(0x1199, 0x0020) }, /* Sierra Wireless MC5725 */ |
168 | { USB_DEVICE(0x1199, 0x0024) }, /* Sierra Wireless MC5727 */ | 165 | { USB_DEVICE(0x1199, 0x0024) }, /* Sierra Wireless MC5727 */ |
169 | { USB_DEVICE(0x1199, 0x0220) }, /* Sierra Wireless MC5725 */ | 166 | { USB_DEVICE(0x1199, 0x0220) }, /* Sierra Wireless MC5725 */ |
@@ -175,6 +172,8 @@ static struct usb_device_id id_table [] = { | |||
175 | /* Sierra Wireless Device */ | 172 | /* Sierra Wireless Device */ |
176 | { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x0025, 0xFF, 0xFF, 0xFF) }, | 173 | { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x0025, 0xFF, 0xFF, 0xFF) }, |
177 | { USB_DEVICE(0x1199, 0x0026) }, /* Sierra Wireless Device */ | 174 | { USB_DEVICE(0x1199, 0x0026) }, /* Sierra Wireless Device */ |
175 | { USB_DEVICE(0x1199, 0x0027) }, /* Sierra Wireless Device */ | ||
176 | { USB_DEVICE(0x1199, 0x0028) }, /* Sierra Wireless Device */ | ||
178 | 177 | ||
179 | { USB_DEVICE(0x1199, 0x6802) }, /* Sierra Wireless MC8755 */ | 178 | { USB_DEVICE(0x1199, 0x6802) }, /* Sierra Wireless MC8755 */ |
180 | { USB_DEVICE(0x1199, 0x6804) }, /* Sierra Wireless MC8755 */ | 179 | { USB_DEVICE(0x1199, 0x6804) }, /* Sierra Wireless MC8755 */ |
@@ -187,6 +186,7 @@ static struct usb_device_id id_table [] = { | |||
187 | { USB_DEVICE(0x1199, 0x6821) }, /* Sierra Wireless AirCard 875U */ | 186 | { USB_DEVICE(0x1199, 0x6821) }, /* Sierra Wireless AirCard 875U */ |
188 | { USB_DEVICE(0x1199, 0x6832) }, /* Sierra Wireless MC8780 */ | 187 | { USB_DEVICE(0x1199, 0x6832) }, /* Sierra Wireless MC8780 */ |
189 | { USB_DEVICE(0x1199, 0x6833) }, /* Sierra Wireless MC8781 */ | 188 | { USB_DEVICE(0x1199, 0x6833) }, /* Sierra Wireless MC8781 */ |
189 | { USB_DEVICE(0x1199, 0x683A) }, /* Sierra Wireless MC8785 */ | ||
190 | { USB_DEVICE(0x1199, 0x683B) }, /* Sierra Wireless MC8785 Composite */ | 190 | { USB_DEVICE(0x1199, 0x683B) }, /* Sierra Wireless MC8785 Composite */ |
191 | { USB_DEVICE(0x1199, 0x683C) }, /* Sierra Wireless MC8790 */ | 191 | { USB_DEVICE(0x1199, 0x683C) }, /* Sierra Wireless MC8790 */ |
192 | { USB_DEVICE(0x1199, 0x683D) }, /* Sierra Wireless MC8790 */ | 192 | { USB_DEVICE(0x1199, 0x683D) }, /* Sierra Wireless MC8790 */ |
@@ -204,6 +204,8 @@ static struct usb_device_id id_table [] = { | |||
204 | /* Sierra Wireless Device */ | 204 | /* Sierra Wireless Device */ |
205 | { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x6890, 0xFF, 0xFF, 0xFF)}, | 205 | { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x6890, 0xFF, 0xFF, 0xFF)}, |
206 | /* Sierra Wireless Device */ | 206 | /* Sierra Wireless Device */ |
207 | { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x6891, 0xFF, 0xFF, 0xFF)}, | ||
208 | /* Sierra Wireless Device */ | ||
207 | { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x6892, 0xFF, 0xFF, 0xFF)}, | 209 | { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x6892, 0xFF, 0xFF, 0xFF)}, |
208 | 210 | ||
209 | { USB_DEVICE(0x1199, 0x0112) }, /* Sierra Wireless AirCard 580 */ | 211 | { USB_DEVICE(0x1199, 0x0112) }, /* Sierra Wireless AirCard 580 */ |
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c index e39c779e4160..9a3e495c769c 100644 --- a/drivers/usb/serial/ti_usb_3410_5052.c +++ b/drivers/usb/serial/ti_usb_3410_5052.c | |||
@@ -1744,7 +1744,7 @@ static int ti_download_firmware(struct ti_device *tdev, int type) | |||
1744 | if (buffer) { | 1744 | if (buffer) { |
1745 | memcpy(buffer, fw_p->data, fw_p->size); | 1745 | memcpy(buffer, fw_p->data, fw_p->size); |
1746 | memset(buffer + fw_p->size, 0xff, buffer_size - fw_p->size); | 1746 | memset(buffer + fw_p->size, 0xff, buffer_size - fw_p->size); |
1747 | ti_do_download(dev, pipe, buffer, fw_p->size); | 1747 | status = ti_do_download(dev, pipe, buffer, fw_p->size); |
1748 | kfree(buffer); | 1748 | kfree(buffer); |
1749 | } | 1749 | } |
1750 | release_firmware(fw_p); | 1750 | release_firmware(fw_p); |
diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c index b157c48e8b78..4f7f9e3ae0a4 100644 --- a/drivers/usb/serial/usb-serial.c +++ b/drivers/usb/serial/usb-serial.c | |||
@@ -733,7 +733,9 @@ int usb_serial_probe(struct usb_interface *interface, | |||
733 | ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) && | 733 | ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) && |
734 | (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) || | 734 | (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) || |
735 | ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) && | 735 | ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) && |
736 | (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID))) { | 736 | (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID)) || |
737 | ((le16_to_cpu(dev->descriptor.idVendor) == SIEMENS_VENDOR_ID) && | ||
738 | (le16_to_cpu(dev->descriptor.idProduct) == SIEMENS_PRODUCT_ID_EF81))) { | ||
737 | if (interface != dev->actconfig->interface[0]) { | 739 | if (interface != dev->actconfig->interface[0]) { |
738 | /* check out the endpoints of the other interface*/ | 740 | /* check out the endpoints of the other interface*/ |
739 | iface_desc = dev->actconfig->interface[0]->cur_altsetting; | 741 | iface_desc = dev->actconfig->interface[0]->cur_altsetting; |
diff --git a/drivers/usb/storage/Kconfig b/drivers/usb/storage/Kconfig index c76034672c18..3d9249632ae1 100644 --- a/drivers/usb/storage/Kconfig +++ b/drivers/usb/storage/Kconfig | |||
@@ -146,18 +146,6 @@ config USB_STORAGE_KARMA | |||
146 | on the resulting scsi device node returns the Karma to normal | 146 | on the resulting scsi device node returns the Karma to normal |
147 | operation. | 147 | operation. |
148 | 148 | ||
149 | config USB_STORAGE_SIERRA | ||
150 | bool "Sierra Wireless TRU-Install Feature Support" | ||
151 | depends on USB_STORAGE | ||
152 | help | ||
153 | Say Y here to include additional code to support Sierra Wireless | ||
154 | products with the TRU-Install feature (e.g., AC597E, AC881U). | ||
155 | |||
156 | This code switches the Sierra Wireless device from being in | ||
157 | Mass Storage mode to Modem mode. It also has the ability to | ||
158 | support host software upgrades should full Linux support be added | ||
159 | to TRU-Install. | ||
160 | |||
161 | config USB_STORAGE_CYPRESS_ATACB | 149 | config USB_STORAGE_CYPRESS_ATACB |
162 | bool "SAT emulation on Cypress USB/ATA Bridge with ATACB" | 150 | bool "SAT emulation on Cypress USB/ATA Bridge with ATACB" |
163 | depends on USB_STORAGE | 151 | depends on USB_STORAGE |
diff --git a/drivers/usb/storage/Makefile b/drivers/usb/storage/Makefile index bc3415b475c9..7f8beb5366ae 100644 --- a/drivers/usb/storage/Makefile +++ b/drivers/usb/storage/Makefile | |||
@@ -21,11 +21,10 @@ usb-storage-obj-$(CONFIG_USB_STORAGE_JUMPSHOT) += jumpshot.o | |||
21 | usb-storage-obj-$(CONFIG_USB_STORAGE_ALAUDA) += alauda.o | 21 | usb-storage-obj-$(CONFIG_USB_STORAGE_ALAUDA) += alauda.o |
22 | usb-storage-obj-$(CONFIG_USB_STORAGE_ONETOUCH) += onetouch.o | 22 | usb-storage-obj-$(CONFIG_USB_STORAGE_ONETOUCH) += onetouch.o |
23 | usb-storage-obj-$(CONFIG_USB_STORAGE_KARMA) += karma.o | 23 | usb-storage-obj-$(CONFIG_USB_STORAGE_KARMA) += karma.o |
24 | usb-storage-obj-$(CONFIG_USB_STORAGE_SIERRA) += sierra_ms.o | ||
25 | usb-storage-obj-$(CONFIG_USB_STORAGE_CYPRESS_ATACB) += cypress_atacb.o | 24 | usb-storage-obj-$(CONFIG_USB_STORAGE_CYPRESS_ATACB) += cypress_atacb.o |
26 | 25 | ||
27 | usb-storage-objs := scsiglue.o protocol.o transport.o usb.o \ | 26 | usb-storage-objs := scsiglue.o protocol.o transport.o usb.o \ |
28 | initializers.o $(usb-storage-obj-y) | 27 | initializers.o sierra_ms.o $(usb-storage-obj-y) |
29 | 28 | ||
30 | ifneq ($(CONFIG_USB_LIBUSUAL),) | 29 | ifneq ($(CONFIG_USB_LIBUSUAL),) |
31 | obj-$(CONFIG_USB) += libusual.o | 30 | obj-$(CONFIG_USB) += libusual.o |
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index ba412e68d474..cd155475cb6e 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h | |||
@@ -160,6 +160,13 @@ UNUSUAL_DEV( 0x0421, 0x0019, 0x0592, 0x0592, | |||
160 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 160 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
161 | US_FL_MAX_SECTORS_64 ), | 161 | US_FL_MAX_SECTORS_64 ), |
162 | 162 | ||
163 | /* Reported by Filip Joelsson <filip@blueturtle.nu> */ | ||
164 | UNUSUAL_DEV( 0x0421, 0x005d, 0x0001, 0x0600, | ||
165 | "Nokia", | ||
166 | "Nokia 3110c", | ||
167 | US_SC_DEVICE, US_PR_DEVICE, NULL, | ||
168 | US_FL_FIX_CAPACITY ), | ||
169 | |||
163 | /* Reported by Mario Rettig <mariorettig@web.de> */ | 170 | /* Reported by Mario Rettig <mariorettig@web.de> */ |
164 | UNUSUAL_DEV( 0x0421, 0x042e, 0x0100, 0x0100, | 171 | UNUSUAL_DEV( 0x0421, 0x042e, 0x0100, 0x0100, |
165 | "Nokia", | 172 | "Nokia", |
@@ -232,6 +239,20 @@ UNUSUAL_DEV( 0x0421, 0x04b9, 0x0551, 0x0551, | |||
232 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 239 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
233 | US_FL_FIX_CAPACITY ), | 240 | US_FL_FIX_CAPACITY ), |
234 | 241 | ||
242 | /* Reported by Richard Nauber <RichardNauber@web.de> */ | ||
243 | UNUSUAL_DEV( 0x0421, 0x04fa, 0x0601, 0x0601, | ||
244 | "Nokia", | ||
245 | "6300", | ||
246 | US_SC_DEVICE, US_PR_DEVICE, NULL, | ||
247 | US_FL_FIX_CAPACITY ), | ||
248 | |||
249 | /* Patch for Nokia 5310 capacity */ | ||
250 | UNUSUAL_DEV( 0x0421, 0x006a, 0x0000, 0x0591, | ||
251 | "Nokia", | ||
252 | "5310", | ||
253 | US_SC_DEVICE, US_PR_DEVICE, NULL, | ||
254 | US_FL_FIX_CAPACITY ), | ||
255 | |||
235 | /* Reported by Olaf Hering <olh@suse.de> from novell bug #105878 */ | 256 | /* Reported by Olaf Hering <olh@suse.de> from novell bug #105878 */ |
236 | UNUSUAL_DEV( 0x0424, 0x0fdc, 0x0210, 0x0210, | 257 | UNUSUAL_DEV( 0x0424, 0x0fdc, 0x0210, 0x0210, |
237 | "SMSC", | 258 | "SMSC", |
@@ -987,6 +1008,13 @@ UNUSUAL_DEV( 0x069b, 0x3004, 0x0001, 0x0001, | |||
987 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 1008 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
988 | US_FL_FIX_CAPACITY ), | 1009 | US_FL_FIX_CAPACITY ), |
989 | 1010 | ||
1011 | /* Reported by Adrian Pilchowiec <adi1981@epf.pl> */ | ||
1012 | UNUSUAL_DEV( 0x071b, 0x3203, 0x0000, 0x0000, | ||
1013 | "RockChip", | ||
1014 | "MP3", | ||
1015 | US_SC_DEVICE, US_PR_DEVICE, NULL, | ||
1016 | US_FL_NO_WP_DETECT | US_FL_MAX_SECTORS_64), | ||
1017 | |||
990 | /* Reported by Massimiliano Ghilardi <massimiliano.ghilardi@gmail.com> | 1018 | /* Reported by Massimiliano Ghilardi <massimiliano.ghilardi@gmail.com> |
991 | * This USB MP3/AVI player device fails and disconnects if more than 128 | 1019 | * This USB MP3/AVI player device fails and disconnects if more than 128 |
992 | * sectors (64kB) are read/written in a single command, and may be present | 1020 | * sectors (64kB) are read/written in a single command, and may be present |
@@ -1576,7 +1604,6 @@ UNUSUAL_DEV( 0x10d6, 0x2200, 0x0100, 0x0100, | |||
1576 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 1604 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
1577 | 0), | 1605 | 0), |
1578 | 1606 | ||
1579 | #ifdef CONFIG_USB_STORAGE_SIERRA | ||
1580 | /* Reported by Kevin Lloyd <linux@sierrawireless.com> | 1607 | /* Reported by Kevin Lloyd <linux@sierrawireless.com> |
1581 | * Entry is needed for the initializer function override, | 1608 | * Entry is needed for the initializer function override, |
1582 | * which instructs the device to load as a modem | 1609 | * which instructs the device to load as a modem |
@@ -1587,7 +1614,6 @@ UNUSUAL_DEV( 0x1199, 0x0fff, 0x0000, 0x9999, | |||
1587 | "USB MMC Storage", | 1614 | "USB MMC Storage", |
1588 | US_SC_DEVICE, US_PR_DEVICE, sierra_ms_init, | 1615 | US_SC_DEVICE, US_PR_DEVICE, sierra_ms_init, |
1589 | 0), | 1616 | 0), |
1590 | #endif | ||
1591 | 1617 | ||
1592 | /* Reported by Jaco Kroon <jaco@kroon.co.za> | 1618 | /* Reported by Jaco Kroon <jaco@kroon.co.za> |
1593 | * The usb-storage module found on the Digitech GNX4 (and supposedly other | 1619 | * The usb-storage module found on the Digitech GNX4 (and supposedly other |
diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c index 73679aa506de..27016fd2cad1 100644 --- a/drivers/usb/storage/usb.c +++ b/drivers/usb/storage/usb.c | |||
@@ -102,9 +102,7 @@ | |||
102 | #ifdef CONFIG_USB_STORAGE_CYPRESS_ATACB | 102 | #ifdef CONFIG_USB_STORAGE_CYPRESS_ATACB |
103 | #include "cypress_atacb.h" | 103 | #include "cypress_atacb.h" |
104 | #endif | 104 | #endif |
105 | #ifdef CONFIG_USB_STORAGE_SIERRA | ||
106 | #include "sierra_ms.h" | 105 | #include "sierra_ms.h" |
107 | #endif | ||
108 | 106 | ||
109 | /* Some informational data */ | 107 | /* Some informational data */ |
110 | MODULE_AUTHOR("Matthew Dharm <mdharm-usb@one-eyed-alien.net>"); | 108 | MODULE_AUTHOR("Matthew Dharm <mdharm-usb@one-eyed-alien.net>"); |
diff --git a/drivers/video/atmel_lcdfb.c b/drivers/video/atmel_lcdfb.c index 5a24c6411d34..75dac578104f 100644 --- a/drivers/video/atmel_lcdfb.c +++ b/drivers/video/atmel_lcdfb.c | |||
@@ -208,6 +208,36 @@ static unsigned long compute_hozval(unsigned long xres, unsigned long lcdcon2) | |||
208 | return value; | 208 | return value; |
209 | } | 209 | } |
210 | 210 | ||
211 | static void atmel_lcdfb_stop_nowait(struct atmel_lcdfb_info *sinfo) | ||
212 | { | ||
213 | /* Turn off the LCD controller and the DMA controller */ | ||
214 | lcdc_writel(sinfo, ATMEL_LCDC_PWRCON, | ||
215 | sinfo->guard_time << ATMEL_LCDC_GUARDT_OFFSET); | ||
216 | |||
217 | /* Wait for the LCDC core to become idle */ | ||
218 | while (lcdc_readl(sinfo, ATMEL_LCDC_PWRCON) & ATMEL_LCDC_BUSY) | ||
219 | msleep(10); | ||
220 | |||
221 | lcdc_writel(sinfo, ATMEL_LCDC_DMACON, 0); | ||
222 | } | ||
223 | |||
224 | static void atmel_lcdfb_stop(struct atmel_lcdfb_info *sinfo) | ||
225 | { | ||
226 | atmel_lcdfb_stop_nowait(sinfo); | ||
227 | |||
228 | /* Wait for DMA engine to become idle... */ | ||
229 | while (lcdc_readl(sinfo, ATMEL_LCDC_DMACON) & ATMEL_LCDC_DMABUSY) | ||
230 | msleep(10); | ||
231 | } | ||
232 | |||
233 | static void atmel_lcdfb_start(struct atmel_lcdfb_info *sinfo) | ||
234 | { | ||
235 | lcdc_writel(sinfo, ATMEL_LCDC_DMACON, sinfo->default_dmacon); | ||
236 | lcdc_writel(sinfo, ATMEL_LCDC_PWRCON, | ||
237 | (sinfo->guard_time << ATMEL_LCDC_GUARDT_OFFSET) | ||
238 | | ATMEL_LCDC_PWR); | ||
239 | } | ||
240 | |||
211 | static void atmel_lcdfb_update_dma(struct fb_info *info, | 241 | static void atmel_lcdfb_update_dma(struct fb_info *info, |
212 | struct fb_var_screeninfo *var) | 242 | struct fb_var_screeninfo *var) |
213 | { | 243 | { |
@@ -420,26 +450,8 @@ static void atmel_lcdfb_reset(struct atmel_lcdfb_info *sinfo) | |||
420 | { | 450 | { |
421 | might_sleep(); | 451 | might_sleep(); |
422 | 452 | ||
423 | /* LCD power off */ | 453 | atmel_lcdfb_stop(sinfo); |
424 | lcdc_writel(sinfo, ATMEL_LCDC_PWRCON, sinfo->guard_time << ATMEL_LCDC_GUARDT_OFFSET); | 454 | atmel_lcdfb_start(sinfo); |
425 | |||
426 | /* wait for the LCDC core to become idle */ | ||
427 | while (lcdc_readl(sinfo, ATMEL_LCDC_PWRCON) & ATMEL_LCDC_BUSY) | ||
428 | msleep(10); | ||
429 | |||
430 | /* DMA disable */ | ||
431 | lcdc_writel(sinfo, ATMEL_LCDC_DMACON, 0); | ||
432 | |||
433 | /* wait for DMA engine to become idle */ | ||
434 | while (lcdc_readl(sinfo, ATMEL_LCDC_DMACON) & ATMEL_LCDC_DMABUSY) | ||
435 | msleep(10); | ||
436 | |||
437 | /* LCD power on */ | ||
438 | lcdc_writel(sinfo, ATMEL_LCDC_PWRCON, | ||
439 | (sinfo->guard_time << ATMEL_LCDC_GUARDT_OFFSET) | ATMEL_LCDC_PWR); | ||
440 | |||
441 | /* DMA enable */ | ||
442 | lcdc_writel(sinfo, ATMEL_LCDC_DMACON, sinfo->default_dmacon); | ||
443 | } | 455 | } |
444 | 456 | ||
445 | /** | 457 | /** |
@@ -471,14 +483,7 @@ static int atmel_lcdfb_set_par(struct fb_info *info) | |||
471 | info->var.xres, info->var.yres, | 483 | info->var.xres, info->var.yres, |
472 | info->var.xres_virtual, info->var.yres_virtual); | 484 | info->var.xres_virtual, info->var.yres_virtual); |
473 | 485 | ||
474 | /* Turn off the LCD controller and the DMA controller */ | 486 | atmel_lcdfb_stop_nowait(sinfo); |
475 | lcdc_writel(sinfo, ATMEL_LCDC_PWRCON, sinfo->guard_time << ATMEL_LCDC_GUARDT_OFFSET); | ||
476 | |||
477 | /* Wait for the LCDC core to become idle */ | ||
478 | while (lcdc_readl(sinfo, ATMEL_LCDC_PWRCON) & ATMEL_LCDC_BUSY) | ||
479 | msleep(10); | ||
480 | |||
481 | lcdc_writel(sinfo, ATMEL_LCDC_DMACON, 0); | ||
482 | 487 | ||
483 | if (info->var.bits_per_pixel == 1) | 488 | if (info->var.bits_per_pixel == 1) |
484 | info->fix.visual = FB_VISUAL_MONO01; | 489 | info->fix.visual = FB_VISUAL_MONO01; |
@@ -583,13 +588,7 @@ static int atmel_lcdfb_set_par(struct fb_info *info) | |||
583 | while (lcdc_readl(sinfo, ATMEL_LCDC_DMACON) & ATMEL_LCDC_DMABUSY) | 588 | while (lcdc_readl(sinfo, ATMEL_LCDC_DMACON) & ATMEL_LCDC_DMABUSY) |
584 | msleep(10); | 589 | msleep(10); |
585 | 590 | ||
586 | dev_dbg(info->device, " * re-enable DMA engine\n"); | 591 | atmel_lcdfb_start(sinfo); |
587 | /* ...and enable it with updated configuration */ | ||
588 | lcdc_writel(sinfo, ATMEL_LCDC_DMACON, sinfo->default_dmacon); | ||
589 | |||
590 | dev_dbg(info->device, " * re-enable LCDC core\n"); | ||
591 | lcdc_writel(sinfo, ATMEL_LCDC_PWRCON, | ||
592 | (sinfo->guard_time << ATMEL_LCDC_GUARDT_OFFSET) | ATMEL_LCDC_PWR); | ||
593 | 592 | ||
594 | dev_dbg(info->device, " * DONE\n"); | 593 | dev_dbg(info->device, " * DONE\n"); |
595 | 594 | ||
@@ -1032,11 +1031,20 @@ static int atmel_lcdfb_suspend(struct platform_device *pdev, pm_message_t mesg) | |||
1032 | struct fb_info *info = platform_get_drvdata(pdev); | 1031 | struct fb_info *info = platform_get_drvdata(pdev); |
1033 | struct atmel_lcdfb_info *sinfo = info->par; | 1032 | struct atmel_lcdfb_info *sinfo = info->par; |
1034 | 1033 | ||
1034 | /* | ||
1035 | * We don't want to handle interrupts while the clock is | ||
1036 | * stopped. It may take forever. | ||
1037 | */ | ||
1038 | lcdc_writel(sinfo, ATMEL_LCDC_IDR, ~0UL); | ||
1039 | |||
1035 | sinfo->saved_lcdcon = lcdc_readl(sinfo, ATMEL_LCDC_CONTRAST_VAL); | 1040 | sinfo->saved_lcdcon = lcdc_readl(sinfo, ATMEL_LCDC_CONTRAST_VAL); |
1036 | lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, 0); | 1041 | lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, 0); |
1037 | if (sinfo->atmel_lcdfb_power_control) | 1042 | if (sinfo->atmel_lcdfb_power_control) |
1038 | sinfo->atmel_lcdfb_power_control(0); | 1043 | sinfo->atmel_lcdfb_power_control(0); |
1044 | |||
1045 | atmel_lcdfb_stop(sinfo); | ||
1039 | atmel_lcdfb_stop_clock(sinfo); | 1046 | atmel_lcdfb_stop_clock(sinfo); |
1047 | |||
1040 | return 0; | 1048 | return 0; |
1041 | } | 1049 | } |
1042 | 1050 | ||
@@ -1046,9 +1054,15 @@ static int atmel_lcdfb_resume(struct platform_device *pdev) | |||
1046 | struct atmel_lcdfb_info *sinfo = info->par; | 1054 | struct atmel_lcdfb_info *sinfo = info->par; |
1047 | 1055 | ||
1048 | atmel_lcdfb_start_clock(sinfo); | 1056 | atmel_lcdfb_start_clock(sinfo); |
1057 | atmel_lcdfb_start(sinfo); | ||
1049 | if (sinfo->atmel_lcdfb_power_control) | 1058 | if (sinfo->atmel_lcdfb_power_control) |
1050 | sinfo->atmel_lcdfb_power_control(1); | 1059 | sinfo->atmel_lcdfb_power_control(1); |
1051 | lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, sinfo->saved_lcdcon); | 1060 | lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, sinfo->saved_lcdcon); |
1061 | |||
1062 | /* Enable FIFO & DMA errors */ | ||
1063 | lcdc_writel(sinfo, ATMEL_LCDC_IER, ATMEL_LCDC_UFLWI | ||
1064 | | ATMEL_LCDC_OWRI | ATMEL_LCDC_MERI); | ||
1065 | |||
1052 | return 0; | 1066 | return 0; |
1053 | } | 1067 | } |
1054 | 1068 | ||
diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c index c6299e8a041d..9cbff84b787d 100644 --- a/drivers/video/console/fbcon.c +++ b/drivers/video/console/fbcon.c | |||
@@ -2400,11 +2400,15 @@ static int fbcon_blank(struct vc_data *vc, int blank, int mode_switch) | |||
2400 | 2400 | ||
2401 | if (!fbcon_is_inactive(vc, info)) { | 2401 | if (!fbcon_is_inactive(vc, info)) { |
2402 | if (ops->blank_state != blank) { | 2402 | if (ops->blank_state != blank) { |
2403 | int ret = 1; | ||
2404 | |||
2403 | ops->blank_state = blank; | 2405 | ops->blank_state = blank; |
2404 | fbcon_cursor(vc, blank ? CM_ERASE : CM_DRAW); | 2406 | fbcon_cursor(vc, blank ? CM_ERASE : CM_DRAW); |
2405 | ops->cursor_flash = (!blank); | 2407 | ops->cursor_flash = (!blank); |
2406 | 2408 | ||
2407 | if (fb_blank(info, blank)) | 2409 | if (info->fbops->fb_blank) |
2410 | ret = info->fbops->fb_blank(blank, info); | ||
2411 | if (ret) | ||
2408 | fbcon_generic_blank(vc, info, blank); | 2412 | fbcon_generic_blank(vc, info, blank); |
2409 | } | 2413 | } |
2410 | 2414 | ||
diff --git a/drivers/video/console/fbcon.h b/drivers/video/console/fbcon.h index a6e38e9ea73f..89a346880ec0 100644 --- a/drivers/video/console/fbcon.h +++ b/drivers/video/console/fbcon.h | |||
@@ -110,7 +110,7 @@ static inline int mono_col(const struct fb_info *info) | |||
110 | __u32 max_len; | 110 | __u32 max_len; |
111 | max_len = max(info->var.green.length, info->var.red.length); | 111 | max_len = max(info->var.green.length, info->var.red.length); |
112 | max_len = max(info->var.blue.length, max_len); | 112 | max_len = max(info->var.blue.length, max_len); |
113 | return ~(0xfff << (max_len & 0xff)); | 113 | return (~(0xfff << max_len)) & 0xff; |
114 | } | 114 | } |
115 | 115 | ||
116 | static inline int attr_col_ec(int shift, struct vc_data *vc, | 116 | static inline int attr_col_ec(int shift, struct vc_data *vc, |
diff --git a/drivers/watchdog/geodewdt.c b/drivers/watchdog/geodewdt.c index 614a5c7017b6..6799a6de66fe 100644 --- a/drivers/watchdog/geodewdt.c +++ b/drivers/watchdog/geodewdt.c | |||
@@ -130,8 +130,8 @@ static ssize_t geodewdt_write(struct file *file, const char __user *data, | |||
130 | return len; | 130 | return len; |
131 | } | 131 | } |
132 | 132 | ||
133 | static int geodewdt_ioctl(struct inode *inode, struct file *file, | 133 | static long geodewdt_ioctl(struct file *file, unsigned int cmd, |
134 | unsigned int cmd, unsigned long arg) | 134 | unsigned long arg) |
135 | { | 135 | { |
136 | void __user *argp = (void __user *)arg; | 136 | void __user *argp = (void __user *)arg; |
137 | int __user *p = argp; | 137 | int __user *p = argp; |
@@ -198,7 +198,7 @@ static const struct file_operations geodewdt_fops = { | |||
198 | .owner = THIS_MODULE, | 198 | .owner = THIS_MODULE, |
199 | .llseek = no_llseek, | 199 | .llseek = no_llseek, |
200 | .write = geodewdt_write, | 200 | .write = geodewdt_write, |
201 | .ioctl = geodewdt_ioctl, | 201 | .unlocked_ioctl = geodewdt_ioctl, |
202 | .open = geodewdt_open, | 202 | .open = geodewdt_open, |
203 | .release = geodewdt_release, | 203 | .release = geodewdt_release, |
204 | }; | 204 | }; |
diff --git a/drivers/watchdog/ibmasr.c b/drivers/watchdog/ibmasr.c index b82405cfb4cd..89fcefcc8510 100644 --- a/drivers/watchdog/ibmasr.c +++ b/drivers/watchdog/ibmasr.c | |||
@@ -85,7 +85,6 @@ static void __asr_toggle(void) | |||
85 | 85 | ||
86 | outb(reg & ~asr_toggle_mask, asr_write_addr); | 86 | outb(reg & ~asr_toggle_mask, asr_write_addr); |
87 | reg = inb(asr_read_addr); | 87 | reg = inb(asr_read_addr); |
88 | spin_unlock(&asr_lock); | ||
89 | } | 88 | } |
90 | 89 | ||
91 | static void asr_toggle(void) | 90 | static void asr_toggle(void) |
diff --git a/drivers/watchdog/pnx4008_wdt.c b/drivers/watchdog/pnx4008_wdt.c index 0ed84162437b..6d9f3d4a9987 100644 --- a/drivers/watchdog/pnx4008_wdt.c +++ b/drivers/watchdog/pnx4008_wdt.c | |||
@@ -173,8 +173,8 @@ static const struct watchdog_info ident = { | |||
173 | .identity = "PNX4008 Watchdog", | 173 | .identity = "PNX4008 Watchdog", |
174 | }; | 174 | }; |
175 | 175 | ||
176 | static long pnx4008_wdt_ioctl(struct inode *inode, struct file *file, | 176 | static long pnx4008_wdt_ioctl(struct file *file, unsigned int cmd, |
177 | unsigned int cmd, unsigned long arg) | 177 | unsigned long arg) |
178 | { | 178 | { |
179 | int ret = -ENOTTY; | 179 | int ret = -ENOTTY; |
180 | int time; | 180 | int time; |
diff --git a/drivers/watchdog/rc32434_wdt.c b/drivers/watchdog/rc32434_wdt.c index 6756bcb009ed..c9c73b69c5e5 100644 --- a/drivers/watchdog/rc32434_wdt.c +++ b/drivers/watchdog/rc32434_wdt.c | |||
@@ -182,8 +182,8 @@ static ssize_t rc32434_wdt_write(struct file *file, const char *data, | |||
182 | return 0; | 182 | return 0; |
183 | } | 183 | } |
184 | 184 | ||
185 | static int rc32434_wdt_ioctl(struct inode *inode, struct file *file, | 185 | static long rc32434_wdt_ioctl(struct file *file, unsigned int cmd, |
186 | unsigned int cmd, unsigned long arg) | 186 | unsigned long arg) |
187 | { | 187 | { |
188 | void __user *argp = (void __user *)arg; | 188 | void __user *argp = (void __user *)arg; |
189 | int new_timeout; | 189 | int new_timeout; |
@@ -242,7 +242,7 @@ static struct file_operations rc32434_wdt_fops = { | |||
242 | .owner = THIS_MODULE, | 242 | .owner = THIS_MODULE, |
243 | .llseek = no_llseek, | 243 | .llseek = no_llseek, |
244 | .write = rc32434_wdt_write, | 244 | .write = rc32434_wdt_write, |
245 | .ioctl = rc32434_wdt_ioctl, | 245 | .unlocked_ioctl = rc32434_wdt_ioctl, |
246 | .open = rc32434_wdt_open, | 246 | .open = rc32434_wdt_open, |
247 | .release = rc32434_wdt_release, | 247 | .release = rc32434_wdt_release, |
248 | }; | 248 | }; |
diff --git a/drivers/watchdog/rdc321x_wdt.c b/drivers/watchdog/rdc321x_wdt.c index 9108efa73e7d..bf92802f2bbe 100644 --- a/drivers/watchdog/rdc321x_wdt.c +++ b/drivers/watchdog/rdc321x_wdt.c | |||
@@ -144,8 +144,8 @@ static int rdc321x_wdt_release(struct inode *inode, struct file *file) | |||
144 | return 0; | 144 | return 0; |
145 | } | 145 | } |
146 | 146 | ||
147 | static int rdc321x_wdt_ioctl(struct inode *inode, struct file *file, | 147 | static long rdc321x_wdt_ioctl(struct file *file, unsigned int cmd, |
148 | unsigned int cmd, unsigned long arg) | 148 | unsigned long arg) |
149 | { | 149 | { |
150 | void __user *argp = (void __user *)arg; | 150 | void __user *argp = (void __user *)arg; |
151 | unsigned int value; | 151 | unsigned int value; |
@@ -204,7 +204,7 @@ static ssize_t rdc321x_wdt_write(struct file *file, const char __user *buf, | |||
204 | static const struct file_operations rdc321x_wdt_fops = { | 204 | static const struct file_operations rdc321x_wdt_fops = { |
205 | .owner = THIS_MODULE, | 205 | .owner = THIS_MODULE, |
206 | .llseek = no_llseek, | 206 | .llseek = no_llseek, |
207 | .ioctl = rdc321x_wdt_ioctl, | 207 | .unlocked_ioctl = rdc321x_wdt_ioctl, |
208 | .open = rdc321x_wdt_open, | 208 | .open = rdc321x_wdt_open, |
209 | .write = rdc321x_wdt_write, | 209 | .write = rdc321x_wdt_write, |
210 | .release = rdc321x_wdt_release, | 210 | .release = rdc321x_wdt_release, |
diff --git a/drivers/watchdog/wdt285.c b/drivers/watchdog/wdt285.c index db362c34958b..191ea6302107 100644 --- a/drivers/watchdog/wdt285.c +++ b/drivers/watchdog/wdt285.c | |||
@@ -115,8 +115,8 @@ static int watchdog_release(struct inode *inode, struct file *file) | |||
115 | return 0; | 115 | return 0; |
116 | } | 116 | } |
117 | 117 | ||
118 | static ssize_t watchdog_write(struct file *file, const char *data, | 118 | static ssize_t watchdog_write(struct file *file, const char __user *data, |
119 | size_t len, loff_t *ppos) | 119 | size_t len, loff_t *ppos) |
120 | { | 120 | { |
121 | /* | 121 | /* |
122 | * Refresh the timer. | 122 | * Refresh the timer. |
@@ -133,21 +133,22 @@ static const struct watchdog_info ident = { | |||
133 | }; | 133 | }; |
134 | 134 | ||
135 | static long watchdog_ioctl(struct file *file, unsigned int cmd, | 135 | static long watchdog_ioctl(struct file *file, unsigned int cmd, |
136 | unsigned long arg) | 136 | unsigned long arg) |
137 | { | 137 | { |
138 | unsigned int new_margin; | 138 | unsigned int new_margin; |
139 | int __user *int_arg = (int __user *)arg; | ||
139 | int ret = -ENOTTY; | 140 | int ret = -ENOTTY; |
140 | 141 | ||
141 | switch (cmd) { | 142 | switch (cmd) { |
142 | case WDIOC_GETSUPPORT: | 143 | case WDIOC_GETSUPPORT: |
143 | ret = 0; | 144 | ret = 0; |
144 | if (copy_to_user((void *)arg, &ident, sizeof(ident))) | 145 | if (copy_to_user((void __user *)arg, &ident, sizeof(ident))) |
145 | ret = -EFAULT; | 146 | ret = -EFAULT; |
146 | break; | 147 | break; |
147 | 148 | ||
148 | case WDIOC_GETSTATUS: | 149 | case WDIOC_GETSTATUS: |
149 | case WDIOC_GETBOOTSTATUS: | 150 | case WDIOC_GETBOOTSTATUS: |
150 | ret = put_user(0, (int *)arg); | 151 | ret = put_user(0, int_arg); |
151 | break; | 152 | break; |
152 | 153 | ||
153 | case WDIOC_KEEPALIVE: | 154 | case WDIOC_KEEPALIVE: |
@@ -156,7 +157,7 @@ static long watchdog_ioctl(struct file *file, unsigned int cmd, | |||
156 | break; | 157 | break; |
157 | 158 | ||
158 | case WDIOC_SETTIMEOUT: | 159 | case WDIOC_SETTIMEOUT: |
159 | ret = get_user(new_margin, (int *)arg); | 160 | ret = get_user(new_margin, int_arg); |
160 | if (ret) | 161 | if (ret) |
161 | break; | 162 | break; |
162 | 163 | ||
@@ -171,7 +172,7 @@ static long watchdog_ioctl(struct file *file, unsigned int cmd, | |||
171 | watchdog_ping(); | 172 | watchdog_ping(); |
172 | /* Fall */ | 173 | /* Fall */ |
173 | case WDIOC_GETTIMEOUT: | 174 | case WDIOC_GETTIMEOUT: |
174 | ret = put_user(soft_margin, (int *)arg); | 175 | ret = put_user(soft_margin, int_arg); |
175 | break; | 176 | break; |
176 | } | 177 | } |
177 | return ret; | 178 | return ret; |
diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c index c95295c65045..e83aa5ebe861 100644 --- a/fs/9p/vfs_inode.c +++ b/fs/9p/vfs_inode.c | |||
@@ -626,8 +626,7 @@ static struct dentry *v9fs_vfs_lookup(struct inode *dir, struct dentry *dentry, | |||
626 | return NULL; | 626 | return NULL; |
627 | 627 | ||
628 | error: | 628 | error: |
629 | if (fid) | 629 | p9_client_clunk(fid); |
630 | p9_client_clunk(fid); | ||
631 | 630 | ||
632 | return ERR_PTR(result); | 631 | return ERR_PTR(result); |
633 | } | 632 | } |
diff --git a/fs/bfs/dir.c b/fs/bfs/dir.c index 87ee5ccee348..ed8feb052df9 100644 --- a/fs/bfs/dir.c +++ b/fs/bfs/dir.c | |||
@@ -125,8 +125,8 @@ static int bfs_create(struct inode *dir, struct dentry *dentry, int mode, | |||
125 | inode->i_ino); | 125 | inode->i_ino); |
126 | if (err) { | 126 | if (err) { |
127 | inode_dec_link_count(inode); | 127 | inode_dec_link_count(inode); |
128 | iput(inode); | ||
129 | mutex_unlock(&info->bfs_lock); | 128 | mutex_unlock(&info->bfs_lock); |
129 | iput(inode); | ||
130 | return err; | 130 | return err; |
131 | } | 131 | } |
132 | mutex_unlock(&info->bfs_lock); | 132 | mutex_unlock(&info->bfs_lock); |
diff --git a/fs/dcache.c b/fs/dcache.c index 80e93956aced..e7a1a99b7464 100644 --- a/fs/dcache.c +++ b/fs/dcache.c | |||
@@ -1395,6 +1395,10 @@ struct dentry * __d_lookup(struct dentry * parent, struct qstr * name) | |||
1395 | if (dentry->d_parent != parent) | 1395 | if (dentry->d_parent != parent) |
1396 | goto next; | 1396 | goto next; |
1397 | 1397 | ||
1398 | /* non-existing due to RCU? */ | ||
1399 | if (d_unhashed(dentry)) | ||
1400 | goto next; | ||
1401 | |||
1398 | /* | 1402 | /* |
1399 | * It is safe to compare names since d_move() cannot | 1403 | * It is safe to compare names since d_move() cannot |
1400 | * change the qstr (protected by d_lock). | 1404 | * change the qstr (protected by d_lock). |
@@ -1410,10 +1414,8 @@ struct dentry * __d_lookup(struct dentry * parent, struct qstr * name) | |||
1410 | goto next; | 1414 | goto next; |
1411 | } | 1415 | } |
1412 | 1416 | ||
1413 | if (!d_unhashed(dentry)) { | 1417 | atomic_inc(&dentry->d_count); |
1414 | atomic_inc(&dentry->d_count); | 1418 | found = dentry; |
1415 | found = dentry; | ||
1416 | } | ||
1417 | spin_unlock(&dentry->d_lock); | 1419 | spin_unlock(&dentry->d_lock); |
1418 | break; | 1420 | break; |
1419 | next: | 1421 | next: |
@@ -752,11 +752,11 @@ static int exec_mmap(struct mm_struct *mm) | |||
752 | tsk->active_mm = mm; | 752 | tsk->active_mm = mm; |
753 | activate_mm(active_mm, mm); | 753 | activate_mm(active_mm, mm); |
754 | task_unlock(tsk); | 754 | task_unlock(tsk); |
755 | mm_update_next_owner(old_mm); | ||
756 | arch_pick_mmap_layout(mm); | 755 | arch_pick_mmap_layout(mm); |
757 | if (old_mm) { | 756 | if (old_mm) { |
758 | up_read(&old_mm->mmap_sem); | 757 | up_read(&old_mm->mmap_sem); |
759 | BUG_ON(active_mm != old_mm); | 758 | BUG_ON(active_mm != old_mm); |
759 | mm_update_next_owner(old_mm); | ||
760 | mmput(old_mm); | 760 | mmput(old_mm); |
761 | return 0; | 761 | return 0; |
762 | } | 762 | } |
diff --git a/fs/inotify_user.c b/fs/inotify_user.c index 60249429a253..d85c7d931cdf 100644 --- a/fs/inotify_user.c +++ b/fs/inotify_user.c | |||
@@ -323,7 +323,7 @@ out: | |||
323 | } | 323 | } |
324 | 324 | ||
325 | /* | 325 | /* |
326 | * remove_kevent - cleans up and ultimately frees the given kevent | 326 | * remove_kevent - cleans up the given kevent |
327 | * | 327 | * |
328 | * Caller must hold dev->ev_mutex. | 328 | * Caller must hold dev->ev_mutex. |
329 | */ | 329 | */ |
@@ -334,7 +334,13 @@ static void remove_kevent(struct inotify_device *dev, | |||
334 | 334 | ||
335 | dev->event_count--; | 335 | dev->event_count--; |
336 | dev->queue_size -= sizeof(struct inotify_event) + kevent->event.len; | 336 | dev->queue_size -= sizeof(struct inotify_event) + kevent->event.len; |
337 | } | ||
337 | 338 | ||
339 | /* | ||
340 | * free_kevent - frees the given kevent. | ||
341 | */ | ||
342 | static void free_kevent(struct inotify_kernel_event *kevent) | ||
343 | { | ||
338 | kfree(kevent->name); | 344 | kfree(kevent->name); |
339 | kmem_cache_free(event_cachep, kevent); | 345 | kmem_cache_free(event_cachep, kevent); |
340 | } | 346 | } |
@@ -350,6 +356,7 @@ static void inotify_dev_event_dequeue(struct inotify_device *dev) | |||
350 | struct inotify_kernel_event *kevent; | 356 | struct inotify_kernel_event *kevent; |
351 | kevent = inotify_dev_get_event(dev); | 357 | kevent = inotify_dev_get_event(dev); |
352 | remove_kevent(dev, kevent); | 358 | remove_kevent(dev, kevent); |
359 | free_kevent(kevent); | ||
353 | } | 360 | } |
354 | } | 361 | } |
355 | 362 | ||
@@ -433,17 +440,15 @@ static ssize_t inotify_read(struct file *file, char __user *buf, | |||
433 | dev = file->private_data; | 440 | dev = file->private_data; |
434 | 441 | ||
435 | while (1) { | 442 | while (1) { |
436 | int events; | ||
437 | 443 | ||
438 | prepare_to_wait(&dev->wq, &wait, TASK_INTERRUPTIBLE); | 444 | prepare_to_wait(&dev->wq, &wait, TASK_INTERRUPTIBLE); |
439 | 445 | ||
440 | mutex_lock(&dev->ev_mutex); | 446 | mutex_lock(&dev->ev_mutex); |
441 | events = !list_empty(&dev->events); | 447 | if (!list_empty(&dev->events)) { |
442 | mutex_unlock(&dev->ev_mutex); | ||
443 | if (events) { | ||
444 | ret = 0; | 448 | ret = 0; |
445 | break; | 449 | break; |
446 | } | 450 | } |
451 | mutex_unlock(&dev->ev_mutex); | ||
447 | 452 | ||
448 | if (file->f_flags & O_NONBLOCK) { | 453 | if (file->f_flags & O_NONBLOCK) { |
449 | ret = -EAGAIN; | 454 | ret = -EAGAIN; |
@@ -462,7 +467,6 @@ static ssize_t inotify_read(struct file *file, char __user *buf, | |||
462 | if (ret) | 467 | if (ret) |
463 | return ret; | 468 | return ret; |
464 | 469 | ||
465 | mutex_lock(&dev->ev_mutex); | ||
466 | while (1) { | 470 | while (1) { |
467 | struct inotify_kernel_event *kevent; | 471 | struct inotify_kernel_event *kevent; |
468 | 472 | ||
@@ -481,6 +485,13 @@ static ssize_t inotify_read(struct file *file, char __user *buf, | |||
481 | } | 485 | } |
482 | break; | 486 | break; |
483 | } | 487 | } |
488 | remove_kevent(dev, kevent); | ||
489 | |||
490 | /* | ||
491 | * Must perform the copy_to_user outside the mutex in order | ||
492 | * to avoid a lock order reversal with mmap_sem. | ||
493 | */ | ||
494 | mutex_unlock(&dev->ev_mutex); | ||
484 | 495 | ||
485 | if (copy_to_user(buf, &kevent->event, event_size)) { | 496 | if (copy_to_user(buf, &kevent->event, event_size)) { |
486 | ret = -EFAULT; | 497 | ret = -EFAULT; |
@@ -498,7 +509,9 @@ static ssize_t inotify_read(struct file *file, char __user *buf, | |||
498 | count -= kevent->event.len; | 509 | count -= kevent->event.len; |
499 | } | 510 | } |
500 | 511 | ||
501 | remove_kevent(dev, kevent); | 512 | free_kevent(kevent); |
513 | |||
514 | mutex_lock(&dev->ev_mutex); | ||
502 | } | 515 | } |
503 | mutex_unlock(&dev->ev_mutex); | 516 | mutex_unlock(&dev->ev_mutex); |
504 | 517 | ||
diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c index 506c24fb5078..a53da1466277 100644 --- a/fs/ocfs2/aops.c +++ b/fs/ocfs2/aops.c | |||
@@ -594,7 +594,7 @@ static int ocfs2_direct_IO_get_blocks(struct inode *inode, sector_t iblock, | |||
594 | goto bail; | 594 | goto bail; |
595 | } | 595 | } |
596 | 596 | ||
597 | if (!ocfs2_sparse_alloc(OCFS2_SB(inode->i_sb)) && !p_blkno) { | 597 | if (!ocfs2_sparse_alloc(OCFS2_SB(inode->i_sb)) && !p_blkno && create) { |
598 | ocfs2_error(inode->i_sb, | 598 | ocfs2_error(inode->i_sb, |
599 | "Inode %llu has a hole at block %llu\n", | 599 | "Inode %llu has a hole at block %llu\n", |
600 | (unsigned long long)OCFS2_I(inode)->ip_blkno, | 600 | (unsigned long long)OCFS2_I(inode)->ip_blkno, |
diff --git a/fs/partitions/check.c b/fs/partitions/check.c index 7d6b34e201db..ecc3330972e5 100644 --- a/fs/partitions/check.c +++ b/fs/partitions/check.c | |||
@@ -499,9 +499,9 @@ int rescan_partitions(struct gendisk *disk, struct block_device *bdev) | |||
499 | if (!size) | 499 | if (!size) |
500 | continue; | 500 | continue; |
501 | if (from + size > get_capacity(disk)) { | 501 | if (from + size > get_capacity(disk)) { |
502 | printk(KERN_ERR " %s: p%d exceeds device capacity\n", | 502 | printk(KERN_WARNING |
503 | "%s: p%d exceeds device capacity\n", | ||
503 | disk->disk_name, p); | 504 | disk->disk_name, p); |
504 | continue; | ||
505 | } | 505 | } |
506 | res = add_partition(disk, p, from, size, state->parts[p].flags); | 506 | res = add_partition(disk, p, from, size, state->parts[p].flags); |
507 | if (res) { | 507 | if (res) { |
diff --git a/fs/proc/generic.c b/fs/proc/generic.c index bca0f81eb687..7821589a17d5 100644 --- a/fs/proc/generic.c +++ b/fs/proc/generic.c | |||
@@ -547,8 +547,8 @@ static int proc_register(struct proc_dir_entry * dir, struct proc_dir_entry * dp | |||
547 | 547 | ||
548 | for (tmp = dir->subdir; tmp; tmp = tmp->next) | 548 | for (tmp = dir->subdir; tmp; tmp = tmp->next) |
549 | if (strcmp(tmp->name, dp->name) == 0) { | 549 | if (strcmp(tmp->name, dp->name) == 0) { |
550 | printk(KERN_WARNING "proc_dir_entry '%s' already " | 550 | printk(KERN_WARNING "proc_dir_entry '%s/%s' already registered\n", |
551 | "registered\n", dp->name); | 551 | dir->name, dp->name); |
552 | dump_stack(); | 552 | dump_stack(); |
553 | break; | 553 | break; |
554 | } | 554 | } |
diff --git a/fs/proc/proc_misc.c b/fs/proc/proc_misc.c index 00f10a2dcf12..29e20c6b1f7f 100644 --- a/fs/proc/proc_misc.c +++ b/fs/proc/proc_misc.c | |||
@@ -183,6 +183,9 @@ static int meminfo_read_proc(char *page, char **start, off_t off, | |||
183 | "SReclaimable: %8lu kB\n" | 183 | "SReclaimable: %8lu kB\n" |
184 | "SUnreclaim: %8lu kB\n" | 184 | "SUnreclaim: %8lu kB\n" |
185 | "PageTables: %8lu kB\n" | 185 | "PageTables: %8lu kB\n" |
186 | #ifdef CONFIG_QUICKLIST | ||
187 | "Quicklists: %8lu kB\n" | ||
188 | #endif | ||
186 | "NFS_Unstable: %8lu kB\n" | 189 | "NFS_Unstable: %8lu kB\n" |
187 | "Bounce: %8lu kB\n" | 190 | "Bounce: %8lu kB\n" |
188 | "WritebackTmp: %8lu kB\n" | 191 | "WritebackTmp: %8lu kB\n" |
@@ -190,8 +193,7 @@ static int meminfo_read_proc(char *page, char **start, off_t off, | |||
190 | "Committed_AS: %8lu kB\n" | 193 | "Committed_AS: %8lu kB\n" |
191 | "VmallocTotal: %8lu kB\n" | 194 | "VmallocTotal: %8lu kB\n" |
192 | "VmallocUsed: %8lu kB\n" | 195 | "VmallocUsed: %8lu kB\n" |
193 | "VmallocChunk: %8lu kB\n" | 196 | "VmallocChunk: %8lu kB\n", |
194 | "Quicklists: %8lu kB\n", | ||
195 | K(i.totalram), | 197 | K(i.totalram), |
196 | K(i.freeram), | 198 | K(i.freeram), |
197 | K(i.bufferram), | 199 | K(i.bufferram), |
@@ -216,6 +218,9 @@ static int meminfo_read_proc(char *page, char **start, off_t off, | |||
216 | K(global_page_state(NR_SLAB_RECLAIMABLE)), | 218 | K(global_page_state(NR_SLAB_RECLAIMABLE)), |
217 | K(global_page_state(NR_SLAB_UNRECLAIMABLE)), | 219 | K(global_page_state(NR_SLAB_UNRECLAIMABLE)), |
218 | K(global_page_state(NR_PAGETABLE)), | 220 | K(global_page_state(NR_PAGETABLE)), |
221 | #ifdef CONFIG_QUICKLIST | ||
222 | K(quicklist_total_size()), | ||
223 | #endif | ||
219 | K(global_page_state(NR_UNSTABLE_NFS)), | 224 | K(global_page_state(NR_UNSTABLE_NFS)), |
220 | K(global_page_state(NR_BOUNCE)), | 225 | K(global_page_state(NR_BOUNCE)), |
221 | K(global_page_state(NR_WRITEBACK_TEMP)), | 226 | K(global_page_state(NR_WRITEBACK_TEMP)), |
@@ -223,8 +228,7 @@ static int meminfo_read_proc(char *page, char **start, off_t off, | |||
223 | K(committed), | 228 | K(committed), |
224 | (unsigned long)VMALLOC_TOTAL >> 10, | 229 | (unsigned long)VMALLOC_TOTAL >> 10, |
225 | vmi.used >> 10, | 230 | vmi.used >> 10, |
226 | vmi.largest_chunk >> 10, | 231 | vmi.largest_chunk >> 10 |
227 | K(quicklist_total_size()) | ||
228 | ); | 232 | ); |
229 | 233 | ||
230 | len += hugetlb_report_meminfo(page + len); | 234 | len += hugetlb_report_meminfo(page + len); |
diff --git a/fs/ramfs/file-nommu.c b/fs/ramfs/file-nommu.c index 52312ec93ff4..5145cb9125af 100644 --- a/fs/ramfs/file-nommu.c +++ b/fs/ramfs/file-nommu.c | |||
@@ -58,7 +58,7 @@ const struct inode_operations ramfs_file_inode_operations = { | |||
58 | * size 0 on the assumption that it's going to be used for an mmap of shared | 58 | * size 0 on the assumption that it's going to be used for an mmap of shared |
59 | * memory | 59 | * memory |
60 | */ | 60 | */ |
61 | static int ramfs_nommu_expand_for_mapping(struct inode *inode, size_t newsize) | 61 | int ramfs_nommu_expand_for_mapping(struct inode *inode, size_t newsize) |
62 | { | 62 | { |
63 | struct pagevec lru_pvec; | 63 | struct pagevec lru_pvec; |
64 | unsigned long npages, xpages, loop, limit; | 64 | unsigned long npages, xpages, loop, limit; |
diff --git a/fs/splice.c b/fs/splice.c index 1bbc6f4bb09c..a1e701c27156 100644 --- a/fs/splice.c +++ b/fs/splice.c | |||
@@ -898,6 +898,9 @@ static long do_splice_from(struct pipe_inode_info *pipe, struct file *out, | |||
898 | if (unlikely(!(out->f_mode & FMODE_WRITE))) | 898 | if (unlikely(!(out->f_mode & FMODE_WRITE))) |
899 | return -EBADF; | 899 | return -EBADF; |
900 | 900 | ||
901 | if (unlikely(out->f_flags & O_APPEND)) | ||
902 | return -EINVAL; | ||
903 | |||
901 | ret = rw_verify_area(WRITE, out, ppos, len); | 904 | ret = rw_verify_area(WRITE, out, ppos, len); |
902 | if (unlikely(ret < 0)) | 905 | if (unlikely(ret < 0)) |
903 | return ret; | 906 | return ret; |
diff --git a/fs/ubifs/debug.c b/fs/ubifs/debug.c index b9cb77473758..d7f7645779f2 100644 --- a/fs/ubifs/debug.c +++ b/fs/ubifs/debug.c | |||
@@ -538,7 +538,7 @@ void dbg_dump_node(const struct ubifs_info *c, const void *node) | |||
538 | printk(KERN_DEBUG "\t%d orphan inode numbers:\n", n); | 538 | printk(KERN_DEBUG "\t%d orphan inode numbers:\n", n); |
539 | for (i = 0; i < n; i++) | 539 | for (i = 0; i < n; i++) |
540 | printk(KERN_DEBUG "\t ino %llu\n", | 540 | printk(KERN_DEBUG "\t ino %llu\n", |
541 | le64_to_cpu(orph->inos[i])); | 541 | (unsigned long long)le64_to_cpu(orph->inos[i])); |
542 | break; | 542 | break; |
543 | } | 543 | } |
544 | default: | 544 | default: |
diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c index 2b267c9a1806..526c01ec8003 100644 --- a/fs/ubifs/dir.c +++ b/fs/ubifs/dir.c | |||
@@ -426,7 +426,7 @@ static int ubifs_readdir(struct file *file, void *dirent, filldir_t filldir) | |||
426 | 426 | ||
427 | while (1) { | 427 | while (1) { |
428 | dbg_gen("feed '%s', ino %llu, new f_pos %#x", | 428 | dbg_gen("feed '%s', ino %llu, new f_pos %#x", |
429 | dent->name, le64_to_cpu(dent->inum), | 429 | dent->name, (unsigned long long)le64_to_cpu(dent->inum), |
430 | key_hash_flash(c, &dent->key)); | 430 | key_hash_flash(c, &dent->key)); |
431 | ubifs_assert(dent->ch.sqnum > ubifs_inode(dir)->creat_sqnum); | 431 | ubifs_assert(dent->ch.sqnum > ubifs_inode(dir)->creat_sqnum); |
432 | 432 | ||
diff --git a/fs/ubifs/find.c b/fs/ubifs/find.c index e045c8b55423..47814cde2407 100644 --- a/fs/ubifs/find.c +++ b/fs/ubifs/find.c | |||
@@ -507,7 +507,6 @@ int ubifs_find_free_space(struct ubifs_info *c, int min_space, int *free, | |||
507 | rsvd_idx_lebs = 0; | 507 | rsvd_idx_lebs = 0; |
508 | lebs = c->lst.empty_lebs + c->freeable_cnt + c->idx_gc_cnt - | 508 | lebs = c->lst.empty_lebs + c->freeable_cnt + c->idx_gc_cnt - |
509 | c->lst.taken_empty_lebs; | 509 | c->lst.taken_empty_lebs; |
510 | ubifs_assert(lebs + c->lst.idx_lebs >= c->min_idx_lebs); | ||
511 | if (rsvd_idx_lebs < lebs) | 510 | if (rsvd_idx_lebs < lebs) |
512 | /* | 511 | /* |
513 | * OK to allocate an empty LEB, but we still don't want to go | 512 | * OK to allocate an empty LEB, but we still don't want to go |
diff --git a/fs/ubifs/gc.c b/fs/ubifs/gc.c index 13f1019c859f..02aba36fe3d4 100644 --- a/fs/ubifs/gc.c +++ b/fs/ubifs/gc.c | |||
@@ -334,15 +334,15 @@ int ubifs_garbage_collect_leb(struct ubifs_info *c, struct ubifs_lprops *lp) | |||
334 | 334 | ||
335 | err = move_nodes(c, sleb); | 335 | err = move_nodes(c, sleb); |
336 | if (err) | 336 | if (err) |
337 | goto out; | 337 | goto out_inc_seq; |
338 | 338 | ||
339 | err = gc_sync_wbufs(c); | 339 | err = gc_sync_wbufs(c); |
340 | if (err) | 340 | if (err) |
341 | goto out; | 341 | goto out_inc_seq; |
342 | 342 | ||
343 | err = ubifs_change_one_lp(c, lnum, c->leb_size, 0, 0, 0, 0); | 343 | err = ubifs_change_one_lp(c, lnum, c->leb_size, 0, 0, 0, 0); |
344 | if (err) | 344 | if (err) |
345 | goto out; | 345 | goto out_inc_seq; |
346 | 346 | ||
347 | /* Allow for races with TNC */ | 347 | /* Allow for races with TNC */ |
348 | c->gced_lnum = lnum; | 348 | c->gced_lnum = lnum; |
@@ -369,6 +369,14 @@ int ubifs_garbage_collect_leb(struct ubifs_info *c, struct ubifs_lprops *lp) | |||
369 | out: | 369 | out: |
370 | ubifs_scan_destroy(sleb); | 370 | ubifs_scan_destroy(sleb); |
371 | return err; | 371 | return err; |
372 | |||
373 | out_inc_seq: | ||
374 | /* We may have moved at least some nodes so allow for races with TNC */ | ||
375 | c->gced_lnum = lnum; | ||
376 | smp_wmb(); | ||
377 | c->gc_seq += 1; | ||
378 | smp_wmb(); | ||
379 | goto out; | ||
372 | } | 380 | } |
373 | 381 | ||
374 | /** | 382 | /** |
diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c index 7562464ac83f..3f4902060c7a 100644 --- a/fs/ubifs/super.c +++ b/fs/ubifs/super.c | |||
@@ -1024,14 +1024,13 @@ static int mount_ubifs(struct ubifs_info *c) | |||
1024 | goto out_dereg; | 1024 | goto out_dereg; |
1025 | } | 1025 | } |
1026 | 1026 | ||
1027 | sprintf(c->bgt_name, BGT_NAME_PATTERN, c->vi.ubi_num, c->vi.vol_id); | ||
1027 | if (!mounted_read_only) { | 1028 | if (!mounted_read_only) { |
1028 | err = alloc_wbufs(c); | 1029 | err = alloc_wbufs(c); |
1029 | if (err) | 1030 | if (err) |
1030 | goto out_cbuf; | 1031 | goto out_cbuf; |
1031 | 1032 | ||
1032 | /* Create background thread */ | 1033 | /* Create background thread */ |
1033 | sprintf(c->bgt_name, BGT_NAME_PATTERN, c->vi.ubi_num, | ||
1034 | c->vi.vol_id); | ||
1035 | c->bgt = kthread_create(ubifs_bg_thread, c, c->bgt_name); | 1034 | c->bgt = kthread_create(ubifs_bg_thread, c, c->bgt_name); |
1036 | if (!c->bgt) | 1035 | if (!c->bgt) |
1037 | c->bgt = ERR_PTR(-EINVAL); | 1036 | c->bgt = ERR_PTR(-EINVAL); |
diff --git a/fs/ubifs/tnc.c b/fs/ubifs/tnc.c index 7da209ab9378..7634c5970887 100644 --- a/fs/ubifs/tnc.c +++ b/fs/ubifs/tnc.c | |||
@@ -1476,7 +1476,7 @@ again: | |||
1476 | } | 1476 | } |
1477 | 1477 | ||
1478 | err = fallible_read_node(c, key, &zbr, node); | 1478 | err = fallible_read_node(c, key, &zbr, node); |
1479 | if (maybe_leb_gced(c, zbr.lnum, gc_seq1)) { | 1479 | if (err <= 0 || maybe_leb_gced(c, zbr.lnum, gc_seq1)) { |
1480 | /* | 1480 | /* |
1481 | * The node may have been GC'ed out from under us so try again | 1481 | * The node may have been GC'ed out from under us so try again |
1482 | * while keeping the TNC mutex locked. | 1482 | * while keeping the TNC mutex locked. |
diff --git a/fs/udf/file.c b/fs/udf/file.c index 0ed6e146a0d9..eb91f3b70320 100644 --- a/fs/udf/file.c +++ b/fs/udf/file.c | |||
@@ -211,6 +211,7 @@ const struct file_operations udf_file_operations = { | |||
211 | .release = udf_release_file, | 211 | .release = udf_release_file, |
212 | .fsync = udf_fsync_file, | 212 | .fsync = udf_fsync_file, |
213 | .splice_read = generic_file_splice_read, | 213 | .splice_read = generic_file_splice_read, |
214 | .llseek = generic_file_llseek, | ||
214 | }; | 215 | }; |
215 | 216 | ||
216 | const struct inode_operations udf_file_inode_operations = { | 217 | const struct inode_operations udf_file_inode_operations = { |
diff --git a/fs/udf/ialloc.c b/fs/udf/ialloc.c index eb9cfa23dc3d..a4f2b3ce45b0 100644 --- a/fs/udf/ialloc.c +++ b/fs/udf/ialloc.c | |||
@@ -76,11 +76,24 @@ struct inode *udf_new_inode(struct inode *dir, int mode, int *err) | |||
76 | *err = -ENOSPC; | 76 | *err = -ENOSPC; |
77 | 77 | ||
78 | iinfo = UDF_I(inode); | 78 | iinfo = UDF_I(inode); |
79 | iinfo->i_unique = 0; | 79 | if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_EXTENDED_FE)) { |
80 | iinfo->i_lenExtents = 0; | 80 | iinfo->i_efe = 1; |
81 | iinfo->i_next_alloc_block = 0; | 81 | if (UDF_VERS_USE_EXTENDED_FE > sbi->s_udfrev) |
82 | iinfo->i_next_alloc_goal = 0; | 82 | sbi->s_udfrev = UDF_VERS_USE_EXTENDED_FE; |
83 | iinfo->i_strat4096 = 0; | 83 | iinfo->i_ext.i_data = kzalloc(inode->i_sb->s_blocksize - |
84 | sizeof(struct extendedFileEntry), | ||
85 | GFP_KERNEL); | ||
86 | } else { | ||
87 | iinfo->i_efe = 0; | ||
88 | iinfo->i_ext.i_data = kzalloc(inode->i_sb->s_blocksize - | ||
89 | sizeof(struct fileEntry), | ||
90 | GFP_KERNEL); | ||
91 | } | ||
92 | if (!iinfo->i_ext.i_data) { | ||
93 | iput(inode); | ||
94 | *err = -ENOMEM; | ||
95 | return NULL; | ||
96 | } | ||
84 | 97 | ||
85 | block = udf_new_block(dir->i_sb, NULL, | 98 | block = udf_new_block(dir->i_sb, NULL, |
86 | dinfo->i_location.partitionReferenceNum, | 99 | dinfo->i_location.partitionReferenceNum, |
@@ -111,6 +124,7 @@ struct inode *udf_new_inode(struct inode *dir, int mode, int *err) | |||
111 | lvhd->uniqueID = cpu_to_le64(uniqueID); | 124 | lvhd->uniqueID = cpu_to_le64(uniqueID); |
112 | mark_buffer_dirty(sbi->s_lvid_bh); | 125 | mark_buffer_dirty(sbi->s_lvid_bh); |
113 | } | 126 | } |
127 | mutex_unlock(&sbi->s_alloc_mutex); | ||
114 | inode->i_mode = mode; | 128 | inode->i_mode = mode; |
115 | inode->i_uid = current->fsuid; | 129 | inode->i_uid = current->fsuid; |
116 | if (dir->i_mode & S_ISGID) { | 130 | if (dir->i_mode & S_ISGID) { |
@@ -129,25 +143,6 @@ struct inode *udf_new_inode(struct inode *dir, int mode, int *err) | |||
129 | iinfo->i_lenEAttr = 0; | 143 | iinfo->i_lenEAttr = 0; |
130 | iinfo->i_lenAlloc = 0; | 144 | iinfo->i_lenAlloc = 0; |
131 | iinfo->i_use = 0; | 145 | iinfo->i_use = 0; |
132 | if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_EXTENDED_FE)) { | ||
133 | iinfo->i_efe = 1; | ||
134 | if (UDF_VERS_USE_EXTENDED_FE > sbi->s_udfrev) | ||
135 | sbi->s_udfrev = UDF_VERS_USE_EXTENDED_FE; | ||
136 | iinfo->i_ext.i_data = kzalloc(inode->i_sb->s_blocksize - | ||
137 | sizeof(struct extendedFileEntry), | ||
138 | GFP_KERNEL); | ||
139 | } else { | ||
140 | iinfo->i_efe = 0; | ||
141 | iinfo->i_ext.i_data = kzalloc(inode->i_sb->s_blocksize - | ||
142 | sizeof(struct fileEntry), | ||
143 | GFP_KERNEL); | ||
144 | } | ||
145 | if (!iinfo->i_ext.i_data) { | ||
146 | iput(inode); | ||
147 | *err = -ENOMEM; | ||
148 | mutex_unlock(&sbi->s_alloc_mutex); | ||
149 | return NULL; | ||
150 | } | ||
151 | if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_AD_IN_ICB)) | 146 | if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_AD_IN_ICB)) |
152 | iinfo->i_alloc_type = ICBTAG_FLAG_AD_IN_ICB; | 147 | iinfo->i_alloc_type = ICBTAG_FLAG_AD_IN_ICB; |
153 | else if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_SHORT_AD)) | 148 | else if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_SHORT_AD)) |
@@ -158,7 +153,6 @@ struct inode *udf_new_inode(struct inode *dir, int mode, int *err) | |||
158 | iinfo->i_crtime = current_fs_time(inode->i_sb); | 153 | iinfo->i_crtime = current_fs_time(inode->i_sb); |
159 | insert_inode_hash(inode); | 154 | insert_inode_hash(inode); |
160 | mark_inode_dirty(inode); | 155 | mark_inode_dirty(inode); |
161 | mutex_unlock(&sbi->s_alloc_mutex); | ||
162 | 156 | ||
163 | if (DQUOT_ALLOC_INODE(inode)) { | 157 | if (DQUOT_ALLOC_INODE(inode)) { |
164 | DQUOT_DROP(inode); | 158 | DQUOT_DROP(inode); |
diff --git a/fs/xfs/linux-2.6/xfs_aops.c b/fs/xfs/linux-2.6/xfs_aops.c index f42f80a3b1fa..a44d68eb50b5 100644 --- a/fs/xfs/linux-2.6/xfs_aops.c +++ b/fs/xfs/linux-2.6/xfs_aops.c | |||
@@ -1338,6 +1338,10 @@ __xfs_get_blocks( | |||
1338 | offset = (xfs_off_t)iblock << inode->i_blkbits; | 1338 | offset = (xfs_off_t)iblock << inode->i_blkbits; |
1339 | ASSERT(bh_result->b_size >= (1 << inode->i_blkbits)); | 1339 | ASSERT(bh_result->b_size >= (1 << inode->i_blkbits)); |
1340 | size = bh_result->b_size; | 1340 | size = bh_result->b_size; |
1341 | |||
1342 | if (!create && direct && offset >= i_size_read(inode)) | ||
1343 | return 0; | ||
1344 | |||
1341 | error = xfs_iomap(XFS_I(inode), offset, size, | 1345 | error = xfs_iomap(XFS_I(inode), offset, size, |
1342 | create ? flags : BMAPI_READ, &iomap, &niomap); | 1346 | create ? flags : BMAPI_READ, &iomap, &niomap); |
1343 | if (error) | 1347 | if (error) |
diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/xfs_super.c index 73c65f19e549..18d3c8487835 100644 --- a/fs/xfs/linux-2.6/xfs_super.c +++ b/fs/xfs/linux-2.6/xfs_super.c | |||
@@ -1302,9 +1302,29 @@ xfs_fs_remount( | |||
1302 | mp->m_flags &= ~XFS_MOUNT_BARRIER; | 1302 | mp->m_flags &= ~XFS_MOUNT_BARRIER; |
1303 | break; | 1303 | break; |
1304 | default: | 1304 | default: |
1305 | /* | ||
1306 | * Logically we would return an error here to prevent | ||
1307 | * users from believing they might have changed | ||
1308 | * mount options using remount which can't be changed. | ||
1309 | * | ||
1310 | * But unfortunately mount(8) adds all options from | ||
1311 | * mtab and fstab to the mount arguments in some cases | ||
1312 | * so we can't blindly reject options, but have to | ||
1313 | * check for each specified option if it actually | ||
1314 | * differs from the currently set option and only | ||
1315 | * reject it if that's the case. | ||
1316 | * | ||
1317 | * Until that is implemented we return success for | ||
1318 | * every remount request, and silently ignore all | ||
1319 | * options that we can't actually change. | ||
1320 | */ | ||
1321 | #if 0 | ||
1305 | printk(KERN_INFO | 1322 | printk(KERN_INFO |
1306 | "XFS: mount option \"%s\" not supported for remount\n", p); | 1323 | "XFS: mount option \"%s\" not supported for remount\n", p); |
1307 | return -EINVAL; | 1324 | return -EINVAL; |
1325 | #else | ||
1326 | return 0; | ||
1327 | #endif | ||
1308 | } | 1328 | } |
1309 | } | 1329 | } |
1310 | 1330 | ||
diff --git a/fs/xfs/xfs_buf_item.c b/fs/xfs/xfs_buf_item.c index 608c30c3f76b..002fc2617c8e 100644 --- a/fs/xfs/xfs_buf_item.c +++ b/fs/xfs/xfs_buf_item.c | |||
@@ -732,6 +732,7 @@ xfs_buf_item_init( | |||
732 | bip->bli_item.li_ops = &xfs_buf_item_ops; | 732 | bip->bli_item.li_ops = &xfs_buf_item_ops; |
733 | bip->bli_item.li_mountp = mp; | 733 | bip->bli_item.li_mountp = mp; |
734 | bip->bli_buf = bp; | 734 | bip->bli_buf = bp; |
735 | xfs_buf_hold(bp); | ||
735 | bip->bli_format.blf_type = XFS_LI_BUF; | 736 | bip->bli_format.blf_type = XFS_LI_BUF; |
736 | bip->bli_format.blf_blkno = (__int64_t)XFS_BUF_ADDR(bp); | 737 | bip->bli_format.blf_blkno = (__int64_t)XFS_BUF_ADDR(bp); |
737 | bip->bli_format.blf_len = (ushort)BTOBB(XFS_BUF_COUNT(bp)); | 738 | bip->bli_format.blf_len = (ushort)BTOBB(XFS_BUF_COUNT(bp)); |
@@ -867,6 +868,21 @@ xfs_buf_item_dirty( | |||
867 | return (bip->bli_flags & XFS_BLI_DIRTY); | 868 | return (bip->bli_flags & XFS_BLI_DIRTY); |
868 | } | 869 | } |
869 | 870 | ||
871 | STATIC void | ||
872 | xfs_buf_item_free( | ||
873 | xfs_buf_log_item_t *bip) | ||
874 | { | ||
875 | #ifdef XFS_TRANS_DEBUG | ||
876 | kmem_free(bip->bli_orig); | ||
877 | kmem_free(bip->bli_logged); | ||
878 | #endif /* XFS_TRANS_DEBUG */ | ||
879 | |||
880 | #ifdef XFS_BLI_TRACE | ||
881 | ktrace_free(bip->bli_trace); | ||
882 | #endif | ||
883 | kmem_zone_free(xfs_buf_item_zone, bip); | ||
884 | } | ||
885 | |||
870 | /* | 886 | /* |
871 | * This is called when the buf log item is no longer needed. It should | 887 | * This is called when the buf log item is no longer needed. It should |
872 | * free the buf log item associated with the given buffer and clear | 888 | * free the buf log item associated with the given buffer and clear |
@@ -887,18 +903,8 @@ xfs_buf_item_relse( | |||
887 | (XFS_BUF_IODONE_FUNC(bp) != NULL)) { | 903 | (XFS_BUF_IODONE_FUNC(bp) != NULL)) { |
888 | XFS_BUF_CLR_IODONE_FUNC(bp); | 904 | XFS_BUF_CLR_IODONE_FUNC(bp); |
889 | } | 905 | } |
890 | 906 | xfs_buf_rele(bp); | |
891 | #ifdef XFS_TRANS_DEBUG | 907 | xfs_buf_item_free(bip); |
892 | kmem_free(bip->bli_orig); | ||
893 | bip->bli_orig = NULL; | ||
894 | kmem_free(bip->bli_logged); | ||
895 | bip->bli_logged = NULL; | ||
896 | #endif /* XFS_TRANS_DEBUG */ | ||
897 | |||
898 | #ifdef XFS_BLI_TRACE | ||
899 | ktrace_free(bip->bli_trace); | ||
900 | #endif | ||
901 | kmem_zone_free(xfs_buf_item_zone, bip); | ||
902 | } | 908 | } |
903 | 909 | ||
904 | 910 | ||
@@ -1120,6 +1126,7 @@ xfs_buf_iodone( | |||
1120 | 1126 | ||
1121 | ASSERT(bip->bli_buf == bp); | 1127 | ASSERT(bip->bli_buf == bp); |
1122 | 1128 | ||
1129 | xfs_buf_rele(bp); | ||
1123 | mp = bip->bli_item.li_mountp; | 1130 | mp = bip->bli_item.li_mountp; |
1124 | 1131 | ||
1125 | /* | 1132 | /* |
@@ -1136,18 +1143,7 @@ xfs_buf_iodone( | |||
1136 | * xfs_trans_delete_ail() drops the AIL lock. | 1143 | * xfs_trans_delete_ail() drops the AIL lock. |
1137 | */ | 1144 | */ |
1138 | xfs_trans_delete_ail(mp, (xfs_log_item_t *)bip); | 1145 | xfs_trans_delete_ail(mp, (xfs_log_item_t *)bip); |
1139 | 1146 | xfs_buf_item_free(bip); | |
1140 | #ifdef XFS_TRANS_DEBUG | ||
1141 | kmem_free(bip->bli_orig); | ||
1142 | bip->bli_orig = NULL; | ||
1143 | kmem_free(bip->bli_logged); | ||
1144 | bip->bli_logged = NULL; | ||
1145 | #endif /* XFS_TRANS_DEBUG */ | ||
1146 | |||
1147 | #ifdef XFS_BLI_TRACE | ||
1148 | ktrace_free(bip->bli_trace); | ||
1149 | #endif | ||
1150 | kmem_zone_free(xfs_buf_item_zone, bip); | ||
1151 | } | 1147 | } |
1152 | 1148 | ||
1153 | #if defined(XFS_BLI_TRACE) | 1149 | #if defined(XFS_BLI_TRACE) |
diff --git a/fs/xfs/xfs_dfrag.c b/fs/xfs/xfs_dfrag.c index 760f4c5b5160..75b0cd4da0ea 100644 --- a/fs/xfs/xfs_dfrag.c +++ b/fs/xfs/xfs_dfrag.c | |||
@@ -149,7 +149,14 @@ xfs_swap_extents( | |||
149 | 149 | ||
150 | sbp = &sxp->sx_stat; | 150 | sbp = &sxp->sx_stat; |
151 | 151 | ||
152 | xfs_lock_two_inodes(ip, tip, lock_flags); | 152 | /* |
153 | * we have to do two separate lock calls here to keep lockdep | ||
154 | * happy. If we try to get all the locks in one call, lock will | ||
155 | * report false positives when we drop the ILOCK and regain them | ||
156 | * below. | ||
157 | */ | ||
158 | xfs_lock_two_inodes(ip, tip, XFS_IOLOCK_EXCL); | ||
159 | xfs_lock_two_inodes(ip, tip, XFS_ILOCK_EXCL); | ||
153 | locked = 1; | 160 | locked = 1; |
154 | 161 | ||
155 | /* Verify that both files have the same format */ | 162 | /* Verify that both files have the same format */ |
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index 00e80df9dd9d..dbd9cef852ec 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c | |||
@@ -4118,7 +4118,7 @@ xfs_iext_indirect_to_direct( | |||
4118 | ASSERT(nextents <= XFS_LINEAR_EXTS); | 4118 | ASSERT(nextents <= XFS_LINEAR_EXTS); |
4119 | size = nextents * sizeof(xfs_bmbt_rec_t); | 4119 | size = nextents * sizeof(xfs_bmbt_rec_t); |
4120 | 4120 | ||
4121 | xfs_iext_irec_compact_full(ifp); | 4121 | xfs_iext_irec_compact_pages(ifp); |
4122 | ASSERT(ifp->if_real_bytes == XFS_IEXT_BUFSZ); | 4122 | ASSERT(ifp->if_real_bytes == XFS_IEXT_BUFSZ); |
4123 | 4123 | ||
4124 | ep = ifp->if_u1.if_ext_irec->er_extbuf; | 4124 | ep = ifp->if_u1.if_ext_irec->er_extbuf; |
@@ -4449,8 +4449,7 @@ xfs_iext_irec_remove( | |||
4449 | * compaction policy is as follows: | 4449 | * compaction policy is as follows: |
4450 | * | 4450 | * |
4451 | * Full Compaction: Extents fit into a single page (or inline buffer) | 4451 | * Full Compaction: Extents fit into a single page (or inline buffer) |
4452 | * Full Compaction: Extents occupy less than 10% of allocated space | 4452 | * Partial Compaction: Extents occupy less than 50% of allocated space |
4453 | * Partial Compaction: Extents occupy > 10% and < 50% of allocated space | ||
4454 | * No Compaction: Extents occupy at least 50% of allocated space | 4453 | * No Compaction: Extents occupy at least 50% of allocated space |
4455 | */ | 4454 | */ |
4456 | void | 4455 | void |
@@ -4471,8 +4470,6 @@ xfs_iext_irec_compact( | |||
4471 | xfs_iext_direct_to_inline(ifp, nextents); | 4470 | xfs_iext_direct_to_inline(ifp, nextents); |
4472 | } else if (nextents <= XFS_LINEAR_EXTS) { | 4471 | } else if (nextents <= XFS_LINEAR_EXTS) { |
4473 | xfs_iext_indirect_to_direct(ifp); | 4472 | xfs_iext_indirect_to_direct(ifp); |
4474 | } else if (nextents < (nlists * XFS_LINEAR_EXTS) >> 3) { | ||
4475 | xfs_iext_irec_compact_full(ifp); | ||
4476 | } else if (nextents < (nlists * XFS_LINEAR_EXTS) >> 1) { | 4473 | } else if (nextents < (nlists * XFS_LINEAR_EXTS) >> 1) { |
4477 | xfs_iext_irec_compact_pages(ifp); | 4474 | xfs_iext_irec_compact_pages(ifp); |
4478 | } | 4475 | } |
@@ -4496,7 +4493,7 @@ xfs_iext_irec_compact_pages( | |||
4496 | erp_next = erp + 1; | 4493 | erp_next = erp + 1; |
4497 | if (erp_next->er_extcount <= | 4494 | if (erp_next->er_extcount <= |
4498 | (XFS_LINEAR_EXTS - erp->er_extcount)) { | 4495 | (XFS_LINEAR_EXTS - erp->er_extcount)) { |
4499 | memmove(&erp->er_extbuf[erp->er_extcount], | 4496 | memcpy(&erp->er_extbuf[erp->er_extcount], |
4500 | erp_next->er_extbuf, erp_next->er_extcount * | 4497 | erp_next->er_extbuf, erp_next->er_extcount * |
4501 | sizeof(xfs_bmbt_rec_t)); | 4498 | sizeof(xfs_bmbt_rec_t)); |
4502 | erp->er_extcount += erp_next->er_extcount; | 4499 | erp->er_extcount += erp_next->er_extcount; |
@@ -4516,91 +4513,6 @@ xfs_iext_irec_compact_pages( | |||
4516 | } | 4513 | } |
4517 | 4514 | ||
4518 | /* | 4515 | /* |
4519 | * Fully compact the extent records managed by the indirection array. | ||
4520 | */ | ||
4521 | void | ||
4522 | xfs_iext_irec_compact_full( | ||
4523 | xfs_ifork_t *ifp) /* inode fork pointer */ | ||
4524 | { | ||
4525 | xfs_bmbt_rec_host_t *ep, *ep_next; /* extent record pointers */ | ||
4526 | xfs_ext_irec_t *erp, *erp_next; /* extent irec pointers */ | ||
4527 | int erp_idx = 0; /* extent irec index */ | ||
4528 | int ext_avail; /* empty entries in ex list */ | ||
4529 | int ext_diff; /* number of exts to add */ | ||
4530 | int nlists; /* number of irec's (ex lists) */ | ||
4531 | |||
4532 | ASSERT(ifp->if_flags & XFS_IFEXTIREC); | ||
4533 | |||
4534 | nlists = ifp->if_real_bytes / XFS_IEXT_BUFSZ; | ||
4535 | erp = ifp->if_u1.if_ext_irec; | ||
4536 | ep = &erp->er_extbuf[erp->er_extcount]; | ||
4537 | erp_next = erp + 1; | ||
4538 | ep_next = erp_next->er_extbuf; | ||
4539 | |||
4540 | while (erp_idx < nlists - 1) { | ||
4541 | /* | ||
4542 | * Check how many extent records are available in this irec. | ||
4543 | * If there is none skip the whole exercise. | ||
4544 | */ | ||
4545 | ext_avail = XFS_LINEAR_EXTS - erp->er_extcount; | ||
4546 | if (ext_avail) { | ||
4547 | |||
4548 | /* | ||
4549 | * Copy over as many as possible extent records into | ||
4550 | * the previous page. | ||
4551 | */ | ||
4552 | ext_diff = MIN(ext_avail, erp_next->er_extcount); | ||
4553 | memcpy(ep, ep_next, ext_diff * sizeof(xfs_bmbt_rec_t)); | ||
4554 | erp->er_extcount += ext_diff; | ||
4555 | erp_next->er_extcount -= ext_diff; | ||
4556 | |||
4557 | /* | ||
4558 | * If the next irec is empty now we can simply | ||
4559 | * remove it. | ||
4560 | */ | ||
4561 | if (erp_next->er_extcount == 0) { | ||
4562 | /* | ||
4563 | * Free page before removing extent record | ||
4564 | * so er_extoffs don't get modified in | ||
4565 | * xfs_iext_irec_remove. | ||
4566 | */ | ||
4567 | kmem_free(erp_next->er_extbuf); | ||
4568 | erp_next->er_extbuf = NULL; | ||
4569 | xfs_iext_irec_remove(ifp, erp_idx + 1); | ||
4570 | erp = &ifp->if_u1.if_ext_irec[erp_idx]; | ||
4571 | nlists = ifp->if_real_bytes / XFS_IEXT_BUFSZ; | ||
4572 | |||
4573 | /* | ||
4574 | * If the next irec is not empty move up the content | ||
4575 | * that has not been copied to the previous page to | ||
4576 | * the beggining of this one. | ||
4577 | */ | ||
4578 | } else { | ||
4579 | memmove(erp_next->er_extbuf, &ep_next[ext_diff], | ||
4580 | erp_next->er_extcount * | ||
4581 | sizeof(xfs_bmbt_rec_t)); | ||
4582 | ep_next = erp_next->er_extbuf; | ||
4583 | memset(&ep_next[erp_next->er_extcount], 0, | ||
4584 | (XFS_LINEAR_EXTS - | ||
4585 | erp_next->er_extcount) * | ||
4586 | sizeof(xfs_bmbt_rec_t)); | ||
4587 | } | ||
4588 | } | ||
4589 | |||
4590 | if (erp->er_extcount == XFS_LINEAR_EXTS) { | ||
4591 | erp_idx++; | ||
4592 | if (erp_idx < nlists) | ||
4593 | erp = &ifp->if_u1.if_ext_irec[erp_idx]; | ||
4594 | else | ||
4595 | break; | ||
4596 | } | ||
4597 | ep = &erp->er_extbuf[erp->er_extcount]; | ||
4598 | erp_next = erp + 1; | ||
4599 | ep_next = erp_next->er_extbuf; | ||
4600 | } | ||
4601 | } | ||
4602 | |||
4603 | /* | ||
4604 | * This is called to update the er_extoff field in the indirection | 4516 | * This is called to update the er_extoff field in the indirection |
4605 | * array when extents have been added or removed from one of the | 4517 | * array when extents have been added or removed from one of the |
4606 | * extent lists. erp_idx contains the irec index to begin updating | 4518 | * extent lists. erp_idx contains the irec index to begin updating |
diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c index ccba14eb9dbe..503ea89e8b9a 100644 --- a/fs/xfs/xfs_log.c +++ b/fs/xfs/xfs_log.c | |||
@@ -124,16 +124,27 @@ STATIC void xlog_verify_tail_lsn(xlog_t *log, xlog_in_core_t *iclog, | |||
124 | STATIC int xlog_iclogs_empty(xlog_t *log); | 124 | STATIC int xlog_iclogs_empty(xlog_t *log); |
125 | 125 | ||
126 | #if defined(XFS_LOG_TRACE) | 126 | #if defined(XFS_LOG_TRACE) |
127 | |||
128 | #define XLOG_TRACE_LOGGRANT_SIZE 2048 | ||
129 | #define XLOG_TRACE_ICLOG_SIZE 256 | ||
130 | |||
131 | void | ||
132 | xlog_trace_loggrant_alloc(xlog_t *log) | ||
133 | { | ||
134 | log->l_grant_trace = ktrace_alloc(XLOG_TRACE_LOGGRANT_SIZE, KM_NOFS); | ||
135 | } | ||
136 | |||
137 | void | ||
138 | xlog_trace_loggrant_dealloc(xlog_t *log) | ||
139 | { | ||
140 | ktrace_free(log->l_grant_trace); | ||
141 | } | ||
142 | |||
127 | void | 143 | void |
128 | xlog_trace_loggrant(xlog_t *log, xlog_ticket_t *tic, xfs_caddr_t string) | 144 | xlog_trace_loggrant(xlog_t *log, xlog_ticket_t *tic, xfs_caddr_t string) |
129 | { | 145 | { |
130 | unsigned long cnts; | 146 | unsigned long cnts; |
131 | 147 | ||
132 | if (!log->l_grant_trace) { | ||
133 | log->l_grant_trace = ktrace_alloc(2048, KM_NOSLEEP); | ||
134 | if (!log->l_grant_trace) | ||
135 | return; | ||
136 | } | ||
137 | /* ticket counts are 1 byte each */ | 148 | /* ticket counts are 1 byte each */ |
138 | cnts = ((unsigned long)tic->t_ocnt) | ((unsigned long)tic->t_cnt) << 8; | 149 | cnts = ((unsigned long)tic->t_ocnt) | ((unsigned long)tic->t_cnt) << 8; |
139 | 150 | ||
@@ -157,10 +168,20 @@ xlog_trace_loggrant(xlog_t *log, xlog_ticket_t *tic, xfs_caddr_t string) | |||
157 | } | 168 | } |
158 | 169 | ||
159 | void | 170 | void |
171 | xlog_trace_iclog_alloc(xlog_in_core_t *iclog) | ||
172 | { | ||
173 | iclog->ic_trace = ktrace_alloc(XLOG_TRACE_ICLOG_SIZE, KM_NOFS); | ||
174 | } | ||
175 | |||
176 | void | ||
177 | xlog_trace_iclog_dealloc(xlog_in_core_t *iclog) | ||
178 | { | ||
179 | ktrace_free(iclog->ic_trace); | ||
180 | } | ||
181 | |||
182 | void | ||
160 | xlog_trace_iclog(xlog_in_core_t *iclog, uint state) | 183 | xlog_trace_iclog(xlog_in_core_t *iclog, uint state) |
161 | { | 184 | { |
162 | if (!iclog->ic_trace) | ||
163 | iclog->ic_trace = ktrace_alloc(256, KM_NOFS); | ||
164 | ktrace_enter(iclog->ic_trace, | 185 | ktrace_enter(iclog->ic_trace, |
165 | (void *)((unsigned long)state), | 186 | (void *)((unsigned long)state), |
166 | (void *)((unsigned long)current_pid()), | 187 | (void *)((unsigned long)current_pid()), |
@@ -170,8 +191,15 @@ xlog_trace_iclog(xlog_in_core_t *iclog, uint state) | |||
170 | (void *)NULL, (void *)NULL); | 191 | (void *)NULL, (void *)NULL); |
171 | } | 192 | } |
172 | #else | 193 | #else |
194 | |||
195 | #define xlog_trace_loggrant_alloc(log) | ||
196 | #define xlog_trace_loggrant_dealloc(log) | ||
173 | #define xlog_trace_loggrant(log,tic,string) | 197 | #define xlog_trace_loggrant(log,tic,string) |
198 | |||
199 | #define xlog_trace_iclog_alloc(iclog) | ||
200 | #define xlog_trace_iclog_dealloc(iclog) | ||
174 | #define xlog_trace_iclog(iclog,state) | 201 | #define xlog_trace_iclog(iclog,state) |
202 | |||
175 | #endif /* XFS_LOG_TRACE */ | 203 | #endif /* XFS_LOG_TRACE */ |
176 | 204 | ||
177 | 205 | ||
@@ -1009,7 +1037,7 @@ xlog_iodone(xfs_buf_t *bp) | |||
1009 | * layer, it means the underlyin device no longer supports | 1037 | * layer, it means the underlyin device no longer supports |
1010 | * barrier I/O. Warn loudly and turn off barriers. | 1038 | * barrier I/O. Warn loudly and turn off barriers. |
1011 | */ | 1039 | */ |
1012 | if ((l->l_mp->m_flags & XFS_MOUNT_BARRIER) && !XFS_BUF_ORDERED(bp)) { | 1040 | if ((l->l_mp->m_flags & XFS_MOUNT_BARRIER) && !XFS_BUF_ISORDERED(bp)) { |
1013 | l->l_mp->m_flags &= ~XFS_MOUNT_BARRIER; | 1041 | l->l_mp->m_flags &= ~XFS_MOUNT_BARRIER; |
1014 | xfs_fs_cmn_err(CE_WARN, l->l_mp, | 1042 | xfs_fs_cmn_err(CE_WARN, l->l_mp, |
1015 | "xlog_iodone: Barriers are no longer supported" | 1043 | "xlog_iodone: Barriers are no longer supported" |
@@ -1231,6 +1259,7 @@ xlog_alloc_log(xfs_mount_t *mp, | |||
1231 | spin_lock_init(&log->l_grant_lock); | 1259 | spin_lock_init(&log->l_grant_lock); |
1232 | sv_init(&log->l_flush_wait, 0, "flush_wait"); | 1260 | sv_init(&log->l_flush_wait, 0, "flush_wait"); |
1233 | 1261 | ||
1262 | xlog_trace_loggrant_alloc(log); | ||
1234 | /* log record size must be multiple of BBSIZE; see xlog_rec_header_t */ | 1263 | /* log record size must be multiple of BBSIZE; see xlog_rec_header_t */ |
1235 | ASSERT((XFS_BUF_SIZE(bp) & BBMASK) == 0); | 1264 | ASSERT((XFS_BUF_SIZE(bp) & BBMASK) == 0); |
1236 | 1265 | ||
@@ -1285,6 +1314,8 @@ xlog_alloc_log(xfs_mount_t *mp, | |||
1285 | sv_init(&iclog->ic_force_wait, SV_DEFAULT, "iclog-force"); | 1314 | sv_init(&iclog->ic_force_wait, SV_DEFAULT, "iclog-force"); |
1286 | sv_init(&iclog->ic_write_wait, SV_DEFAULT, "iclog-write"); | 1315 | sv_init(&iclog->ic_write_wait, SV_DEFAULT, "iclog-write"); |
1287 | 1316 | ||
1317 | xlog_trace_iclog_alloc(iclog); | ||
1318 | |||
1288 | iclogp = &iclog->ic_next; | 1319 | iclogp = &iclog->ic_next; |
1289 | } | 1320 | } |
1290 | *iclogp = log->l_iclog; /* complete ring */ | 1321 | *iclogp = log->l_iclog; /* complete ring */ |
@@ -1565,11 +1596,7 @@ xlog_dealloc_log(xlog_t *log) | |||
1565 | sv_destroy(&iclog->ic_force_wait); | 1596 | sv_destroy(&iclog->ic_force_wait); |
1566 | sv_destroy(&iclog->ic_write_wait); | 1597 | sv_destroy(&iclog->ic_write_wait); |
1567 | xfs_buf_free(iclog->ic_bp); | 1598 | xfs_buf_free(iclog->ic_bp); |
1568 | #ifdef XFS_LOG_TRACE | 1599 | xlog_trace_iclog_dealloc(iclog); |
1569 | if (iclog->ic_trace != NULL) { | ||
1570 | ktrace_free(iclog->ic_trace); | ||
1571 | } | ||
1572 | #endif | ||
1573 | next_iclog = iclog->ic_next; | 1600 | next_iclog = iclog->ic_next; |
1574 | kmem_free(iclog); | 1601 | kmem_free(iclog); |
1575 | iclog = next_iclog; | 1602 | iclog = next_iclog; |
@@ -1578,14 +1605,7 @@ xlog_dealloc_log(xlog_t *log) | |||
1578 | spinlock_destroy(&log->l_grant_lock); | 1605 | spinlock_destroy(&log->l_grant_lock); |
1579 | 1606 | ||
1580 | xfs_buf_free(log->l_xbuf); | 1607 | xfs_buf_free(log->l_xbuf); |
1581 | #ifdef XFS_LOG_TRACE | 1608 | xlog_trace_loggrant_dealloc(log); |
1582 | if (log->l_trace != NULL) { | ||
1583 | ktrace_free(log->l_trace); | ||
1584 | } | ||
1585 | if (log->l_grant_trace != NULL) { | ||
1586 | ktrace_free(log->l_grant_trace); | ||
1587 | } | ||
1588 | #endif | ||
1589 | log->l_mp->m_log = NULL; | 1609 | log->l_mp->m_log = NULL; |
1590 | kmem_free(log); | 1610 | kmem_free(log); |
1591 | } /* xlog_dealloc_log */ | 1611 | } /* xlog_dealloc_log */ |
diff --git a/fs/xfs/xfs_log_priv.h b/fs/xfs/xfs_log_priv.h index c8a5b22ee3e3..e7d8f84443fa 100644 --- a/fs/xfs/xfs_log_priv.h +++ b/fs/xfs/xfs_log_priv.h | |||
@@ -448,7 +448,6 @@ typedef struct log { | |||
448 | int l_grant_write_bytes; | 448 | int l_grant_write_bytes; |
449 | 449 | ||
450 | #ifdef XFS_LOG_TRACE | 450 | #ifdef XFS_LOG_TRACE |
451 | struct ktrace *l_trace; | ||
452 | struct ktrace *l_grant_trace; | 451 | struct ktrace *l_grant_trace; |
453 | #endif | 452 | #endif |
454 | 453 | ||
diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index aa238c8fbd7a..8b6812f66a15 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c | |||
@@ -1838,6 +1838,12 @@ again: | |||
1838 | #endif | 1838 | #endif |
1839 | } | 1839 | } |
1840 | 1840 | ||
1841 | /* | ||
1842 | * xfs_lock_two_inodes() can only be used to lock one type of lock | ||
1843 | * at a time - the iolock or the ilock, but not both at once. If | ||
1844 | * we lock both at once, lockdep will report false positives saying | ||
1845 | * we have violated locking orders. | ||
1846 | */ | ||
1841 | void | 1847 | void |
1842 | xfs_lock_two_inodes( | 1848 | xfs_lock_two_inodes( |
1843 | xfs_inode_t *ip0, | 1849 | xfs_inode_t *ip0, |
@@ -1848,6 +1854,8 @@ xfs_lock_two_inodes( | |||
1848 | int attempts = 0; | 1854 | int attempts = 0; |
1849 | xfs_log_item_t *lp; | 1855 | xfs_log_item_t *lp; |
1850 | 1856 | ||
1857 | if (lock_mode & (XFS_IOLOCK_SHARED|XFS_IOLOCK_EXCL)) | ||
1858 | ASSERT((lock_mode & (XFS_ILOCK_SHARED|XFS_ILOCK_EXCL)) == 0); | ||
1851 | ASSERT(ip0->i_ino != ip1->i_ino); | 1859 | ASSERT(ip0->i_ino != ip1->i_ino); |
1852 | 1860 | ||
1853 | if (ip0->i_ino > ip1->i_ino) { | 1861 | if (ip0->i_ino > ip1->i_ino) { |
@@ -3152,6 +3160,13 @@ error1: /* Just cancel transaction */ | |||
3152 | /* | 3160 | /* |
3153 | * Zero file bytes between startoff and endoff inclusive. | 3161 | * Zero file bytes between startoff and endoff inclusive. |
3154 | * The iolock is held exclusive and no blocks are buffered. | 3162 | * The iolock is held exclusive and no blocks are buffered. |
3163 | * | ||
3164 | * This function is used by xfs_free_file_space() to zero | ||
3165 | * partial blocks when the range to free is not block aligned. | ||
3166 | * When unreserving space with boundaries that are not block | ||
3167 | * aligned we round up the start and round down the end | ||
3168 | * boundaries and then use this function to zero the parts of | ||
3169 | * the blocks that got dropped during the rounding. | ||
3155 | */ | 3170 | */ |
3156 | STATIC int | 3171 | STATIC int |
3157 | xfs_zero_remaining_bytes( | 3172 | xfs_zero_remaining_bytes( |
@@ -3168,6 +3183,17 @@ xfs_zero_remaining_bytes( | |||
3168 | int nimap; | 3183 | int nimap; |
3169 | int error = 0; | 3184 | int error = 0; |
3170 | 3185 | ||
3186 | /* | ||
3187 | * Avoid doing I/O beyond eof - it's not necessary | ||
3188 | * since nothing can read beyond eof. The space will | ||
3189 | * be zeroed when the file is extended anyway. | ||
3190 | */ | ||
3191 | if (startoff >= ip->i_size) | ||
3192 | return 0; | ||
3193 | |||
3194 | if (endoff > ip->i_size) | ||
3195 | endoff = ip->i_size; | ||
3196 | |||
3171 | bp = xfs_buf_get_noaddr(mp->m_sb.sb_blocksize, | 3197 | bp = xfs_buf_get_noaddr(mp->m_sb.sb_blocksize, |
3172 | XFS_IS_REALTIME_INODE(ip) ? | 3198 | XFS_IS_REALTIME_INODE(ip) ? |
3173 | mp->m_rtdev_targp : mp->m_ddev_targp); | 3199 | mp->m_rtdev_targp : mp->m_ddev_targp); |
diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h index a3f738cffdb6..edc6ba82e090 100644 --- a/include/asm-generic/bug.h +++ b/include/asm-generic/bug.h | |||
@@ -97,6 +97,16 @@ extern void warn_slowpath(const char *file, const int line, | |||
97 | unlikely(__ret_warn_once); \ | 97 | unlikely(__ret_warn_once); \ |
98 | }) | 98 | }) |
99 | 99 | ||
100 | #define WARN_ONCE(condition, format...) ({ \ | ||
101 | static int __warned; \ | ||
102 | int __ret_warn_once = !!(condition); \ | ||
103 | \ | ||
104 | if (unlikely(__ret_warn_once)) \ | ||
105 | if (WARN(!__warned, format)) \ | ||
106 | __warned = 1; \ | ||
107 | unlikely(__ret_warn_once); \ | ||
108 | }) | ||
109 | |||
100 | #define WARN_ON_RATELIMIT(condition, state) \ | 110 | #define WARN_ON_RATELIMIT(condition, state) \ |
101 | WARN_ON((condition) && __ratelimit(state)) | 111 | WARN_ON((condition) && __ratelimit(state)) |
102 | 112 | ||
diff --git a/include/asm-mips/cevt-r4k.h b/include/asm-mips/cevt-r4k.h new file mode 100644 index 000000000000..fa4328f9124f --- /dev/null +++ b/include/asm-mips/cevt-r4k.h | |||
@@ -0,0 +1,46 @@ | |||
1 | /* | ||
2 | * This file is subject to the terms and conditions of the GNU General Public | ||
3 | * License. See the file "COPYING" in the main directory of this archive | ||
4 | * for more details. | ||
5 | * | ||
6 | * Copyright (C) 2008 Kevin D. Kissell | ||
7 | */ | ||
8 | |||
9 | /* | ||
10 | * Definitions used for common event timer implementation | ||
11 | * for MIPS 4K-type processors and their MIPS MT variants. | ||
12 | * Avoids unsightly extern declarations in C files. | ||
13 | */ | ||
14 | #ifndef __ASM_CEVT_R4K_H | ||
15 | #define __ASM_CEVT_R4K_H | ||
16 | |||
17 | DECLARE_PER_CPU(struct clock_event_device, mips_clockevent_device); | ||
18 | |||
19 | void mips_event_handler(struct clock_event_device *dev); | ||
20 | int c0_compare_int_usable(void); | ||
21 | void mips_set_clock_mode(enum clock_event_mode, struct clock_event_device *); | ||
22 | irqreturn_t c0_compare_interrupt(int, void *); | ||
23 | |||
24 | extern struct irqaction c0_compare_irqaction; | ||
25 | extern int cp0_timer_irq_installed; | ||
26 | |||
27 | /* | ||
28 | * Possibly handle a performance counter interrupt. | ||
29 | * Return true if the timer interrupt should not be checked | ||
30 | */ | ||
31 | |||
32 | static inline int handle_perf_irq(int r2) | ||
33 | { | ||
34 | /* | ||
35 | * The performance counter overflow interrupt may be shared with the | ||
36 | * timer interrupt (cp0_perfcount_irq < 0). If it is and a | ||
37 | * performance counter has overflowed (perf_irq() == IRQ_HANDLED) | ||
38 | * and we can't reliably determine if a counter interrupt has also | ||
39 | * happened (!r2) then don't check for a timer interrupt. | ||
40 | */ | ||
41 | return (cp0_perfcount_irq < 0) && | ||
42 | perf_irq() == IRQ_HANDLED && | ||
43 | !r2; | ||
44 | } | ||
45 | |||
46 | #endif /* __ASM_CEVT_R4K_H */ | ||
diff --git a/include/asm-mips/irqflags.h b/include/asm-mips/irqflags.h index 881e8866501d..701ec0ba8fa9 100644 --- a/include/asm-mips/irqflags.h +++ b/include/asm-mips/irqflags.h | |||
@@ -38,8 +38,17 @@ __asm__( | |||
38 | " .set pop \n" | 38 | " .set pop \n" |
39 | " .endm"); | 39 | " .endm"); |
40 | 40 | ||
41 | extern void smtc_ipi_replay(void); | ||
42 | |||
41 | static inline void raw_local_irq_enable(void) | 43 | static inline void raw_local_irq_enable(void) |
42 | { | 44 | { |
45 | #ifdef CONFIG_MIPS_MT_SMTC | ||
46 | /* | ||
47 | * SMTC kernel needs to do a software replay of queued | ||
48 | * IPIs, at the cost of call overhead on each local_irq_enable() | ||
49 | */ | ||
50 | smtc_ipi_replay(); | ||
51 | #endif | ||
43 | __asm__ __volatile__( | 52 | __asm__ __volatile__( |
44 | "raw_local_irq_enable" | 53 | "raw_local_irq_enable" |
45 | : /* no outputs */ | 54 | : /* no outputs */ |
@@ -47,6 +56,7 @@ static inline void raw_local_irq_enable(void) | |||
47 | : "memory"); | 56 | : "memory"); |
48 | } | 57 | } |
49 | 58 | ||
59 | |||
50 | /* | 60 | /* |
51 | * For cli() we have to insert nops to make sure that the new value | 61 | * For cli() we have to insert nops to make sure that the new value |
52 | * has actually arrived in the status register before the end of this | 62 | * has actually arrived in the status register before the end of this |
@@ -185,15 +195,14 @@ __asm__( | |||
185 | " .set pop \n" | 195 | " .set pop \n" |
186 | " .endm \n"); | 196 | " .endm \n"); |
187 | 197 | ||
188 | extern void smtc_ipi_replay(void); | ||
189 | 198 | ||
190 | static inline void raw_local_irq_restore(unsigned long flags) | 199 | static inline void raw_local_irq_restore(unsigned long flags) |
191 | { | 200 | { |
192 | unsigned long __tmp1; | 201 | unsigned long __tmp1; |
193 | 202 | ||
194 | #ifdef CONFIG_MIPS_MT_SMTC_INSTANT_REPLAY | 203 | #ifdef CONFIG_MIPS_MT_SMTC |
195 | /* | 204 | /* |
196 | * CONFIG_MIPS_MT_SMTC_INSTANT_REPLAY does prompt replay of deferred | 205 | * SMTC kernel needs to do a software replay of queued |
197 | * IPIs, at the cost of branch and call overhead on each | 206 | * IPIs, at the cost of branch and call overhead on each |
198 | * local_irq_restore() | 207 | * local_irq_restore() |
199 | */ | 208 | */ |
@@ -208,6 +217,17 @@ static inline void raw_local_irq_restore(unsigned long flags) | |||
208 | : "memory"); | 217 | : "memory"); |
209 | } | 218 | } |
210 | 219 | ||
220 | static inline void __raw_local_irq_restore(unsigned long flags) | ||
221 | { | ||
222 | unsigned long __tmp1; | ||
223 | |||
224 | __asm__ __volatile__( | ||
225 | "raw_local_irq_restore\t%0" | ||
226 | : "=r" (__tmp1) | ||
227 | : "0" (flags) | ||
228 | : "memory"); | ||
229 | } | ||
230 | |||
211 | static inline int raw_irqs_disabled_flags(unsigned long flags) | 231 | static inline int raw_irqs_disabled_flags(unsigned long flags) |
212 | { | 232 | { |
213 | #ifdef CONFIG_MIPS_MT_SMTC | 233 | #ifdef CONFIG_MIPS_MT_SMTC |
diff --git a/include/asm-mips/mipsregs.h b/include/asm-mips/mipsregs.h index a46f8e258e6b..979866000da4 100644 --- a/include/asm-mips/mipsregs.h +++ b/include/asm-mips/mipsregs.h | |||
@@ -1462,7 +1462,7 @@ set_c0_##name(unsigned int set) \ | |||
1462 | { \ | 1462 | { \ |
1463 | unsigned int res; \ | 1463 | unsigned int res; \ |
1464 | unsigned int omt; \ | 1464 | unsigned int omt; \ |
1465 | unsigned int flags; \ | 1465 | unsigned long flags; \ |
1466 | \ | 1466 | \ |
1467 | local_irq_save(flags); \ | 1467 | local_irq_save(flags); \ |
1468 | omt = __dmt(); \ | 1468 | omt = __dmt(); \ |
@@ -1480,7 +1480,7 @@ clear_c0_##name(unsigned int clear) \ | |||
1480 | { \ | 1480 | { \ |
1481 | unsigned int res; \ | 1481 | unsigned int res; \ |
1482 | unsigned int omt; \ | 1482 | unsigned int omt; \ |
1483 | unsigned int flags; \ | 1483 | unsigned long flags; \ |
1484 | \ | 1484 | \ |
1485 | local_irq_save(flags); \ | 1485 | local_irq_save(flags); \ |
1486 | omt = __dmt(); \ | 1486 | omt = __dmt(); \ |
@@ -1498,7 +1498,7 @@ change_c0_##name(unsigned int change, unsigned int new) \ | |||
1498 | { \ | 1498 | { \ |
1499 | unsigned int res; \ | 1499 | unsigned int res; \ |
1500 | unsigned int omt; \ | 1500 | unsigned int omt; \ |
1501 | unsigned int flags; \ | 1501 | unsigned long flags; \ |
1502 | \ | 1502 | \ |
1503 | local_irq_save(flags); \ | 1503 | local_irq_save(flags); \ |
1504 | \ | 1504 | \ |
diff --git a/include/asm-mips/pgtable-32.h b/include/asm-mips/pgtable-32.h index 4396e9ffd418..55813d6150c7 100644 --- a/include/asm-mips/pgtable-32.h +++ b/include/asm-mips/pgtable-32.h | |||
@@ -57,7 +57,7 @@ extern int add_temporary_entry(unsigned long entrylo0, unsigned long entrylo1, | |||
57 | #define PMD_ORDER 1 | 57 | #define PMD_ORDER 1 |
58 | #define PTE_ORDER 0 | 58 | #define PTE_ORDER 0 |
59 | 59 | ||
60 | #define PTRS_PER_PGD ((PAGE_SIZE << PGD_ORDER) / sizeof(pgd_t)) | 60 | #define PTRS_PER_PGD (USER_PTRS_PER_PGD * 2) |
61 | #define PTRS_PER_PTE ((PAGE_SIZE << PTE_ORDER) / sizeof(pte_t)) | 61 | #define PTRS_PER_PTE ((PAGE_SIZE << PTE_ORDER) / sizeof(pte_t)) |
62 | 62 | ||
63 | #define USER_PTRS_PER_PGD (0x80000000UL/PGDIR_SIZE) | 63 | #define USER_PTRS_PER_PGD (0x80000000UL/PGDIR_SIZE) |
diff --git a/include/asm-mips/smtc.h b/include/asm-mips/smtc.h index 3639b28f80db..ea60bf08dcb0 100644 --- a/include/asm-mips/smtc.h +++ b/include/asm-mips/smtc.h | |||
@@ -6,6 +6,7 @@ | |||
6 | */ | 6 | */ |
7 | 7 | ||
8 | #include <asm/mips_mt.h> | 8 | #include <asm/mips_mt.h> |
9 | #include <asm/smtc_ipi.h> | ||
9 | 10 | ||
10 | /* | 11 | /* |
11 | * System-wide SMTC status information | 12 | * System-wide SMTC status information |
@@ -38,14 +39,15 @@ struct mm_struct; | |||
38 | struct task_struct; | 39 | struct task_struct; |
39 | 40 | ||
40 | void smtc_get_new_mmu_context(struct mm_struct *mm, unsigned long cpu); | 41 | void smtc_get_new_mmu_context(struct mm_struct *mm, unsigned long cpu); |
41 | 42 | void self_ipi(struct smtc_ipi *); | |
42 | void smtc_flush_tlb_asid(unsigned long asid); | 43 | void smtc_flush_tlb_asid(unsigned long asid); |
43 | extern int mipsmt_build_cpu_map(int startslot); | 44 | extern int smtc_build_cpu_map(int startslot); |
44 | extern void mipsmt_prepare_cpus(void); | 45 | extern void smtc_prepare_cpus(int cpus); |
45 | extern void smtc_smp_finish(void); | 46 | extern void smtc_smp_finish(void); |
46 | extern void smtc_boot_secondary(int cpu, struct task_struct *t); | 47 | extern void smtc_boot_secondary(int cpu, struct task_struct *t); |
47 | extern void smtc_cpus_done(void); | 48 | extern void smtc_cpus_done(void); |
48 | 49 | ||
50 | |||
49 | /* | 51 | /* |
50 | * Sharing the TLB between multiple VPEs means that the | 52 | * Sharing the TLB between multiple VPEs means that the |
51 | * "random" index selection function is not allowed to | 53 | * "random" index selection function is not allowed to |
diff --git a/include/asm-mips/sn/mapped_kernel.h b/include/asm-mips/sn/mapped_kernel.h index c3dd5d0d525f..721496a0bb92 100644 --- a/include/asm-mips/sn/mapped_kernel.h +++ b/include/asm-mips/sn/mapped_kernel.h | |||
@@ -5,6 +5,8 @@ | |||
5 | #ifndef __ASM_SN_MAPPED_KERNEL_H | 5 | #ifndef __ASM_SN_MAPPED_KERNEL_H |
6 | #define __ASM_SN_MAPPED_KERNEL_H | 6 | #define __ASM_SN_MAPPED_KERNEL_H |
7 | 7 | ||
8 | #include <linux/mmzone.h> | ||
9 | |||
8 | /* | 10 | /* |
9 | * Note on how mapped kernels work: the text and data section is | 11 | * Note on how mapped kernels work: the text and data section is |
10 | * compiled at cksseg segment (LOADADDR = 0xc001c000), and the | 12 | * compiled at cksseg segment (LOADADDR = 0xc001c000), and the |
@@ -29,10 +31,8 @@ | |||
29 | #define MAPPED_ADDR_RO_TO_PHYS(x) (x - REP_BASE) | 31 | #define MAPPED_ADDR_RO_TO_PHYS(x) (x - REP_BASE) |
30 | #define MAPPED_ADDR_RW_TO_PHYS(x) (x - REP_BASE - 16777216) | 32 | #define MAPPED_ADDR_RW_TO_PHYS(x) (x - REP_BASE - 16777216) |
31 | 33 | ||
32 | #define MAPPED_KERN_RO_PHYSBASE(n) \ | 34 | #define MAPPED_KERN_RO_PHYSBASE(n) (hub_data(n)->kern_vars.kv_ro_baseaddr) |
33 | (PLAT_NODE_DATA(n)->kern_vars.kv_ro_baseaddr) | 35 | #define MAPPED_KERN_RW_PHYSBASE(n) (hub_data(n)->kern_vars.kv_rw_baseaddr) |
34 | #define MAPPED_KERN_RW_PHYSBASE(n) \ | ||
35 | (PLAT_NODE_DATA(n)->kern_vars.kv_rw_baseaddr) | ||
36 | 36 | ||
37 | #define MAPPED_KERN_RO_TO_PHYS(x) \ | 37 | #define MAPPED_KERN_RO_TO_PHYS(x) \ |
38 | ((unsigned long)MAPPED_ADDR_RO_TO_PHYS(x) | \ | 38 | ((unsigned long)MAPPED_ADDR_RO_TO_PHYS(x) | \ |
diff --git a/include/asm-mips/stackframe.h b/include/asm-mips/stackframe.h index 051e1af0bb95..4c37c4e5f72e 100644 --- a/include/asm-mips/stackframe.h +++ b/include/asm-mips/stackframe.h | |||
@@ -297,14 +297,31 @@ | |||
297 | #ifdef CONFIG_MIPS_MT_SMTC | 297 | #ifdef CONFIG_MIPS_MT_SMTC |
298 | .set mips32r2 | 298 | .set mips32r2 |
299 | /* | 299 | /* |
300 | * This may not really be necessary if ints are already | 300 | * We need to make sure the read-modify-write |
301 | * inhibited here. | 301 | * of Status below isn't perturbed by an interrupt |
302 | * or cross-TC access, so we need to do at least a DMT, | ||
303 | * protected by an interrupt-inhibit. But setting IXMT | ||
304 | * also creates a few-cycle window where an IPI could | ||
305 | * be queued and not be detected before potentially | ||
306 | * returning to a WAIT or user-mode loop. It must be | ||
307 | * replayed. | ||
308 | * | ||
309 | * We're in the middle of a context switch, and | ||
310 | * we can't dispatch it directly without trashing | ||
311 | * some registers, so we'll try to detect this unlikely | ||
312 | * case and program a software interrupt in the VPE, | ||
313 | * as would be done for a cross-VPE IPI. To accomodate | ||
314 | * the handling of that case, we're doing a DVPE instead | ||
315 | * of just a DMT here to protect against other threads. | ||
316 | * This is a lot of cruft to cover a tiny window. | ||
317 | * If you can find a better design, implement it! | ||
318 | * | ||
302 | */ | 319 | */ |
303 | mfc0 v0, CP0_TCSTATUS | 320 | mfc0 v0, CP0_TCSTATUS |
304 | ori v0, TCSTATUS_IXMT | 321 | ori v0, TCSTATUS_IXMT |
305 | mtc0 v0, CP0_TCSTATUS | 322 | mtc0 v0, CP0_TCSTATUS |
306 | _ehb | 323 | _ehb |
307 | DMT 5 # dmt a1 | 324 | DVPE 5 # dvpe a1 |
308 | jal mips_ihb | 325 | jal mips_ihb |
309 | #endif /* CONFIG_MIPS_MT_SMTC */ | 326 | #endif /* CONFIG_MIPS_MT_SMTC */ |
310 | mfc0 a0, CP0_STATUS | 327 | mfc0 a0, CP0_STATUS |
@@ -325,17 +342,50 @@ | |||
325 | */ | 342 | */ |
326 | LONG_L v1, PT_TCSTATUS(sp) | 343 | LONG_L v1, PT_TCSTATUS(sp) |
327 | _ehb | 344 | _ehb |
328 | mfc0 v0, CP0_TCSTATUS | 345 | mfc0 a0, CP0_TCSTATUS |
329 | andi v1, TCSTATUS_IXMT | 346 | andi v1, TCSTATUS_IXMT |
330 | /* We know that TCStatua.IXMT should be set from above */ | 347 | bnez v1, 0f |
331 | xori v0, v0, TCSTATUS_IXMT | 348 | |
332 | or v0, v0, v1 | 349 | /* |
333 | mtc0 v0, CP0_TCSTATUS | 350 | * We'd like to detect any IPIs queued in the tiny window |
334 | _ehb | 351 | * above and request an software interrupt to service them |
335 | andi a1, a1, VPECONTROL_TE | 352 | * when we ERET. |
353 | * | ||
354 | * Computing the offset into the IPIQ array of the executing | ||
355 | * TC's IPI queue in-line would be tedious. We use part of | ||
356 | * the TCContext register to hold 16 bits of offset that we | ||
357 | * can add in-line to find the queue head. | ||
358 | */ | ||
359 | mfc0 v0, CP0_TCCONTEXT | ||
360 | la a2, IPIQ | ||
361 | srl v0, v0, 16 | ||
362 | addu a2, a2, v0 | ||
363 | LONG_L v0, 0(a2) | ||
364 | beqz v0, 0f | ||
365 | /* | ||
366 | * If we have a queue, provoke dispatch within the VPE by setting C_SW1 | ||
367 | */ | ||
368 | mfc0 v0, CP0_CAUSE | ||
369 | ori v0, v0, C_SW1 | ||
370 | mtc0 v0, CP0_CAUSE | ||
371 | 0: | ||
372 | /* | ||
373 | * This test should really never branch but | ||
374 | * let's be prudent here. Having atomized | ||
375 | * the shared register modifications, we can | ||
376 | * now EVPE, and must do so before interrupts | ||
377 | * are potentially re-enabled. | ||
378 | */ | ||
379 | andi a1, a1, MVPCONTROL_EVP | ||
336 | beqz a1, 1f | 380 | beqz a1, 1f |
337 | emt | 381 | evpe |
338 | 1: | 382 | 1: |
383 | /* We know that TCStatua.IXMT should be set from above */ | ||
384 | xori a0, a0, TCSTATUS_IXMT | ||
385 | or a0, a0, v1 | ||
386 | mtc0 a0, CP0_TCSTATUS | ||
387 | _ehb | ||
388 | |||
339 | .set mips0 | 389 | .set mips0 |
340 | #endif /* CONFIG_MIPS_MT_SMTC */ | 390 | #endif /* CONFIG_MIPS_MT_SMTC */ |
341 | LONG_L v1, PT_EPC(sp) | 391 | LONG_L v1, PT_EPC(sp) |
diff --git a/include/asm-x86/acpi.h b/include/asm-x86/acpi.h index 635d764dc13e..35d1743b57ac 100644 --- a/include/asm-x86/acpi.h +++ b/include/asm-x86/acpi.h | |||
@@ -140,6 +140,8 @@ static inline unsigned int acpi_processor_cstate_check(unsigned int max_cstate) | |||
140 | boot_cpu_data.x86_model <= 0x05 && | 140 | boot_cpu_data.x86_model <= 0x05 && |
141 | boot_cpu_data.x86_mask < 0x0A) | 141 | boot_cpu_data.x86_mask < 0x0A) |
142 | return 1; | 142 | return 1; |
143 | else if (boot_cpu_has(X86_FEATURE_AMDC1E)) | ||
144 | return 1; | ||
143 | else | 145 | else |
144 | return max_cstate; | 146 | return max_cstate; |
145 | } | 147 | } |
diff --git a/include/asm-x86/cpufeature.h b/include/asm-x86/cpufeature.h index 9489283a4bcf..cfcfb0a806ba 100644 --- a/include/asm-x86/cpufeature.h +++ b/include/asm-x86/cpufeature.h | |||
@@ -81,6 +81,7 @@ | |||
81 | #define X86_FEATURE_LFENCE_RDTSC (3*32+18) /* Lfence synchronizes RDTSC */ | 81 | #define X86_FEATURE_LFENCE_RDTSC (3*32+18) /* Lfence synchronizes RDTSC */ |
82 | #define X86_FEATURE_11AP (3*32+19) /* Bad local APIC aka 11AP */ | 82 | #define X86_FEATURE_11AP (3*32+19) /* Bad local APIC aka 11AP */ |
83 | #define X86_FEATURE_NOPL (3*32+20) /* The NOPL (0F 1F) instructions */ | 83 | #define X86_FEATURE_NOPL (3*32+20) /* The NOPL (0F 1F) instructions */ |
84 | #define X86_FEATURE_AMDC1E (3*32+21) /* AMD C1E detected */ | ||
84 | 85 | ||
85 | /* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */ | 86 | /* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */ |
86 | #define X86_FEATURE_XMM3 (4*32+ 0) /* Streaming SIMD Extensions-3 */ | 87 | #define X86_FEATURE_XMM3 (4*32+ 0) /* Streaming SIMD Extensions-3 */ |
diff --git a/include/asm-x86/idle.h b/include/asm-x86/idle.h index d240e5b30a45..cbb649123612 100644 --- a/include/asm-x86/idle.h +++ b/include/asm-x86/idle.h | |||
@@ -10,4 +10,6 @@ void idle_notifier_register(struct notifier_block *n); | |||
10 | void enter_idle(void); | 10 | void enter_idle(void); |
11 | void exit_idle(void); | 11 | void exit_idle(void); |
12 | 12 | ||
13 | void c1e_remove_cpu(int cpu); | ||
14 | |||
13 | #endif | 15 | #endif |
diff --git a/include/asm-x86/kgdb.h b/include/asm-x86/kgdb.h index 484c47554f3b..94d63db10365 100644 --- a/include/asm-x86/kgdb.h +++ b/include/asm-x86/kgdb.h | |||
@@ -39,12 +39,13 @@ enum regnames { | |||
39 | GDB_FS, /* 14 */ | 39 | GDB_FS, /* 14 */ |
40 | GDB_GS, /* 15 */ | 40 | GDB_GS, /* 15 */ |
41 | }; | 41 | }; |
42 | #define NUMREGBYTES ((GDB_GS+1)*4) | ||
42 | #else /* ! CONFIG_X86_32 */ | 43 | #else /* ! CONFIG_X86_32 */ |
43 | enum regnames { | 44 | enum regnames64 { |
44 | GDB_AX, /* 0 */ | 45 | GDB_AX, /* 0 */ |
45 | GDB_DX, /* 1 */ | 46 | GDB_BX, /* 1 */ |
46 | GDB_CX, /* 2 */ | 47 | GDB_CX, /* 2 */ |
47 | GDB_BX, /* 3 */ | 48 | GDB_DX, /* 3 */ |
48 | GDB_SI, /* 4 */ | 49 | GDB_SI, /* 4 */ |
49 | GDB_DI, /* 5 */ | 50 | GDB_DI, /* 5 */ |
50 | GDB_BP, /* 6 */ | 51 | GDB_BP, /* 6 */ |
@@ -58,18 +59,15 @@ enum regnames { | |||
58 | GDB_R14, /* 14 */ | 59 | GDB_R14, /* 14 */ |
59 | GDB_R15, /* 15 */ | 60 | GDB_R15, /* 15 */ |
60 | GDB_PC, /* 16 */ | 61 | GDB_PC, /* 16 */ |
61 | GDB_PS, /* 17 */ | ||
62 | }; | 62 | }; |
63 | #endif /* CONFIG_X86_32 */ | ||
64 | 63 | ||
65 | /* | 64 | enum regnames32 { |
66 | * Number of bytes of registers: | 65 | GDB_PS = 34, |
67 | */ | 66 | GDB_CS, |
68 | #ifdef CONFIG_X86_32 | 67 | GDB_SS, |
69 | # define NUMREGBYTES 64 | 68 | }; |
70 | #else | 69 | #define NUMREGBYTES ((GDB_SS+1)*4) |
71 | # define NUMREGBYTES ((GDB_PS+1)*8) | 70 | #endif /* CONFIG_X86_32 */ |
72 | #endif | ||
73 | 71 | ||
74 | static inline void arch_kgdb_breakpoint(void) | 72 | static inline void arch_kgdb_breakpoint(void) |
75 | { | 73 | { |
diff --git a/include/asm-x86/uaccess_64.h b/include/asm-x86/uaccess_64.h index 515d4dce96b5..45806d60bcbe 100644 --- a/include/asm-x86/uaccess_64.h +++ b/include/asm-x86/uaccess_64.h | |||
@@ -7,6 +7,7 @@ | |||
7 | #include <linux/compiler.h> | 7 | #include <linux/compiler.h> |
8 | #include <linux/errno.h> | 8 | #include <linux/errno.h> |
9 | #include <linux/prefetch.h> | 9 | #include <linux/prefetch.h> |
10 | #include <linux/lockdep.h> | ||
10 | #include <asm/page.h> | 11 | #include <asm/page.h> |
11 | 12 | ||
12 | /* | 13 | /* |
diff --git a/include/linux/ata.h b/include/linux/ata.h index 1ce19c1ef0e9..8a12d718c169 100644 --- a/include/linux/ata.h +++ b/include/linux/ata.h | |||
@@ -745,7 +745,7 @@ static inline int ata_ok(u8 status) | |||
745 | static inline int lba_28_ok(u64 block, u32 n_block) | 745 | static inline int lba_28_ok(u64 block, u32 n_block) |
746 | { | 746 | { |
747 | /* check the ending block number */ | 747 | /* check the ending block number */ |
748 | return ((block + n_block - 1) < ((u64)1 << 28)) && (n_block <= 256); | 748 | return ((block + n_block) < ((u64)1 << 28)) && (n_block <= 256); |
749 | } | 749 | } |
750 | 750 | ||
751 | static inline int lba_48_ok(u64 block, u32 n_block) | 751 | static inline int lba_48_ok(u64 block, u32 n_block) |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 44710d7e7bff..53ea933cf60b 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -843,8 +843,6 @@ extern int blkdev_issue_flush(struct block_device *, sector_t *); | |||
843 | */ | 843 | */ |
844 | extern int blk_verify_command(struct blk_cmd_filter *filter, | 844 | extern int blk_verify_command(struct blk_cmd_filter *filter, |
845 | unsigned char *cmd, int has_write_perm); | 845 | unsigned char *cmd, int has_write_perm); |
846 | extern int blk_register_filter(struct gendisk *disk); | ||
847 | extern void blk_unregister_filter(struct gendisk *disk); | ||
848 | extern void blk_set_cmd_filter_defaults(struct blk_cmd_filter *filter); | 846 | extern void blk_set_cmd_filter_defaults(struct blk_cmd_filter *filter); |
849 | 847 | ||
850 | #define MAX_PHYS_SEGMENTS 128 | 848 | #define MAX_PHYS_SEGMENTS 128 |
diff --git a/arch/arm/include/asm/cnt32_to_63.h b/include/linux/cnt32_to_63.h index 480c873fa746..8c0f9505b48c 100644 --- a/arch/arm/include/asm/cnt32_to_63.h +++ b/include/linux/cnt32_to_63.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * include/asm/cnt32_to_63.h -- extend a 32-bit counter to 63 bits | 2 | * Extend a 32-bit counter to 63 bits |
3 | * | 3 | * |
4 | * Author: Nicolas Pitre | 4 | * Author: Nicolas Pitre |
5 | * Created: December 3, 2006 | 5 | * Created: December 3, 2006 |
@@ -10,15 +10,30 @@ | |||
10 | * as published by the Free Software Foundation. | 10 | * as published by the Free Software Foundation. |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #ifndef __INCLUDE_CNT32_TO_63_H__ | 13 | #ifndef __LINUX_CNT32_TO_63_H__ |
14 | #define __INCLUDE_CNT32_TO_63_H__ | 14 | #define __LINUX_CNT32_TO_63_H__ |
15 | 15 | ||
16 | #include <linux/compiler.h> | 16 | #include <linux/compiler.h> |
17 | #include <asm/types.h> | 17 | #include <linux/types.h> |
18 | #include <asm/byteorder.h> | 18 | #include <asm/byteorder.h> |
19 | 19 | ||
20 | /* | 20 | /* this is used only to give gcc a clue about good code generation */ |
21 | * Prototype: u64 cnt32_to_63(u32 cnt) | 21 | union cnt32_to_63 { |
22 | struct { | ||
23 | #if defined(__LITTLE_ENDIAN) | ||
24 | u32 lo, hi; | ||
25 | #elif defined(__BIG_ENDIAN) | ||
26 | u32 hi, lo; | ||
27 | #endif | ||
28 | }; | ||
29 | u64 val; | ||
30 | }; | ||
31 | |||
32 | |||
33 | /** | ||
34 | * cnt32_to_63 - Expand a 32-bit counter to a 63-bit counter | ||
35 | * @cnt_lo: The low part of the counter | ||
36 | * | ||
22 | * Many hardware clock counters are only 32 bits wide and therefore have | 37 | * Many hardware clock counters are only 32 bits wide and therefore have |
23 | * a relatively short period making wrap-arounds rather frequent. This | 38 | * a relatively short period making wrap-arounds rather frequent. This |
24 | * is a problem when implementing sched_clock() for example, where a 64-bit | 39 | * is a problem when implementing sched_clock() for example, where a 64-bit |
@@ -51,26 +66,13 @@ | |||
51 | * clear-bit instruction. Otherwise caller must remember to clear the top | 66 | * clear-bit instruction. Otherwise caller must remember to clear the top |
52 | * bit explicitly. | 67 | * bit explicitly. |
53 | */ | 68 | */ |
54 | |||
55 | /* this is used only to give gcc a clue about good code generation */ | ||
56 | typedef union { | ||
57 | struct { | ||
58 | #if defined(__LITTLE_ENDIAN) | ||
59 | u32 lo, hi; | ||
60 | #elif defined(__BIG_ENDIAN) | ||
61 | u32 hi, lo; | ||
62 | #endif | ||
63 | }; | ||
64 | u64 val; | ||
65 | } cnt32_to_63_t; | ||
66 | |||
67 | #define cnt32_to_63(cnt_lo) \ | 69 | #define cnt32_to_63(cnt_lo) \ |
68 | ({ \ | 70 | ({ \ |
69 | static volatile u32 __m_cnt_hi = 0; \ | 71 | static volatile u32 __m_cnt_hi; \ |
70 | cnt32_to_63_t __x; \ | 72 | union cnt32_to_63 __x; \ |
71 | __x.hi = __m_cnt_hi; \ | 73 | __x.hi = __m_cnt_hi; \ |
72 | __x.lo = (cnt_lo); \ | 74 | __x.lo = (cnt_lo); \ |
73 | if (unlikely((s32)(__x.hi ^ __x.lo) < 0)) \ | 75 | if (unlikely((s32)(__x.hi ^ __x.lo) < 0)) \ |
74 | __m_cnt_hi = __x.hi = (__x.hi ^ 0x80000000) + (__x.hi >> 31); \ | 76 | __m_cnt_hi = __x.hi = (__x.hi ^ 0x80000000) + (__x.hi >> 31); \ |
75 | __x.val; \ | 77 | __x.val; \ |
76 | }) | 78 | }) |
diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h index 6d93dce61cbb..2f245fe63bda 100644 --- a/include/linux/hrtimer.h +++ b/include/linux/hrtimer.h | |||
@@ -47,14 +47,22 @@ enum hrtimer_restart { | |||
47 | * HRTIMER_CB_IRQSAFE: Callback may run in hardirq context | 47 | * HRTIMER_CB_IRQSAFE: Callback may run in hardirq context |
48 | * HRTIMER_CB_IRQSAFE_NO_RESTART: Callback may run in hardirq context and | 48 | * HRTIMER_CB_IRQSAFE_NO_RESTART: Callback may run in hardirq context and |
49 | * does not restart the timer | 49 | * does not restart the timer |
50 | * HRTIMER_CB_IRQSAFE_NO_SOFTIRQ: Callback must run in hardirq context | 50 | * HRTIMER_CB_IRQSAFE_PERCPU: Callback must run in hardirq context |
51 | * Special mode for tick emultation | 51 | * Special mode for tick emulation and |
52 | * scheduler timer. Such timers are per | ||
53 | * cpu and not allowed to be migrated on | ||
54 | * cpu unplug. | ||
55 | * HRTIMER_CB_IRQSAFE_UNLOCKED: Callback should run in hardirq context | ||
56 | * with timer->base lock unlocked | ||
57 | * used for timers which call wakeup to | ||
58 | * avoid lock order problems with rq->lock | ||
52 | */ | 59 | */ |
53 | enum hrtimer_cb_mode { | 60 | enum hrtimer_cb_mode { |
54 | HRTIMER_CB_SOFTIRQ, | 61 | HRTIMER_CB_SOFTIRQ, |
55 | HRTIMER_CB_IRQSAFE, | 62 | HRTIMER_CB_IRQSAFE, |
56 | HRTIMER_CB_IRQSAFE_NO_RESTART, | 63 | HRTIMER_CB_IRQSAFE_NO_RESTART, |
57 | HRTIMER_CB_IRQSAFE_NO_SOFTIRQ, | 64 | HRTIMER_CB_IRQSAFE_PERCPU, |
65 | HRTIMER_CB_IRQSAFE_UNLOCKED, | ||
58 | }; | 66 | }; |
59 | 67 | ||
60 | /* | 68 | /* |
@@ -67,9 +75,10 @@ enum hrtimer_cb_mode { | |||
67 | * 0x02 callback function running | 75 | * 0x02 callback function running |
68 | * 0x04 callback pending (high resolution mode) | 76 | * 0x04 callback pending (high resolution mode) |
69 | * | 77 | * |
70 | * Special case: | 78 | * Special cases: |
71 | * 0x03 callback function running and enqueued | 79 | * 0x03 callback function running and enqueued |
72 | * (was requeued on another CPU) | 80 | * (was requeued on another CPU) |
81 | * 0x09 timer was migrated on CPU hotunplug | ||
73 | * The "callback function running and enqueued" status is only possible on | 82 | * The "callback function running and enqueued" status is only possible on |
74 | * SMP. It happens for example when a posix timer expired and the callback | 83 | * SMP. It happens for example when a posix timer expired and the callback |
75 | * queued a signal. Between dropping the lock which protects the posix timer | 84 | * queued a signal. Between dropping the lock which protects the posix timer |
@@ -87,6 +96,7 @@ enum hrtimer_cb_mode { | |||
87 | #define HRTIMER_STATE_ENQUEUED 0x01 | 96 | #define HRTIMER_STATE_ENQUEUED 0x01 |
88 | #define HRTIMER_STATE_CALLBACK 0x02 | 97 | #define HRTIMER_STATE_CALLBACK 0x02 |
89 | #define HRTIMER_STATE_PENDING 0x04 | 98 | #define HRTIMER_STATE_PENDING 0x04 |
99 | #define HRTIMER_STATE_MIGRATE 0x08 | ||
90 | 100 | ||
91 | /** | 101 | /** |
92 | * struct hrtimer - the basic hrtimer structure | 102 | * struct hrtimer - the basic hrtimer structure |
diff --git a/include/linux/ide.h b/include/linux/ide.h index 1524829f73f2..6514db8fd2e4 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
@@ -366,7 +366,9 @@ enum { | |||
366 | /* Currently on a filemark */ | 366 | /* Currently on a filemark */ |
367 | IDE_AFLAG_FILEMARK = (1 << 25), | 367 | IDE_AFLAG_FILEMARK = (1 << 25), |
368 | /* 0 = no tape is loaded, so we don't rewind after ejecting */ | 368 | /* 0 = no tape is loaded, so we don't rewind after ejecting */ |
369 | IDE_AFLAG_MEDIUM_PRESENT = (1 << 26) | 369 | IDE_AFLAG_MEDIUM_PRESENT = (1 << 26), |
370 | |||
371 | IDE_AFLAG_NO_AUTOCLOSE = (1 << 27), | ||
370 | }; | 372 | }; |
371 | 373 | ||
372 | struct ide_drive_s { | 374 | struct ide_drive_s { |
diff --git a/include/linux/ioport.h b/include/linux/ioport.h index 8d3b7a9afd17..350033e8f4e1 100644 --- a/include/linux/ioport.h +++ b/include/linux/ioport.h | |||
@@ -159,9 +159,9 @@ extern struct resource * __devm_request_region(struct device *dev, | |||
159 | struct resource *parent, resource_size_t start, | 159 | struct resource *parent, resource_size_t start, |
160 | resource_size_t n, const char *name); | 160 | resource_size_t n, const char *name); |
161 | 161 | ||
162 | #define devm_release_region(start,n) \ | 162 | #define devm_release_region(dev, start, n) \ |
163 | __devm_release_region(dev, &ioport_resource, (start), (n)) | 163 | __devm_release_region(dev, &ioport_resource, (start), (n)) |
164 | #define devm_release_mem_region(start,n) \ | 164 | #define devm_release_mem_region(dev, start, n) \ |
165 | __devm_release_region(dev, &iomem_resource, (start), (n)) | 165 | __devm_release_region(dev, &iomem_resource, (start), (n)) |
166 | 166 | ||
167 | extern void __devm_release_region(struct device *dev, struct resource *parent, | 167 | extern void __devm_release_region(struct device *dev, struct resource *parent, |
diff --git a/include/linux/memstick.h b/include/linux/memstick.h index a9f998a3f48b..d0c37e682234 100644 --- a/include/linux/memstick.h +++ b/include/linux/memstick.h | |||
@@ -21,30 +21,30 @@ | |||
21 | struct ms_status_register { | 21 | struct ms_status_register { |
22 | unsigned char reserved; | 22 | unsigned char reserved; |
23 | unsigned char interrupt; | 23 | unsigned char interrupt; |
24 | #define MEMSTICK_INT_CMDNAK 0x0001 | 24 | #define MEMSTICK_INT_CMDNAK 0x01 |
25 | #define MEMSTICK_INT_IOREQ 0x0008 | 25 | #define MEMSTICK_INT_IOREQ 0x08 |
26 | #define MEMSTICK_INT_IOBREQ 0x0010 | 26 | #define MEMSTICK_INT_IOBREQ 0x10 |
27 | #define MEMSTICK_INT_BREQ 0x0020 | 27 | #define MEMSTICK_INT_BREQ 0x20 |
28 | #define MEMSTICK_INT_ERR 0x0040 | 28 | #define MEMSTICK_INT_ERR 0x40 |
29 | #define MEMSTICK_INT_CED 0x0080 | 29 | #define MEMSTICK_INT_CED 0x80 |
30 | 30 | ||
31 | unsigned char status0; | 31 | unsigned char status0; |
32 | #define MEMSTICK_STATUS0_WP 0x0001 | 32 | #define MEMSTICK_STATUS0_WP 0x01 |
33 | #define MEMSTICK_STATUS0_SL 0x0002 | 33 | #define MEMSTICK_STATUS0_SL 0x02 |
34 | #define MEMSTICK_STATUS0_BF 0x0010 | 34 | #define MEMSTICK_STATUS0_BF 0x10 |
35 | #define MEMSTICK_STATUS0_BE 0x0020 | 35 | #define MEMSTICK_STATUS0_BE 0x20 |
36 | #define MEMSTICK_STATUS0_FB0 0x0040 | 36 | #define MEMSTICK_STATUS0_FB0 0x40 |
37 | #define MEMSTICK_STATUS0_MB 0x0080 | 37 | #define MEMSTICK_STATUS0_MB 0x80 |
38 | 38 | ||
39 | unsigned char status1; | 39 | unsigned char status1; |
40 | #define MEMSTICK_STATUS1_UCFG 0x0001 | 40 | #define MEMSTICK_STATUS1_UCFG 0x01 |
41 | #define MEMSTICK_STATUS1_FGER 0x0002 | 41 | #define MEMSTICK_STATUS1_FGER 0x02 |
42 | #define MEMSTICK_STATUS1_UCEX 0x0004 | 42 | #define MEMSTICK_STATUS1_UCEX 0x04 |
43 | #define MEMSTICK_STATUS1_EXER 0x0008 | 43 | #define MEMSTICK_STATUS1_EXER 0x08 |
44 | #define MEMSTICK_STATUS1_UCDT 0x0010 | 44 | #define MEMSTICK_STATUS1_UCDT 0x10 |
45 | #define MEMSTICK_STATUS1_DTER 0x0020 | 45 | #define MEMSTICK_STATUS1_DTER 0x20 |
46 | #define MEMSTICK_STATUS1_FBI 0x0040 | 46 | #define MEMSTICK_STATUS1_FB1 0x40 |
47 | #define MEMSTICK_STATUS1_MB 0x0080 | 47 | #define MEMSTICK_STATUS1_MB 0x80 |
48 | } __attribute__((packed)); | 48 | } __attribute__((packed)); |
49 | 49 | ||
50 | struct ms_id_register { | 50 | struct ms_id_register { |
@@ -56,32 +56,32 @@ struct ms_id_register { | |||
56 | 56 | ||
57 | struct ms_param_register { | 57 | struct ms_param_register { |
58 | unsigned char system; | 58 | unsigned char system; |
59 | #define MEMSTICK_SYS_ATEN 0xc0 | ||
60 | #define MEMSTICK_SYS_BAMD 0x80 | ||
61 | #define MEMSTICK_SYS_PAM 0x08 | 59 | #define MEMSTICK_SYS_PAM 0x08 |
60 | #define MEMSTICK_SYS_BAMD 0x80 | ||
62 | 61 | ||
63 | unsigned char block_address_msb; | 62 | unsigned char block_address_msb; |
64 | unsigned short block_address; | 63 | unsigned short block_address; |
65 | unsigned char cp; | 64 | unsigned char cp; |
66 | #define MEMSTICK_CP_BLOCK 0x0000 | 65 | #define MEMSTICK_CP_BLOCK 0x00 |
67 | #define MEMSTICK_CP_PAGE 0x0020 | 66 | #define MEMSTICK_CP_PAGE 0x20 |
68 | #define MEMSTICK_CP_EXTRA 0x0040 | 67 | #define MEMSTICK_CP_EXTRA 0x40 |
69 | #define MEMSTICK_CP_OVERWRITE 0x0080 | 68 | #define MEMSTICK_CP_OVERWRITE 0x80 |
70 | 69 | ||
71 | unsigned char page_address; | 70 | unsigned char page_address; |
72 | } __attribute__((packed)); | 71 | } __attribute__((packed)); |
73 | 72 | ||
74 | struct ms_extra_data_register { | 73 | struct ms_extra_data_register { |
75 | unsigned char overwrite_flag; | 74 | unsigned char overwrite_flag; |
76 | #define MEMSTICK_OVERWRITE_UPDATA 0x0010 | 75 | #define MEMSTICK_OVERWRITE_UDST 0x10 |
77 | #define MEMSTICK_OVERWRITE_PAGE 0x0060 | 76 | #define MEMSTICK_OVERWRITE_PGST1 0x20 |
78 | #define MEMSTICK_OVERWRITE_BLOCK 0x0080 | 77 | #define MEMSTICK_OVERWRITE_PGST0 0x40 |
78 | #define MEMSTICK_OVERWRITE_BKST 0x80 | ||
79 | 79 | ||
80 | unsigned char management_flag; | 80 | unsigned char management_flag; |
81 | #define MEMSTICK_MANAGEMENT_SYSTEM 0x0004 | 81 | #define MEMSTICK_MANAGEMENT_SYSFLG 0x04 |
82 | #define MEMSTICK_MANAGEMENT_TRANS_TABLE 0x0008 | 82 | #define MEMSTICK_MANAGEMENT_ATFLG 0x08 |
83 | #define MEMSTICK_MANAGEMENT_COPY 0x0010 | 83 | #define MEMSTICK_MANAGEMENT_SCMS1 0x10 |
84 | #define MEMSTICK_MANAGEMENT_ACCESS 0x0020 | 84 | #define MEMSTICK_MANAGEMENT_SCMS0 0x20 |
85 | 85 | ||
86 | unsigned short logical_address; | 86 | unsigned short logical_address; |
87 | } __attribute__((packed)); | 87 | } __attribute__((packed)); |
@@ -96,9 +96,9 @@ struct ms_register { | |||
96 | 96 | ||
97 | struct mspro_param_register { | 97 | struct mspro_param_register { |
98 | unsigned char system; | 98 | unsigned char system; |
99 | #define MEMSTICK_SYS_SERIAL 0x80 | ||
100 | #define MEMSTICK_SYS_PAR4 0x00 | 99 | #define MEMSTICK_SYS_PAR4 0x00 |
101 | #define MEMSTICK_SYS_PAR8 0x40 | 100 | #define MEMSTICK_SYS_PAR8 0x40 |
101 | #define MEMSTICK_SYS_SERIAL 0x80 | ||
102 | 102 | ||
103 | unsigned short data_count; | 103 | unsigned short data_count; |
104 | unsigned int data_address; | 104 | unsigned int data_address; |
@@ -147,7 +147,7 @@ struct ms_register_addr { | |||
147 | unsigned char w_length; | 147 | unsigned char w_length; |
148 | } __attribute__((packed)); | 148 | } __attribute__((packed)); |
149 | 149 | ||
150 | enum { | 150 | enum memstick_tpc { |
151 | MS_TPC_READ_MG_STATUS = 0x01, | 151 | MS_TPC_READ_MG_STATUS = 0x01, |
152 | MS_TPC_READ_LONG_DATA = 0x02, | 152 | MS_TPC_READ_LONG_DATA = 0x02, |
153 | MS_TPC_READ_SHORT_DATA = 0x03, | 153 | MS_TPC_READ_SHORT_DATA = 0x03, |
@@ -167,7 +167,7 @@ enum { | |||
167 | MS_TPC_SET_CMD = 0x0e | 167 | MS_TPC_SET_CMD = 0x0e |
168 | }; | 168 | }; |
169 | 169 | ||
170 | enum { | 170 | enum memstick_command { |
171 | MS_CMD_BLOCK_END = 0x33, | 171 | MS_CMD_BLOCK_END = 0x33, |
172 | MS_CMD_RESET = 0x3c, | 172 | MS_CMD_RESET = 0x3c, |
173 | MS_CMD_BLOCK_WRITE = 0x55, | 173 | MS_CMD_BLOCK_WRITE = 0x55, |
@@ -201,8 +201,6 @@ enum { | |||
201 | 201 | ||
202 | /*** Driver structures and functions ***/ | 202 | /*** Driver structures and functions ***/ |
203 | 203 | ||
204 | #define MEMSTICK_PART_SHIFT 3 | ||
205 | |||
206 | enum memstick_param { MEMSTICK_POWER = 1, MEMSTICK_INTERFACE }; | 204 | enum memstick_param { MEMSTICK_POWER = 1, MEMSTICK_INTERFACE }; |
207 | 205 | ||
208 | #define MEMSTICK_POWER_OFF 0 | 206 | #define MEMSTICK_POWER_OFF 0 |
@@ -215,24 +213,27 @@ enum memstick_param { MEMSTICK_POWER = 1, MEMSTICK_INTERFACE }; | |||
215 | struct memstick_host; | 213 | struct memstick_host; |
216 | struct memstick_driver; | 214 | struct memstick_driver; |
217 | 215 | ||
216 | struct memstick_device_id { | ||
217 | unsigned char match_flags; | ||
218 | #define MEMSTICK_MATCH_ALL 0x01 | 218 | #define MEMSTICK_MATCH_ALL 0x01 |
219 | 219 | ||
220 | unsigned char type; | ||
220 | #define MEMSTICK_TYPE_LEGACY 0xff | 221 | #define MEMSTICK_TYPE_LEGACY 0xff |
221 | #define MEMSTICK_TYPE_DUO 0x00 | 222 | #define MEMSTICK_TYPE_DUO 0x00 |
222 | #define MEMSTICK_TYPE_PRO 0x01 | 223 | #define MEMSTICK_TYPE_PRO 0x01 |
223 | 224 | ||
225 | unsigned char category; | ||
224 | #define MEMSTICK_CATEGORY_STORAGE 0xff | 226 | #define MEMSTICK_CATEGORY_STORAGE 0xff |
225 | #define MEMSTICK_CATEGORY_STORAGE_DUO 0x00 | 227 | #define MEMSTICK_CATEGORY_STORAGE_DUO 0x00 |
228 | #define MEMSTICK_CATEGORY_IO 0x01 | ||
229 | #define MEMSTICK_CATEGORY_IO_PRO 0x10 | ||
226 | 230 | ||
227 | #define MEMSTICK_CLASS_GENERIC 0xff | ||
228 | #define MEMSTICK_CLASS_GENERIC_DUO 0x00 | ||
229 | |||
230 | |||
231 | struct memstick_device_id { | ||
232 | unsigned char match_flags; | ||
233 | unsigned char type; | ||
234 | unsigned char category; | ||
235 | unsigned char class; | 231 | unsigned char class; |
232 | #define MEMSTICK_CLASS_FLASH 0xff | ||
233 | #define MEMSTICK_CLASS_DUO 0x00 | ||
234 | #define MEMSTICK_CLASS_ROM 0x01 | ||
235 | #define MEMSTICK_CLASS_RO 0x02 | ||
236 | #define MEMSTICK_CLASS_WP 0x03 | ||
236 | }; | 237 | }; |
237 | 238 | ||
238 | struct memstick_request { | 239 | struct memstick_request { |
@@ -319,9 +320,9 @@ void memstick_suspend_host(struct memstick_host *host); | |||
319 | void memstick_resume_host(struct memstick_host *host); | 320 | void memstick_resume_host(struct memstick_host *host); |
320 | 321 | ||
321 | void memstick_init_req_sg(struct memstick_request *mrq, unsigned char tpc, | 322 | void memstick_init_req_sg(struct memstick_request *mrq, unsigned char tpc, |
322 | struct scatterlist *sg); | 323 | const struct scatterlist *sg); |
323 | void memstick_init_req(struct memstick_request *mrq, unsigned char tpc, | 324 | void memstick_init_req(struct memstick_request *mrq, unsigned char tpc, |
324 | void *buf, size_t length); | 325 | const void *buf, size_t length); |
325 | int memstick_next_req(struct memstick_host *host, | 326 | int memstick_next_req(struct memstick_host *host, |
326 | struct memstick_request **mrq); | 327 | struct memstick_request **mrq); |
327 | void memstick_new_req(struct memstick_host *host); | 328 | void memstick_new_req(struct memstick_host *host); |
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h index 655ea0d1ee14..b2f944468313 100644 --- a/include/linux/mlx4/device.h +++ b/include/linux/mlx4/device.h | |||
@@ -141,6 +141,10 @@ enum { | |||
141 | MLX4_STAT_RATE_OFFSET = 5 | 141 | MLX4_STAT_RATE_OFFSET = 5 |
142 | }; | 142 | }; |
143 | 143 | ||
144 | enum { | ||
145 | MLX4_MTT_FLAG_PRESENT = 1 | ||
146 | }; | ||
147 | |||
144 | static inline u64 mlx4_fw_ver(u64 major, u64 minor, u64 subminor) | 148 | static inline u64 mlx4_fw_ver(u64 major, u64 minor, u64 subminor) |
145 | { | 149 | { |
146 | return (major << 32) | (minor << 16) | subminor; | 150 | return (major << 32) | (minor << 16) | subminor; |
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 443bc7cd8c62..428328a05fa1 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h | |||
@@ -751,8 +751,9 @@ static inline int zonelist_node_idx(struct zoneref *zoneref) | |||
751 | * | 751 | * |
752 | * This function returns the next zone at or below a given zone index that is | 752 | * This function returns the next zone at or below a given zone index that is |
753 | * within the allowed nodemask using a cursor as the starting point for the | 753 | * within the allowed nodemask using a cursor as the starting point for the |
754 | * search. The zoneref returned is a cursor that is used as the next starting | 754 | * search. The zoneref returned is a cursor that represents the current zone |
755 | * point for future calls to next_zones_zonelist(). | 755 | * being examined. It should be advanced by one before calling |
756 | * next_zones_zonelist again. | ||
756 | */ | 757 | */ |
757 | struct zoneref *next_zones_zonelist(struct zoneref *z, | 758 | struct zoneref *next_zones_zonelist(struct zoneref *z, |
758 | enum zone_type highest_zoneidx, | 759 | enum zone_type highest_zoneidx, |
@@ -768,9 +769,8 @@ struct zoneref *next_zones_zonelist(struct zoneref *z, | |||
768 | * | 769 | * |
769 | * This function returns the first zone at or below a given zone index that is | 770 | * This function returns the first zone at or below a given zone index that is |
770 | * within the allowed nodemask. The zoneref returned is a cursor that can be | 771 | * within the allowed nodemask. The zoneref returned is a cursor that can be |
771 | * used to iterate the zonelist with next_zones_zonelist. The cursor should | 772 | * used to iterate the zonelist with next_zones_zonelist by advancing it by |
772 | * not be used by the caller as it does not match the value of the zone | 773 | * one before calling. |
773 | * returned. | ||
774 | */ | 774 | */ |
775 | static inline struct zoneref *first_zones_zonelist(struct zonelist *zonelist, | 775 | static inline struct zoneref *first_zones_zonelist(struct zonelist *zonelist, |
776 | enum zone_type highest_zoneidx, | 776 | enum zone_type highest_zoneidx, |
@@ -795,7 +795,7 @@ static inline struct zoneref *first_zones_zonelist(struct zonelist *zonelist, | |||
795 | #define for_each_zone_zonelist_nodemask(zone, z, zlist, highidx, nodemask) \ | 795 | #define for_each_zone_zonelist_nodemask(zone, z, zlist, highidx, nodemask) \ |
796 | for (z = first_zones_zonelist(zlist, highidx, nodemask, &zone); \ | 796 | for (z = first_zones_zonelist(zlist, highidx, nodemask, &zone); \ |
797 | zone; \ | 797 | zone; \ |
798 | z = next_zones_zonelist(z, highidx, nodemask, &zone)) \ | 798 | z = next_zones_zonelist(++z, highidx, nodemask, &zone)) \ |
799 | 799 | ||
800 | /** | 800 | /** |
801 | * for_each_zone_zonelist - helper macro to iterate over valid zones in a zonelist at or below a given zone index | 801 | * for_each_zone_zonelist - helper macro to iterate over valid zones in a zonelist at or below a given zone index |
diff --git a/include/linux/pci.h b/include/linux/pci.h index c0e14008a3c2..98dc6243a706 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -534,7 +534,7 @@ extern void pci_sort_breadthfirst(void); | |||
534 | #ifdef CONFIG_PCI_LEGACY | 534 | #ifdef CONFIG_PCI_LEGACY |
535 | struct pci_dev __deprecated *pci_find_device(unsigned int vendor, | 535 | struct pci_dev __deprecated *pci_find_device(unsigned int vendor, |
536 | unsigned int device, | 536 | unsigned int device, |
537 | const struct pci_dev *from); | 537 | struct pci_dev *from); |
538 | struct pci_dev __deprecated *pci_find_slot(unsigned int bus, | 538 | struct pci_dev __deprecated *pci_find_slot(unsigned int bus, |
539 | unsigned int devfn); | 539 | unsigned int devfn); |
540 | #endif /* CONFIG_PCI_LEGACY */ | 540 | #endif /* CONFIG_PCI_LEGACY */ |
@@ -550,7 +550,7 @@ struct pci_dev *pci_get_device(unsigned int vendor, unsigned int device, | |||
550 | struct pci_dev *from); | 550 | struct pci_dev *from); |
551 | struct pci_dev *pci_get_subsys(unsigned int vendor, unsigned int device, | 551 | struct pci_dev *pci_get_subsys(unsigned int vendor, unsigned int device, |
552 | unsigned int ss_vendor, unsigned int ss_device, | 552 | unsigned int ss_vendor, unsigned int ss_device, |
553 | const struct pci_dev *from); | 553 | struct pci_dev *from); |
554 | struct pci_dev *pci_get_slot(struct pci_bus *bus, unsigned int devfn); | 554 | struct pci_dev *pci_get_slot(struct pci_bus *bus, unsigned int devfn); |
555 | struct pci_dev *pci_get_bus_and_slot(unsigned int bus, unsigned int devfn); | 555 | struct pci_dev *pci_get_bus_and_slot(unsigned int bus, unsigned int devfn); |
556 | struct pci_dev *pci_get_class(unsigned int class, struct pci_dev *from); | 556 | struct pci_dev *pci_get_class(unsigned int class, struct pci_dev *from); |
@@ -816,7 +816,7 @@ _PCI_NOP_ALL(write,) | |||
816 | 816 | ||
817 | static inline struct pci_dev *pci_find_device(unsigned int vendor, | 817 | static inline struct pci_dev *pci_find_device(unsigned int vendor, |
818 | unsigned int device, | 818 | unsigned int device, |
819 | const struct pci_dev *from) | 819 | struct pci_dev *from) |
820 | { | 820 | { |
821 | return NULL; | 821 | return NULL; |
822 | } | 822 | } |
@@ -838,7 +838,7 @@ static inline struct pci_dev *pci_get_subsys(unsigned int vendor, | |||
838 | unsigned int device, | 838 | unsigned int device, |
839 | unsigned int ss_vendor, | 839 | unsigned int ss_vendor, |
840 | unsigned int ss_device, | 840 | unsigned int ss_device, |
841 | const struct pci_dev *from) | 841 | struct pci_dev *from) |
842 | { | 842 | { |
843 | return NULL; | 843 | return NULL; |
844 | } | 844 | } |
diff --git a/include/linux/pnp.h b/include/linux/pnp.h index 1ce54b63085d..be764e514e35 100644 --- a/include/linux/pnp.h +++ b/include/linux/pnp.h | |||
@@ -21,7 +21,14 @@ struct pnp_dev; | |||
21 | /* | 21 | /* |
22 | * Resource Management | 22 | * Resource Management |
23 | */ | 23 | */ |
24 | #ifdef CONFIG_PNP | ||
24 | struct resource *pnp_get_resource(struct pnp_dev *, unsigned int, unsigned int); | 25 | struct resource *pnp_get_resource(struct pnp_dev *, unsigned int, unsigned int); |
26 | #else | ||
27 | static inline struct resource *pnp_get_resource(struct pnp_dev *dev, unsigned int type, unsigned int num) | ||
28 | { | ||
29 | return NULL; | ||
30 | } | ||
31 | #endif | ||
25 | 32 | ||
26 | static inline int pnp_resource_valid(struct resource *res) | 33 | static inline int pnp_resource_valid(struct resource *res) |
27 | { | 34 | { |
diff --git a/include/linux/ramfs.h b/include/linux/ramfs.h index b160fb18e8d6..37aaf2b39863 100644 --- a/include/linux/ramfs.h +++ b/include/linux/ramfs.h | |||
@@ -6,6 +6,7 @@ extern int ramfs_get_sb(struct file_system_type *fs_type, | |||
6 | int flags, const char *dev_name, void *data, struct vfsmount *mnt); | 6 | int flags, const char *dev_name, void *data, struct vfsmount *mnt); |
7 | 7 | ||
8 | #ifndef CONFIG_MMU | 8 | #ifndef CONFIG_MMU |
9 | extern int ramfs_nommu_expand_for_mapping(struct inode *inode, size_t newsize); | ||
9 | extern unsigned long ramfs_nommu_get_unmapped_area(struct file *file, | 10 | extern unsigned long ramfs_nommu_get_unmapped_area(struct file *file, |
10 | unsigned long addr, | 11 | unsigned long addr, |
11 | unsigned long len, | 12 | unsigned long len, |
diff --git a/include/linux/smb.h b/include/linux/smb.h index caa43b2370cb..82fefddc5987 100644 --- a/include/linux/smb.h +++ b/include/linux/smb.h | |||
@@ -11,7 +11,9 @@ | |||
11 | 11 | ||
12 | #include <linux/types.h> | 12 | #include <linux/types.h> |
13 | #include <linux/magic.h> | 13 | #include <linux/magic.h> |
14 | #ifdef __KERNEL__ | ||
14 | #include <linux/time.h> | 15 | #include <linux/time.h> |
16 | #endif | ||
15 | 17 | ||
16 | enum smb_protocol { | 18 | enum smb_protocol { |
17 | SMB_PROTOCOL_NONE, | 19 | SMB_PROTOCOL_NONE, |
diff --git a/include/linux/stacktrace.h b/include/linux/stacktrace.h index 5da9794b2d78..b106fd8e0d5c 100644 --- a/include/linux/stacktrace.h +++ b/include/linux/stacktrace.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef __LINUX_STACKTRACE_H | 1 | #ifndef __LINUX_STACKTRACE_H |
2 | #define __LINUX_STACKTRACE_H | 2 | #define __LINUX_STACKTRACE_H |
3 | 3 | ||
4 | struct task_struct; | ||
5 | |||
4 | #ifdef CONFIG_STACKTRACE | 6 | #ifdef CONFIG_STACKTRACE |
5 | struct stack_trace { | 7 | struct stack_trace { |
6 | unsigned int nr_entries, max_entries; | 8 | unsigned int nr_entries, max_entries; |
diff --git a/include/net/9p/9p.h b/include/net/9p/9p.h index b3d3e27c6299..c3626c0ba9d3 100644 --- a/include/net/9p/9p.h +++ b/include/net/9p/9p.h | |||
@@ -596,4 +596,5 @@ int p9_idpool_check(int id, struct p9_idpool *p); | |||
596 | int p9_error_init(void); | 596 | int p9_error_init(void); |
597 | int p9_errstr2errno(char *, int); | 597 | int p9_errstr2errno(char *, int); |
598 | int p9_trans_fd_init(void); | 598 | int p9_trans_fd_init(void); |
599 | void p9_trans_fd_exit(void); | ||
599 | #endif /* NET_9P_H */ | 600 | #endif /* NET_9P_H */ |
diff --git a/include/net/9p/transport.h b/include/net/9p/transport.h index 0db3a4038dc0..3ca737120a90 100644 --- a/include/net/9p/transport.h +++ b/include/net/9p/transport.h | |||
@@ -26,6 +26,8 @@ | |||
26 | #ifndef NET_9P_TRANSPORT_H | 26 | #ifndef NET_9P_TRANSPORT_H |
27 | #define NET_9P_TRANSPORT_H | 27 | #define NET_9P_TRANSPORT_H |
28 | 28 | ||
29 | #include <linux/module.h> | ||
30 | |||
29 | /** | 31 | /** |
30 | * enum p9_trans_status - different states of underlying transports | 32 | * enum p9_trans_status - different states of underlying transports |
31 | * @Connected: transport is connected and healthy | 33 | * @Connected: transport is connected and healthy |
@@ -91,9 +93,12 @@ struct p9_trans_module { | |||
91 | int maxsize; /* max message size of transport */ | 93 | int maxsize; /* max message size of transport */ |
92 | int def; /* this transport should be default */ | 94 | int def; /* this transport should be default */ |
93 | struct p9_trans * (*create)(const char *, char *, int, unsigned char); | 95 | struct p9_trans * (*create)(const char *, char *, int, unsigned char); |
96 | struct module *owner; | ||
94 | }; | 97 | }; |
95 | 98 | ||
96 | void v9fs_register_trans(struct p9_trans_module *m); | 99 | void v9fs_register_trans(struct p9_trans_module *m); |
97 | struct p9_trans_module *v9fs_match_trans(const substring_t *name); | 100 | void v9fs_unregister_trans(struct p9_trans_module *m); |
98 | struct p9_trans_module *v9fs_default_trans(void); | 101 | struct p9_trans_module *v9fs_get_trans_by_name(const substring_t *name); |
102 | struct p9_trans_module *v9fs_get_default_trans(void); | ||
103 | void v9fs_put_trans(struct p9_trans_module *m); | ||
99 | #endif /* NET_9P_TRANSPORT_H */ | 104 | #endif /* NET_9P_TRANSPORT_H */ |
diff --git a/include/net/netlink.h b/include/net/netlink.h index 18024b8cecb8..208fe5a38546 100644 --- a/include/net/netlink.h +++ b/include/net/netlink.h | |||
@@ -702,7 +702,7 @@ static inline int nla_len(const struct nlattr *nla) | |||
702 | */ | 702 | */ |
703 | static inline int nla_ok(const struct nlattr *nla, int remaining) | 703 | static inline int nla_ok(const struct nlattr *nla, int remaining) |
704 | { | 704 | { |
705 | return remaining >= sizeof(*nla) && | 705 | return remaining >= (int) sizeof(*nla) && |
706 | nla->nla_len >= sizeof(*nla) && | 706 | nla->nla_len >= sizeof(*nla) && |
707 | nla->nla_len <= remaining; | 707 | nla->nla_len <= remaining; |
708 | } | 708 | } |
diff --git a/include/net/sctp/sm.h b/include/net/sctp/sm.h index 24811732bdb2..029a54a02396 100644 --- a/include/net/sctp/sm.h +++ b/include/net/sctp/sm.h | |||
@@ -227,6 +227,9 @@ struct sctp_chunk *sctp_make_abort_violation(const struct sctp_association *, | |||
227 | const struct sctp_chunk *, | 227 | const struct sctp_chunk *, |
228 | const __u8 *, | 228 | const __u8 *, |
229 | const size_t ); | 229 | const size_t ); |
230 | struct sctp_chunk *sctp_make_violation_paramlen(const struct sctp_association *, | ||
231 | const struct sctp_chunk *, | ||
232 | struct sctp_paramhdr *); | ||
230 | struct sctp_chunk *sctp_make_heartbeat(const struct sctp_association *, | 233 | struct sctp_chunk *sctp_make_heartbeat(const struct sctp_association *, |
231 | const struct sctp_transport *, | 234 | const struct sctp_transport *, |
232 | const void *payload, | 235 | const void *payload, |
diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h index 5c40cc537d4c..192f8716aa9e 100644 --- a/include/scsi/scsi.h +++ b/include/scsi/scsi.h | |||
@@ -309,6 +309,20 @@ struct scsi_lun { | |||
309 | }; | 309 | }; |
310 | 310 | ||
311 | /* | 311 | /* |
312 | * The Well Known LUNS (SAM-3) in our int representation of a LUN | ||
313 | */ | ||
314 | #define SCSI_W_LUN_BASE 0xc100 | ||
315 | #define SCSI_W_LUN_REPORT_LUNS (SCSI_W_LUN_BASE + 1) | ||
316 | #define SCSI_W_LUN_ACCESS_CONTROL (SCSI_W_LUN_BASE + 2) | ||
317 | #define SCSI_W_LUN_TARGET_LOG_PAGE (SCSI_W_LUN_BASE + 3) | ||
318 | |||
319 | static inline int scsi_is_wlun(unsigned int lun) | ||
320 | { | ||
321 | return (lun & 0xff00) == SCSI_W_LUN_BASE; | ||
322 | } | ||
323 | |||
324 | |||
325 | /* | ||
312 | * MESSAGE CODES | 326 | * MESSAGE CODES |
313 | */ | 327 | */ |
314 | 328 | ||
diff --git a/init/main.c b/init/main.c index f6f7042331dc..3820323c4c84 100644 --- a/init/main.c +++ b/init/main.c | |||
@@ -708,7 +708,7 @@ int do_one_initcall(initcall_t fn) | |||
708 | int result; | 708 | int result; |
709 | 709 | ||
710 | if (initcall_debug) { | 710 | if (initcall_debug) { |
711 | print_fn_descriptor_symbol("calling %s\n", fn); | 711 | printk("calling %pF\n", fn); |
712 | t0 = ktime_get(); | 712 | t0 = ktime_get(); |
713 | } | 713 | } |
714 | 714 | ||
@@ -718,8 +718,8 @@ int do_one_initcall(initcall_t fn) | |||
718 | t1 = ktime_get(); | 718 | t1 = ktime_get(); |
719 | delta = ktime_sub(t1, t0); | 719 | delta = ktime_sub(t1, t0); |
720 | 720 | ||
721 | print_fn_descriptor_symbol("initcall %s", fn); | 721 | printk("initcall %pF returned %d after %Ld msecs\n", |
722 | printk(" returned %d after %Ld msecs\n", result, | 722 | fn, result, |
723 | (unsigned long long) delta.tv64 >> 20); | 723 | (unsigned long long) delta.tv64 >> 20); |
724 | } | 724 | } |
725 | 725 | ||
@@ -737,8 +737,7 @@ int do_one_initcall(initcall_t fn) | |||
737 | local_irq_enable(); | 737 | local_irq_enable(); |
738 | } | 738 | } |
739 | if (msgbuf[0]) { | 739 | if (msgbuf[0]) { |
740 | print_fn_descriptor_symbol(KERN_WARNING "initcall %s", fn); | 740 | printk("initcall %pF returned with %s\n", fn, msgbuf); |
741 | printk(" returned with %s\n", msgbuf); | ||
742 | } | 741 | } |
743 | 742 | ||
744 | return result; | 743 | return result; |
diff --git a/kernel/cgroup.c b/kernel/cgroup.c index 13932abde159..a0123d75ec9a 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c | |||
@@ -2738,14 +2738,15 @@ void cgroup_fork_callbacks(struct task_struct *child) | |||
2738 | */ | 2738 | */ |
2739 | void cgroup_mm_owner_callbacks(struct task_struct *old, struct task_struct *new) | 2739 | void cgroup_mm_owner_callbacks(struct task_struct *old, struct task_struct *new) |
2740 | { | 2740 | { |
2741 | struct cgroup *oldcgrp, *newcgrp; | 2741 | struct cgroup *oldcgrp, *newcgrp = NULL; |
2742 | 2742 | ||
2743 | if (need_mm_owner_callback) { | 2743 | if (need_mm_owner_callback) { |
2744 | int i; | 2744 | int i; |
2745 | for (i = 0; i < CGROUP_SUBSYS_COUNT; i++) { | 2745 | for (i = 0; i < CGROUP_SUBSYS_COUNT; i++) { |
2746 | struct cgroup_subsys *ss = subsys[i]; | 2746 | struct cgroup_subsys *ss = subsys[i]; |
2747 | oldcgrp = task_cgroup(old, ss->subsys_id); | 2747 | oldcgrp = task_cgroup(old, ss->subsys_id); |
2748 | newcgrp = task_cgroup(new, ss->subsys_id); | 2748 | if (new) |
2749 | newcgrp = task_cgroup(new, ss->subsys_id); | ||
2749 | if (oldcgrp == newcgrp) | 2750 | if (oldcgrp == newcgrp) |
2750 | continue; | 2751 | continue; |
2751 | if (ss->mm_owner_changed) | 2752 | if (ss->mm_owner_changed) |
diff --git a/kernel/cpuset.c b/kernel/cpuset.c index f227bc172690..827cd9adccb2 100644 --- a/kernel/cpuset.c +++ b/kernel/cpuset.c | |||
@@ -843,37 +843,25 @@ static void cpuset_change_cpumask(struct task_struct *tsk, | |||
843 | /** | 843 | /** |
844 | * update_tasks_cpumask - Update the cpumasks of tasks in the cpuset. | 844 | * update_tasks_cpumask - Update the cpumasks of tasks in the cpuset. |
845 | * @cs: the cpuset in which each task's cpus_allowed mask needs to be changed | 845 | * @cs: the cpuset in which each task's cpus_allowed mask needs to be changed |
846 | * @heap: if NULL, defer allocating heap memory to cgroup_scan_tasks() | ||
846 | * | 847 | * |
847 | * Called with cgroup_mutex held | 848 | * Called with cgroup_mutex held |
848 | * | 849 | * |
849 | * The cgroup_scan_tasks() function will scan all the tasks in a cgroup, | 850 | * The cgroup_scan_tasks() function will scan all the tasks in a cgroup, |
850 | * calling callback functions for each. | 851 | * calling callback functions for each. |
851 | * | 852 | * |
852 | * Return 0 if successful, -errno if not. | 853 | * No return value. It's guaranteed that cgroup_scan_tasks() always returns 0 |
854 | * if @heap != NULL. | ||
853 | */ | 855 | */ |
854 | static int update_tasks_cpumask(struct cpuset *cs) | 856 | static void update_tasks_cpumask(struct cpuset *cs, struct ptr_heap *heap) |
855 | { | 857 | { |
856 | struct cgroup_scanner scan; | 858 | struct cgroup_scanner scan; |
857 | struct ptr_heap heap; | ||
858 | int retval; | ||
859 | |||
860 | /* | ||
861 | * cgroup_scan_tasks() will initialize heap->gt for us. | ||
862 | * heap_init() is still needed here for we should not change | ||
863 | * cs->cpus_allowed when heap_init() fails. | ||
864 | */ | ||
865 | retval = heap_init(&heap, PAGE_SIZE, GFP_KERNEL, NULL); | ||
866 | if (retval) | ||
867 | return retval; | ||
868 | 859 | ||
869 | scan.cg = cs->css.cgroup; | 860 | scan.cg = cs->css.cgroup; |
870 | scan.test_task = cpuset_test_cpumask; | 861 | scan.test_task = cpuset_test_cpumask; |
871 | scan.process_task = cpuset_change_cpumask; | 862 | scan.process_task = cpuset_change_cpumask; |
872 | scan.heap = &heap; | 863 | scan.heap = heap; |
873 | retval = cgroup_scan_tasks(&scan); | 864 | cgroup_scan_tasks(&scan); |
874 | |||
875 | heap_free(&heap); | ||
876 | return retval; | ||
877 | } | 865 | } |
878 | 866 | ||
879 | /** | 867 | /** |
@@ -883,6 +871,7 @@ static int update_tasks_cpumask(struct cpuset *cs) | |||
883 | */ | 871 | */ |
884 | static int update_cpumask(struct cpuset *cs, const char *buf) | 872 | static int update_cpumask(struct cpuset *cs, const char *buf) |
885 | { | 873 | { |
874 | struct ptr_heap heap; | ||
886 | struct cpuset trialcs; | 875 | struct cpuset trialcs; |
887 | int retval; | 876 | int retval; |
888 | int is_load_balanced; | 877 | int is_load_balanced; |
@@ -917,6 +906,10 @@ static int update_cpumask(struct cpuset *cs, const char *buf) | |||
917 | if (cpus_equal(cs->cpus_allowed, trialcs.cpus_allowed)) | 906 | if (cpus_equal(cs->cpus_allowed, trialcs.cpus_allowed)) |
918 | return 0; | 907 | return 0; |
919 | 908 | ||
909 | retval = heap_init(&heap, PAGE_SIZE, GFP_KERNEL, NULL); | ||
910 | if (retval) | ||
911 | return retval; | ||
912 | |||
920 | is_load_balanced = is_sched_load_balance(&trialcs); | 913 | is_load_balanced = is_sched_load_balance(&trialcs); |
921 | 914 | ||
922 | mutex_lock(&callback_mutex); | 915 | mutex_lock(&callback_mutex); |
@@ -927,9 +920,9 @@ static int update_cpumask(struct cpuset *cs, const char *buf) | |||
927 | * Scan tasks in the cpuset, and update the cpumasks of any | 920 | * Scan tasks in the cpuset, and update the cpumasks of any |
928 | * that need an update. | 921 | * that need an update. |
929 | */ | 922 | */ |
930 | retval = update_tasks_cpumask(cs); | 923 | update_tasks_cpumask(cs, &heap); |
931 | if (retval < 0) | 924 | |
932 | return retval; | 925 | heap_free(&heap); |
933 | 926 | ||
934 | if (is_load_balanced) | 927 | if (is_load_balanced) |
935 | async_rebuild_sched_domains(); | 928 | async_rebuild_sched_domains(); |
@@ -1965,7 +1958,7 @@ static void scan_for_empty_cpusets(const struct cpuset *root) | |||
1965 | nodes_empty(cp->mems_allowed)) | 1958 | nodes_empty(cp->mems_allowed)) |
1966 | remove_tasks_in_empty_cpuset(cp); | 1959 | remove_tasks_in_empty_cpuset(cp); |
1967 | else { | 1960 | else { |
1968 | update_tasks_cpumask(cp); | 1961 | update_tasks_cpumask(cp, NULL); |
1969 | update_tasks_nodemask(cp, &oldmems); | 1962 | update_tasks_nodemask(cp, &oldmems); |
1970 | } | 1963 | } |
1971 | } | 1964 | } |
diff --git a/kernel/exit.c b/kernel/exit.c index 16395644a98f..85a83c831856 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
@@ -583,8 +583,6 @@ mm_need_new_owner(struct mm_struct *mm, struct task_struct *p) | |||
583 | * If there are other users of the mm and the owner (us) is exiting | 583 | * If there are other users of the mm and the owner (us) is exiting |
584 | * we need to find a new owner to take on the responsibility. | 584 | * we need to find a new owner to take on the responsibility. |
585 | */ | 585 | */ |
586 | if (!mm) | ||
587 | return 0; | ||
588 | if (atomic_read(&mm->mm_users) <= 1) | 586 | if (atomic_read(&mm->mm_users) <= 1) |
589 | return 0; | 587 | return 0; |
590 | if (mm->owner != p) | 588 | if (mm->owner != p) |
@@ -627,6 +625,16 @@ retry: | |||
627 | } while_each_thread(g, c); | 625 | } while_each_thread(g, c); |
628 | 626 | ||
629 | read_unlock(&tasklist_lock); | 627 | read_unlock(&tasklist_lock); |
628 | /* | ||
629 | * We found no owner yet mm_users > 1: this implies that we are | ||
630 | * most likely racing with swapoff (try_to_unuse()) or /proc or | ||
631 | * ptrace or page migration (get_task_mm()). Mark owner as NULL, | ||
632 | * so that subsystems can understand the callback and take action. | ||
633 | */ | ||
634 | down_write(&mm->mmap_sem); | ||
635 | cgroup_mm_owner_callbacks(mm->owner, NULL); | ||
636 | mm->owner = NULL; | ||
637 | up_write(&mm->mmap_sem); | ||
630 | return; | 638 | return; |
631 | 639 | ||
632 | assign_new_owner: | 640 | assign_new_owner: |
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c index b8e4dce80a74..cdec83e722fa 100644 --- a/kernel/hrtimer.c +++ b/kernel/hrtimer.c | |||
@@ -672,13 +672,14 @@ static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer, | |||
672 | */ | 672 | */ |
673 | BUG_ON(timer->function(timer) != HRTIMER_NORESTART); | 673 | BUG_ON(timer->function(timer) != HRTIMER_NORESTART); |
674 | return 1; | 674 | return 1; |
675 | case HRTIMER_CB_IRQSAFE_NO_SOFTIRQ: | 675 | case HRTIMER_CB_IRQSAFE_PERCPU: |
676 | case HRTIMER_CB_IRQSAFE_UNLOCKED: | ||
676 | /* | 677 | /* |
677 | * This is solely for the sched tick emulation with | 678 | * This is solely for the sched tick emulation with |
678 | * dynamic tick support to ensure that we do not | 679 | * dynamic tick support to ensure that we do not |
679 | * restart the tick right on the edge and end up with | 680 | * restart the tick right on the edge and end up with |
680 | * the tick timer in the softirq ! The calling site | 681 | * the tick timer in the softirq ! The calling site |
681 | * takes care of this. | 682 | * takes care of this. Also used for hrtimer sleeper ! |
682 | */ | 683 | */ |
683 | debug_hrtimer_deactivate(timer); | 684 | debug_hrtimer_deactivate(timer); |
684 | return 1; | 685 | return 1; |
@@ -1245,7 +1246,8 @@ static void __run_hrtimer(struct hrtimer *timer) | |||
1245 | timer_stats_account_hrtimer(timer); | 1246 | timer_stats_account_hrtimer(timer); |
1246 | 1247 | ||
1247 | fn = timer->function; | 1248 | fn = timer->function; |
1248 | if (timer->cb_mode == HRTIMER_CB_IRQSAFE_NO_SOFTIRQ) { | 1249 | if (timer->cb_mode == HRTIMER_CB_IRQSAFE_PERCPU || |
1250 | timer->cb_mode == HRTIMER_CB_IRQSAFE_UNLOCKED) { | ||
1249 | /* | 1251 | /* |
1250 | * Used for scheduler timers, avoid lock inversion with | 1252 | * Used for scheduler timers, avoid lock inversion with |
1251 | * rq->lock and tasklist_lock. | 1253 | * rq->lock and tasklist_lock. |
@@ -1452,7 +1454,7 @@ void hrtimer_init_sleeper(struct hrtimer_sleeper *sl, struct task_struct *task) | |||
1452 | sl->timer.function = hrtimer_wakeup; | 1454 | sl->timer.function = hrtimer_wakeup; |
1453 | sl->task = task; | 1455 | sl->task = task; |
1454 | #ifdef CONFIG_HIGH_RES_TIMERS | 1456 | #ifdef CONFIG_HIGH_RES_TIMERS |
1455 | sl->timer.cb_mode = HRTIMER_CB_IRQSAFE_NO_SOFTIRQ; | 1457 | sl->timer.cb_mode = HRTIMER_CB_IRQSAFE_UNLOCKED; |
1456 | #endif | 1458 | #endif |
1457 | } | 1459 | } |
1458 | 1460 | ||
@@ -1591,29 +1593,95 @@ static void __cpuinit init_hrtimers_cpu(int cpu) | |||
1591 | 1593 | ||
1592 | #ifdef CONFIG_HOTPLUG_CPU | 1594 | #ifdef CONFIG_HOTPLUG_CPU |
1593 | 1595 | ||
1594 | static void migrate_hrtimer_list(struct hrtimer_clock_base *old_base, | 1596 | static int migrate_hrtimer_list(struct hrtimer_clock_base *old_base, |
1595 | struct hrtimer_clock_base *new_base) | 1597 | struct hrtimer_clock_base *new_base, int dcpu) |
1596 | { | 1598 | { |
1597 | struct hrtimer *timer; | 1599 | struct hrtimer *timer; |
1598 | struct rb_node *node; | 1600 | struct rb_node *node; |
1601 | int raise = 0; | ||
1599 | 1602 | ||
1600 | while ((node = rb_first(&old_base->active))) { | 1603 | while ((node = rb_first(&old_base->active))) { |
1601 | timer = rb_entry(node, struct hrtimer, node); | 1604 | timer = rb_entry(node, struct hrtimer, node); |
1602 | BUG_ON(hrtimer_callback_running(timer)); | 1605 | BUG_ON(hrtimer_callback_running(timer)); |
1603 | debug_hrtimer_deactivate(timer); | 1606 | debug_hrtimer_deactivate(timer); |
1604 | __remove_hrtimer(timer, old_base, HRTIMER_STATE_INACTIVE, 0); | 1607 | |
1608 | /* | ||
1609 | * Should not happen. Per CPU timers should be | ||
1610 | * canceled _before_ the migration code is called | ||
1611 | */ | ||
1612 | if (timer->cb_mode == HRTIMER_CB_IRQSAFE_PERCPU) { | ||
1613 | __remove_hrtimer(timer, old_base, | ||
1614 | HRTIMER_STATE_INACTIVE, 0); | ||
1615 | WARN(1, "hrtimer (%p %p)active but cpu %d dead\n", | ||
1616 | timer, timer->function, dcpu); | ||
1617 | continue; | ||
1618 | } | ||
1619 | |||
1620 | /* | ||
1621 | * Mark it as STATE_MIGRATE not INACTIVE otherwise the | ||
1622 | * timer could be seen as !active and just vanish away | ||
1623 | * under us on another CPU | ||
1624 | */ | ||
1625 | __remove_hrtimer(timer, old_base, HRTIMER_STATE_MIGRATE, 0); | ||
1605 | timer->base = new_base; | 1626 | timer->base = new_base; |
1606 | /* | 1627 | /* |
1607 | * Enqueue the timer. Allow reprogramming of the event device | 1628 | * Enqueue the timer. Allow reprogramming of the event device |
1608 | */ | 1629 | */ |
1609 | enqueue_hrtimer(timer, new_base, 1); | 1630 | enqueue_hrtimer(timer, new_base, 1); |
1631 | |||
1632 | #ifdef CONFIG_HIGH_RES_TIMERS | ||
1633 | /* | ||
1634 | * Happens with high res enabled when the timer was | ||
1635 | * already expired and the callback mode is | ||
1636 | * HRTIMER_CB_IRQSAFE_UNLOCKED (hrtimer_sleeper). The | ||
1637 | * enqueue code does not move them to the soft irq | ||
1638 | * pending list for performance/latency reasons, but | ||
1639 | * in the migration state, we need to do that | ||
1640 | * otherwise we end up with a stale timer. | ||
1641 | */ | ||
1642 | if (timer->state == HRTIMER_STATE_MIGRATE) { | ||
1643 | timer->state = HRTIMER_STATE_PENDING; | ||
1644 | list_add_tail(&timer->cb_entry, | ||
1645 | &new_base->cpu_base->cb_pending); | ||
1646 | raise = 1; | ||
1647 | } | ||
1648 | #endif | ||
1649 | /* Clear the migration state bit */ | ||
1650 | timer->state &= ~HRTIMER_STATE_MIGRATE; | ||
1651 | } | ||
1652 | return raise; | ||
1653 | } | ||
1654 | |||
1655 | #ifdef CONFIG_HIGH_RES_TIMERS | ||
1656 | static int migrate_hrtimer_pending(struct hrtimer_cpu_base *old_base, | ||
1657 | struct hrtimer_cpu_base *new_base) | ||
1658 | { | ||
1659 | struct hrtimer *timer; | ||
1660 | int raise = 0; | ||
1661 | |||
1662 | while (!list_empty(&old_base->cb_pending)) { | ||
1663 | timer = list_entry(old_base->cb_pending.next, | ||
1664 | struct hrtimer, cb_entry); | ||
1665 | |||
1666 | __remove_hrtimer(timer, timer->base, HRTIMER_STATE_PENDING, 0); | ||
1667 | timer->base = &new_base->clock_base[timer->base->index]; | ||
1668 | list_add_tail(&timer->cb_entry, &new_base->cb_pending); | ||
1669 | raise = 1; | ||
1610 | } | 1670 | } |
1671 | return raise; | ||
1672 | } | ||
1673 | #else | ||
1674 | static int migrate_hrtimer_pending(struct hrtimer_cpu_base *old_base, | ||
1675 | struct hrtimer_cpu_base *new_base) | ||
1676 | { | ||
1677 | return 0; | ||
1611 | } | 1678 | } |
1679 | #endif | ||
1612 | 1680 | ||
1613 | static void migrate_hrtimers(int cpu) | 1681 | static void migrate_hrtimers(int cpu) |
1614 | { | 1682 | { |
1615 | struct hrtimer_cpu_base *old_base, *new_base; | 1683 | struct hrtimer_cpu_base *old_base, *new_base; |
1616 | int i; | 1684 | int i, raise = 0; |
1617 | 1685 | ||
1618 | BUG_ON(cpu_online(cpu)); | 1686 | BUG_ON(cpu_online(cpu)); |
1619 | old_base = &per_cpu(hrtimer_bases, cpu); | 1687 | old_base = &per_cpu(hrtimer_bases, cpu); |
@@ -1626,14 +1694,21 @@ static void migrate_hrtimers(int cpu) | |||
1626 | spin_lock_nested(&old_base->lock, SINGLE_DEPTH_NESTING); | 1694 | spin_lock_nested(&old_base->lock, SINGLE_DEPTH_NESTING); |
1627 | 1695 | ||
1628 | for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++) { | 1696 | for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++) { |
1629 | migrate_hrtimer_list(&old_base->clock_base[i], | 1697 | if (migrate_hrtimer_list(&old_base->clock_base[i], |
1630 | &new_base->clock_base[i]); | 1698 | &new_base->clock_base[i], cpu)) |
1699 | raise = 1; | ||
1631 | } | 1700 | } |
1632 | 1701 | ||
1702 | if (migrate_hrtimer_pending(old_base, new_base)) | ||
1703 | raise = 1; | ||
1704 | |||
1633 | spin_unlock(&old_base->lock); | 1705 | spin_unlock(&old_base->lock); |
1634 | spin_unlock(&new_base->lock); | 1706 | spin_unlock(&new_base->lock); |
1635 | local_irq_enable(); | 1707 | local_irq_enable(); |
1636 | put_cpu_var(hrtimer_bases); | 1708 | put_cpu_var(hrtimer_bases); |
1709 | |||
1710 | if (raise) | ||
1711 | hrtimer_raise_softirq(); | ||
1637 | } | 1712 | } |
1638 | #endif /* CONFIG_HOTPLUG_CPU */ | 1713 | #endif /* CONFIG_HOTPLUG_CPU */ |
1639 | 1714 | ||
diff --git a/kernel/kexec.c b/kernel/kexec.c index 59f3f0df35d4..aef265325cd3 100644 --- a/kernel/kexec.c +++ b/kernel/kexec.c | |||
@@ -753,8 +753,14 @@ static struct page *kimage_alloc_page(struct kimage *image, | |||
753 | *old = addr | (*old & ~PAGE_MASK); | 753 | *old = addr | (*old & ~PAGE_MASK); |
754 | 754 | ||
755 | /* The old page I have found cannot be a | 755 | /* The old page I have found cannot be a |
756 | * destination page, so return it. | 756 | * destination page, so return it if it's |
757 | * gfp_flags honor the ones passed in. | ||
757 | */ | 758 | */ |
759 | if (!(gfp_mask & __GFP_HIGHMEM) && | ||
760 | PageHighMem(old_page)) { | ||
761 | kimage_free_pages(old_page); | ||
762 | continue; | ||
763 | } | ||
758 | addr = old_addr; | 764 | addr = old_addr; |
759 | page = old_page; | 765 | page = old_page; |
760 | break; | 766 | break; |
diff --git a/kernel/kgdb.c b/kernel/kgdb.c index eaa21fc9ad1d..e4dcfb2272a4 100644 --- a/kernel/kgdb.c +++ b/kernel/kgdb.c | |||
@@ -488,7 +488,7 @@ static int write_mem_msg(int binary) | |||
488 | if (err) | 488 | if (err) |
489 | return err; | 489 | return err; |
490 | if (CACHE_FLUSH_IS_SAFE) | 490 | if (CACHE_FLUSH_IS_SAFE) |
491 | flush_icache_range(addr, addr + length + 1); | 491 | flush_icache_range(addr, addr + length); |
492 | return 0; | 492 | return 0; |
493 | } | 493 | } |
494 | 494 | ||
@@ -590,6 +590,7 @@ static void kgdb_wait(struct pt_regs *regs) | |||
590 | 590 | ||
591 | /* Signal the primary CPU that we are done: */ | 591 | /* Signal the primary CPU that we are done: */ |
592 | atomic_set(&cpu_in_kgdb[cpu], 0); | 592 | atomic_set(&cpu_in_kgdb[cpu], 0); |
593 | touch_softlockup_watchdog(); | ||
593 | clocksource_touch_watchdog(); | 594 | clocksource_touch_watchdog(); |
594 | local_irq_restore(flags); | 595 | local_irq_restore(flags); |
595 | } | 596 | } |
@@ -1432,6 +1433,7 @@ acquirelock: | |||
1432 | atomic_read(&kgdb_cpu_doing_single_step) != cpu) { | 1433 | atomic_read(&kgdb_cpu_doing_single_step) != cpu) { |
1433 | 1434 | ||
1434 | atomic_set(&kgdb_active, -1); | 1435 | atomic_set(&kgdb_active, -1); |
1436 | touch_softlockup_watchdog(); | ||
1435 | clocksource_touch_watchdog(); | 1437 | clocksource_touch_watchdog(); |
1436 | local_irq_restore(flags); | 1438 | local_irq_restore(flags); |
1437 | 1439 | ||
@@ -1462,7 +1464,7 @@ acquirelock: | |||
1462 | * Get the passive CPU lock which will hold all the non-primary | 1464 | * Get the passive CPU lock which will hold all the non-primary |
1463 | * CPU in a spin state while the debugger is active | 1465 | * CPU in a spin state while the debugger is active |
1464 | */ | 1466 | */ |
1465 | if (!kgdb_single_step || !kgdb_contthread) { | 1467 | if (!kgdb_single_step) { |
1466 | for (i = 0; i < NR_CPUS; i++) | 1468 | for (i = 0; i < NR_CPUS; i++) |
1467 | atomic_set(&passive_cpu_wait[i], 1); | 1469 | atomic_set(&passive_cpu_wait[i], 1); |
1468 | } | 1470 | } |
@@ -1475,7 +1477,7 @@ acquirelock: | |||
1475 | 1477 | ||
1476 | #ifdef CONFIG_SMP | 1478 | #ifdef CONFIG_SMP |
1477 | /* Signal the other CPUs to enter kgdb_wait() */ | 1479 | /* Signal the other CPUs to enter kgdb_wait() */ |
1478 | if ((!kgdb_single_step || !kgdb_contthread) && kgdb_do_roundup) | 1480 | if ((!kgdb_single_step) && kgdb_do_roundup) |
1479 | kgdb_roundup_cpus(flags); | 1481 | kgdb_roundup_cpus(flags); |
1480 | #endif | 1482 | #endif |
1481 | 1483 | ||
@@ -1494,7 +1496,7 @@ acquirelock: | |||
1494 | kgdb_post_primary_code(ks->linux_regs, ks->ex_vector, ks->err_code); | 1496 | kgdb_post_primary_code(ks->linux_regs, ks->ex_vector, ks->err_code); |
1495 | kgdb_deactivate_sw_breakpoints(); | 1497 | kgdb_deactivate_sw_breakpoints(); |
1496 | kgdb_single_step = 0; | 1498 | kgdb_single_step = 0; |
1497 | kgdb_contthread = NULL; | 1499 | kgdb_contthread = current; |
1498 | exception_level = 0; | 1500 | exception_level = 0; |
1499 | 1501 | ||
1500 | /* Talk to debugger with gdbserial protocol */ | 1502 | /* Talk to debugger with gdbserial protocol */ |
@@ -1508,7 +1510,7 @@ acquirelock: | |||
1508 | kgdb_info[ks->cpu].task = NULL; | 1510 | kgdb_info[ks->cpu].task = NULL; |
1509 | atomic_set(&cpu_in_kgdb[ks->cpu], 0); | 1511 | atomic_set(&cpu_in_kgdb[ks->cpu], 0); |
1510 | 1512 | ||
1511 | if (!kgdb_single_step || !kgdb_contthread) { | 1513 | if (!kgdb_single_step) { |
1512 | for (i = NR_CPUS-1; i >= 0; i--) | 1514 | for (i = NR_CPUS-1; i >= 0; i--) |
1513 | atomic_set(&passive_cpu_wait[i], 0); | 1515 | atomic_set(&passive_cpu_wait[i], 0); |
1514 | /* | 1516 | /* |
@@ -1524,6 +1526,7 @@ acquirelock: | |||
1524 | kgdb_restore: | 1526 | kgdb_restore: |
1525 | /* Free kgdb_active */ | 1527 | /* Free kgdb_active */ |
1526 | atomic_set(&kgdb_active, -1); | 1528 | atomic_set(&kgdb_active, -1); |
1529 | touch_softlockup_watchdog(); | ||
1527 | clocksource_touch_watchdog(); | 1530 | clocksource_touch_watchdog(); |
1528 | local_irq_restore(flags); | 1531 | local_irq_restore(flags); |
1529 | 1532 | ||
diff --git a/kernel/posix-timers.c b/kernel/posix-timers.c index e36d5798cbff..5131e5471169 100644 --- a/kernel/posix-timers.c +++ b/kernel/posix-timers.c | |||
@@ -441,7 +441,7 @@ static struct k_itimer * alloc_posix_timer(void) | |||
441 | return tmr; | 441 | return tmr; |
442 | if (unlikely(!(tmr->sigq = sigqueue_alloc()))) { | 442 | if (unlikely(!(tmr->sigq = sigqueue_alloc()))) { |
443 | kmem_cache_free(posix_timers_cache, tmr); | 443 | kmem_cache_free(posix_timers_cache, tmr); |
444 | tmr = NULL; | 444 | return NULL; |
445 | } | 445 | } |
446 | memset(&tmr->sigq->info, 0, sizeof(siginfo_t)); | 446 | memset(&tmr->sigq->info, 0, sizeof(siginfo_t)); |
447 | return tmr; | 447 | return tmr; |
diff --git a/kernel/sched.c b/kernel/sched.c index cc1f81b50b82..ad1962dc0aa2 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -201,7 +201,7 @@ void init_rt_bandwidth(struct rt_bandwidth *rt_b, u64 period, u64 runtime) | |||
201 | hrtimer_init(&rt_b->rt_period_timer, | 201 | hrtimer_init(&rt_b->rt_period_timer, |
202 | CLOCK_MONOTONIC, HRTIMER_MODE_REL); | 202 | CLOCK_MONOTONIC, HRTIMER_MODE_REL); |
203 | rt_b->rt_period_timer.function = sched_rt_period_timer; | 203 | rt_b->rt_period_timer.function = sched_rt_period_timer; |
204 | rt_b->rt_period_timer.cb_mode = HRTIMER_CB_IRQSAFE_NO_SOFTIRQ; | 204 | rt_b->rt_period_timer.cb_mode = HRTIMER_CB_IRQSAFE_UNLOCKED; |
205 | } | 205 | } |
206 | 206 | ||
207 | static void start_rt_bandwidth(struct rt_bandwidth *rt_b) | 207 | static void start_rt_bandwidth(struct rt_bandwidth *rt_b) |
@@ -1087,7 +1087,7 @@ hotplug_hrtick(struct notifier_block *nfb, unsigned long action, void *hcpu) | |||
1087 | return NOTIFY_DONE; | 1087 | return NOTIFY_DONE; |
1088 | } | 1088 | } |
1089 | 1089 | ||
1090 | static void init_hrtick(void) | 1090 | static __init void init_hrtick(void) |
1091 | { | 1091 | { |
1092 | hotcpu_notifier(hotplug_hrtick, 0); | 1092 | hotcpu_notifier(hotplug_hrtick, 0); |
1093 | } | 1093 | } |
@@ -1119,7 +1119,7 @@ static void init_rq_hrtick(struct rq *rq) | |||
1119 | 1119 | ||
1120 | hrtimer_init(&rq->hrtick_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); | 1120 | hrtimer_init(&rq->hrtick_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); |
1121 | rq->hrtick_timer.function = hrtick; | 1121 | rq->hrtick_timer.function = hrtick; |
1122 | rq->hrtick_timer.cb_mode = HRTIMER_CB_IRQSAFE_NO_SOFTIRQ; | 1122 | rq->hrtick_timer.cb_mode = HRTIMER_CB_IRQSAFE_PERCPU; |
1123 | } | 1123 | } |
1124 | #else | 1124 | #else |
1125 | static inline void hrtick_clear(struct rq *rq) | 1125 | static inline void hrtick_clear(struct rq *rq) |
@@ -8909,6 +8909,9 @@ static int sched_rt_global_constraints(void) | |||
8909 | u64 rt_runtime, rt_period; | 8909 | u64 rt_runtime, rt_period; |
8910 | int ret = 0; | 8910 | int ret = 0; |
8911 | 8911 | ||
8912 | if (sysctl_sched_rt_period <= 0) | ||
8913 | return -EINVAL; | ||
8914 | |||
8912 | rt_period = ktime_to_ns(tg->rt_bandwidth.rt_period); | 8915 | rt_period = ktime_to_ns(tg->rt_bandwidth.rt_period); |
8913 | rt_runtime = tg->rt_bandwidth.rt_runtime; | 8916 | rt_runtime = tg->rt_bandwidth.rt_runtime; |
8914 | 8917 | ||
@@ -8925,6 +8928,9 @@ static int sched_rt_global_constraints(void) | |||
8925 | unsigned long flags; | 8928 | unsigned long flags; |
8926 | int i; | 8929 | int i; |
8927 | 8930 | ||
8931 | if (sysctl_sched_rt_period <= 0) | ||
8932 | return -EINVAL; | ||
8933 | |||
8928 | spin_lock_irqsave(&def_rt_bandwidth.rt_runtime_lock, flags); | 8934 | spin_lock_irqsave(&def_rt_bandwidth.rt_runtime_lock, flags); |
8929 | for_each_possible_cpu(i) { | 8935 | for_each_possible_cpu(i) { |
8930 | struct rt_rq *rt_rq = &cpu_rq(i)->rt; | 8936 | struct rt_rq *rt_rq = &cpu_rq(i)->rt; |
diff --git a/kernel/sched_rt.c b/kernel/sched_rt.c index 552310798dad..1113157b2058 100644 --- a/kernel/sched_rt.c +++ b/kernel/sched_rt.c | |||
@@ -350,6 +350,7 @@ static void __enable_runtime(struct rq *rq) | |||
350 | spin_lock(&rt_rq->rt_runtime_lock); | 350 | spin_lock(&rt_rq->rt_runtime_lock); |
351 | rt_rq->rt_runtime = rt_b->rt_runtime; | 351 | rt_rq->rt_runtime = rt_b->rt_runtime; |
352 | rt_rq->rt_time = 0; | 352 | rt_rq->rt_time = 0; |
353 | rt_rq->rt_throttled = 0; | ||
353 | spin_unlock(&rt_rq->rt_runtime_lock); | 354 | spin_unlock(&rt_rq->rt_runtime_lock); |
354 | spin_unlock(&rt_b->rt_runtime_lock); | 355 | spin_unlock(&rt_b->rt_runtime_lock); |
355 | } | 356 | } |
diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c index 1876b526c778..f8d968063cea 100644 --- a/kernel/time/clockevents.c +++ b/kernel/time/clockevents.c | |||
@@ -72,6 +72,16 @@ void clockevents_set_mode(struct clock_event_device *dev, | |||
72 | } | 72 | } |
73 | 73 | ||
74 | /** | 74 | /** |
75 | * clockevents_shutdown - shutdown the device and clear next_event | ||
76 | * @dev: device to shutdown | ||
77 | */ | ||
78 | void clockevents_shutdown(struct clock_event_device *dev) | ||
79 | { | ||
80 | clockevents_set_mode(dev, CLOCK_EVT_MODE_SHUTDOWN); | ||
81 | dev->next_event.tv64 = KTIME_MAX; | ||
82 | } | ||
83 | |||
84 | /** | ||
75 | * clockevents_program_event - Reprogram the clock event device. | 85 | * clockevents_program_event - Reprogram the clock event device. |
76 | * @expires: absolute expiry time (monotonic clock) | 86 | * @expires: absolute expiry time (monotonic clock) |
77 | * | 87 | * |
@@ -206,7 +216,7 @@ void clockevents_exchange_device(struct clock_event_device *old, | |||
206 | 216 | ||
207 | if (new) { | 217 | if (new) { |
208 | BUG_ON(new->mode != CLOCK_EVT_MODE_UNUSED); | 218 | BUG_ON(new->mode != CLOCK_EVT_MODE_UNUSED); |
209 | clockevents_set_mode(new, CLOCK_EVT_MODE_SHUTDOWN); | 219 | clockevents_shutdown(new); |
210 | } | 220 | } |
211 | local_irq_restore(flags); | 221 | local_irq_restore(flags); |
212 | } | 222 | } |
diff --git a/kernel/time/tick-broadcast.c b/kernel/time/tick-broadcast.c index 2f5a38294bf9..cb01cd8f919b 100644 --- a/kernel/time/tick-broadcast.c +++ b/kernel/time/tick-broadcast.c | |||
@@ -235,9 +235,9 @@ static void tick_do_broadcast_on_off(void *why) | |||
235 | case CLOCK_EVT_NOTIFY_BROADCAST_FORCE: | 235 | case CLOCK_EVT_NOTIFY_BROADCAST_FORCE: |
236 | if (!cpu_isset(cpu, tick_broadcast_mask)) { | 236 | if (!cpu_isset(cpu, tick_broadcast_mask)) { |
237 | cpu_set(cpu, tick_broadcast_mask); | 237 | cpu_set(cpu, tick_broadcast_mask); |
238 | if (td->mode == TICKDEV_MODE_PERIODIC) | 238 | if (tick_broadcast_device.mode == |
239 | clockevents_set_mode(dev, | 239 | TICKDEV_MODE_PERIODIC) |
240 | CLOCK_EVT_MODE_SHUTDOWN); | 240 | clockevents_shutdown(dev); |
241 | } | 241 | } |
242 | if (*reason == CLOCK_EVT_NOTIFY_BROADCAST_FORCE) | 242 | if (*reason == CLOCK_EVT_NOTIFY_BROADCAST_FORCE) |
243 | tick_broadcast_force = 1; | 243 | tick_broadcast_force = 1; |
@@ -246,7 +246,8 @@ static void tick_do_broadcast_on_off(void *why) | |||
246 | if (!tick_broadcast_force && | 246 | if (!tick_broadcast_force && |
247 | cpu_isset(cpu, tick_broadcast_mask)) { | 247 | cpu_isset(cpu, tick_broadcast_mask)) { |
248 | cpu_clear(cpu, tick_broadcast_mask); | 248 | cpu_clear(cpu, tick_broadcast_mask); |
249 | if (td->mode == TICKDEV_MODE_PERIODIC) | 249 | if (tick_broadcast_device.mode == |
250 | TICKDEV_MODE_PERIODIC) | ||
250 | tick_setup_periodic(dev, 0); | 251 | tick_setup_periodic(dev, 0); |
251 | } | 252 | } |
252 | break; | 253 | break; |
@@ -254,7 +255,7 @@ static void tick_do_broadcast_on_off(void *why) | |||
254 | 255 | ||
255 | if (cpus_empty(tick_broadcast_mask)) { | 256 | if (cpus_empty(tick_broadcast_mask)) { |
256 | if (!bc_stopped) | 257 | if (!bc_stopped) |
257 | clockevents_set_mode(bc, CLOCK_EVT_MODE_SHUTDOWN); | 258 | clockevents_shutdown(bc); |
258 | } else if (bc_stopped) { | 259 | } else if (bc_stopped) { |
259 | if (tick_broadcast_device.mode == TICKDEV_MODE_PERIODIC) | 260 | if (tick_broadcast_device.mode == TICKDEV_MODE_PERIODIC) |
260 | tick_broadcast_start_periodic(bc); | 261 | tick_broadcast_start_periodic(bc); |
@@ -306,7 +307,7 @@ void tick_shutdown_broadcast(unsigned int *cpup) | |||
306 | 307 | ||
307 | if (tick_broadcast_device.mode == TICKDEV_MODE_PERIODIC) { | 308 | if (tick_broadcast_device.mode == TICKDEV_MODE_PERIODIC) { |
308 | if (bc && cpus_empty(tick_broadcast_mask)) | 309 | if (bc && cpus_empty(tick_broadcast_mask)) |
309 | clockevents_set_mode(bc, CLOCK_EVT_MODE_SHUTDOWN); | 310 | clockevents_shutdown(bc); |
310 | } | 311 | } |
311 | 312 | ||
312 | spin_unlock_irqrestore(&tick_broadcast_lock, flags); | 313 | spin_unlock_irqrestore(&tick_broadcast_lock, flags); |
@@ -321,7 +322,7 @@ void tick_suspend_broadcast(void) | |||
321 | 322 | ||
322 | bc = tick_broadcast_device.evtdev; | 323 | bc = tick_broadcast_device.evtdev; |
323 | if (bc) | 324 | if (bc) |
324 | clockevents_set_mode(bc, CLOCK_EVT_MODE_SHUTDOWN); | 325 | clockevents_shutdown(bc); |
325 | 326 | ||
326 | spin_unlock_irqrestore(&tick_broadcast_lock, flags); | 327 | spin_unlock_irqrestore(&tick_broadcast_lock, flags); |
327 | } | 328 | } |
@@ -576,4 +577,12 @@ void tick_shutdown_broadcast_oneshot(unsigned int *cpup) | |||
576 | spin_unlock_irqrestore(&tick_broadcast_lock, flags); | 577 | spin_unlock_irqrestore(&tick_broadcast_lock, flags); |
577 | } | 578 | } |
578 | 579 | ||
580 | /* | ||
581 | * Check, whether the broadcast device is in one shot mode | ||
582 | */ | ||
583 | int tick_broadcast_oneshot_active(void) | ||
584 | { | ||
585 | return tick_broadcast_device.mode == TICKDEV_MODE_ONESHOT; | ||
586 | } | ||
587 | |||
579 | #endif | 588 | #endif |
diff --git a/kernel/time/tick-common.c b/kernel/time/tick-common.c index c4777193d567..df12434b43ca 100644 --- a/kernel/time/tick-common.c +++ b/kernel/time/tick-common.c | |||
@@ -33,7 +33,7 @@ DEFINE_PER_CPU(struct tick_device, tick_cpu_device); | |||
33 | */ | 33 | */ |
34 | ktime_t tick_next_period; | 34 | ktime_t tick_next_period; |
35 | ktime_t tick_period; | 35 | ktime_t tick_period; |
36 | int tick_do_timer_cpu __read_mostly = -1; | 36 | int tick_do_timer_cpu __read_mostly = TICK_DO_TIMER_BOOT; |
37 | DEFINE_SPINLOCK(tick_device_lock); | 37 | DEFINE_SPINLOCK(tick_device_lock); |
38 | 38 | ||
39 | /* | 39 | /* |
@@ -109,7 +109,8 @@ void tick_setup_periodic(struct clock_event_device *dev, int broadcast) | |||
109 | if (!tick_device_is_functional(dev)) | 109 | if (!tick_device_is_functional(dev)) |
110 | return; | 110 | return; |
111 | 111 | ||
112 | if (dev->features & CLOCK_EVT_FEAT_PERIODIC) { | 112 | if ((dev->features & CLOCK_EVT_FEAT_PERIODIC) && |
113 | !tick_broadcast_oneshot_active()) { | ||
113 | clockevents_set_mode(dev, CLOCK_EVT_MODE_PERIODIC); | 114 | clockevents_set_mode(dev, CLOCK_EVT_MODE_PERIODIC); |
114 | } else { | 115 | } else { |
115 | unsigned long seq; | 116 | unsigned long seq; |
@@ -148,7 +149,7 @@ static void tick_setup_device(struct tick_device *td, | |||
148 | * If no cpu took the do_timer update, assign it to | 149 | * If no cpu took the do_timer update, assign it to |
149 | * this cpu: | 150 | * this cpu: |
150 | */ | 151 | */ |
151 | if (tick_do_timer_cpu == -1) { | 152 | if (tick_do_timer_cpu == TICK_DO_TIMER_BOOT) { |
152 | tick_do_timer_cpu = cpu; | 153 | tick_do_timer_cpu = cpu; |
153 | tick_next_period = ktime_get(); | 154 | tick_next_period = ktime_get(); |
154 | tick_period = ktime_set(0, NSEC_PER_SEC / HZ); | 155 | tick_period = ktime_set(0, NSEC_PER_SEC / HZ); |
@@ -249,7 +250,7 @@ static int tick_check_new_device(struct clock_event_device *newdev) | |||
249 | * not give it back to the clockevents layer ! | 250 | * not give it back to the clockevents layer ! |
250 | */ | 251 | */ |
251 | if (tick_is_broadcast_device(curdev)) { | 252 | if (tick_is_broadcast_device(curdev)) { |
252 | clockevents_set_mode(curdev, CLOCK_EVT_MODE_SHUTDOWN); | 253 | clockevents_shutdown(curdev); |
253 | curdev = NULL; | 254 | curdev = NULL; |
254 | } | 255 | } |
255 | clockevents_exchange_device(curdev, newdev); | 256 | clockevents_exchange_device(curdev, newdev); |
@@ -300,7 +301,8 @@ static void tick_shutdown(unsigned int *cpup) | |||
300 | if (*cpup == tick_do_timer_cpu) { | 301 | if (*cpup == tick_do_timer_cpu) { |
301 | int cpu = first_cpu(cpu_online_map); | 302 | int cpu = first_cpu(cpu_online_map); |
302 | 303 | ||
303 | tick_do_timer_cpu = (cpu != NR_CPUS) ? cpu : -1; | 304 | tick_do_timer_cpu = (cpu != NR_CPUS) ? cpu : |
305 | TICK_DO_TIMER_NONE; | ||
304 | } | 306 | } |
305 | spin_unlock_irqrestore(&tick_device_lock, flags); | 307 | spin_unlock_irqrestore(&tick_device_lock, flags); |
306 | } | 308 | } |
@@ -311,7 +313,7 @@ static void tick_suspend(void) | |||
311 | unsigned long flags; | 313 | unsigned long flags; |
312 | 314 | ||
313 | spin_lock_irqsave(&tick_device_lock, flags); | 315 | spin_lock_irqsave(&tick_device_lock, flags); |
314 | clockevents_set_mode(td->evtdev, CLOCK_EVT_MODE_SHUTDOWN); | 316 | clockevents_shutdown(td->evtdev); |
315 | spin_unlock_irqrestore(&tick_device_lock, flags); | 317 | spin_unlock_irqrestore(&tick_device_lock, flags); |
316 | } | 318 | } |
317 | 319 | ||
diff --git a/kernel/time/tick-internal.h b/kernel/time/tick-internal.h index 0ffc2918ea6f..469248782c23 100644 --- a/kernel/time/tick-internal.h +++ b/kernel/time/tick-internal.h | |||
@@ -1,6 +1,10 @@ | |||
1 | /* | 1 | /* |
2 | * tick internal variable and functions used by low/high res code | 2 | * tick internal variable and functions used by low/high res code |
3 | */ | 3 | */ |
4 | |||
5 | #define TICK_DO_TIMER_NONE -1 | ||
6 | #define TICK_DO_TIMER_BOOT -2 | ||
7 | |||
4 | DECLARE_PER_CPU(struct tick_device, tick_cpu_device); | 8 | DECLARE_PER_CPU(struct tick_device, tick_cpu_device); |
5 | extern spinlock_t tick_device_lock; | 9 | extern spinlock_t tick_device_lock; |
6 | extern ktime_t tick_next_period; | 10 | extern ktime_t tick_next_period; |
@@ -10,6 +14,8 @@ extern int tick_do_timer_cpu __read_mostly; | |||
10 | extern void tick_setup_periodic(struct clock_event_device *dev, int broadcast); | 14 | extern void tick_setup_periodic(struct clock_event_device *dev, int broadcast); |
11 | extern void tick_handle_periodic(struct clock_event_device *dev); | 15 | extern void tick_handle_periodic(struct clock_event_device *dev); |
12 | 16 | ||
17 | extern void clockevents_shutdown(struct clock_event_device *dev); | ||
18 | |||
13 | /* | 19 | /* |
14 | * NO_HZ / high resolution timer shared code | 20 | * NO_HZ / high resolution timer shared code |
15 | */ | 21 | */ |
@@ -29,6 +35,7 @@ extern void tick_broadcast_oneshot_control(unsigned long reason); | |||
29 | extern void tick_broadcast_switch_to_oneshot(void); | 35 | extern void tick_broadcast_switch_to_oneshot(void); |
30 | extern void tick_shutdown_broadcast_oneshot(unsigned int *cpup); | 36 | extern void tick_shutdown_broadcast_oneshot(unsigned int *cpup); |
31 | extern int tick_resume_broadcast_oneshot(struct clock_event_device *bc); | 37 | extern int tick_resume_broadcast_oneshot(struct clock_event_device *bc); |
38 | extern int tick_broadcast_oneshot_active(void); | ||
32 | # else /* BROADCAST */ | 39 | # else /* BROADCAST */ |
33 | static inline void tick_broadcast_setup_oneshot(struct clock_event_device *bc) | 40 | static inline void tick_broadcast_setup_oneshot(struct clock_event_device *bc) |
34 | { | 41 | { |
@@ -37,6 +44,7 @@ static inline void tick_broadcast_setup_oneshot(struct clock_event_device *bc) | |||
37 | static inline void tick_broadcast_oneshot_control(unsigned long reason) { } | 44 | static inline void tick_broadcast_oneshot_control(unsigned long reason) { } |
38 | static inline void tick_broadcast_switch_to_oneshot(void) { } | 45 | static inline void tick_broadcast_switch_to_oneshot(void) { } |
39 | static inline void tick_shutdown_broadcast_oneshot(unsigned int *cpup) { } | 46 | static inline void tick_shutdown_broadcast_oneshot(unsigned int *cpup) { } |
47 | static inline int tick_broadcast_oneshot_active(void) { return 0; } | ||
40 | # endif /* !BROADCAST */ | 48 | # endif /* !BROADCAST */ |
41 | 49 | ||
42 | #else /* !ONESHOT */ | 50 | #else /* !ONESHOT */ |
@@ -66,6 +74,7 @@ static inline int tick_resume_broadcast_oneshot(struct clock_event_device *bc) | |||
66 | { | 74 | { |
67 | return 0; | 75 | return 0; |
68 | } | 76 | } |
77 | static inline int tick_broadcast_oneshot_active(void) { return 0; } | ||
69 | #endif /* !TICK_ONESHOT */ | 78 | #endif /* !TICK_ONESHOT */ |
70 | 79 | ||
71 | /* | 80 | /* |
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c index a87b0468568b..cb02324bdb88 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c | |||
@@ -75,6 +75,9 @@ static void tick_do_update_jiffies64(ktime_t now) | |||
75 | incr * ticks); | 75 | incr * ticks); |
76 | } | 76 | } |
77 | do_timer(++ticks); | 77 | do_timer(++ticks); |
78 | |||
79 | /* Keep the tick_next_period variable up to date */ | ||
80 | tick_next_period = ktime_add(last_jiffies_update, tick_period); | ||
78 | } | 81 | } |
79 | write_sequnlock(&xtime_lock); | 82 | write_sequnlock(&xtime_lock); |
80 | } | 83 | } |
@@ -221,7 +224,7 @@ void tick_nohz_stop_sched_tick(int inidle) | |||
221 | */ | 224 | */ |
222 | if (unlikely(!cpu_online(cpu))) { | 225 | if (unlikely(!cpu_online(cpu))) { |
223 | if (cpu == tick_do_timer_cpu) | 226 | if (cpu == tick_do_timer_cpu) |
224 | tick_do_timer_cpu = -1; | 227 | tick_do_timer_cpu = TICK_DO_TIMER_NONE; |
225 | } | 228 | } |
226 | 229 | ||
227 | if (unlikely(ts->nohz_mode == NOHZ_MODE_INACTIVE)) | 230 | if (unlikely(ts->nohz_mode == NOHZ_MODE_INACTIVE)) |
@@ -303,7 +306,7 @@ void tick_nohz_stop_sched_tick(int inidle) | |||
303 | * invoked. | 306 | * invoked. |
304 | */ | 307 | */ |
305 | if (cpu == tick_do_timer_cpu) | 308 | if (cpu == tick_do_timer_cpu) |
306 | tick_do_timer_cpu = -1; | 309 | tick_do_timer_cpu = TICK_DO_TIMER_NONE; |
307 | 310 | ||
308 | ts->idle_sleeps++; | 311 | ts->idle_sleeps++; |
309 | 312 | ||
@@ -468,7 +471,7 @@ static void tick_nohz_handler(struct clock_event_device *dev) | |||
468 | * this duty, then the jiffies update is still serialized by | 471 | * this duty, then the jiffies update is still serialized by |
469 | * xtime_lock. | 472 | * xtime_lock. |
470 | */ | 473 | */ |
471 | if (unlikely(tick_do_timer_cpu == -1)) | 474 | if (unlikely(tick_do_timer_cpu == TICK_DO_TIMER_NONE)) |
472 | tick_do_timer_cpu = cpu; | 475 | tick_do_timer_cpu = cpu; |
473 | 476 | ||
474 | /* Check, if the jiffies need an update */ | 477 | /* Check, if the jiffies need an update */ |
@@ -570,7 +573,7 @@ static enum hrtimer_restart tick_sched_timer(struct hrtimer *timer) | |||
570 | * this duty, then the jiffies update is still serialized by | 573 | * this duty, then the jiffies update is still serialized by |
571 | * xtime_lock. | 574 | * xtime_lock. |
572 | */ | 575 | */ |
573 | if (unlikely(tick_do_timer_cpu == -1)) | 576 | if (unlikely(tick_do_timer_cpu == TICK_DO_TIMER_NONE)) |
574 | tick_do_timer_cpu = cpu; | 577 | tick_do_timer_cpu = cpu; |
575 | #endif | 578 | #endif |
576 | 579 | ||
@@ -622,7 +625,7 @@ void tick_setup_sched_timer(void) | |||
622 | */ | 625 | */ |
623 | hrtimer_init(&ts->sched_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS); | 626 | hrtimer_init(&ts->sched_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS); |
624 | ts->sched_timer.function = tick_sched_timer; | 627 | ts->sched_timer.function = tick_sched_timer; |
625 | ts->sched_timer.cb_mode = HRTIMER_CB_IRQSAFE_NO_SOFTIRQ; | 628 | ts->sched_timer.cb_mode = HRTIMER_CB_IRQSAFE_PERCPU; |
626 | 629 | ||
627 | /* Get the next period (per cpu) */ | 630 | /* Get the next period (per cpu) */ |
628 | ts->sched_timer.expires = tick_init_jiffy_update(); | 631 | ts->sched_timer.expires = tick_init_jiffy_update(); |
diff --git a/kernel/trace/trace_sysprof.c b/kernel/trace/trace_sysprof.c index bb948e52ce20..db58fb66a135 100644 --- a/kernel/trace/trace_sysprof.c +++ b/kernel/trace/trace_sysprof.c | |||
@@ -202,7 +202,7 @@ static void start_stack_timer(int cpu) | |||
202 | 202 | ||
203 | hrtimer_init(hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); | 203 | hrtimer_init(hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); |
204 | hrtimer->function = stack_trace_timer_fn; | 204 | hrtimer->function = stack_trace_timer_fn; |
205 | hrtimer->cb_mode = HRTIMER_CB_IRQSAFE_NO_SOFTIRQ; | 205 | hrtimer->cb_mode = HRTIMER_CB_IRQSAFE_PERCPU; |
206 | 206 | ||
207 | hrtimer_start(hrtimer, ns_to_ktime(sample_period), HRTIMER_MODE_REL); | 207 | hrtimer_start(hrtimer, ns_to_ktime(sample_period), HRTIMER_MODE_REL); |
208 | } | 208 | } |
diff --git a/lib/scatterlist.c b/lib/scatterlist.c index 876ba6d5b670..8d2688ff1352 100644 --- a/lib/scatterlist.c +++ b/lib/scatterlist.c | |||
@@ -422,9 +422,12 @@ static size_t sg_copy_buffer(struct scatterlist *sgl, unsigned int nents, | |||
422 | { | 422 | { |
423 | unsigned int offset = 0; | 423 | unsigned int offset = 0; |
424 | struct sg_mapping_iter miter; | 424 | struct sg_mapping_iter miter; |
425 | unsigned long flags; | ||
425 | 426 | ||
426 | sg_miter_start(&miter, sgl, nents, SG_MITER_ATOMIC); | 427 | sg_miter_start(&miter, sgl, nents, SG_MITER_ATOMIC); |
427 | 428 | ||
429 | local_irq_save(flags); | ||
430 | |||
428 | while (sg_miter_next(&miter) && offset < buflen) { | 431 | while (sg_miter_next(&miter) && offset < buflen) { |
429 | unsigned int len; | 432 | unsigned int len; |
430 | 433 | ||
@@ -442,6 +445,7 @@ static size_t sg_copy_buffer(struct scatterlist *sgl, unsigned int nents, | |||
442 | 445 | ||
443 | sg_miter_stop(&miter); | 446 | sg_miter_stop(&miter); |
444 | 447 | ||
448 | local_irq_restore(flags); | ||
445 | return offset; | 449 | return offset; |
446 | } | 450 | } |
447 | 451 | ||
diff --git a/lib/swiotlb.c b/lib/swiotlb.c index 977edbdbc1de..8826fdf0f180 100644 --- a/lib/swiotlb.c +++ b/lib/swiotlb.c | |||
@@ -491,7 +491,7 @@ swiotlb_alloc_coherent(struct device *hwdev, size_t size, | |||
491 | * the lowest available address range. | 491 | * the lowest available address range. |
492 | */ | 492 | */ |
493 | dma_addr_t handle; | 493 | dma_addr_t handle; |
494 | handle = swiotlb_map_single(NULL, NULL, size, DMA_FROM_DEVICE); | 494 | handle = swiotlb_map_single(hwdev, NULL, size, DMA_FROM_DEVICE); |
495 | if (swiotlb_dma_mapping_error(hwdev, handle)) | 495 | if (swiotlb_dma_mapping_error(hwdev, handle)) |
496 | return NULL; | 496 | return NULL; |
497 | 497 | ||
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 0f1f7a7374ba..36896f3eb7f5 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
@@ -250,6 +250,14 @@ static struct mem_cgroup *mem_cgroup_from_cont(struct cgroup *cont) | |||
250 | 250 | ||
251 | struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p) | 251 | struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p) |
252 | { | 252 | { |
253 | /* | ||
254 | * mm_update_next_owner() may clear mm->owner to NULL | ||
255 | * if it races with swapoff, page migration, etc. | ||
256 | * So this can be called with p == NULL. | ||
257 | */ | ||
258 | if (unlikely(!p)) | ||
259 | return NULL; | ||
260 | |||
253 | return container_of(task_subsys_state(p, mem_cgroup_subsys_id), | 261 | return container_of(task_subsys_state(p, mem_cgroup_subsys_id), |
254 | struct mem_cgroup, css); | 262 | struct mem_cgroup, css); |
255 | } | 263 | } |
@@ -549,6 +557,11 @@ static int mem_cgroup_charge_common(struct page *page, struct mm_struct *mm, | |||
549 | if (likely(!memcg)) { | 557 | if (likely(!memcg)) { |
550 | rcu_read_lock(); | 558 | rcu_read_lock(); |
551 | mem = mem_cgroup_from_task(rcu_dereference(mm->owner)); | 559 | mem = mem_cgroup_from_task(rcu_dereference(mm->owner)); |
560 | if (unlikely(!mem)) { | ||
561 | rcu_read_unlock(); | ||
562 | kmem_cache_free(page_cgroup_cache, pc); | ||
563 | return 0; | ||
564 | } | ||
552 | /* | 565 | /* |
553 | * For every charge from the cgroup, increment reference count | 566 | * For every charge from the cgroup, increment reference count |
554 | */ | 567 | */ |
@@ -801,11 +814,16 @@ int mem_cgroup_shrink_usage(struct mm_struct *mm, gfp_t gfp_mask) | |||
801 | 814 | ||
802 | rcu_read_lock(); | 815 | rcu_read_lock(); |
803 | mem = mem_cgroup_from_task(rcu_dereference(mm->owner)); | 816 | mem = mem_cgroup_from_task(rcu_dereference(mm->owner)); |
817 | if (unlikely(!mem)) { | ||
818 | rcu_read_unlock(); | ||
819 | return 0; | ||
820 | } | ||
804 | css_get(&mem->css); | 821 | css_get(&mem->css); |
805 | rcu_read_unlock(); | 822 | rcu_read_unlock(); |
806 | 823 | ||
807 | do { | 824 | do { |
808 | progress = try_to_free_mem_cgroup_pages(mem, gfp_mask); | 825 | progress = try_to_free_mem_cgroup_pages(mem, gfp_mask); |
826 | progress += res_counter_check_under_limit(&mem->res); | ||
809 | } while (!progress && --retry); | 827 | } while (!progress && --retry); |
810 | 828 | ||
811 | css_put(&mem->css); | 829 | css_put(&mem->css); |
diff --git a/mm/mmzone.c b/mm/mmzone.c index 486ed595ee6f..16ce8b955dcf 100644 --- a/mm/mmzone.c +++ b/mm/mmzone.c | |||
@@ -69,6 +69,6 @@ struct zoneref *next_zones_zonelist(struct zoneref *z, | |||
69 | (z->zone && !zref_in_nodemask(z, nodes))) | 69 | (z->zone && !zref_in_nodemask(z, nodes))) |
70 | z++; | 70 | z++; |
71 | 71 | ||
72 | *zone = zonelist_zone(z++); | 72 | *zone = zonelist_zone(z); |
73 | return z; | 73 | return z; |
74 | } | 74 | } |
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index e293c58bea58..27b8681139fd 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -268,13 +268,14 @@ void prep_compound_page(struct page *page, unsigned long order) | |||
268 | { | 268 | { |
269 | int i; | 269 | int i; |
270 | int nr_pages = 1 << order; | 270 | int nr_pages = 1 << order; |
271 | struct page *p = page + 1; | ||
271 | 272 | ||
272 | set_compound_page_dtor(page, free_compound_page); | 273 | set_compound_page_dtor(page, free_compound_page); |
273 | set_compound_order(page, order); | 274 | set_compound_order(page, order); |
274 | __SetPageHead(page); | 275 | __SetPageHead(page); |
275 | for (i = 1; i < nr_pages; i++) { | 276 | for (i = 1; i < nr_pages; i++, p++) { |
276 | struct page *p = page + i; | 277 | if (unlikely((i & (MAX_ORDER_NR_PAGES - 1)) == 0)) |
277 | 278 | p = pfn_to_page(page_to_pfn(page) + i); | |
278 | __SetPageTail(p); | 279 | __SetPageTail(p); |
279 | p->first_page = page; | 280 | p->first_page = page; |
280 | } | 281 | } |
@@ -284,6 +285,7 @@ static void destroy_compound_page(struct page *page, unsigned long order) | |||
284 | { | 285 | { |
285 | int i; | 286 | int i; |
286 | int nr_pages = 1 << order; | 287 | int nr_pages = 1 << order; |
288 | struct page *p = page + 1; | ||
287 | 289 | ||
288 | if (unlikely(compound_order(page) != order)) | 290 | if (unlikely(compound_order(page) != order)) |
289 | bad_page(page); | 291 | bad_page(page); |
@@ -291,8 +293,9 @@ static void destroy_compound_page(struct page *page, unsigned long order) | |||
291 | if (unlikely(!PageHead(page))) | 293 | if (unlikely(!PageHead(page))) |
292 | bad_page(page); | 294 | bad_page(page); |
293 | __ClearPageHead(page); | 295 | __ClearPageHead(page); |
294 | for (i = 1; i < nr_pages; i++) { | 296 | for (i = 1; i < nr_pages; i++, p++) { |
295 | struct page *p = page + i; | 297 | if (unlikely((i & (MAX_ORDER_NR_PAGES - 1)) == 0)) |
298 | p = pfn_to_page(page_to_pfn(page) + i); | ||
296 | 299 | ||
297 | if (unlikely(!PageTail(p) | | 300 | if (unlikely(!PageTail(p) | |
298 | (p->first_page != page))) | 301 | (p->first_page != page))) |
diff --git a/mm/page_isolation.c b/mm/page_isolation.c index c69f84fe038d..b70a7fec1ff6 100644 --- a/mm/page_isolation.c +++ b/mm/page_isolation.c | |||
@@ -114,8 +114,10 @@ __test_page_isolated_in_pageblock(unsigned long pfn, unsigned long end_pfn) | |||
114 | 114 | ||
115 | int test_pages_isolated(unsigned long start_pfn, unsigned long end_pfn) | 115 | int test_pages_isolated(unsigned long start_pfn, unsigned long end_pfn) |
116 | { | 116 | { |
117 | unsigned long pfn; | 117 | unsigned long pfn, flags; |
118 | struct page *page; | 118 | struct page *page; |
119 | struct zone *zone; | ||
120 | int ret; | ||
119 | 121 | ||
120 | pfn = start_pfn; | 122 | pfn = start_pfn; |
121 | /* | 123 | /* |
@@ -131,7 +133,9 @@ int test_pages_isolated(unsigned long start_pfn, unsigned long end_pfn) | |||
131 | if (pfn < end_pfn) | 133 | if (pfn < end_pfn) |
132 | return -EBUSY; | 134 | return -EBUSY; |
133 | /* Check all pages are free or Marked as ISOLATED */ | 135 | /* Check all pages are free or Marked as ISOLATED */ |
134 | if (__test_page_isolated_in_pageblock(start_pfn, end_pfn)) | 136 | zone = page_zone(pfn_to_page(pfn)); |
135 | return 0; | 137 | spin_lock_irqsave(&zone->lock, flags); |
136 | return -EBUSY; | 138 | ret = __test_page_isolated_in_pageblock(start_pfn, end_pfn); |
139 | spin_unlock_irqrestore(&zone->lock, flags); | ||
140 | return ret ? 0 : -EBUSY; | ||
137 | } | 141 | } |
@@ -514,9 +514,11 @@ size_t ksize(const void *block) | |||
514 | return 0; | 514 | return 0; |
515 | 515 | ||
516 | sp = (struct slob_page *)virt_to_page(block); | 516 | sp = (struct slob_page *)virt_to_page(block); |
517 | if (slob_page(sp)) | 517 | if (slob_page(sp)) { |
518 | return ((slob_t *)block - 1)->units + SLOB_UNIT; | 518 | int align = max(ARCH_KMALLOC_MINALIGN, ARCH_SLAB_MINALIGN); |
519 | else | 519 | unsigned int *m = (unsigned int *)(block - align); |
520 | return SLOB_UNITS(*m) * SLOB_UNIT; | ||
521 | } else | ||
520 | return sp->page.private; | 522 | return sp->page.private; |
521 | } | 523 | } |
522 | 524 | ||
@@ -1932,6 +1932,7 @@ init_kmem_cache_node(struct kmem_cache_node *n, struct kmem_cache *s) | |||
1932 | INIT_LIST_HEAD(&n->partial); | 1932 | INIT_LIST_HEAD(&n->partial); |
1933 | #ifdef CONFIG_SLUB_DEBUG | 1933 | #ifdef CONFIG_SLUB_DEBUG |
1934 | atomic_long_set(&n->nr_slabs, 0); | 1934 | atomic_long_set(&n->nr_slabs, 0); |
1935 | atomic_long_set(&n->total_objects, 0); | ||
1935 | INIT_LIST_HEAD(&n->full); | 1936 | INIT_LIST_HEAD(&n->full); |
1936 | #endif | 1937 | #endif |
1937 | } | 1938 | } |
diff --git a/mm/tiny-shmem.c b/mm/tiny-shmem.c index ae532f501943..8d7a27a6335c 100644 --- a/mm/tiny-shmem.c +++ b/mm/tiny-shmem.c | |||
@@ -65,31 +65,31 @@ struct file *shmem_file_setup(char *name, loff_t size, unsigned long flags) | |||
65 | if (!dentry) | 65 | if (!dentry) |
66 | goto put_memory; | 66 | goto put_memory; |
67 | 67 | ||
68 | error = -ENFILE; | ||
69 | file = get_empty_filp(); | ||
70 | if (!file) | ||
71 | goto put_dentry; | ||
72 | |||
68 | error = -ENOSPC; | 73 | error = -ENOSPC; |
69 | inode = ramfs_get_inode(root->d_sb, S_IFREG | S_IRWXUGO, 0); | 74 | inode = ramfs_get_inode(root->d_sb, S_IFREG | S_IRWXUGO, 0); |
70 | if (!inode) | 75 | if (!inode) |
71 | goto put_dentry; | 76 | goto close_file; |
72 | 77 | ||
73 | d_instantiate(dentry, inode); | 78 | d_instantiate(dentry, inode); |
74 | error = -ENFILE; | 79 | inode->i_size = size; |
75 | file = alloc_file(shm_mnt, dentry, FMODE_WRITE | FMODE_READ, | ||
76 | &ramfs_file_operations); | ||
77 | if (!file) | ||
78 | goto put_dentry; | ||
79 | |||
80 | inode->i_nlink = 0; /* It is unlinked */ | 80 | inode->i_nlink = 0; /* It is unlinked */ |
81 | init_file(file, shm_mnt, dentry, FMODE_WRITE | FMODE_READ, | ||
82 | &ramfs_file_operations); | ||
81 | 83 | ||
82 | /* notify everyone as to the change of file size */ | 84 | #ifndef CONFIG_MMU |
83 | error = do_truncate(dentry, size, 0, file); | 85 | error = ramfs_nommu_expand_for_mapping(inode, size); |
84 | if (error < 0) | 86 | if (error) |
85 | goto close_file; | 87 | goto close_file; |
86 | 88 | #endif | |
87 | return file; | 89 | return file; |
88 | 90 | ||
89 | close_file: | 91 | close_file: |
90 | put_filp(file); | 92 | put_filp(file); |
91 | return ERR_PTR(error); | ||
92 | |||
93 | put_dentry: | 93 | put_dentry: |
94 | dput(dentry); | 94 | dput(dentry); |
95 | put_memory: | 95 | put_memory: |
diff --git a/net/9p/client.c b/net/9p/client.c index 2ffe40cf2f01..10e320307ec0 100644 --- a/net/9p/client.c +++ b/net/9p/client.c | |||
@@ -75,7 +75,6 @@ static int parse_opts(char *opts, struct p9_client *clnt) | |||
75 | int option; | 75 | int option; |
76 | int ret = 0; | 76 | int ret = 0; |
77 | 77 | ||
78 | clnt->trans_mod = v9fs_default_trans(); | ||
79 | clnt->dotu = 1; | 78 | clnt->dotu = 1; |
80 | clnt->msize = 8192; | 79 | clnt->msize = 8192; |
81 | 80 | ||
@@ -108,7 +107,7 @@ static int parse_opts(char *opts, struct p9_client *clnt) | |||
108 | clnt->msize = option; | 107 | clnt->msize = option; |
109 | break; | 108 | break; |
110 | case Opt_trans: | 109 | case Opt_trans: |
111 | clnt->trans_mod = v9fs_match_trans(&args[0]); | 110 | clnt->trans_mod = v9fs_get_trans_by_name(&args[0]); |
112 | break; | 111 | break; |
113 | case Opt_legacy: | 112 | case Opt_legacy: |
114 | clnt->dotu = 0; | 113 | clnt->dotu = 0; |
@@ -117,6 +116,10 @@ static int parse_opts(char *opts, struct p9_client *clnt) | |||
117 | continue; | 116 | continue; |
118 | } | 117 | } |
119 | } | 118 | } |
119 | |||
120 | if (!clnt->trans_mod) | ||
121 | clnt->trans_mod = v9fs_get_default_trans(); | ||
122 | |||
120 | kfree(options); | 123 | kfree(options); |
121 | return ret; | 124 | return ret; |
122 | } | 125 | } |
@@ -150,6 +153,7 @@ struct p9_client *p9_client_create(const char *dev_name, char *options) | |||
150 | if (!clnt) | 153 | if (!clnt) |
151 | return ERR_PTR(-ENOMEM); | 154 | return ERR_PTR(-ENOMEM); |
152 | 155 | ||
156 | clnt->trans_mod = NULL; | ||
153 | clnt->trans = NULL; | 157 | clnt->trans = NULL; |
154 | spin_lock_init(&clnt->lock); | 158 | spin_lock_init(&clnt->lock); |
155 | INIT_LIST_HEAD(&clnt->fidlist); | 159 | INIT_LIST_HEAD(&clnt->fidlist); |
@@ -235,6 +239,8 @@ void p9_client_destroy(struct p9_client *clnt) | |||
235 | clnt->trans = NULL; | 239 | clnt->trans = NULL; |
236 | } | 240 | } |
237 | 241 | ||
242 | v9fs_put_trans(clnt->trans_mod); | ||
243 | |||
238 | list_for_each_entry_safe(fid, fidptr, &clnt->fidlist, flist) | 244 | list_for_each_entry_safe(fid, fidptr, &clnt->fidlist, flist) |
239 | p9_fid_destroy(fid); | 245 | p9_fid_destroy(fid); |
240 | 246 | ||
diff --git a/net/9p/conv.c b/net/9p/conv.c index 44547201f5bc..5ad3a3bd73b2 100644 --- a/net/9p/conv.c +++ b/net/9p/conv.c | |||
@@ -451,8 +451,10 @@ p9_put_data(struct cbuf *bufp, const char *data, int count, | |||
451 | unsigned char **pdata) | 451 | unsigned char **pdata) |
452 | { | 452 | { |
453 | *pdata = buf_alloc(bufp, count); | 453 | *pdata = buf_alloc(bufp, count); |
454 | if (*pdata == NULL) | ||
455 | return -ENOMEM; | ||
454 | memmove(*pdata, data, count); | 456 | memmove(*pdata, data, count); |
455 | return count; | 457 | return 0; |
456 | } | 458 | } |
457 | 459 | ||
458 | static int | 460 | static int |
@@ -460,6 +462,8 @@ p9_put_user_data(struct cbuf *bufp, const char __user *data, int count, | |||
460 | unsigned char **pdata) | 462 | unsigned char **pdata) |
461 | { | 463 | { |
462 | *pdata = buf_alloc(bufp, count); | 464 | *pdata = buf_alloc(bufp, count); |
465 | if (*pdata == NULL) | ||
466 | return -ENOMEM; | ||
463 | return copy_from_user(*pdata, data, count); | 467 | return copy_from_user(*pdata, data, count); |
464 | } | 468 | } |
465 | 469 | ||
diff --git a/net/9p/mod.c b/net/9p/mod.c index bdee1fb7cc62..1084feb24cb0 100644 --- a/net/9p/mod.c +++ b/net/9p/mod.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <linux/parser.h> | 31 | #include <linux/parser.h> |
32 | #include <net/9p/transport.h> | 32 | #include <net/9p/transport.h> |
33 | #include <linux/list.h> | 33 | #include <linux/list.h> |
34 | #include <linux/spinlock.h> | ||
34 | 35 | ||
35 | #ifdef CONFIG_NET_9P_DEBUG | 36 | #ifdef CONFIG_NET_9P_DEBUG |
36 | unsigned int p9_debug_level = 0; /* feature-rific global debug level */ | 37 | unsigned int p9_debug_level = 0; /* feature-rific global debug level */ |
@@ -44,8 +45,8 @@ MODULE_PARM_DESC(debug, "9P debugging level"); | |||
44 | * | 45 | * |
45 | */ | 46 | */ |
46 | 47 | ||
48 | static DEFINE_SPINLOCK(v9fs_trans_lock); | ||
47 | static LIST_HEAD(v9fs_trans_list); | 49 | static LIST_HEAD(v9fs_trans_list); |
48 | static struct p9_trans_module *v9fs_default_transport; | ||
49 | 50 | ||
50 | /** | 51 | /** |
51 | * v9fs_register_trans - register a new transport with 9p | 52 | * v9fs_register_trans - register a new transport with 9p |
@@ -54,48 +55,87 @@ static struct p9_trans_module *v9fs_default_transport; | |||
54 | */ | 55 | */ |
55 | void v9fs_register_trans(struct p9_trans_module *m) | 56 | void v9fs_register_trans(struct p9_trans_module *m) |
56 | { | 57 | { |
58 | spin_lock(&v9fs_trans_lock); | ||
57 | list_add_tail(&m->list, &v9fs_trans_list); | 59 | list_add_tail(&m->list, &v9fs_trans_list); |
58 | if (m->def) | 60 | spin_unlock(&v9fs_trans_lock); |
59 | v9fs_default_transport = m; | ||
60 | } | 61 | } |
61 | EXPORT_SYMBOL(v9fs_register_trans); | 62 | EXPORT_SYMBOL(v9fs_register_trans); |
62 | 63 | ||
63 | /** | 64 | /** |
64 | * v9fs_match_trans - match transport versus registered transports | 65 | * v9fs_unregister_trans - unregister a 9p transport |
66 | * @m: the transport to remove | ||
67 | * | ||
68 | */ | ||
69 | void v9fs_unregister_trans(struct p9_trans_module *m) | ||
70 | { | ||
71 | spin_lock(&v9fs_trans_lock); | ||
72 | list_del_init(&m->list); | ||
73 | spin_unlock(&v9fs_trans_lock); | ||
74 | } | ||
75 | EXPORT_SYMBOL(v9fs_unregister_trans); | ||
76 | |||
77 | /** | ||
78 | * v9fs_get_trans_by_name - get transport with the matching name | ||
65 | * @name: string identifying transport | 79 | * @name: string identifying transport |
66 | * | 80 | * |
67 | */ | 81 | */ |
68 | struct p9_trans_module *v9fs_match_trans(const substring_t *name) | 82 | struct p9_trans_module *v9fs_get_trans_by_name(const substring_t *name) |
69 | { | 83 | { |
70 | struct list_head *p; | 84 | struct p9_trans_module *t, *found = NULL; |
71 | struct p9_trans_module *t = NULL; | 85 | |
72 | 86 | spin_lock(&v9fs_trans_lock); | |
73 | list_for_each(p, &v9fs_trans_list) { | 87 | |
74 | t = list_entry(p, struct p9_trans_module, list); | 88 | list_for_each_entry(t, &v9fs_trans_list, list) |
75 | if (strncmp(t->name, name->from, name->to-name->from) == 0) | 89 | if (strncmp(t->name, name->from, name->to-name->from) == 0 && |
76 | return t; | 90 | try_module_get(t->owner)) { |
77 | } | 91 | found = t; |
78 | return NULL; | 92 | break; |
93 | } | ||
94 | |||
95 | spin_unlock(&v9fs_trans_lock); | ||
96 | return found; | ||
79 | } | 97 | } |
80 | EXPORT_SYMBOL(v9fs_match_trans); | 98 | EXPORT_SYMBOL(v9fs_get_trans_by_name); |
81 | 99 | ||
82 | /** | 100 | /** |
83 | * v9fs_default_trans - returns pointer to default transport | 101 | * v9fs_get_default_trans - get the default transport |
84 | * | 102 | * |
85 | */ | 103 | */ |
86 | 104 | ||
87 | struct p9_trans_module *v9fs_default_trans(void) | 105 | struct p9_trans_module *v9fs_get_default_trans(void) |
88 | { | 106 | { |
89 | if (v9fs_default_transport) | 107 | struct p9_trans_module *t, *found = NULL; |
90 | return v9fs_default_transport; | 108 | |
91 | else if (!list_empty(&v9fs_trans_list)) | 109 | spin_lock(&v9fs_trans_lock); |
92 | return list_first_entry(&v9fs_trans_list, | 110 | |
93 | struct p9_trans_module, list); | 111 | list_for_each_entry(t, &v9fs_trans_list, list) |
94 | else | 112 | if (t->def && try_module_get(t->owner)) { |
95 | return NULL; | 113 | found = t; |
114 | break; | ||
115 | } | ||
116 | |||
117 | if (!found) | ||
118 | list_for_each_entry(t, &v9fs_trans_list, list) | ||
119 | if (try_module_get(t->owner)) { | ||
120 | found = t; | ||
121 | break; | ||
122 | } | ||
123 | |||
124 | spin_unlock(&v9fs_trans_lock); | ||
125 | return found; | ||
96 | } | 126 | } |
97 | EXPORT_SYMBOL(v9fs_default_trans); | 127 | EXPORT_SYMBOL(v9fs_get_default_trans); |
98 | 128 | ||
129 | /** | ||
130 | * v9fs_put_trans - put trans | ||
131 | * @m: transport to put | ||
132 | * | ||
133 | */ | ||
134 | void v9fs_put_trans(struct p9_trans_module *m) | ||
135 | { | ||
136 | if (m) | ||
137 | module_put(m->owner); | ||
138 | } | ||
99 | 139 | ||
100 | /** | 140 | /** |
101 | * v9fs_init - Initialize module | 141 | * v9fs_init - Initialize module |
@@ -120,6 +160,8 @@ static int __init init_p9(void) | |||
120 | static void __exit exit_p9(void) | 160 | static void __exit exit_p9(void) |
121 | { | 161 | { |
122 | printk(KERN_INFO "Unloading 9P2000 support\n"); | 162 | printk(KERN_INFO "Unloading 9P2000 support\n"); |
163 | |||
164 | p9_trans_fd_exit(); | ||
123 | } | 165 | } |
124 | 166 | ||
125 | module_init(init_p9) | 167 | module_init(init_p9) |
diff --git a/net/9p/trans_fd.c b/net/9p/trans_fd.c index cdf137af7adc..d652baf5ff91 100644 --- a/net/9p/trans_fd.c +++ b/net/9p/trans_fd.c | |||
@@ -151,7 +151,6 @@ struct p9_mux_poll_task { | |||
151 | * @trans: reference to transport instance for this connection | 151 | * @trans: reference to transport instance for this connection |
152 | * @tagpool: id accounting for transactions | 152 | * @tagpool: id accounting for transactions |
153 | * @err: error state | 153 | * @err: error state |
154 | * @equeue: event wait_q (?) | ||
155 | * @req_list: accounting for requests which have been sent | 154 | * @req_list: accounting for requests which have been sent |
156 | * @unsent_req_list: accounting for requests that haven't been sent | 155 | * @unsent_req_list: accounting for requests that haven't been sent |
157 | * @rcall: current response &p9_fcall structure | 156 | * @rcall: current response &p9_fcall structure |
@@ -178,7 +177,6 @@ struct p9_conn { | |||
178 | struct p9_trans *trans; | 177 | struct p9_trans *trans; |
179 | struct p9_idpool *tagpool; | 178 | struct p9_idpool *tagpool; |
180 | int err; | 179 | int err; |
181 | wait_queue_head_t equeue; | ||
182 | struct list_head req_list; | 180 | struct list_head req_list; |
183 | struct list_head unsent_req_list; | 181 | struct list_head unsent_req_list; |
184 | struct p9_fcall *rcall; | 182 | struct p9_fcall *rcall; |
@@ -240,22 +238,6 @@ static int p9_conn_rpcnb(struct p9_conn *m, struct p9_fcall *tc, | |||
240 | 238 | ||
241 | static void p9_conn_cancel(struct p9_conn *m, int err); | 239 | static void p9_conn_cancel(struct p9_conn *m, int err); |
242 | 240 | ||
243 | static int p9_mux_global_init(void) | ||
244 | { | ||
245 | int i; | ||
246 | |||
247 | for (i = 0; i < ARRAY_SIZE(p9_mux_poll_tasks); i++) | ||
248 | p9_mux_poll_tasks[i].task = NULL; | ||
249 | |||
250 | p9_mux_wq = create_workqueue("v9fs"); | ||
251 | if (!p9_mux_wq) { | ||
252 | printk(KERN_WARNING "v9fs: mux: creating workqueue failed\n"); | ||
253 | return -ENOMEM; | ||
254 | } | ||
255 | |||
256 | return 0; | ||
257 | } | ||
258 | |||
259 | static u16 p9_mux_get_tag(struct p9_conn *m) | 241 | static u16 p9_mux_get_tag(struct p9_conn *m) |
260 | { | 242 | { |
261 | int tag; | 243 | int tag; |
@@ -409,11 +391,11 @@ static void p9_mux_poll_stop(struct p9_conn *m) | |||
409 | static struct p9_conn *p9_conn_create(struct p9_trans *trans) | 391 | static struct p9_conn *p9_conn_create(struct p9_trans *trans) |
410 | { | 392 | { |
411 | int i, n; | 393 | int i, n; |
412 | struct p9_conn *m, *mtmp; | 394 | struct p9_conn *m; |
413 | 395 | ||
414 | P9_DPRINTK(P9_DEBUG_MUX, "transport %p msize %d\n", trans, | 396 | P9_DPRINTK(P9_DEBUG_MUX, "transport %p msize %d\n", trans, |
415 | trans->msize); | 397 | trans->msize); |
416 | m = kmalloc(sizeof(struct p9_conn), GFP_KERNEL); | 398 | m = kzalloc(sizeof(struct p9_conn), GFP_KERNEL); |
417 | if (!m) | 399 | if (!m) |
418 | return ERR_PTR(-ENOMEM); | 400 | return ERR_PTR(-ENOMEM); |
419 | 401 | ||
@@ -424,25 +406,14 @@ static struct p9_conn *p9_conn_create(struct p9_trans *trans) | |||
424 | m->trans = trans; | 406 | m->trans = trans; |
425 | m->tagpool = p9_idpool_create(); | 407 | m->tagpool = p9_idpool_create(); |
426 | if (IS_ERR(m->tagpool)) { | 408 | if (IS_ERR(m->tagpool)) { |
427 | mtmp = ERR_PTR(-ENOMEM); | ||
428 | kfree(m); | 409 | kfree(m); |
429 | return mtmp; | 410 | return ERR_PTR(-ENOMEM); |
430 | } | 411 | } |
431 | 412 | ||
432 | m->err = 0; | ||
433 | init_waitqueue_head(&m->equeue); | ||
434 | INIT_LIST_HEAD(&m->req_list); | 413 | INIT_LIST_HEAD(&m->req_list); |
435 | INIT_LIST_HEAD(&m->unsent_req_list); | 414 | INIT_LIST_HEAD(&m->unsent_req_list); |
436 | m->rcall = NULL; | ||
437 | m->rpos = 0; | ||
438 | m->rbuf = NULL; | ||
439 | m->wpos = m->wsize = 0; | ||
440 | m->wbuf = NULL; | ||
441 | INIT_WORK(&m->rq, p9_read_work); | 415 | INIT_WORK(&m->rq, p9_read_work); |
442 | INIT_WORK(&m->wq, p9_write_work); | 416 | INIT_WORK(&m->wq, p9_write_work); |
443 | m->wsched = 0; | ||
444 | memset(&m->poll_waddr, 0, sizeof(m->poll_waddr)); | ||
445 | m->poll_task = NULL; | ||
446 | n = p9_mux_poll_start(m); | 417 | n = p9_mux_poll_start(m); |
447 | if (n) { | 418 | if (n) { |
448 | kfree(m); | 419 | kfree(m); |
@@ -463,10 +434,8 @@ static struct p9_conn *p9_conn_create(struct p9_trans *trans) | |||
463 | for (i = 0; i < ARRAY_SIZE(m->poll_waddr); i++) { | 434 | for (i = 0; i < ARRAY_SIZE(m->poll_waddr); i++) { |
464 | if (IS_ERR(m->poll_waddr[i])) { | 435 | if (IS_ERR(m->poll_waddr[i])) { |
465 | p9_mux_poll_stop(m); | 436 | p9_mux_poll_stop(m); |
466 | mtmp = (void *)m->poll_waddr; /* the error code */ | ||
467 | kfree(m); | 437 | kfree(m); |
468 | m = mtmp; | 438 | return (void *)m->poll_waddr; /* the error code */ |
469 | break; | ||
470 | } | 439 | } |
471 | } | 440 | } |
472 | 441 | ||
@@ -483,18 +452,13 @@ static void p9_conn_destroy(struct p9_conn *m) | |||
483 | { | 452 | { |
484 | P9_DPRINTK(P9_DEBUG_MUX, "mux %p prev %p next %p\n", m, | 453 | P9_DPRINTK(P9_DEBUG_MUX, "mux %p prev %p next %p\n", m, |
485 | m->mux_list.prev, m->mux_list.next); | 454 | m->mux_list.prev, m->mux_list.next); |
486 | p9_conn_cancel(m, -ECONNRESET); | ||
487 | |||
488 | if (!list_empty(&m->req_list)) { | ||
489 | /* wait until all processes waiting on this session exit */ | ||
490 | P9_DPRINTK(P9_DEBUG_MUX, | ||
491 | "mux %p waiting for empty request queue\n", m); | ||
492 | wait_event_timeout(m->equeue, (list_empty(&m->req_list)), 5000); | ||
493 | P9_DPRINTK(P9_DEBUG_MUX, "mux %p request queue empty: %d\n", m, | ||
494 | list_empty(&m->req_list)); | ||
495 | } | ||
496 | 455 | ||
497 | p9_mux_poll_stop(m); | 456 | p9_mux_poll_stop(m); |
457 | cancel_work_sync(&m->rq); | ||
458 | cancel_work_sync(&m->wq); | ||
459 | |||
460 | p9_conn_cancel(m, -ECONNRESET); | ||
461 | |||
498 | m->trans = NULL; | 462 | m->trans = NULL; |
499 | p9_idpool_destroy(m->tagpool); | 463 | p9_idpool_destroy(m->tagpool); |
500 | kfree(m); | 464 | kfree(m); |
@@ -840,8 +804,6 @@ static void p9_read_work(struct work_struct *work) | |||
840 | (*req->cb) (req, req->cba); | 804 | (*req->cb) (req, req->cba); |
841 | else | 805 | else |
842 | kfree(req->rcall); | 806 | kfree(req->rcall); |
843 | |||
844 | wake_up(&m->equeue); | ||
845 | } | 807 | } |
846 | } else { | 808 | } else { |
847 | if (err >= 0 && rcall->id != P9_RFLUSH) | 809 | if (err >= 0 && rcall->id != P9_RFLUSH) |
@@ -908,8 +870,10 @@ static struct p9_req *p9_send_request(struct p9_conn *m, | |||
908 | else | 870 | else |
909 | n = p9_mux_get_tag(m); | 871 | n = p9_mux_get_tag(m); |
910 | 872 | ||
911 | if (n < 0) | 873 | if (n < 0) { |
874 | kfree(req); | ||
912 | return ERR_PTR(-ENOMEM); | 875 | return ERR_PTR(-ENOMEM); |
876 | } | ||
913 | 877 | ||
914 | p9_set_tag(tc, n); | 878 | p9_set_tag(tc, n); |
915 | 879 | ||
@@ -984,8 +948,6 @@ static void p9_mux_flush_cb(struct p9_req *freq, void *a) | |||
984 | (*req->cb) (req, req->cba); | 948 | (*req->cb) (req, req->cba); |
985 | else | 949 | else |
986 | kfree(req->rcall); | 950 | kfree(req->rcall); |
987 | |||
988 | wake_up(&m->equeue); | ||
989 | } | 951 | } |
990 | 952 | ||
991 | kfree(freq->tcall); | 953 | kfree(freq->tcall); |
@@ -1191,8 +1153,6 @@ void p9_conn_cancel(struct p9_conn *m, int err) | |||
1191 | else | 1153 | else |
1192 | kfree(req->rcall); | 1154 | kfree(req->rcall); |
1193 | } | 1155 | } |
1194 | |||
1195 | wake_up(&m->equeue); | ||
1196 | } | 1156 | } |
1197 | 1157 | ||
1198 | /** | 1158 | /** |
@@ -1370,7 +1330,6 @@ p9_fd_poll(struct p9_trans *trans, struct poll_table_struct *pt) | |||
1370 | { | 1330 | { |
1371 | int ret, n; | 1331 | int ret, n; |
1372 | struct p9_trans_fd *ts = NULL; | 1332 | struct p9_trans_fd *ts = NULL; |
1373 | mm_segment_t oldfs; | ||
1374 | 1333 | ||
1375 | if (trans && trans->status == Connected) | 1334 | if (trans && trans->status == Connected) |
1376 | ts = trans->priv; | 1335 | ts = trans->priv; |
@@ -1384,24 +1343,17 @@ p9_fd_poll(struct p9_trans *trans, struct poll_table_struct *pt) | |||
1384 | if (!ts->wr->f_op || !ts->wr->f_op->poll) | 1343 | if (!ts->wr->f_op || !ts->wr->f_op->poll) |
1385 | return -EIO; | 1344 | return -EIO; |
1386 | 1345 | ||
1387 | oldfs = get_fs(); | ||
1388 | set_fs(get_ds()); | ||
1389 | |||
1390 | ret = ts->rd->f_op->poll(ts->rd, pt); | 1346 | ret = ts->rd->f_op->poll(ts->rd, pt); |
1391 | if (ret < 0) | 1347 | if (ret < 0) |
1392 | goto end; | 1348 | return ret; |
1393 | 1349 | ||
1394 | if (ts->rd != ts->wr) { | 1350 | if (ts->rd != ts->wr) { |
1395 | n = ts->wr->f_op->poll(ts->wr, pt); | 1351 | n = ts->wr->f_op->poll(ts->wr, pt); |
1396 | if (n < 0) { | 1352 | if (n < 0) |
1397 | ret = n; | 1353 | return n; |
1398 | goto end; | ||
1399 | } | ||
1400 | ret = (ret & ~POLLOUT) | (n & ~POLLIN); | 1354 | ret = (ret & ~POLLOUT) | (n & ~POLLIN); |
1401 | } | 1355 | } |
1402 | 1356 | ||
1403 | end: | ||
1404 | set_fs(oldfs); | ||
1405 | return ret; | 1357 | return ret; |
1406 | } | 1358 | } |
1407 | 1359 | ||
@@ -1629,6 +1581,7 @@ static struct p9_trans_module p9_tcp_trans = { | |||
1629 | .maxsize = MAX_SOCK_BUF, | 1581 | .maxsize = MAX_SOCK_BUF, |
1630 | .def = 1, | 1582 | .def = 1, |
1631 | .create = p9_trans_create_tcp, | 1583 | .create = p9_trans_create_tcp, |
1584 | .owner = THIS_MODULE, | ||
1632 | }; | 1585 | }; |
1633 | 1586 | ||
1634 | static struct p9_trans_module p9_unix_trans = { | 1587 | static struct p9_trans_module p9_unix_trans = { |
@@ -1636,6 +1589,7 @@ static struct p9_trans_module p9_unix_trans = { | |||
1636 | .maxsize = MAX_SOCK_BUF, | 1589 | .maxsize = MAX_SOCK_BUF, |
1637 | .def = 0, | 1590 | .def = 0, |
1638 | .create = p9_trans_create_unix, | 1591 | .create = p9_trans_create_unix, |
1592 | .owner = THIS_MODULE, | ||
1639 | }; | 1593 | }; |
1640 | 1594 | ||
1641 | static struct p9_trans_module p9_fd_trans = { | 1595 | static struct p9_trans_module p9_fd_trans = { |
@@ -1643,14 +1597,20 @@ static struct p9_trans_module p9_fd_trans = { | |||
1643 | .maxsize = MAX_SOCK_BUF, | 1597 | .maxsize = MAX_SOCK_BUF, |
1644 | .def = 0, | 1598 | .def = 0, |
1645 | .create = p9_trans_create_fd, | 1599 | .create = p9_trans_create_fd, |
1600 | .owner = THIS_MODULE, | ||
1646 | }; | 1601 | }; |
1647 | 1602 | ||
1648 | int p9_trans_fd_init(void) | 1603 | int p9_trans_fd_init(void) |
1649 | { | 1604 | { |
1650 | int ret = p9_mux_global_init(); | 1605 | int i; |
1651 | if (ret) { | 1606 | |
1652 | printk(KERN_WARNING "9p: starting mux failed\n"); | 1607 | for (i = 0; i < ARRAY_SIZE(p9_mux_poll_tasks); i++) |
1653 | return ret; | 1608 | p9_mux_poll_tasks[i].task = NULL; |
1609 | |||
1610 | p9_mux_wq = create_workqueue("v9fs"); | ||
1611 | if (!p9_mux_wq) { | ||
1612 | printk(KERN_WARNING "v9fs: mux: creating workqueue failed\n"); | ||
1613 | return -ENOMEM; | ||
1654 | } | 1614 | } |
1655 | 1615 | ||
1656 | v9fs_register_trans(&p9_tcp_trans); | 1616 | v9fs_register_trans(&p9_tcp_trans); |
@@ -1659,4 +1619,12 @@ int p9_trans_fd_init(void) | |||
1659 | 1619 | ||
1660 | return 0; | 1620 | return 0; |
1661 | } | 1621 | } |
1662 | EXPORT_SYMBOL(p9_trans_fd_init); | 1622 | |
1623 | void p9_trans_fd_exit(void) | ||
1624 | { | ||
1625 | v9fs_unregister_trans(&p9_tcp_trans); | ||
1626 | v9fs_unregister_trans(&p9_unix_trans); | ||
1627 | v9fs_unregister_trans(&p9_fd_trans); | ||
1628 | |||
1629 | destroy_workqueue(p9_mux_wq); | ||
1630 | } | ||
diff --git a/net/9p/trans_virtio.c b/net/9p/trans_virtio.c index 42adc052b149..94912e077a55 100644 --- a/net/9p/trans_virtio.c +++ b/net/9p/trans_virtio.c | |||
@@ -528,6 +528,7 @@ static struct p9_trans_module p9_virtio_trans = { | |||
528 | .create = p9_virtio_create, | 528 | .create = p9_virtio_create, |
529 | .maxsize = PAGE_SIZE*16, | 529 | .maxsize = PAGE_SIZE*16, |
530 | .def = 0, | 530 | .def = 0, |
531 | .owner = THIS_MODULE, | ||
531 | }; | 532 | }; |
532 | 533 | ||
533 | /* The standard init function */ | 534 | /* The standard init function */ |
@@ -545,6 +546,7 @@ static int __init p9_virtio_init(void) | |||
545 | static void __exit p9_virtio_cleanup(void) | 546 | static void __exit p9_virtio_cleanup(void) |
546 | { | 547 | { |
547 | unregister_virtio_driver(&p9_virtio_drv); | 548 | unregister_virtio_driver(&p9_virtio_drv); |
549 | v9fs_unregister_trans(&p9_virtio_trans); | ||
548 | } | 550 | } |
549 | 551 | ||
550 | module_init(p9_virtio_init); | 552 | module_init(p9_virtio_init); |
diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c index 01c83e2a4c19..28c71574a781 100644 --- a/net/ax25/af_ax25.c +++ b/net/ax25/af_ax25.c | |||
@@ -317,6 +317,9 @@ void ax25_destroy_socket(ax25_cb *ax25) | |||
317 | /* Queue the unaccepted socket for death */ | 317 | /* Queue the unaccepted socket for death */ |
318 | sock_orphan(skb->sk); | 318 | sock_orphan(skb->sk); |
319 | 319 | ||
320 | /* 9A4GL: hack to release unaccepted sockets */ | ||
321 | skb->sk->sk_state = TCP_LISTEN; | ||
322 | |||
320 | ax25_start_heartbeat(sax25); | 323 | ax25_start_heartbeat(sax25); |
321 | sax25->state = AX25_STATE_0; | 324 | sax25->state = AX25_STATE_0; |
322 | } | 325 | } |
diff --git a/net/ax25/ax25_std_timer.c b/net/ax25/ax25_std_timer.c index cdc7e751ef36..96e4b9273250 100644 --- a/net/ax25/ax25_std_timer.c +++ b/net/ax25/ax25_std_timer.c | |||
@@ -39,9 +39,11 @@ void ax25_std_heartbeat_expiry(ax25_cb *ax25) | |||
39 | 39 | ||
40 | switch (ax25->state) { | 40 | switch (ax25->state) { |
41 | case AX25_STATE_0: | 41 | case AX25_STATE_0: |
42 | if (!sk || | 42 | /* Magic here: If we listen() and a new link dies before it |
43 | sock_flag(sk, SOCK_DESTROY) || | 43 | is accepted() it isn't 'dead' so doesn't get removed. */ |
44 | sock_flag(sk, SOCK_DEAD)) { | 44 | if (!sk || sock_flag(sk, SOCK_DESTROY) || |
45 | (sk->sk_state == TCP_LISTEN && | ||
46 | sock_flag(sk, SOCK_DEAD))) { | ||
45 | if (sk) { | 47 | if (sk) { |
46 | sock_hold(sk); | 48 | sock_hold(sk); |
47 | ax25_destroy_socket(ax25); | 49 | ax25_destroy_socket(ax25); |
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index f5b21cb93699..278a3ace14f6 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c | |||
@@ -164,6 +164,9 @@ static inline int hci_request(struct hci_dev *hdev, void (*req)(struct hci_dev * | |||
164 | { | 164 | { |
165 | int ret; | 165 | int ret; |
166 | 166 | ||
167 | if (!test_bit(HCI_UP, &hdev->flags)) | ||
168 | return -ENETDOWN; | ||
169 | |||
167 | /* Serialize all requests */ | 170 | /* Serialize all requests */ |
168 | hci_req_lock(hdev); | 171 | hci_req_lock(hdev); |
169 | ret = __hci_request(hdev, req, opt, timeout); | 172 | ret = __hci_request(hdev, req, opt, timeout); |
diff --git a/net/core/dev.c b/net/core/dev.c index e719ed29310f..0ae08d3f57e7 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -122,6 +122,7 @@ | |||
122 | #include <linux/if_arp.h> | 122 | #include <linux/if_arp.h> |
123 | #include <linux/if_vlan.h> | 123 | #include <linux/if_vlan.h> |
124 | #include <linux/ip.h> | 124 | #include <linux/ip.h> |
125 | #include <net/ip.h> | ||
125 | #include <linux/ipv6.h> | 126 | #include <linux/ipv6.h> |
126 | #include <linux/in.h> | 127 | #include <linux/in.h> |
127 | #include <linux/jhash.h> | 128 | #include <linux/jhash.h> |
@@ -1667,7 +1668,7 @@ static u16 simple_tx_hash(struct net_device *dev, struct sk_buff *skb) | |||
1667 | { | 1668 | { |
1668 | u32 addr1, addr2, ports; | 1669 | u32 addr1, addr2, ports; |
1669 | u32 hash, ihl; | 1670 | u32 hash, ihl; |
1670 | u8 ip_proto; | 1671 | u8 ip_proto = 0; |
1671 | 1672 | ||
1672 | if (unlikely(!simple_tx_hashrnd_initialized)) { | 1673 | if (unlikely(!simple_tx_hashrnd_initialized)) { |
1673 | get_random_bytes(&simple_tx_hashrnd, 4); | 1674 | get_random_bytes(&simple_tx_hashrnd, 4); |
@@ -1676,7 +1677,8 @@ static u16 simple_tx_hash(struct net_device *dev, struct sk_buff *skb) | |||
1676 | 1677 | ||
1677 | switch (skb->protocol) { | 1678 | switch (skb->protocol) { |
1678 | case __constant_htons(ETH_P_IP): | 1679 | case __constant_htons(ETH_P_IP): |
1679 | ip_proto = ip_hdr(skb)->protocol; | 1680 | if (!(ip_hdr(skb)->frag_off & htons(IP_MF | IP_OFFSET))) |
1681 | ip_proto = ip_hdr(skb)->protocol; | ||
1680 | addr1 = ip_hdr(skb)->saddr; | 1682 | addr1 = ip_hdr(skb)->saddr; |
1681 | addr2 = ip_hdr(skb)->daddr; | 1683 | addr2 = ip_hdr(skb)->daddr; |
1682 | ihl = ip_hdr(skb)->ihl; | 1684 | ihl = ip_hdr(skb)->ihl; |
@@ -2916,6 +2918,12 @@ int netdev_set_master(struct net_device *slave, struct net_device *master) | |||
2916 | return 0; | 2918 | return 0; |
2917 | } | 2919 | } |
2918 | 2920 | ||
2921 | static void dev_change_rx_flags(struct net_device *dev, int flags) | ||
2922 | { | ||
2923 | if (dev->flags & IFF_UP && dev->change_rx_flags) | ||
2924 | dev->change_rx_flags(dev, flags); | ||
2925 | } | ||
2926 | |||
2919 | static int __dev_set_promiscuity(struct net_device *dev, int inc) | 2927 | static int __dev_set_promiscuity(struct net_device *dev, int inc) |
2920 | { | 2928 | { |
2921 | unsigned short old_flags = dev->flags; | 2929 | unsigned short old_flags = dev->flags; |
@@ -2953,8 +2961,7 @@ static int __dev_set_promiscuity(struct net_device *dev, int inc) | |||
2953 | current->uid, current->gid, | 2961 | current->uid, current->gid, |
2954 | audit_get_sessionid(current)); | 2962 | audit_get_sessionid(current)); |
2955 | 2963 | ||
2956 | if (dev->change_rx_flags) | 2964 | dev_change_rx_flags(dev, IFF_PROMISC); |
2957 | dev->change_rx_flags(dev, IFF_PROMISC); | ||
2958 | } | 2965 | } |
2959 | return 0; | 2966 | return 0; |
2960 | } | 2967 | } |
@@ -3020,8 +3027,7 @@ int dev_set_allmulti(struct net_device *dev, int inc) | |||
3020 | } | 3027 | } |
3021 | } | 3028 | } |
3022 | if (dev->flags ^ old_flags) { | 3029 | if (dev->flags ^ old_flags) { |
3023 | if (dev->change_rx_flags) | 3030 | dev_change_rx_flags(dev, IFF_ALLMULTI); |
3024 | dev->change_rx_flags(dev, IFF_ALLMULTI); | ||
3025 | dev_set_rx_mode(dev); | 3031 | dev_set_rx_mode(dev); |
3026 | } | 3032 | } |
3027 | return 0; | 3033 | return 0; |
@@ -3345,8 +3351,8 @@ int dev_change_flags(struct net_device *dev, unsigned flags) | |||
3345 | * Load in the correct multicast list now the flags have changed. | 3351 | * Load in the correct multicast list now the flags have changed. |
3346 | */ | 3352 | */ |
3347 | 3353 | ||
3348 | if (dev->change_rx_flags && (old_flags ^ flags) & IFF_MULTICAST) | 3354 | if ((old_flags ^ flags) & IFF_MULTICAST) |
3349 | dev->change_rx_flags(dev, IFF_MULTICAST); | 3355 | dev_change_rx_flags(dev, IFF_MULTICAST); |
3350 | 3356 | ||
3351 | dev_set_rx_mode(dev); | 3357 | dev_set_rx_mode(dev); |
3352 | 3358 | ||
@@ -3806,14 +3812,11 @@ static int dev_new_index(struct net *net) | |||
3806 | } | 3812 | } |
3807 | 3813 | ||
3808 | /* Delayed registration/unregisteration */ | 3814 | /* Delayed registration/unregisteration */ |
3809 | static DEFINE_SPINLOCK(net_todo_list_lock); | ||
3810 | static LIST_HEAD(net_todo_list); | 3815 | static LIST_HEAD(net_todo_list); |
3811 | 3816 | ||
3812 | static void net_set_todo(struct net_device *dev) | 3817 | static void net_set_todo(struct net_device *dev) |
3813 | { | 3818 | { |
3814 | spin_lock(&net_todo_list_lock); | ||
3815 | list_add_tail(&dev->todo_list, &net_todo_list); | 3819 | list_add_tail(&dev->todo_list, &net_todo_list); |
3816 | spin_unlock(&net_todo_list_lock); | ||
3817 | } | 3820 | } |
3818 | 3821 | ||
3819 | static void rollback_registered(struct net_device *dev) | 3822 | static void rollback_registered(struct net_device *dev) |
@@ -4140,33 +4143,24 @@ static void netdev_wait_allrefs(struct net_device *dev) | |||
4140 | * free_netdev(y1); | 4143 | * free_netdev(y1); |
4141 | * free_netdev(y2); | 4144 | * free_netdev(y2); |
4142 | * | 4145 | * |
4143 | * We are invoked by rtnl_unlock() after it drops the semaphore. | 4146 | * We are invoked by rtnl_unlock(). |
4144 | * This allows us to deal with problems: | 4147 | * This allows us to deal with problems: |
4145 | * 1) We can delete sysfs objects which invoke hotplug | 4148 | * 1) We can delete sysfs objects which invoke hotplug |
4146 | * without deadlocking with linkwatch via keventd. | 4149 | * without deadlocking with linkwatch via keventd. |
4147 | * 2) Since we run with the RTNL semaphore not held, we can sleep | 4150 | * 2) Since we run with the RTNL semaphore not held, we can sleep |
4148 | * safely in order to wait for the netdev refcnt to drop to zero. | 4151 | * safely in order to wait for the netdev refcnt to drop to zero. |
4152 | * | ||
4153 | * We must not return until all unregister events added during | ||
4154 | * the interval the lock was held have been completed. | ||
4149 | */ | 4155 | */ |
4150 | static DEFINE_MUTEX(net_todo_run_mutex); | ||
4151 | void netdev_run_todo(void) | 4156 | void netdev_run_todo(void) |
4152 | { | 4157 | { |
4153 | struct list_head list; | 4158 | struct list_head list; |
4154 | 4159 | ||
4155 | /* Need to guard against multiple cpu's getting out of order. */ | ||
4156 | mutex_lock(&net_todo_run_mutex); | ||
4157 | |||
4158 | /* Not safe to do outside the semaphore. We must not return | ||
4159 | * until all unregister events invoked by the local processor | ||
4160 | * have been completed (either by this todo run, or one on | ||
4161 | * another cpu). | ||
4162 | */ | ||
4163 | if (list_empty(&net_todo_list)) | ||
4164 | goto out; | ||
4165 | |||
4166 | /* Snapshot list, allow later requests */ | 4160 | /* Snapshot list, allow later requests */ |
4167 | spin_lock(&net_todo_list_lock); | ||
4168 | list_replace_init(&net_todo_list, &list); | 4161 | list_replace_init(&net_todo_list, &list); |
4169 | spin_unlock(&net_todo_list_lock); | 4162 | |
4163 | __rtnl_unlock(); | ||
4170 | 4164 | ||
4171 | while (!list_empty(&list)) { | 4165 | while (!list_empty(&list)) { |
4172 | struct net_device *dev | 4166 | struct net_device *dev |
@@ -4198,9 +4192,6 @@ void netdev_run_todo(void) | |||
4198 | /* Free network device */ | 4192 | /* Free network device */ |
4199 | kobject_put(&dev->dev.kobj); | 4193 | kobject_put(&dev->dev.kobj); |
4200 | } | 4194 | } |
4201 | |||
4202 | out: | ||
4203 | mutex_unlock(&net_todo_run_mutex); | ||
4204 | } | 4195 | } |
4205 | 4196 | ||
4206 | static struct net_device_stats *internal_stats(struct net_device *dev) | 4197 | static struct net_device_stats *internal_stats(struct net_device *dev) |
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index 71edb8b36341..d6381c2a4693 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c | |||
@@ -73,7 +73,7 @@ void __rtnl_unlock(void) | |||
73 | 73 | ||
74 | void rtnl_unlock(void) | 74 | void rtnl_unlock(void) |
75 | { | 75 | { |
76 | mutex_unlock(&rtnl_mutex); | 76 | /* This fellow will unlock it for us. */ |
77 | netdev_run_todo(); | 77 | netdev_run_todo(); |
78 | } | 78 | } |
79 | 79 | ||
diff --git a/net/ipv4/tcp_hybla.c b/net/ipv4/tcp_hybla.c index bfcbd148a89d..c209e054a634 100644 --- a/net/ipv4/tcp_hybla.c +++ b/net/ipv4/tcp_hybla.c | |||
@@ -150,7 +150,11 @@ static void hybla_cong_avoid(struct sock *sk, u32 ack, u32 in_flight) | |||
150 | ca->snd_cwnd_cents -= 128; | 150 | ca->snd_cwnd_cents -= 128; |
151 | tp->snd_cwnd_cnt = 0; | 151 | tp->snd_cwnd_cnt = 0; |
152 | } | 152 | } |
153 | 153 | /* check when cwnd has not been incremented for a while */ | |
154 | if (increment == 0 && odd == 0 && tp->snd_cwnd_cnt >= tp->snd_cwnd) { | ||
155 | tp->snd_cwnd++; | ||
156 | tp->snd_cwnd_cnt = 0; | ||
157 | } | ||
154 | /* clamp down slowstart cwnd to ssthresh value. */ | 158 | /* clamp down slowstart cwnd to ssthresh value. */ |
155 | if (is_slowstart) | 159 | if (is_slowstart) |
156 | tp->snd_cwnd = min(tp->snd_cwnd, tp->snd_ssthresh); | 160 | tp->snd_cwnd = min(tp->snd_cwnd, tp->snd_ssthresh); |
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 67ccce2a96bd..7abc6b80d47d 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -4879,7 +4879,8 @@ int tcp_rcv_established(struct sock *sk, struct sk_buff *skb, | |||
4879 | goto no_ack; | 4879 | goto no_ack; |
4880 | } | 4880 | } |
4881 | 4881 | ||
4882 | __tcp_ack_snd_check(sk, 0); | 4882 | if (!copied_early || tp->rcv_nxt != tp->rcv_wup) |
4883 | __tcp_ack_snd_check(sk, 0); | ||
4883 | no_ack: | 4884 | no_ack: |
4884 | #ifdef CONFIG_NET_DMA | 4885 | #ifdef CONFIG_NET_DMA |
4885 | if (copied_early) | 4886 | if (copied_early) |
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 1b4fee20fc93..011478e46c40 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c | |||
@@ -618,7 +618,7 @@ static void tcp_v4_send_ack(struct sk_buff *skb, u32 seq, u32 ack, | |||
618 | ]; | 618 | ]; |
619 | } rep; | 619 | } rep; |
620 | struct ip_reply_arg arg; | 620 | struct ip_reply_arg arg; |
621 | struct net *net = dev_net(skb->dev); | 621 | struct net *net = dev_net(skb->dst->dev); |
622 | 622 | ||
623 | memset(&rep.th, 0, sizeof(struct tcphdr)); | 623 | memset(&rep.th, 0, sizeof(struct tcphdr)); |
624 | memset(&arg, 0, sizeof(arg)); | 624 | memset(&arg, 0, sizeof(arg)); |
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 8e42fbbd5761..57e26fa66185 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c | |||
@@ -951,6 +951,27 @@ int udp_disconnect(struct sock *sk, int flags) | |||
951 | return 0; | 951 | return 0; |
952 | } | 952 | } |
953 | 953 | ||
954 | static int __udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) | ||
955 | { | ||
956 | int is_udplite = IS_UDPLITE(sk); | ||
957 | int rc; | ||
958 | |||
959 | if ((rc = sock_queue_rcv_skb(sk, skb)) < 0) { | ||
960 | /* Note that an ENOMEM error is charged twice */ | ||
961 | if (rc == -ENOMEM) | ||
962 | UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS, | ||
963 | is_udplite); | ||
964 | goto drop; | ||
965 | } | ||
966 | |||
967 | return 0; | ||
968 | |||
969 | drop: | ||
970 | UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite); | ||
971 | kfree_skb(skb); | ||
972 | return -1; | ||
973 | } | ||
974 | |||
954 | /* returns: | 975 | /* returns: |
955 | * -1: error | 976 | * -1: error |
956 | * 0: success | 977 | * 0: success |
@@ -989,9 +1010,7 @@ int udp_queue_rcv_skb(struct sock * sk, struct sk_buff *skb) | |||
989 | up->encap_rcv != NULL) { | 1010 | up->encap_rcv != NULL) { |
990 | int ret; | 1011 | int ret; |
991 | 1012 | ||
992 | bh_unlock_sock(sk); | ||
993 | ret = (*up->encap_rcv)(sk, skb); | 1013 | ret = (*up->encap_rcv)(sk, skb); |
994 | bh_lock_sock(sk); | ||
995 | if (ret <= 0) { | 1014 | if (ret <= 0) { |
996 | UDP_INC_STATS_BH(sock_net(sk), | 1015 | UDP_INC_STATS_BH(sock_net(sk), |
997 | UDP_MIB_INDATAGRAMS, | 1016 | UDP_MIB_INDATAGRAMS, |
@@ -1044,17 +1063,16 @@ int udp_queue_rcv_skb(struct sock * sk, struct sk_buff *skb) | |||
1044 | goto drop; | 1063 | goto drop; |
1045 | } | 1064 | } |
1046 | 1065 | ||
1047 | if ((rc = sock_queue_rcv_skb(sk,skb)) < 0) { | 1066 | rc = 0; |
1048 | /* Note that an ENOMEM error is charged twice */ | ||
1049 | if (rc == -ENOMEM) { | ||
1050 | UDP_INC_STATS_BH(sock_net(sk), | ||
1051 | UDP_MIB_RCVBUFERRORS, is_udplite); | ||
1052 | atomic_inc(&sk->sk_drops); | ||
1053 | } | ||
1054 | goto drop; | ||
1055 | } | ||
1056 | 1067 | ||
1057 | return 0; | 1068 | bh_lock_sock(sk); |
1069 | if (!sock_owned_by_user(sk)) | ||
1070 | rc = __udp_queue_rcv_skb(sk, skb); | ||
1071 | else | ||
1072 | sk_add_backlog(sk, skb); | ||
1073 | bh_unlock_sock(sk); | ||
1074 | |||
1075 | return rc; | ||
1058 | 1076 | ||
1059 | drop: | 1077 | drop: |
1060 | UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite); | 1078 | UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite); |
@@ -1092,15 +1110,7 @@ static int __udp4_lib_mcast_deliver(struct net *net, struct sk_buff *skb, | |||
1092 | skb1 = skb_clone(skb, GFP_ATOMIC); | 1110 | skb1 = skb_clone(skb, GFP_ATOMIC); |
1093 | 1111 | ||
1094 | if (skb1) { | 1112 | if (skb1) { |
1095 | int ret = 0; | 1113 | int ret = udp_queue_rcv_skb(sk, skb1); |
1096 | |||
1097 | bh_lock_sock(sk); | ||
1098 | if (!sock_owned_by_user(sk)) | ||
1099 | ret = udp_queue_rcv_skb(sk, skb1); | ||
1100 | else | ||
1101 | sk_add_backlog(sk, skb1); | ||
1102 | bh_unlock_sock(sk); | ||
1103 | |||
1104 | if (ret > 0) | 1114 | if (ret > 0) |
1105 | /* we should probably re-process instead | 1115 | /* we should probably re-process instead |
1106 | * of dropping packets here. */ | 1116 | * of dropping packets here. */ |
@@ -1195,13 +1205,7 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct hlist_head udptable[], | |||
1195 | uh->dest, inet_iif(skb), udptable); | 1205 | uh->dest, inet_iif(skb), udptable); |
1196 | 1206 | ||
1197 | if (sk != NULL) { | 1207 | if (sk != NULL) { |
1198 | int ret = 0; | 1208 | int ret = udp_queue_rcv_skb(sk, skb); |
1199 | bh_lock_sock(sk); | ||
1200 | if (!sock_owned_by_user(sk)) | ||
1201 | ret = udp_queue_rcv_skb(sk, skb); | ||
1202 | else | ||
1203 | sk_add_backlog(sk, skb); | ||
1204 | bh_unlock_sock(sk); | ||
1205 | sock_put(sk); | 1209 | sock_put(sk); |
1206 | 1210 | ||
1207 | /* a return value > 0 means to resubmit the input, but | 1211 | /* a return value > 0 means to resubmit the input, but |
@@ -1494,7 +1498,7 @@ struct proto udp_prot = { | |||
1494 | .sendmsg = udp_sendmsg, | 1498 | .sendmsg = udp_sendmsg, |
1495 | .recvmsg = udp_recvmsg, | 1499 | .recvmsg = udp_recvmsg, |
1496 | .sendpage = udp_sendpage, | 1500 | .sendpage = udp_sendpage, |
1497 | .backlog_rcv = udp_queue_rcv_skb, | 1501 | .backlog_rcv = __udp_queue_rcv_skb, |
1498 | .hash = udp_lib_hash, | 1502 | .hash = udp_lib_hash, |
1499 | .unhash = udp_lib_unhash, | 1503 | .unhash = udp_lib_unhash, |
1500 | .get_port = udp_v4_get_port, | 1504 | .get_port = udp_v4_get_port, |
diff --git a/net/ipv6/netfilter/ip6t_hbh.c b/net/ipv6/netfilter/ip6t_hbh.c index 62e39ace0588..26654b26d7fa 100644 --- a/net/ipv6/netfilter/ip6t_hbh.c +++ b/net/ipv6/netfilter/ip6t_hbh.c | |||
@@ -97,8 +97,6 @@ hbh_mt6(const struct sk_buff *skb, const struct net_device *in, | |||
97 | hdrlen -= 2; | 97 | hdrlen -= 2; |
98 | if (!(optinfo->flags & IP6T_OPTS_OPTS)) { | 98 | if (!(optinfo->flags & IP6T_OPTS_OPTS)) { |
99 | return ret; | 99 | return ret; |
100 | } else if (optinfo->flags & IP6T_OPTS_NSTRICT) { | ||
101 | pr_debug("Not strict - not implemented"); | ||
102 | } else { | 100 | } else { |
103 | pr_debug("Strict "); | 101 | pr_debug("Strict "); |
104 | pr_debug("#%d ", optinfo->optsnr); | 102 | pr_debug("#%d ", optinfo->optsnr); |
@@ -177,6 +175,12 @@ hbh_mt6_check(const char *tablename, const void *entry, | |||
177 | pr_debug("ip6t_opts: unknown flags %X\n", optsinfo->invflags); | 175 | pr_debug("ip6t_opts: unknown flags %X\n", optsinfo->invflags); |
178 | return false; | 176 | return false; |
179 | } | 177 | } |
178 | |||
179 | if (optsinfo->flags & IP6T_OPTS_NSTRICT) { | ||
180 | pr_debug("ip6t_opts: Not strict - not implemented"); | ||
181 | return false; | ||
182 | } | ||
183 | |||
180 | return true; | 184 | return true; |
181 | } | 185 | } |
182 | 186 | ||
diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 9af6115f0f50..63442a1e741c 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c | |||
@@ -2688,6 +2688,8 @@ int __init ip6_route_init(void) | |||
2688 | if (ret) | 2688 | if (ret) |
2689 | goto out_kmem_cache; | 2689 | goto out_kmem_cache; |
2690 | 2690 | ||
2691 | ip6_dst_blackhole_ops.kmem_cachep = ip6_dst_ops_template.kmem_cachep; | ||
2692 | |||
2691 | /* Registering of the loopback is done before this portion of code, | 2693 | /* Registering of the loopback is done before this portion of code, |
2692 | * the loopback reference in rt6_info will not be taken, do it | 2694 | * the loopback reference in rt6_info will not be taken, do it |
2693 | * manually for init_net */ | 2695 | * manually for init_net */ |
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index b585c850a89a..10e22fd48222 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c | |||
@@ -1050,7 +1050,7 @@ static void tcp_v6_send_ack(struct sk_buff *skb, u32 seq, u32 ack, u32 win, u32 | |||
1050 | struct tcphdr *th = tcp_hdr(skb), *t1; | 1050 | struct tcphdr *th = tcp_hdr(skb), *t1; |
1051 | struct sk_buff *buff; | 1051 | struct sk_buff *buff; |
1052 | struct flowi fl; | 1052 | struct flowi fl; |
1053 | struct net *net = dev_net(skb->dev); | 1053 | struct net *net = dev_net(skb->dst->dev); |
1054 | struct sock *ctl_sk = net->ipv6.tcp_sk; | 1054 | struct sock *ctl_sk = net->ipv6.tcp_sk; |
1055 | unsigned int tot_len = sizeof(struct tcphdr); | 1055 | unsigned int tot_len = sizeof(struct tcphdr); |
1056 | __be32 *topt; | 1056 | __be32 *topt; |
diff --git a/net/iucv/iucv.c b/net/iucv/iucv.c index 705959b31e24..d7b54b5bfa69 100644 --- a/net/iucv/iucv.c +++ b/net/iucv/iucv.c | |||
@@ -524,7 +524,6 @@ static int iucv_enable(void) | |||
524 | get_online_cpus(); | 524 | get_online_cpus(); |
525 | for_each_online_cpu(cpu) | 525 | for_each_online_cpu(cpu) |
526 | smp_call_function_single(cpu, iucv_declare_cpu, NULL, 1); | 526 | smp_call_function_single(cpu, iucv_declare_cpu, NULL, 1); |
527 | preempt_enable(); | ||
528 | if (cpus_empty(iucv_buffer_cpumask)) | 527 | if (cpus_empty(iucv_buffer_cpumask)) |
529 | /* No cpu could declare an iucv buffer. */ | 528 | /* No cpu could declare an iucv buffer. */ |
530 | goto out_path; | 529 | goto out_path; |
@@ -547,7 +546,9 @@ out: | |||
547 | */ | 546 | */ |
548 | static void iucv_disable(void) | 547 | static void iucv_disable(void) |
549 | { | 548 | { |
549 | get_online_cpus(); | ||
550 | on_each_cpu(iucv_retrieve_cpu, NULL, 1); | 550 | on_each_cpu(iucv_retrieve_cpu, NULL, 1); |
551 | put_online_cpus(); | ||
551 | kfree(iucv_path_table); | 552 | kfree(iucv_path_table); |
552 | } | 553 | } |
553 | 554 | ||
diff --git a/net/key/af_key.c b/net/key/af_key.c index d628df97e02e..b7f5a1c353ee 100644 --- a/net/key/af_key.c +++ b/net/key/af_key.c | |||
@@ -73,22 +73,18 @@ static int pfkey_can_dump(struct sock *sk) | |||
73 | return 0; | 73 | return 0; |
74 | } | 74 | } |
75 | 75 | ||
76 | static int pfkey_do_dump(struct pfkey_sock *pfk) | 76 | static void pfkey_terminate_dump(struct pfkey_sock *pfk) |
77 | { | 77 | { |
78 | int rc; | 78 | if (pfk->dump.dump) { |
79 | 79 | pfk->dump.done(pfk); | |
80 | rc = pfk->dump.dump(pfk); | 80 | pfk->dump.dump = NULL; |
81 | if (rc == -ENOBUFS) | 81 | pfk->dump.done = NULL; |
82 | return 0; | 82 | } |
83 | |||
84 | pfk->dump.done(pfk); | ||
85 | pfk->dump.dump = NULL; | ||
86 | pfk->dump.done = NULL; | ||
87 | return rc; | ||
88 | } | 83 | } |
89 | 84 | ||
90 | static void pfkey_sock_destruct(struct sock *sk) | 85 | static void pfkey_sock_destruct(struct sock *sk) |
91 | { | 86 | { |
87 | pfkey_terminate_dump(pfkey_sk(sk)); | ||
92 | skb_queue_purge(&sk->sk_receive_queue); | 88 | skb_queue_purge(&sk->sk_receive_queue); |
93 | 89 | ||
94 | if (!sock_flag(sk, SOCK_DEAD)) { | 90 | if (!sock_flag(sk, SOCK_DEAD)) { |
@@ -310,6 +306,18 @@ static int pfkey_broadcast(struct sk_buff *skb, gfp_t allocation, | |||
310 | return err; | 306 | return err; |
311 | } | 307 | } |
312 | 308 | ||
309 | static int pfkey_do_dump(struct pfkey_sock *pfk) | ||
310 | { | ||
311 | int rc; | ||
312 | |||
313 | rc = pfk->dump.dump(pfk); | ||
314 | if (rc == -ENOBUFS) | ||
315 | return 0; | ||
316 | |||
317 | pfkey_terminate_dump(pfk); | ||
318 | return rc; | ||
319 | } | ||
320 | |||
313 | static inline void pfkey_hdr_dup(struct sadb_msg *new, struct sadb_msg *orig) | 321 | static inline void pfkey_hdr_dup(struct sadb_msg *new, struct sadb_msg *orig) |
314 | { | 322 | { |
315 | *new = *orig; | 323 | *new = *orig; |
diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c index 532e4faa29f7..9f1ea4a27b35 100644 --- a/net/netrom/af_netrom.c +++ b/net/netrom/af_netrom.c | |||
@@ -525,6 +525,7 @@ static int nr_release(struct socket *sock) | |||
525 | if (sk == NULL) return 0; | 525 | if (sk == NULL) return 0; |
526 | 526 | ||
527 | sock_hold(sk); | 527 | sock_hold(sk); |
528 | sock_orphan(sk); | ||
528 | lock_sock(sk); | 529 | lock_sock(sk); |
529 | nr = nr_sk(sk); | 530 | nr = nr_sk(sk); |
530 | 531 | ||
@@ -548,7 +549,6 @@ static int nr_release(struct socket *sock) | |||
548 | sk->sk_state = TCP_CLOSE; | 549 | sk->sk_state = TCP_CLOSE; |
549 | sk->sk_shutdown |= SEND_SHUTDOWN; | 550 | sk->sk_shutdown |= SEND_SHUTDOWN; |
550 | sk->sk_state_change(sk); | 551 | sk->sk_state_change(sk); |
551 | sock_orphan(sk); | ||
552 | sock_set_flag(sk, SOCK_DESTROY); | 552 | sock_set_flag(sk, SOCK_DESTROY); |
553 | break; | 553 | break; |
554 | 554 | ||
diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index 9634091ee2f0..ec0a0839ce51 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c | |||
@@ -215,10 +215,9 @@ static void dev_watchdog(unsigned long arg) | |||
215 | time_after(jiffies, (dev->trans_start + | 215 | time_after(jiffies, (dev->trans_start + |
216 | dev->watchdog_timeo))) { | 216 | dev->watchdog_timeo))) { |
217 | char drivername[64]; | 217 | char drivername[64]; |
218 | printk(KERN_INFO "NETDEV WATCHDOG: %s (%s): transmit timed out\n", | 218 | WARN_ONCE(1, KERN_INFO "NETDEV WATCHDOG: %s (%s): transmit timed out\n", |
219 | dev->name, netdev_drivername(dev, drivername, 64)); | 219 | dev->name, netdev_drivername(dev, drivername, 64)); |
220 | dev->tx_timeout(dev); | 220 | dev->tx_timeout(dev); |
221 | WARN_ON_ONCE(1); | ||
222 | } | 221 | } |
223 | if (!mod_timer(&dev->watchdog_timer, | 222 | if (!mod_timer(&dev->watchdog_timer, |
224 | round_jiffies(jiffies + | 223 | round_jiffies(jiffies + |
diff --git a/net/sctp/associola.c b/net/sctp/associola.c index 8472b8b349c4..abd51cef2413 100644 --- a/net/sctp/associola.c +++ b/net/sctp/associola.c | |||
@@ -599,11 +599,12 @@ struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *asoc, | |||
599 | /* Check to see if this is a duplicate. */ | 599 | /* Check to see if this is a duplicate. */ |
600 | peer = sctp_assoc_lookup_paddr(asoc, addr); | 600 | peer = sctp_assoc_lookup_paddr(asoc, addr); |
601 | if (peer) { | 601 | if (peer) { |
602 | /* An UNKNOWN state is only set on transports added by | ||
603 | * user in sctp_connectx() call. Such transports should be | ||
604 | * considered CONFIRMED per RFC 4960, Section 5.4. | ||
605 | */ | ||
602 | if (peer->state == SCTP_UNKNOWN) { | 606 | if (peer->state == SCTP_UNKNOWN) { |
603 | if (peer_state == SCTP_ACTIVE) | 607 | peer->state = SCTP_ACTIVE; |
604 | peer->state = SCTP_ACTIVE; | ||
605 | if (peer_state == SCTP_UNCONFIRMED) | ||
606 | peer->state = SCTP_UNCONFIRMED; | ||
607 | } | 608 | } |
608 | return peer; | 609 | return peer; |
609 | } | 610 | } |
diff --git a/net/sctp/output.c b/net/sctp/output.c index 0dc4a7dfb234..225c7123c41f 100644 --- a/net/sctp/output.c +++ b/net/sctp/output.c | |||
@@ -533,7 +533,8 @@ int sctp_packet_transmit(struct sctp_packet *packet) | |||
533 | if (!(dst->dev->features & NETIF_F_NO_CSUM)) { | 533 | if (!(dst->dev->features & NETIF_F_NO_CSUM)) { |
534 | crc32 = sctp_start_cksum((__u8 *)sh, cksum_buf_len); | 534 | crc32 = sctp_start_cksum((__u8 *)sh, cksum_buf_len); |
535 | crc32 = sctp_end_cksum(crc32); | 535 | crc32 = sctp_end_cksum(crc32); |
536 | } | 536 | } else |
537 | nskb->ip_summed = CHECKSUM_UNNECESSARY; | ||
537 | 538 | ||
538 | /* 3) Put the resultant value into the checksum field in the | 539 | /* 3) Put the resultant value into the checksum field in the |
539 | * common header, and leave the rest of the bits unchanged. | 540 | * common header, and leave the rest of the bits unchanged. |
diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c index e8ca4e54981f..d68869f966c3 100644 --- a/net/sctp/sm_make_chunk.c +++ b/net/sctp/sm_make_chunk.c | |||
@@ -1012,6 +1012,29 @@ end: | |||
1012 | return retval; | 1012 | return retval; |
1013 | } | 1013 | } |
1014 | 1014 | ||
1015 | struct sctp_chunk *sctp_make_violation_paramlen( | ||
1016 | const struct sctp_association *asoc, | ||
1017 | const struct sctp_chunk *chunk, | ||
1018 | struct sctp_paramhdr *param) | ||
1019 | { | ||
1020 | struct sctp_chunk *retval; | ||
1021 | static const char error[] = "The following parameter had invalid length:"; | ||
1022 | size_t payload_len = sizeof(error) + sizeof(sctp_errhdr_t) + | ||
1023 | sizeof(sctp_paramhdr_t); | ||
1024 | |||
1025 | retval = sctp_make_abort(asoc, chunk, payload_len); | ||
1026 | if (!retval) | ||
1027 | goto nodata; | ||
1028 | |||
1029 | sctp_init_cause(retval, SCTP_ERROR_PROTO_VIOLATION, | ||
1030 | sizeof(error) + sizeof(sctp_paramhdr_t)); | ||
1031 | sctp_addto_chunk(retval, sizeof(error), error); | ||
1032 | sctp_addto_param(retval, sizeof(sctp_paramhdr_t), param); | ||
1033 | |||
1034 | nodata: | ||
1035 | return retval; | ||
1036 | } | ||
1037 | |||
1015 | /* Make a HEARTBEAT chunk. */ | 1038 | /* Make a HEARTBEAT chunk. */ |
1016 | struct sctp_chunk *sctp_make_heartbeat(const struct sctp_association *asoc, | 1039 | struct sctp_chunk *sctp_make_heartbeat(const struct sctp_association *asoc, |
1017 | const struct sctp_transport *transport, | 1040 | const struct sctp_transport *transport, |
@@ -1782,11 +1805,6 @@ static int sctp_process_inv_paramlength(const struct sctp_association *asoc, | |||
1782 | const struct sctp_chunk *chunk, | 1805 | const struct sctp_chunk *chunk, |
1783 | struct sctp_chunk **errp) | 1806 | struct sctp_chunk **errp) |
1784 | { | 1807 | { |
1785 | static const char error[] = "The following parameter had invalid length:"; | ||
1786 | size_t payload_len = WORD_ROUND(sizeof(error)) + | ||
1787 | sizeof(sctp_paramhdr_t); | ||
1788 | |||
1789 | |||
1790 | /* This is a fatal error. Any accumulated non-fatal errors are | 1808 | /* This is a fatal error. Any accumulated non-fatal errors are |
1791 | * not reported. | 1809 | * not reported. |
1792 | */ | 1810 | */ |
@@ -1794,14 +1812,7 @@ static int sctp_process_inv_paramlength(const struct sctp_association *asoc, | |||
1794 | sctp_chunk_free(*errp); | 1812 | sctp_chunk_free(*errp); |
1795 | 1813 | ||
1796 | /* Create an error chunk and fill it in with our payload. */ | 1814 | /* Create an error chunk and fill it in with our payload. */ |
1797 | *errp = sctp_make_op_error_space(asoc, chunk, payload_len); | 1815 | *errp = sctp_make_violation_paramlen(asoc, chunk, param); |
1798 | |||
1799 | if (*errp) { | ||
1800 | sctp_init_cause(*errp, SCTP_ERROR_PROTO_VIOLATION, | ||
1801 | sizeof(error) + sizeof(sctp_paramhdr_t)); | ||
1802 | sctp_addto_chunk(*errp, sizeof(error), error); | ||
1803 | sctp_addto_param(*errp, sizeof(sctp_paramhdr_t), param); | ||
1804 | } | ||
1805 | 1816 | ||
1806 | return 0; | 1817 | return 0; |
1807 | } | 1818 | } |
@@ -1886,11 +1897,13 @@ static void sctp_process_ext_param(struct sctp_association *asoc, | |||
1886 | /* if the peer reports AUTH, assume that he | 1897 | /* if the peer reports AUTH, assume that he |
1887 | * supports AUTH. | 1898 | * supports AUTH. |
1888 | */ | 1899 | */ |
1889 | asoc->peer.auth_capable = 1; | 1900 | if (sctp_auth_enable) |
1901 | asoc->peer.auth_capable = 1; | ||
1890 | break; | 1902 | break; |
1891 | case SCTP_CID_ASCONF: | 1903 | case SCTP_CID_ASCONF: |
1892 | case SCTP_CID_ASCONF_ACK: | 1904 | case SCTP_CID_ASCONF_ACK: |
1893 | asoc->peer.asconf_capable = 1; | 1905 | if (sctp_addip_enable) |
1906 | asoc->peer.asconf_capable = 1; | ||
1894 | break; | 1907 | break; |
1895 | default: | 1908 | default: |
1896 | break; | 1909 | break; |
@@ -2319,12 +2332,10 @@ clean_up: | |||
2319 | /* Release the transport structures. */ | 2332 | /* Release the transport structures. */ |
2320 | list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) { | 2333 | list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) { |
2321 | transport = list_entry(pos, struct sctp_transport, transports); | 2334 | transport = list_entry(pos, struct sctp_transport, transports); |
2322 | list_del_init(pos); | 2335 | if (transport->state != SCTP_ACTIVE) |
2323 | sctp_transport_free(transport); | 2336 | sctp_assoc_rm_peer(asoc, transport); |
2324 | } | 2337 | } |
2325 | 2338 | ||
2326 | asoc->peer.transport_count = 0; | ||
2327 | |||
2328 | nomem: | 2339 | nomem: |
2329 | return 0; | 2340 | return 0; |
2330 | } | 2341 | } |
@@ -2460,6 +2471,9 @@ do_addr_param: | |||
2460 | break; | 2471 | break; |
2461 | 2472 | ||
2462 | case SCTP_PARAM_SET_PRIMARY: | 2473 | case SCTP_PARAM_SET_PRIMARY: |
2474 | if (!sctp_addip_enable) | ||
2475 | goto fall_through; | ||
2476 | |||
2463 | addr_param = param.v + sizeof(sctp_addip_param_t); | 2477 | addr_param = param.v + sizeof(sctp_addip_param_t); |
2464 | 2478 | ||
2465 | af = sctp_get_af_specific(param_type2af(param.p->type)); | 2479 | af = sctp_get_af_specific(param_type2af(param.p->type)); |
diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c index 8848d329aa2c..7c622af2ce55 100644 --- a/net/sctp/sm_statefuns.c +++ b/net/sctp/sm_statefuns.c | |||
@@ -119,7 +119,7 @@ static sctp_disposition_t sctp_sf_violation_paramlen( | |||
119 | const struct sctp_endpoint *ep, | 119 | const struct sctp_endpoint *ep, |
120 | const struct sctp_association *asoc, | 120 | const struct sctp_association *asoc, |
121 | const sctp_subtype_t type, | 121 | const sctp_subtype_t type, |
122 | void *arg, | 122 | void *arg, void *ext, |
123 | sctp_cmd_seq_t *commands); | 123 | sctp_cmd_seq_t *commands); |
124 | 124 | ||
125 | static sctp_disposition_t sctp_sf_violation_ctsn( | 125 | static sctp_disposition_t sctp_sf_violation_ctsn( |
@@ -3425,7 +3425,7 @@ sctp_disposition_t sctp_sf_do_asconf(const struct sctp_endpoint *ep, | |||
3425 | addr_param = (union sctp_addr_param *)hdr->params; | 3425 | addr_param = (union sctp_addr_param *)hdr->params; |
3426 | length = ntohs(addr_param->p.length); | 3426 | length = ntohs(addr_param->p.length); |
3427 | if (length < sizeof(sctp_paramhdr_t)) | 3427 | if (length < sizeof(sctp_paramhdr_t)) |
3428 | return sctp_sf_violation_paramlen(ep, asoc, type, | 3428 | return sctp_sf_violation_paramlen(ep, asoc, type, arg, |
3429 | (void *)addr_param, commands); | 3429 | (void *)addr_param, commands); |
3430 | 3430 | ||
3431 | /* Verify the ASCONF chunk before processing it. */ | 3431 | /* Verify the ASCONF chunk before processing it. */ |
@@ -3433,8 +3433,8 @@ sctp_disposition_t sctp_sf_do_asconf(const struct sctp_endpoint *ep, | |||
3433 | (sctp_paramhdr_t *)((void *)addr_param + length), | 3433 | (sctp_paramhdr_t *)((void *)addr_param + length), |
3434 | (void *)chunk->chunk_end, | 3434 | (void *)chunk->chunk_end, |
3435 | &err_param)) | 3435 | &err_param)) |
3436 | return sctp_sf_violation_paramlen(ep, asoc, type, | 3436 | return sctp_sf_violation_paramlen(ep, asoc, type, arg, |
3437 | (void *)&err_param, commands); | 3437 | (void *)err_param, commands); |
3438 | 3438 | ||
3439 | /* ADDIP 5.2 E1) Compare the value of the serial number to the value | 3439 | /* ADDIP 5.2 E1) Compare the value of the serial number to the value |
3440 | * the endpoint stored in a new association variable | 3440 | * the endpoint stored in a new association variable |
@@ -3542,8 +3542,8 @@ sctp_disposition_t sctp_sf_do_asconf_ack(const struct sctp_endpoint *ep, | |||
3542 | (sctp_paramhdr_t *)addip_hdr->params, | 3542 | (sctp_paramhdr_t *)addip_hdr->params, |
3543 | (void *)asconf_ack->chunk_end, | 3543 | (void *)asconf_ack->chunk_end, |
3544 | &err_param)) | 3544 | &err_param)) |
3545 | return sctp_sf_violation_paramlen(ep, asoc, type, | 3545 | return sctp_sf_violation_paramlen(ep, asoc, type, arg, |
3546 | (void *)&err_param, commands); | 3546 | (void *)err_param, commands); |
3547 | 3547 | ||
3548 | if (last_asconf) { | 3548 | if (last_asconf) { |
3549 | addip_hdr = (sctp_addiphdr_t *)last_asconf->subh.addip_hdr; | 3549 | addip_hdr = (sctp_addiphdr_t *)last_asconf->subh.addip_hdr; |
@@ -4240,12 +4240,38 @@ static sctp_disposition_t sctp_sf_violation_paramlen( | |||
4240 | const struct sctp_endpoint *ep, | 4240 | const struct sctp_endpoint *ep, |
4241 | const struct sctp_association *asoc, | 4241 | const struct sctp_association *asoc, |
4242 | const sctp_subtype_t type, | 4242 | const sctp_subtype_t type, |
4243 | void *arg, | 4243 | void *arg, void *ext, |
4244 | sctp_cmd_seq_t *commands) { | 4244 | sctp_cmd_seq_t *commands) |
4245 | static const char err_str[] = "The following parameter had invalid length:"; | 4245 | { |
4246 | struct sctp_chunk *chunk = arg; | ||
4247 | struct sctp_paramhdr *param = ext; | ||
4248 | struct sctp_chunk *abort = NULL; | ||
4246 | 4249 | ||
4247 | return sctp_sf_abort_violation(ep, asoc, arg, commands, err_str, | 4250 | if (sctp_auth_recv_cid(SCTP_CID_ABORT, asoc)) |
4248 | sizeof(err_str)); | 4251 | goto discard; |
4252 | |||
4253 | /* Make the abort chunk. */ | ||
4254 | abort = sctp_make_violation_paramlen(asoc, chunk, param); | ||
4255 | if (!abort) | ||
4256 | goto nomem; | ||
4257 | |||
4258 | sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(abort)); | ||
4259 | SCTP_INC_STATS(SCTP_MIB_OUTCTRLCHUNKS); | ||
4260 | |||
4261 | sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, | ||
4262 | SCTP_ERROR(ECONNABORTED)); | ||
4263 | sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED, | ||
4264 | SCTP_PERR(SCTP_ERROR_PROTO_VIOLATION)); | ||
4265 | SCTP_DEC_STATS(SCTP_MIB_CURRESTAB); | ||
4266 | |||
4267 | discard: | ||
4268 | sctp_sf_pdiscard(ep, asoc, SCTP_ST_CHUNK(0), arg, commands); | ||
4269 | |||
4270 | SCTP_INC_STATS(SCTP_MIB_ABORTEDS); | ||
4271 | |||
4272 | return SCTP_DISPOSITION_ABORT; | ||
4273 | nomem: | ||
4274 | return SCTP_DISPOSITION_NOMEM; | ||
4249 | } | 4275 | } |
4250 | 4276 | ||
4251 | /* Handle a protocol violation when the peer trying to advance the | 4277 | /* Handle a protocol violation when the peer trying to advance the |
diff --git a/net/socket.c b/net/socket.c index 8ef8ba81b9e2..3e8d4e35c08f 100644 --- a/net/socket.c +++ b/net/socket.c | |||
@@ -1511,6 +1511,7 @@ out_fd: | |||
1511 | goto out_put; | 1511 | goto out_put; |
1512 | } | 1512 | } |
1513 | 1513 | ||
1514 | #if 0 | ||
1514 | #ifdef HAVE_SET_RESTORE_SIGMASK | 1515 | #ifdef HAVE_SET_RESTORE_SIGMASK |
1515 | asmlinkage long sys_paccept(int fd, struct sockaddr __user *upeer_sockaddr, | 1516 | asmlinkage long sys_paccept(int fd, struct sockaddr __user *upeer_sockaddr, |
1516 | int __user *upeer_addrlen, | 1517 | int __user *upeer_addrlen, |
@@ -1564,6 +1565,7 @@ asmlinkage long sys_paccept(int fd, struct sockaddr __user *upeer_sockaddr, | |||
1564 | return do_accept(fd, upeer_sockaddr, upeer_addrlen, flags); | 1565 | return do_accept(fd, upeer_sockaddr, upeer_addrlen, flags); |
1565 | } | 1566 | } |
1566 | #endif | 1567 | #endif |
1568 | #endif | ||
1567 | 1569 | ||
1568 | asmlinkage long sys_accept(int fd, struct sockaddr __user *upeer_sockaddr, | 1570 | asmlinkage long sys_accept(int fd, struct sockaddr __user *upeer_sockaddr, |
1569 | int __user *upeer_addrlen) | 1571 | int __user *upeer_addrlen) |
diff --git a/net/xfrm/xfrm_output.c b/net/xfrm/xfrm_output.c index ac25b4c0e982..dc50f1e71f76 100644 --- a/net/xfrm/xfrm_output.c +++ b/net/xfrm/xfrm_output.c | |||
@@ -27,10 +27,14 @@ static int xfrm_state_check_space(struct xfrm_state *x, struct sk_buff *skb) | |||
27 | - skb_headroom(skb); | 27 | - skb_headroom(skb); |
28 | int ntail = dst->dev->needed_tailroom - skb_tailroom(skb); | 28 | int ntail = dst->dev->needed_tailroom - skb_tailroom(skb); |
29 | 29 | ||
30 | if (nhead > 0 || ntail > 0) | 30 | if (nhead <= 0) { |
31 | return pskb_expand_head(skb, nhead, ntail, GFP_ATOMIC); | 31 | if (ntail <= 0) |
32 | 32 | return 0; | |
33 | return 0; | 33 | nhead = 0; |
34 | } else if (ntail < 0) | ||
35 | ntail = 0; | ||
36 | |||
37 | return pskb_expand_head(skb, nhead, ntail, GFP_ATOMIC); | ||
34 | } | 38 | } |
35 | 39 | ||
36 | static int xfrm_output_one(struct sk_buff *skb, int err) | 40 | static int xfrm_output_one(struct sk_buff *skb, int err) |
diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c index 36b5eedcdc75..3e1057f885c6 100644 --- a/scripts/kconfig/conf.c +++ b/scripts/kconfig/conf.c | |||
@@ -32,6 +32,7 @@ char *defconfig_file; | |||
32 | 32 | ||
33 | static int indent = 1; | 33 | static int indent = 1; |
34 | static int valid_stdin = 1; | 34 | static int valid_stdin = 1; |
35 | static int sync_kconfig; | ||
35 | static int conf_cnt; | 36 | static int conf_cnt; |
36 | static char line[128]; | 37 | static char line[128]; |
37 | static struct menu *rootEntry; | 38 | static struct menu *rootEntry; |
@@ -65,7 +66,7 @@ static void strip(char *str) | |||
65 | 66 | ||
66 | static void check_stdin(void) | 67 | static void check_stdin(void) |
67 | { | 68 | { |
68 | if (!valid_stdin && input_mode == ask_silent) { | 69 | if (!valid_stdin) { |
69 | printf(_("aborted!\n\n")); | 70 | printf(_("aborted!\n\n")); |
70 | printf(_("Console input/output is redirected. ")); | 71 | printf(_("Console input/output is redirected. ")); |
71 | printf(_("Run 'make oldconfig' to update configuration.\n\n")); | 72 | printf(_("Run 'make oldconfig' to update configuration.\n\n")); |
@@ -427,43 +428,6 @@ static void check_conf(struct menu *menu) | |||
427 | check_conf(child); | 428 | check_conf(child); |
428 | } | 429 | } |
429 | 430 | ||
430 | static void conf_do_update(void) | ||
431 | { | ||
432 | /* Update until a loop caused no more changes */ | ||
433 | do { | ||
434 | conf_cnt = 0; | ||
435 | check_conf(&rootmenu); | ||
436 | } while (conf_cnt); | ||
437 | } | ||
438 | |||
439 | static int conf_silent_update(void) | ||
440 | { | ||
441 | const char *name; | ||
442 | |||
443 | if (conf_get_changed()) { | ||
444 | name = getenv("KCONFIG_NOSILENTUPDATE"); | ||
445 | if (name && *name) { | ||
446 | fprintf(stderr, | ||
447 | _("\n*** Kernel configuration requires explicit update.\n\n")); | ||
448 | return 1; | ||
449 | } | ||
450 | conf_do_update(); | ||
451 | } | ||
452 | return 0; | ||
453 | } | ||
454 | |||
455 | static int conf_update(void) | ||
456 | { | ||
457 | rootEntry = &rootmenu; | ||
458 | conf(&rootmenu); | ||
459 | if (input_mode == ask_all) { | ||
460 | input_mode = ask_silent; | ||
461 | valid_stdin = 1; | ||
462 | } | ||
463 | conf_do_update(); | ||
464 | return 0; | ||
465 | } | ||
466 | |||
467 | int main(int ac, char **av) | 431 | int main(int ac, char **av) |
468 | { | 432 | { |
469 | int opt; | 433 | int opt; |
@@ -477,11 +441,11 @@ int main(int ac, char **av) | |||
477 | while ((opt = getopt(ac, av, "osdD:nmyrh")) != -1) { | 441 | while ((opt = getopt(ac, av, "osdD:nmyrh")) != -1) { |
478 | switch (opt) { | 442 | switch (opt) { |
479 | case 'o': | 443 | case 'o': |
480 | input_mode = ask_new; | 444 | input_mode = ask_silent; |
481 | break; | 445 | break; |
482 | case 's': | 446 | case 's': |
483 | input_mode = ask_silent; | 447 | input_mode = ask_silent; |
484 | valid_stdin = isatty(0) && isatty(1) && isatty(2); | 448 | sync_kconfig = 1; |
485 | break; | 449 | break; |
486 | case 'd': | 450 | case 'd': |
487 | input_mode = set_default; | 451 | input_mode = set_default; |
@@ -519,6 +483,19 @@ int main(int ac, char **av) | |||
519 | name = av[optind]; | 483 | name = av[optind]; |
520 | conf_parse(name); | 484 | conf_parse(name); |
521 | //zconfdump(stdout); | 485 | //zconfdump(stdout); |
486 | if (sync_kconfig) { | ||
487 | if (stat(".config", &tmpstat)) { | ||
488 | fprintf(stderr, _("***\n" | ||
489 | "*** You have not yet configured your kernel!\n" | ||
490 | "*** (missing kernel .config file)\n" | ||
491 | "***\n" | ||
492 | "*** Please run some configurator (e.g. \"make oldconfig\" or\n" | ||
493 | "*** \"make menuconfig\" or \"make xconfig\").\n" | ||
494 | "***\n")); | ||
495 | exit(1); | ||
496 | } | ||
497 | } | ||
498 | |||
522 | switch (input_mode) { | 499 | switch (input_mode) { |
523 | case set_default: | 500 | case set_default: |
524 | if (!defconfig_file) | 501 | if (!defconfig_file) |
@@ -531,16 +508,6 @@ int main(int ac, char **av) | |||
531 | } | 508 | } |
532 | break; | 509 | break; |
533 | case ask_silent: | 510 | case ask_silent: |
534 | if (stat(".config", &tmpstat)) { | ||
535 | printf(_("***\n" | ||
536 | "*** You have not yet configured your kernel!\n" | ||
537 | "*** (missing kernel .config file)\n" | ||
538 | "***\n" | ||
539 | "*** Please run some configurator (e.g. \"make oldconfig\" or\n" | ||
540 | "*** \"make menuconfig\" or \"make xconfig\").\n" | ||
541 | "***\n")); | ||
542 | exit(1); | ||
543 | } | ||
544 | case ask_all: | 511 | case ask_all: |
545 | case ask_new: | 512 | case ask_new: |
546 | conf_read(NULL); | 513 | conf_read(NULL); |
@@ -569,6 +536,19 @@ int main(int ac, char **av) | |||
569 | default: | 536 | default: |
570 | break; | 537 | break; |
571 | } | 538 | } |
539 | |||
540 | if (sync_kconfig) { | ||
541 | if (conf_get_changed()) { | ||
542 | name = getenv("KCONFIG_NOSILENTUPDATE"); | ||
543 | if (name && *name) { | ||
544 | fprintf(stderr, | ||
545 | _("\n*** Kernel configuration requires explicit update.\n\n")); | ||
546 | return 1; | ||
547 | } | ||
548 | } | ||
549 | valid_stdin = isatty(0) && isatty(1) && isatty(2); | ||
550 | } | ||
551 | |||
572 | switch (input_mode) { | 552 | switch (input_mode) { |
573 | case set_no: | 553 | case set_no: |
574 | conf_set_all_new_symbols(def_no); | 554 | conf_set_all_new_symbols(def_no); |
@@ -585,27 +565,38 @@ int main(int ac, char **av) | |||
585 | case set_default: | 565 | case set_default: |
586 | conf_set_all_new_symbols(def_default); | 566 | conf_set_all_new_symbols(def_default); |
587 | break; | 567 | break; |
588 | case ask_silent: | ||
589 | case ask_new: | 568 | case ask_new: |
590 | if (conf_silent_update()) | ||
591 | exit(1); | ||
592 | break; | ||
593 | case ask_all: | 569 | case ask_all: |
594 | if (conf_update()) | 570 | rootEntry = &rootmenu; |
595 | exit(1); | 571 | conf(&rootmenu); |
572 | input_mode = ask_silent; | ||
573 | /* fall through */ | ||
574 | case ask_silent: | ||
575 | /* Update until a loop caused no more changes */ | ||
576 | do { | ||
577 | conf_cnt = 0; | ||
578 | check_conf(&rootmenu); | ||
579 | } while (conf_cnt); | ||
596 | break; | 580 | break; |
597 | } | 581 | } |
598 | 582 | ||
599 | if (conf_write(NULL)) { | 583 | if (sync_kconfig) { |
600 | fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n")); | 584 | /* silentoldconfig is used during the build so we shall update autoconf. |
601 | exit(1); | 585 | * All other commands are only used to generate a config. |
602 | } | 586 | */ |
603 | /* ask_silent is used during the build so we shall update autoconf. | 587 | if (conf_get_changed() && conf_write(NULL)) { |
604 | * All other commands are only used to generate a config. | 588 | fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n")); |
605 | */ | 589 | exit(1); |
606 | if (input_mode == ask_silent && conf_write_autoconf()) { | 590 | } |
607 | fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n")); | 591 | if (conf_write_autoconf()) { |
608 | return 1; | 592 | fprintf(stderr, _("\n*** Error during update of the kernel configuration.\n\n")); |
593 | return 1; | ||
594 | } | ||
595 | } else { | ||
596 | if (conf_write(NULL)) { | ||
597 | fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n")); | ||
598 | exit(1); | ||
599 | } | ||
609 | } | 600 | } |
610 | return 0; | 601 | return 0; |
611 | } | 602 | } |
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c index df6a188b9930..b91cf241a539 100644 --- a/scripts/kconfig/confdata.c +++ b/scripts/kconfig/confdata.c | |||
@@ -222,8 +222,10 @@ load: | |||
222 | continue; | 222 | continue; |
223 | if (def == S_DEF_USER) { | 223 | if (def == S_DEF_USER) { |
224 | sym = sym_find(line + 9); | 224 | sym = sym_find(line + 9); |
225 | if (!sym) | 225 | if (!sym) { |
226 | sym_add_change_count(1); | ||
226 | break; | 227 | break; |
228 | } | ||
227 | } else { | 229 | } else { |
228 | sym = sym_lookup(line + 9, 0); | 230 | sym = sym_lookup(line + 9, 0); |
229 | if (sym->type == S_UNKNOWN) | 231 | if (sym->type == S_UNKNOWN) |
@@ -259,8 +261,10 @@ load: | |||
259 | } | 261 | } |
260 | if (def == S_DEF_USER) { | 262 | if (def == S_DEF_USER) { |
261 | sym = sym_find(line + 7); | 263 | sym = sym_find(line + 7); |
262 | if (!sym) | 264 | if (!sym) { |
265 | sym_add_change_count(1); | ||
263 | break; | 266 | break; |
267 | } | ||
264 | } else { | 268 | } else { |
265 | sym = sym_lookup(line + 7, 0); | 269 | sym = sym_lookup(line + 7, 0); |
266 | if (sym->type == S_UNKNOWN) | 270 | if (sym->type == S_UNKNOWN) |
diff --git a/scripts/kernel-doc b/scripts/kernel-doc index ff787e6ff8ed..44ee94d2ab76 100755 --- a/scripts/kernel-doc +++ b/scripts/kernel-doc | |||
@@ -781,6 +781,7 @@ sub output_struct_xml(%) { | |||
781 | print " <refsect1>\n"; | 781 | print " <refsect1>\n"; |
782 | print " <title>Members</title>\n"; | 782 | print " <title>Members</title>\n"; |
783 | 783 | ||
784 | if ($#{$args{'parameterlist'}} >= 0) { | ||
784 | print " <variablelist>\n"; | 785 | print " <variablelist>\n"; |
785 | foreach $parameter (@{$args{'parameterlist'}}) { | 786 | foreach $parameter (@{$args{'parameterlist'}}) { |
786 | ($parameter =~ /^#/) && next; | 787 | ($parameter =~ /^#/) && next; |
@@ -798,6 +799,9 @@ sub output_struct_xml(%) { | |||
798 | print " </varlistentry>\n"; | 799 | print " </varlistentry>\n"; |
799 | } | 800 | } |
800 | print " </variablelist>\n"; | 801 | print " </variablelist>\n"; |
802 | } else { | ||
803 | print " <para>\n None\n </para>\n"; | ||
804 | } | ||
801 | print " </refsect1>\n"; | 805 | print " </refsect1>\n"; |
802 | 806 | ||
803 | output_section_xml(@_); | 807 | output_section_xml(@_); |
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 418cd7dbbc93..8e0de6a5e18a 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c | |||
@@ -1986,11 +1986,13 @@ static void read_markers(const char *fname) | |||
1986 | 1986 | ||
1987 | mod = find_module(modname); | 1987 | mod = find_module(modname); |
1988 | if (!mod) { | 1988 | if (!mod) { |
1989 | if (is_vmlinux(modname)) | ||
1990 | have_vmlinux = 1; | ||
1991 | mod = new_module(NOFAIL(strdup(modname))); | 1989 | mod = new_module(NOFAIL(strdup(modname))); |
1992 | mod->skip = 1; | 1990 | mod->skip = 1; |
1993 | } | 1991 | } |
1992 | if (is_vmlinux(modname)) { | ||
1993 | have_vmlinux = 1; | ||
1994 | mod->skip = 0; | ||
1995 | } | ||
1994 | 1996 | ||
1995 | if (!mod->skip) | 1997 | if (!mod->skip) |
1996 | add_marker(mod, marker, fmt); | 1998 | add_marker(mod, marker, fmt); |
diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c index d11a8154500f..8551952ef329 100644 --- a/security/selinux/ss/services.c +++ b/security/selinux/ss/services.c | |||
@@ -2737,6 +2737,7 @@ int security_netlbl_secattr_to_sid(struct netlbl_lsm_secattr *secattr, | |||
2737 | if (ctx == NULL) | 2737 | if (ctx == NULL) |
2738 | goto netlbl_secattr_to_sid_return; | 2738 | goto netlbl_secattr_to_sid_return; |
2739 | 2739 | ||
2740 | context_init(&ctx_new); | ||
2740 | ctx_new.user = ctx->user; | 2741 | ctx_new.user = ctx->user; |
2741 | ctx_new.role = ctx->role; | 2742 | ctx_new.role = ctx->role; |
2742 | ctx_new.type = ctx->type; | 2743 | ctx_new.type = ctx->type; |
@@ -2745,13 +2746,9 @@ int security_netlbl_secattr_to_sid(struct netlbl_lsm_secattr *secattr, | |||
2745 | if (ebitmap_netlbl_import(&ctx_new.range.level[0].cat, | 2746 | if (ebitmap_netlbl_import(&ctx_new.range.level[0].cat, |
2746 | secattr->attr.mls.cat) != 0) | 2747 | secattr->attr.mls.cat) != 0) |
2747 | goto netlbl_secattr_to_sid_return; | 2748 | goto netlbl_secattr_to_sid_return; |
2748 | ctx_new.range.level[1].cat.highbit = | 2749 | memcpy(&ctx_new.range.level[1].cat, |
2749 | ctx_new.range.level[0].cat.highbit; | 2750 | &ctx_new.range.level[0].cat, |
2750 | ctx_new.range.level[1].cat.node = | 2751 | sizeof(ctx_new.range.level[0].cat)); |
2751 | ctx_new.range.level[0].cat.node; | ||
2752 | } else { | ||
2753 | ebitmap_init(&ctx_new.range.level[0].cat); | ||
2754 | ebitmap_init(&ctx_new.range.level[1].cat); | ||
2755 | } | 2752 | } |
2756 | if (mls_context_isvalid(&policydb, &ctx_new) != 1) | 2753 | if (mls_context_isvalid(&policydb, &ctx_new) != 1) |
2757 | goto netlbl_secattr_to_sid_return_cleanup; | 2754 | goto netlbl_secattr_to_sid_return_cleanup; |
diff --git a/sound/core/pcm.c b/sound/core/pcm.c index 9dd9bc73fe1d..ece25c718e95 100644 --- a/sound/core/pcm.c +++ b/sound/core/pcm.c | |||
@@ -781,7 +781,7 @@ int snd_pcm_attach_substream(struct snd_pcm *pcm, int stream, | |||
781 | return -ENODEV; | 781 | return -ENODEV; |
782 | 782 | ||
783 | card = pcm->card; | 783 | card = pcm->card; |
784 | down_read(&card->controls_rwsem); | 784 | read_lock(&card->ctl_files_rwlock); |
785 | list_for_each_entry(kctl, &card->ctl_files, list) { | 785 | list_for_each_entry(kctl, &card->ctl_files, list) { |
786 | if (kctl->pid == current->pid) { | 786 | if (kctl->pid == current->pid) { |
787 | prefer_subdevice = kctl->prefer_pcm_subdevice; | 787 | prefer_subdevice = kctl->prefer_pcm_subdevice; |
@@ -789,7 +789,7 @@ int snd_pcm_attach_substream(struct snd_pcm *pcm, int stream, | |||
789 | break; | 789 | break; |
790 | } | 790 | } |
791 | } | 791 | } |
792 | up_read(&card->controls_rwsem); | 792 | read_unlock(&card->ctl_files_rwlock); |
793 | 793 | ||
794 | switch (stream) { | 794 | switch (stream) { |
795 | case SNDRV_PCM_STREAM_PLAYBACK: | 795 | case SNDRV_PCM_STREAM_PLAYBACK: |
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c index c49b9d9e303c..c487025d3457 100644 --- a/sound/core/pcm_native.c +++ b/sound/core/pcm_native.c | |||
@@ -1546,16 +1546,10 @@ static int snd_pcm_drop(struct snd_pcm_substream *substream) | |||
1546 | card = substream->pcm->card; | 1546 | card = substream->pcm->card; |
1547 | 1547 | ||
1548 | if (runtime->status->state == SNDRV_PCM_STATE_OPEN || | 1548 | if (runtime->status->state == SNDRV_PCM_STATE_OPEN || |
1549 | runtime->status->state == SNDRV_PCM_STATE_DISCONNECTED) | 1549 | runtime->status->state == SNDRV_PCM_STATE_DISCONNECTED || |
1550 | runtime->status->state == SNDRV_PCM_STATE_SUSPENDED) | ||
1550 | return -EBADFD; | 1551 | return -EBADFD; |
1551 | 1552 | ||
1552 | snd_power_lock(card); | ||
1553 | if (runtime->status->state == SNDRV_PCM_STATE_SUSPENDED) { | ||
1554 | result = snd_power_wait(card, SNDRV_CTL_POWER_D0); | ||
1555 | if (result < 0) | ||
1556 | goto _unlock; | ||
1557 | } | ||
1558 | |||
1559 | snd_pcm_stream_lock_irq(substream); | 1553 | snd_pcm_stream_lock_irq(substream); |
1560 | /* resume pause */ | 1554 | /* resume pause */ |
1561 | if (runtime->status->state == SNDRV_PCM_STATE_PAUSED) | 1555 | if (runtime->status->state == SNDRV_PCM_STATE_PAUSED) |
@@ -1564,8 +1558,7 @@ static int snd_pcm_drop(struct snd_pcm_substream *substream) | |||
1564 | snd_pcm_stop(substream, SNDRV_PCM_STATE_SETUP); | 1558 | snd_pcm_stop(substream, SNDRV_PCM_STATE_SETUP); |
1565 | /* runtime->control->appl_ptr = runtime->status->hw_ptr; */ | 1559 | /* runtime->control->appl_ptr = runtime->status->hw_ptr; */ |
1566 | snd_pcm_stream_unlock_irq(substream); | 1560 | snd_pcm_stream_unlock_irq(substream); |
1567 | _unlock: | 1561 | |
1568 | snd_power_unlock(card); | ||
1569 | return result; | 1562 | return result; |
1570 | } | 1563 | } |
1571 | 1564 | ||
diff --git a/sound/core/rawmidi.c b/sound/core/rawmidi.c index f7ea7287c59c..b917a9f981c7 100644 --- a/sound/core/rawmidi.c +++ b/sound/core/rawmidi.c | |||
@@ -418,7 +418,7 @@ static int snd_rawmidi_open(struct inode *inode, struct file *file) | |||
418 | mutex_lock(&rmidi->open_mutex); | 418 | mutex_lock(&rmidi->open_mutex); |
419 | while (1) { | 419 | while (1) { |
420 | subdevice = -1; | 420 | subdevice = -1; |
421 | down_read(&card->controls_rwsem); | 421 | read_lock(&card->ctl_files_rwlock); |
422 | list_for_each_entry(kctl, &card->ctl_files, list) { | 422 | list_for_each_entry(kctl, &card->ctl_files, list) { |
423 | if (kctl->pid == current->pid) { | 423 | if (kctl->pid == current->pid) { |
424 | subdevice = kctl->prefer_rawmidi_subdevice; | 424 | subdevice = kctl->prefer_rawmidi_subdevice; |
@@ -426,7 +426,7 @@ static int snd_rawmidi_open(struct inode *inode, struct file *file) | |||
426 | break; | 426 | break; |
427 | } | 427 | } |
428 | } | 428 | } |
429 | up_read(&card->controls_rwsem); | 429 | read_unlock(&card->ctl_files_rwlock); |
430 | err = snd_rawmidi_kernel_open(rmidi->card, rmidi->device, | 430 | err = snd_rawmidi_kernel_open(rmidi->card, rmidi->device, |
431 | subdevice, fflags, rawmidi_file); | 431 | subdevice, fflags, rawmidi_file); |
432 | if (err >= 0) | 432 | if (err >= 0) |
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c index ad994fcab725..f3da621f25c5 100644 --- a/sound/pci/hda/patch_sigmatel.c +++ b/sound/pci/hda/patch_sigmatel.c | |||
@@ -1683,8 +1683,8 @@ static struct snd_pci_quirk stac927x_cfg_tbl[] = { | |||
1683 | /* Dell 3 stack systems with verb table in BIOS */ | 1683 | /* Dell 3 stack systems with verb table in BIOS */ |
1684 | SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x01f3, "Dell Inspiron 1420", STAC_DELL_BIOS), | 1684 | SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x01f3, "Dell Inspiron 1420", STAC_DELL_BIOS), |
1685 | SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x0227, "Dell Vostro 1400 ", STAC_DELL_BIOS), | 1685 | SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x0227, "Dell Vostro 1400 ", STAC_DELL_BIOS), |
1686 | SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x022f, "Dell ", STAC_DELL_BIOS), | ||
1687 | SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x022e, "Dell ", STAC_DELL_BIOS), | 1686 | SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x022e, "Dell ", STAC_DELL_BIOS), |
1687 | SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x022f, "Dell Inspiron 1525", STAC_DELL_3ST), | ||
1688 | SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x0242, "Dell ", STAC_DELL_BIOS), | 1688 | SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x0242, "Dell ", STAC_DELL_BIOS), |
1689 | SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x0243, "Dell ", STAC_DELL_BIOS), | 1689 | SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x0243, "Dell ", STAC_DELL_BIOS), |
1690 | SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x02ff, "Dell ", STAC_DELL_BIOS), | 1690 | SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x02ff, "Dell ", STAC_DELL_BIOS), |
diff --git a/sound/ppc/awacs.c b/sound/ppc/awacs.c index 566a6d0daf4a..106c48225bba 100644 --- a/sound/ppc/awacs.c +++ b/sound/ppc/awacs.c | |||
@@ -621,6 +621,13 @@ static struct snd_kcontrol_new snd_pmac_screamer_mixers_imac[] __initdata = { | |||
621 | AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0), | 621 | AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0), |
622 | }; | 622 | }; |
623 | 623 | ||
624 | static struct snd_kcontrol_new snd_pmac_screamer_mixers_g4agp[] __initdata = { | ||
625 | AWACS_VOLUME("Line out Playback Volume", 2, 6, 1), | ||
626 | AWACS_VOLUME("Master Playback Volume", 5, 6, 1), | ||
627 | AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0), | ||
628 | AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_MIC, 0), | ||
629 | }; | ||
630 | |||
624 | static struct snd_kcontrol_new snd_pmac_awacs_mixers_pmac7500[] __initdata = { | 631 | static struct snd_kcontrol_new snd_pmac_awacs_mixers_pmac7500[] __initdata = { |
625 | AWACS_VOLUME("Line out Playback Volume", 2, 6, 1), | 632 | AWACS_VOLUME("Line out Playback Volume", 2, 6, 1), |
626 | AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0), | 633 | AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0), |
@@ -688,7 +695,10 @@ static struct snd_kcontrol_new snd_pmac_awacs_speaker_vol[] __initdata = { | |||
688 | static struct snd_kcontrol_new snd_pmac_awacs_speaker_sw __initdata = | 695 | static struct snd_kcontrol_new snd_pmac_awacs_speaker_sw __initdata = |
689 | AWACS_SWITCH("PC Speaker Playback Switch", 1, SHIFT_SPKMUTE, 1); | 696 | AWACS_SWITCH("PC Speaker Playback Switch", 1, SHIFT_SPKMUTE, 1); |
690 | 697 | ||
691 | static struct snd_kcontrol_new snd_pmac_awacs_speaker_sw_imac __initdata = | 698 | static struct snd_kcontrol_new snd_pmac_awacs_speaker_sw_imac1 __initdata = |
699 | AWACS_SWITCH("PC Speaker Playback Switch", 1, SHIFT_PAROUT1, 1); | ||
700 | |||
701 | static struct snd_kcontrol_new snd_pmac_awacs_speaker_sw_imac2 __initdata = | ||
692 | AWACS_SWITCH("PC Speaker Playback Switch", 1, SHIFT_PAROUT1, 0); | 702 | AWACS_SWITCH("PC Speaker Playback Switch", 1, SHIFT_PAROUT1, 0); |
693 | 703 | ||
694 | 704 | ||
@@ -765,11 +775,12 @@ static void snd_pmac_awacs_resume(struct snd_pmac *chip) | |||
765 | 775 | ||
766 | #define IS_PM7500 (machine_is_compatible("AAPL,7500")) | 776 | #define IS_PM7500 (machine_is_compatible("AAPL,7500")) |
767 | #define IS_BEIGE (machine_is_compatible("AAPL,Gossamer")) | 777 | #define IS_BEIGE (machine_is_compatible("AAPL,Gossamer")) |
768 | #define IS_IMAC (machine_is_compatible("PowerMac2,1") \ | 778 | #define IS_IMAC1 (machine_is_compatible("PowerMac2,1")) |
769 | || machine_is_compatible("PowerMac2,2") \ | 779 | #define IS_IMAC2 (machine_is_compatible("PowerMac2,2") \ |
770 | || machine_is_compatible("PowerMac4,1")) | 780 | || machine_is_compatible("PowerMac4,1")) |
781 | #define IS_G4AGP (machine_is_compatible("PowerMac3,1")) | ||
771 | 782 | ||
772 | static int imac; | 783 | static int imac1, imac2; |
773 | 784 | ||
774 | #ifdef PMAC_SUPPORT_AUTOMUTE | 785 | #ifdef PMAC_SUPPORT_AUTOMUTE |
775 | /* | 786 | /* |
@@ -815,13 +826,18 @@ static void snd_pmac_awacs_update_automute(struct snd_pmac *chip, int do_notify) | |||
815 | { | 826 | { |
816 | int reg = chip->awacs_reg[1] | 827 | int reg = chip->awacs_reg[1] |
817 | | (MASK_HDMUTE | MASK_SPKMUTE); | 828 | | (MASK_HDMUTE | MASK_SPKMUTE); |
818 | if (imac) { | 829 | if (imac1) { |
830 | reg &= ~MASK_SPKMUTE; | ||
831 | reg |= MASK_PAROUT1; | ||
832 | } else if (imac2) { | ||
819 | reg &= ~MASK_SPKMUTE; | 833 | reg &= ~MASK_SPKMUTE; |
820 | reg &= ~MASK_PAROUT1; | 834 | reg &= ~MASK_PAROUT1; |
821 | } | 835 | } |
822 | if (snd_pmac_awacs_detect_headphone(chip)) | 836 | if (snd_pmac_awacs_detect_headphone(chip)) |
823 | reg &= ~MASK_HDMUTE; | 837 | reg &= ~MASK_HDMUTE; |
824 | else if (imac) | 838 | else if (imac1) |
839 | reg &= ~MASK_PAROUT1; | ||
840 | else if (imac2) | ||
825 | reg |= MASK_PAROUT1; | 841 | reg |= MASK_PAROUT1; |
826 | else | 842 | else |
827 | reg &= ~MASK_SPKMUTE; | 843 | reg &= ~MASK_SPKMUTE; |
@@ -850,9 +866,13 @@ snd_pmac_awacs_init(struct snd_pmac *chip) | |||
850 | { | 866 | { |
851 | int pm7500 = IS_PM7500; | 867 | int pm7500 = IS_PM7500; |
852 | int beige = IS_BEIGE; | 868 | int beige = IS_BEIGE; |
869 | int g4agp = IS_G4AGP; | ||
870 | int imac; | ||
853 | int err, vol; | 871 | int err, vol; |
854 | 872 | ||
855 | imac = IS_IMAC; | 873 | imac1 = IS_IMAC1; |
874 | imac2 = IS_IMAC2; | ||
875 | imac = imac1 || imac2; | ||
856 | /* looks like MASK_GAINLINE triggers something, so we set here | 876 | /* looks like MASK_GAINLINE triggers something, so we set here |
857 | * as start-up | 877 | * as start-up |
858 | */ | 878 | */ |
@@ -939,7 +959,7 @@ snd_pmac_awacs_init(struct snd_pmac *chip) | |||
939 | snd_pmac_awacs_mixers); | 959 | snd_pmac_awacs_mixers); |
940 | if (err < 0) | 960 | if (err < 0) |
941 | return err; | 961 | return err; |
942 | if (beige) | 962 | if (beige || g4agp) |
943 | ; | 963 | ; |
944 | else if (chip->model == PMAC_SCREAMER) | 964 | else if (chip->model == PMAC_SCREAMER) |
945 | err = build_mixers(chip, ARRAY_SIZE(snd_pmac_screamer_mixers2), | 965 | err = build_mixers(chip, ARRAY_SIZE(snd_pmac_screamer_mixers2), |
@@ -961,13 +981,17 @@ snd_pmac_awacs_init(struct snd_pmac *chip) | |||
961 | err = build_mixers(chip, | 981 | err = build_mixers(chip, |
962 | ARRAY_SIZE(snd_pmac_screamer_mixers_imac), | 982 | ARRAY_SIZE(snd_pmac_screamer_mixers_imac), |
963 | snd_pmac_screamer_mixers_imac); | 983 | snd_pmac_screamer_mixers_imac); |
984 | else if (g4agp) | ||
985 | err = build_mixers(chip, | ||
986 | ARRAY_SIZE(snd_pmac_screamer_mixers_g4agp), | ||
987 | snd_pmac_screamer_mixers_g4agp); | ||
964 | else | 988 | else |
965 | err = build_mixers(chip, | 989 | err = build_mixers(chip, |
966 | ARRAY_SIZE(snd_pmac_awacs_mixers_pmac), | 990 | ARRAY_SIZE(snd_pmac_awacs_mixers_pmac), |
967 | snd_pmac_awacs_mixers_pmac); | 991 | snd_pmac_awacs_mixers_pmac); |
968 | if (err < 0) | 992 | if (err < 0) |
969 | return err; | 993 | return err; |
970 | chip->master_sw_ctl = snd_ctl_new1((pm7500 || imac) | 994 | chip->master_sw_ctl = snd_ctl_new1((pm7500 || imac || g4agp) |
971 | ? &snd_pmac_awacs_master_sw_imac | 995 | ? &snd_pmac_awacs_master_sw_imac |
972 | : &snd_pmac_awacs_master_sw, chip); | 996 | : &snd_pmac_awacs_master_sw, chip); |
973 | err = snd_ctl_add(chip->card, chip->master_sw_ctl); | 997 | err = snd_ctl_add(chip->card, chip->master_sw_ctl); |
@@ -1004,15 +1028,17 @@ snd_pmac_awacs_init(struct snd_pmac *chip) | |||
1004 | snd_pmac_awacs_speaker_vol); | 1028 | snd_pmac_awacs_speaker_vol); |
1005 | if (err < 0) | 1029 | if (err < 0) |
1006 | return err; | 1030 | return err; |
1007 | chip->speaker_sw_ctl = snd_ctl_new1(imac | 1031 | chip->speaker_sw_ctl = snd_ctl_new1(imac1 |
1008 | ? &snd_pmac_awacs_speaker_sw_imac | 1032 | ? &snd_pmac_awacs_speaker_sw_imac1 |
1033 | : imac2 | ||
1034 | ? &snd_pmac_awacs_speaker_sw_imac2 | ||
1009 | : &snd_pmac_awacs_speaker_sw, chip); | 1035 | : &snd_pmac_awacs_speaker_sw, chip); |
1010 | err = snd_ctl_add(chip->card, chip->speaker_sw_ctl); | 1036 | err = snd_ctl_add(chip->card, chip->speaker_sw_ctl); |
1011 | if (err < 0) | 1037 | if (err < 0) |
1012 | return err; | 1038 | return err; |
1013 | } | 1039 | } |
1014 | 1040 | ||
1015 | if (beige) | 1041 | if (beige || g4agp) |
1016 | err = build_mixers(chip, | 1042 | err = build_mixers(chip, |
1017 | ARRAY_SIZE(snd_pmac_screamer_mic_boost_beige), | 1043 | ARRAY_SIZE(snd_pmac_screamer_mic_boost_beige), |
1018 | snd_pmac_screamer_mic_boost_beige); | 1044 | snd_pmac_screamer_mic_boost_beige); |
diff --git a/sound/soc/at32/at32-pcm.c b/sound/soc/at32/at32-pcm.c index 435f1daf177c..c83584f989a9 100644 --- a/sound/soc/at32/at32-pcm.c +++ b/sound/soc/at32/at32-pcm.c | |||
@@ -434,7 +434,8 @@ static int at32_pcm_suspend(struct platform_device *pdev, | |||
434 | params = prtd->params; | 434 | params = prtd->params; |
435 | 435 | ||
436 | /* Disable the PDC and save the PDC registers */ | 436 | /* Disable the PDC and save the PDC registers */ |
437 | ssc_writex(params->ssc->regs, PDC_PTCR, params->mask->pdc_disable); | 437 | ssc_writex(params->ssc->regs, ATMEL_PDC_PTCR, |
438 | params->mask->pdc_disable); | ||
438 | 439 | ||
439 | prtd->pdc_xpr_save = ssc_readx(params->ssc->regs, params->pdc->xpr); | 440 | prtd->pdc_xpr_save = ssc_readx(params->ssc->regs, params->pdc->xpr); |
440 | prtd->pdc_xcr_save = ssc_readx(params->ssc->regs, params->pdc->xcr); | 441 | prtd->pdc_xcr_save = ssc_readx(params->ssc->regs, params->pdc->xcr); |
@@ -464,7 +465,7 @@ static int at32_pcm_resume(struct platform_device *pdev, | |||
464 | ssc_writex(params->ssc->regs, params->pdc->xnpr, prtd->pdc_xnpr_save); | 465 | ssc_writex(params->ssc->regs, params->pdc->xnpr, prtd->pdc_xnpr_save); |
465 | ssc_writex(params->ssc->regs, params->pdc->xncr, prtd->pdc_xncr_save); | 466 | ssc_writex(params->ssc->regs, params->pdc->xncr, prtd->pdc_xncr_save); |
466 | 467 | ||
467 | ssc_writex(params->ssc->regs, PDC_PTCR, params->mask->pdc_enable); | 468 | ssc_writex(params->ssc->regs, ATMEL_PDC_PTCR, params->mask->pdc_enable); |
468 | return 0; | 469 | return 0; |
469 | } | 470 | } |
470 | #else /* CONFIG_PM */ | 471 | #else /* CONFIG_PM */ |
diff --git a/sound/soc/codecs/cs4270.c b/sound/soc/codecs/cs4270.c index 9deb8c74fdfd..0bbd94501d7e 100644 --- a/sound/soc/codecs/cs4270.c +++ b/sound/soc/codecs/cs4270.c | |||
@@ -490,34 +490,7 @@ static int cs4270_mute(struct snd_soc_dai *dai, int mute) | |||
490 | 490 | ||
491 | #endif | 491 | #endif |
492 | 492 | ||
493 | static int cs4270_i2c_probe(struct i2c_adapter *adap, int addr, int kind); | 493 | static int cs4270_i2c_probe(struct i2c_client *, const struct i2c_device_id *); |
494 | |||
495 | /* | ||
496 | * Notify the driver that a new I2C bus has been found. | ||
497 | * | ||
498 | * This function is called for each I2C bus in the system. The function | ||
499 | * then asks the I2C subsystem to probe that bus at the addresses on which | ||
500 | * our device (the CS4270) could exist. If a device is found at one of | ||
501 | * those addresses, then our probe function (cs4270_i2c_probe) is called. | ||
502 | */ | ||
503 | static int cs4270_i2c_attach(struct i2c_adapter *adapter) | ||
504 | { | ||
505 | return i2c_probe(adapter, &addr_data, cs4270_i2c_probe); | ||
506 | } | ||
507 | |||
508 | static int cs4270_i2c_detach(struct i2c_client *client) | ||
509 | { | ||
510 | struct snd_soc_codec *codec = i2c_get_clientdata(client); | ||
511 | |||
512 | i2c_detach_client(client); | ||
513 | codec->control_data = NULL; | ||
514 | |||
515 | kfree(codec->reg_cache); | ||
516 | codec->reg_cache = NULL; | ||
517 | |||
518 | kfree(client); | ||
519 | return 0; | ||
520 | } | ||
521 | 494 | ||
522 | /* A list of non-DAPM controls that the CS4270 supports */ | 495 | /* A list of non-DAPM controls that the CS4270 supports */ |
523 | static const struct snd_kcontrol_new cs4270_snd_controls[] = { | 496 | static const struct snd_kcontrol_new cs4270_snd_controls[] = { |
@@ -525,14 +498,19 @@ static const struct snd_kcontrol_new cs4270_snd_controls[] = { | |||
525 | CS4270_VOLA, CS4270_VOLB, 0, 0xFF, 1) | 498 | CS4270_VOLA, CS4270_VOLB, 0, 0xFF, 1) |
526 | }; | 499 | }; |
527 | 500 | ||
501 | static const struct i2c_device_id cs4270_id[] = { | ||
502 | {"cs4270", 0}, | ||
503 | {} | ||
504 | }; | ||
505 | MODULE_DEVICE_TABLE(i2c, cs4270_id); | ||
506 | |||
528 | static struct i2c_driver cs4270_i2c_driver = { | 507 | static struct i2c_driver cs4270_i2c_driver = { |
529 | .driver = { | 508 | .driver = { |
530 | .name = "CS4270 I2C", | 509 | .name = "CS4270 I2C", |
531 | .owner = THIS_MODULE, | 510 | .owner = THIS_MODULE, |
532 | }, | 511 | }, |
533 | .id = I2C_DRIVERID_CS4270, | 512 | .id_table = cs4270_id, |
534 | .attach_adapter = cs4270_i2c_attach, | 513 | .probe = cs4270_i2c_probe, |
535 | .detach_client = cs4270_i2c_detach, | ||
536 | }; | 514 | }; |
537 | 515 | ||
538 | /* | 516 | /* |
@@ -561,11 +539,11 @@ static struct snd_soc_device *cs4270_socdev; | |||
561 | * Note: snd_soc_new_pcms() must be called before this function can be called, | 539 | * Note: snd_soc_new_pcms() must be called before this function can be called, |
562 | * because of snd_ctl_add(). | 540 | * because of snd_ctl_add(). |
563 | */ | 541 | */ |
564 | static int cs4270_i2c_probe(struct i2c_adapter *adapter, int addr, int kind) | 542 | static int cs4270_i2c_probe(struct i2c_client *i2c_client, |
543 | const struct i2c_device_id *id) | ||
565 | { | 544 | { |
566 | struct snd_soc_device *socdev = cs4270_socdev; | 545 | struct snd_soc_device *socdev = cs4270_socdev; |
567 | struct snd_soc_codec *codec = socdev->codec; | 546 | struct snd_soc_codec *codec = socdev->codec; |
568 | struct i2c_client *i2c_client = NULL; | ||
569 | int i; | 547 | int i; |
570 | int ret = 0; | 548 | int ret = 0; |
571 | 549 | ||
@@ -578,12 +556,6 @@ static int cs4270_i2c_probe(struct i2c_adapter *adapter, int addr, int kind) | |||
578 | 556 | ||
579 | /* Note: codec_dai->codec is NULL here */ | 557 | /* Note: codec_dai->codec is NULL here */ |
580 | 558 | ||
581 | i2c_client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL); | ||
582 | if (!i2c_client) { | ||
583 | printk(KERN_ERR "cs4270: could not allocate I2C client\n"); | ||
584 | return -ENOMEM; | ||
585 | } | ||
586 | |||
587 | codec->reg_cache = kzalloc(CS4270_NUMREGS, GFP_KERNEL); | 559 | codec->reg_cache = kzalloc(CS4270_NUMREGS, GFP_KERNEL); |
588 | if (!codec->reg_cache) { | 560 | if (!codec->reg_cache) { |
589 | printk(KERN_ERR "cs4270: could not allocate register cache\n"); | 561 | printk(KERN_ERR "cs4270: could not allocate register cache\n"); |
@@ -591,13 +563,6 @@ static int cs4270_i2c_probe(struct i2c_adapter *adapter, int addr, int kind) | |||
591 | goto error; | 563 | goto error; |
592 | } | 564 | } |
593 | 565 | ||
594 | i2c_set_clientdata(i2c_client, codec); | ||
595 | strcpy(i2c_client->name, "CS4270"); | ||
596 | |||
597 | i2c_client->driver = &cs4270_i2c_driver; | ||
598 | i2c_client->adapter = adapter; | ||
599 | i2c_client->addr = addr; | ||
600 | |||
601 | /* Verify that we have a CS4270 */ | 566 | /* Verify that we have a CS4270 */ |
602 | 567 | ||
603 | ret = i2c_smbus_read_byte_data(i2c_client, CS4270_CHIPID); | 568 | ret = i2c_smbus_read_byte_data(i2c_client, CS4270_CHIPID); |
@@ -612,18 +577,10 @@ static int cs4270_i2c_probe(struct i2c_adapter *adapter, int addr, int kind) | |||
612 | goto error; | 577 | goto error; |
613 | } | 578 | } |
614 | 579 | ||
615 | printk(KERN_INFO "cs4270: found device at I2C address %X\n", addr); | 580 | printk(KERN_INFO "cs4270: found device at I2C address %X\n", |
581 | i2c_client->addr); | ||
616 | printk(KERN_INFO "cs4270: hardware revision %X\n", ret & 0xF); | 582 | printk(KERN_INFO "cs4270: hardware revision %X\n", ret & 0xF); |
617 | 583 | ||
618 | /* Tell the I2C layer a new client has arrived */ | ||
619 | |||
620 | ret = i2c_attach_client(i2c_client); | ||
621 | if (ret) { | ||
622 | printk(KERN_ERR "cs4270: could not attach codec, " | ||
623 | "I2C address %x, error code %i\n", addr, ret); | ||
624 | goto error; | ||
625 | } | ||
626 | |||
627 | codec->control_data = i2c_client; | 584 | codec->control_data = i2c_client; |
628 | codec->read = cs4270_read_reg_cache; | 585 | codec->read = cs4270_read_reg_cache; |
629 | codec->write = cs4270_i2c_write; | 586 | codec->write = cs4270_i2c_write; |
@@ -648,20 +605,17 @@ static int cs4270_i2c_probe(struct i2c_adapter *adapter, int addr, int kind) | |||
648 | goto error; | 605 | goto error; |
649 | } | 606 | } |
650 | 607 | ||
608 | i2c_set_clientdata(i2c_client, codec); | ||
609 | |||
651 | return 0; | 610 | return 0; |
652 | 611 | ||
653 | error: | 612 | error: |
654 | if (codec->control_data) { | 613 | codec->control_data = NULL; |
655 | i2c_detach_client(i2c_client); | ||
656 | codec->control_data = NULL; | ||
657 | } | ||
658 | 614 | ||
659 | kfree(codec->reg_cache); | 615 | kfree(codec->reg_cache); |
660 | codec->reg_cache = NULL; | 616 | codec->reg_cache = NULL; |
661 | codec->reg_cache_size = 0; | 617 | codec->reg_cache_size = 0; |
662 | 618 | ||
663 | kfree(i2c_client); | ||
664 | |||
665 | return ret; | 619 | return ret; |
666 | } | 620 | } |
667 | 621 | ||
@@ -727,7 +681,7 @@ static int cs4270_probe(struct platform_device *pdev) | |||
727 | ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1); | 681 | ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1); |
728 | if (ret < 0) { | 682 | if (ret < 0) { |
729 | printk(KERN_ERR "cs4270: failed to create PCMs\n"); | 683 | printk(KERN_ERR "cs4270: failed to create PCMs\n"); |
730 | return ret; | 684 | goto error_free_codec; |
731 | } | 685 | } |
732 | 686 | ||
733 | #ifdef USE_I2C | 687 | #ifdef USE_I2C |
@@ -736,8 +690,7 @@ static int cs4270_probe(struct platform_device *pdev) | |||
736 | ret = i2c_add_driver(&cs4270_i2c_driver); | 690 | ret = i2c_add_driver(&cs4270_i2c_driver); |
737 | if (ret) { | 691 | if (ret) { |
738 | printk(KERN_ERR "cs4270: failed to attach driver"); | 692 | printk(KERN_ERR "cs4270: failed to attach driver"); |
739 | snd_soc_free_pcms(socdev); | 693 | goto error_free_pcms; |
740 | return ret; | ||
741 | } | 694 | } |
742 | 695 | ||
743 | /* Did we find a CS4270 on the I2C bus? */ | 696 | /* Did we find a CS4270 on the I2C bus? */ |
@@ -759,10 +712,23 @@ static int cs4270_probe(struct platform_device *pdev) | |||
759 | ret = snd_soc_register_card(socdev); | 712 | ret = snd_soc_register_card(socdev); |
760 | if (ret < 0) { | 713 | if (ret < 0) { |
761 | printk(KERN_ERR "cs4270: failed to register card\n"); | 714 | printk(KERN_ERR "cs4270: failed to register card\n"); |
762 | snd_soc_free_pcms(socdev); | 715 | goto error_del_driver; |
763 | return ret; | ||
764 | } | 716 | } |
765 | 717 | ||
718 | return 0; | ||
719 | |||
720 | error_del_driver: | ||
721 | #ifdef USE_I2C | ||
722 | i2c_del_driver(&cs4270_i2c_driver); | ||
723 | |||
724 | error_free_pcms: | ||
725 | #endif | ||
726 | snd_soc_free_pcms(socdev); | ||
727 | |||
728 | error_free_codec: | ||
729 | kfree(socdev->codec); | ||
730 | socdev->codec = NULL; | ||
731 | |||
766 | return ret; | 732 | return ret; |
767 | } | 733 | } |
768 | 734 | ||
@@ -773,8 +739,7 @@ static int cs4270_remove(struct platform_device *pdev) | |||
773 | snd_soc_free_pcms(socdev); | 739 | snd_soc_free_pcms(socdev); |
774 | 740 | ||
775 | #ifdef USE_I2C | 741 | #ifdef USE_I2C |
776 | if (socdev->codec->control_data) | 742 | i2c_del_driver(&cs4270_i2c_driver); |
777 | i2c_del_driver(&cs4270_i2c_driver); | ||
778 | #endif | 743 | #endif |
779 | 744 | ||
780 | kfree(socdev->codec); | 745 | kfree(socdev->codec); |
diff --git a/sound/soc/codecs/wm8753.c b/sound/soc/codecs/wm8753.c index 5761164fe16d..e873414840c8 100644 --- a/sound/soc/codecs/wm8753.c +++ b/sound/soc/codecs/wm8753.c | |||
@@ -583,7 +583,7 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
583 | 583 | ||
584 | /* out 4 */ | 584 | /* out 4 */ |
585 | {"Out4 Mux", "VREF", "VREF"}, | 585 | {"Out4 Mux", "VREF", "VREF"}, |
586 | {"Out4 Mux", "Capture ST", "Capture ST Mixer"}, | 586 | {"Out4 Mux", "Capture ST", "Playback Mixer"}, |
587 | {"Out4 Mux", "LOUT2", "LOUT2"}, | 587 | {"Out4 Mux", "LOUT2", "LOUT2"}, |
588 | {"Out 4", NULL, "Out4 Mux"}, | 588 | {"Out 4", NULL, "Out4 Mux"}, |
589 | {"OUT4", NULL, "Out 4"}, | 589 | {"OUT4", NULL, "Out 4"}, |
@@ -607,7 +607,7 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
607 | /* Capture Right Mux */ | 607 | /* Capture Right Mux */ |
608 | {"Capture Right Mux", "PGA", "Right Capture Volume"}, | 608 | {"Capture Right Mux", "PGA", "Right Capture Volume"}, |
609 | {"Capture Right Mux", "Line or RXP-RXN", "Line Right Mux"}, | 609 | {"Capture Right Mux", "Line or RXP-RXN", "Line Right Mux"}, |
610 | {"Capture Right Mux", "Sidetone", "Capture ST Mixer"}, | 610 | {"Capture Right Mux", "Sidetone", "Playback Mixer"}, |
611 | 611 | ||
612 | /* Mono Capture mixer-mux */ | 612 | /* Mono Capture mixer-mux */ |
613 | {"Capture Right Mixer", "Stereo", "Capture Right Mux"}, | 613 | {"Capture Right Mixer", "Stereo", "Capture Right Mux"}, |