diff options
author | David S. Miller <davem@davemloft.net> | 2013-06-05 18:56:43 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-06-05 19:37:30 -0400 |
commit | 6bc19fb82d4c05a9eee19d6d2aab2ce26e499ec2 (patch) | |
tree | 8b049ef383307f5dae91b5c9cf78dbfb9b74a4d1 | |
parent | 11a164a04382d735230b01f4cc46ad78a7c4abf6 (diff) | |
parent | 4d3797d7e1861ac1af150a6189315786c5e1c820 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Merge 'net' bug fixes into 'net-next' as we have patches
that will build on top of them.
This merge commit includes a change from Emil Goode
(emilgoode@gmail.com) that fixes a warning that would
have been introduced by this merge. Specifically it
fixes the pingv6_ops method ipv6_chk_addr() to add a
"const" to the "struct net_device *dev" argument and
likewise update the dummy_ipv6_chk_addr() declaration.
Signed-off-by: David S. Miller <davem@davemloft.net>
499 files changed, 7631 insertions, 3678 deletions
diff --git a/Documentation/devicetree/bindings/net/macb.txt b/Documentation/devicetree/bindings/net/macb.txt index 44afa0e5057d..4ff65047bb9a 100644 --- a/Documentation/devicetree/bindings/net/macb.txt +++ b/Documentation/devicetree/bindings/net/macb.txt | |||
@@ -4,7 +4,7 @@ Required properties: | |||
4 | - compatible: Should be "cdns,[<chip>-]{macb|gem}" | 4 | - compatible: Should be "cdns,[<chip>-]{macb|gem}" |
5 | Use "cdns,at91sam9260-macb" Atmel at91sam9260 and at91sam9263 SoCs. | 5 | Use "cdns,at91sam9260-macb" Atmel at91sam9260 and at91sam9263 SoCs. |
6 | Use "cdns,at32ap7000-macb" for other 10/100 usage or use the generic form: "cdns,macb". | 6 | Use "cdns,at32ap7000-macb" for other 10/100 usage or use the generic form: "cdns,macb". |
7 | Use "cnds,pc302-gem" for Picochip picoXcell pc302 and later devices based on | 7 | Use "cdns,pc302-gem" for Picochip picoXcell pc302 and later devices based on |
8 | the Cadence GEM, or the generic form: "cdns,gem". | 8 | the Cadence GEM, or the generic form: "cdns,gem". |
9 | - reg: Address and length of the register set for the device | 9 | - reg: Address and length of the register set for the device |
10 | - interrupts: Should contain macb interrupt | 10 | - interrupts: Should contain macb interrupt |
diff --git a/Documentation/devicetree/bindings/video/simple-framebuffer.txt b/Documentation/devicetree/bindings/video/simple-framebuffer.txt new file mode 100644 index 000000000000..3ea460583111 --- /dev/null +++ b/Documentation/devicetree/bindings/video/simple-framebuffer.txt | |||
@@ -0,0 +1,25 @@ | |||
1 | Simple Framebuffer | ||
2 | |||
3 | A simple frame-buffer describes a raw memory region that may be rendered to, | ||
4 | with the assumption that the display hardware has already been set up to scan | ||
5 | out from that buffer. | ||
6 | |||
7 | Required properties: | ||
8 | - compatible: "simple-framebuffer" | ||
9 | - reg: Should contain the location and size of the framebuffer memory. | ||
10 | - width: The width of the framebuffer in pixels. | ||
11 | - height: The height of the framebuffer in pixels. | ||
12 | - stride: The number of bytes in each line of the framebuffer. | ||
13 | - format: The format of the framebuffer surface. Valid values are: | ||
14 | - r5g6b5 (16-bit pixels, d[15:11]=r, d[10:5]=g, d[4:0]=b). | ||
15 | |||
16 | Example: | ||
17 | |||
18 | framebuffer { | ||
19 | compatible = "simple-framebuffer"; | ||
20 | reg = <0x1d385000 (1600 * 1200 * 2)>; | ||
21 | width = <1600>; | ||
22 | height = <1200>; | ||
23 | stride = <(1600 * 2)>; | ||
24 | format = "r5g6b5"; | ||
25 | }; | ||
diff --git a/Documentation/powerpc/transactional_memory.txt b/Documentation/powerpc/transactional_memory.txt index c907be41d60f..dc23e58ae264 100644 --- a/Documentation/powerpc/transactional_memory.txt +++ b/Documentation/powerpc/transactional_memory.txt | |||
@@ -147,6 +147,25 @@ Example signal handler: | |||
147 | fix_the_problem(ucp->dar); | 147 | fix_the_problem(ucp->dar); |
148 | } | 148 | } |
149 | 149 | ||
150 | When in an active transaction that takes a signal, we need to be careful with | ||
151 | the stack. It's possible that the stack has moved back up after the tbegin. | ||
152 | The obvious case here is when the tbegin is called inside a function that | ||
153 | returns before a tend. In this case, the stack is part of the checkpointed | ||
154 | transactional memory state. If we write over this non transactionally or in | ||
155 | suspend, we are in trouble because if we get a tm abort, the program counter and | ||
156 | stack pointer will be back at the tbegin but our in memory stack won't be valid | ||
157 | anymore. | ||
158 | |||
159 | To avoid this, when taking a signal in an active transaction, we need to use | ||
160 | the stack pointer from the checkpointed state, rather than the speculated | ||
161 | state. This ensures that the signal context (written tm suspended) will be | ||
162 | written below the stack required for the rollback. The transaction is aborted | ||
163 | becuase of the treclaim, so any memory written between the tbegin and the | ||
164 | signal will be rolled back anyway. | ||
165 | |||
166 | For signals taken in non-TM or suspended mode, we use the | ||
167 | normal/non-checkpointed stack pointer. | ||
168 | |||
150 | 169 | ||
151 | Failure cause codes used by kernel | 170 | Failure cause codes used by kernel |
152 | ================================== | 171 | ================================== |
@@ -155,14 +174,18 @@ These are defined in <asm/reg.h>, and distinguish different reasons why the | |||
155 | kernel aborted a transaction: | 174 | kernel aborted a transaction: |
156 | 175 | ||
157 | TM_CAUSE_RESCHED Thread was rescheduled. | 176 | TM_CAUSE_RESCHED Thread was rescheduled. |
177 | TM_CAUSE_TLBI Software TLB invalide. | ||
158 | TM_CAUSE_FAC_UNAV FP/VEC/VSX unavailable trap. | 178 | TM_CAUSE_FAC_UNAV FP/VEC/VSX unavailable trap. |
159 | TM_CAUSE_SYSCALL Currently unused; future syscalls that must abort | 179 | TM_CAUSE_SYSCALL Currently unused; future syscalls that must abort |
160 | transactions for consistency will use this. | 180 | transactions for consistency will use this. |
161 | TM_CAUSE_SIGNAL Signal delivered. | 181 | TM_CAUSE_SIGNAL Signal delivered. |
162 | TM_CAUSE_MISC Currently unused. | 182 | TM_CAUSE_MISC Currently unused. |
183 | TM_CAUSE_ALIGNMENT Alignment fault. | ||
184 | TM_CAUSE_EMULATE Emulation that touched memory. | ||
163 | 185 | ||
164 | These can be checked by the user program's abort handler as TEXASR[0:7]. | 186 | These can be checked by the user program's abort handler as TEXASR[0:7]. If |
165 | 187 | bit 7 is set, it indicates that the error is consider persistent. For example | |
188 | a TM_CAUSE_ALIGNMENT will be persistent while a TM_CAUSE_RESCHED will not.q | ||
166 | 189 | ||
167 | GDB | 190 | GDB |
168 | === | 191 | === |
diff --git a/Documentation/rapidio/rapidio.txt b/Documentation/rapidio/rapidio.txt index c75694b35d08..a9c16c979da2 100644 --- a/Documentation/rapidio/rapidio.txt +++ b/Documentation/rapidio/rapidio.txt | |||
@@ -79,20 +79,63 @@ master port that is used to communicate with devices within the network. | |||
79 | In order to initialize the RapidIO subsystem, a platform must initialize and | 79 | In order to initialize the RapidIO subsystem, a platform must initialize and |
80 | register at least one master port within the RapidIO network. To register mport | 80 | register at least one master port within the RapidIO network. To register mport |
81 | within the subsystem controller driver initialization code calls function | 81 | within the subsystem controller driver initialization code calls function |
82 | rio_register_mport() for each available master port. After all active master | 82 | rio_register_mport() for each available master port. |
83 | ports are registered with a RapidIO subsystem, the rio_init_mports() routine | ||
84 | is called to perform enumeration and discovery. | ||
85 | 83 | ||
86 | In the current PowerPC-based implementation a subsys_initcall() is specified to | 84 | RapidIO subsystem uses subsys_initcall() or device_initcall() to perform |
87 | perform controller initialization and mport registration. At the end it directly | 85 | controller initialization (depending on controller device type). |
88 | calls rio_init_mports() to execute RapidIO enumeration and discovery. | 86 | |
87 | After all active master ports are registered with a RapidIO subsystem, | ||
88 | an enumeration and/or discovery routine may be called automatically or | ||
89 | by user-space command. | ||
89 | 90 | ||
90 | 4. Enumeration and Discovery | 91 | 4. Enumeration and Discovery |
91 | ---------------------------- | 92 | ---------------------------- |
92 | 93 | ||
93 | When rio_init_mports() is called it scans a list of registered master ports and | 94 | 4.1 Overview |
94 | calls an enumeration or discovery routine depending on the configured role of a | 95 | ------------ |
95 | master port: host or agent. | 96 | |
97 | RapidIO subsystem configuration options allow users to specify enumeration and | ||
98 | discovery methods as statically linked components or loadable modules. | ||
99 | An enumeration/discovery method implementation and available input parameters | ||
100 | define how any given method can be attached to available RapidIO mports: | ||
101 | simply to all available mports OR individually to the specified mport device. | ||
102 | |||
103 | Depending on selected enumeration/discovery build configuration, there are | ||
104 | several methods to initiate an enumeration and/or discovery process: | ||
105 | |||
106 | (a) Statically linked enumeration and discovery process can be started | ||
107 | automatically during kernel initialization time using corresponding module | ||
108 | parameters. This was the original method used since introduction of RapidIO | ||
109 | subsystem. Now this method relies on enumerator module parameter which is | ||
110 | 'rio-scan.scan' for existing basic enumeration/discovery method. | ||
111 | When automatic start of enumeration/discovery is used a user has to ensure | ||
112 | that all discovering endpoints are started before the enumerating endpoint | ||
113 | and are waiting for enumeration to be completed. | ||
114 | Configuration option CONFIG_RAPIDIO_DISC_TIMEOUT defines time that discovering | ||
115 | endpoint waits for enumeration to be completed. If the specified timeout | ||
116 | expires the discovery process is terminated without obtaining RapidIO network | ||
117 | information. NOTE: a timed out discovery process may be restarted later using | ||
118 | a user-space command as it is described later if the given endpoint was | ||
119 | enumerated successfully. | ||
120 | |||
121 | (b) Statically linked enumeration and discovery process can be started by | ||
122 | a command from user space. This initiation method provides more flexibility | ||
123 | for a system startup compared to the option (a) above. After all participating | ||
124 | endpoints have been successfully booted, an enumeration process shall be | ||
125 | started first by issuing a user-space command, after an enumeration is | ||
126 | completed a discovery process can be started on all remaining endpoints. | ||
127 | |||
128 | (c) Modular enumeration and discovery process can be started by a command from | ||
129 | user space. After an enumeration/discovery module is loaded, a network scan | ||
130 | process can be started by issuing a user-space command. | ||
131 | Similar to the option (b) above, an enumerator has to be started first. | ||
132 | |||
133 | (d) Modular enumeration and discovery process can be started by a module | ||
134 | initialization routine. In this case an enumerating module shall be loaded | ||
135 | first. | ||
136 | |||
137 | When a network scan process is started it calls an enumeration or discovery | ||
138 | routine depending on the configured role of a master port: host or agent. | ||
96 | 139 | ||
97 | Enumeration is performed by a master port if it is configured as a host port by | 140 | Enumeration is performed by a master port if it is configured as a host port by |
98 | assigning a host device ID greater than or equal to zero. A host device ID is | 141 | assigning a host device ID greater than or equal to zero. A host device ID is |
@@ -104,8 +147,58 @@ for it. | |||
104 | The enumeration and discovery routines use RapidIO maintenance transactions | 147 | The enumeration and discovery routines use RapidIO maintenance transactions |
105 | to access the configuration space of devices. | 148 | to access the configuration space of devices. |
106 | 149 | ||
107 | The enumeration process is implemented according to the enumeration algorithm | 150 | 4.2 Automatic Start of Enumeration and Discovery |
108 | outlined in the RapidIO Interconnect Specification: Annex I [1]. | 151 | ------------------------------------------------ |
152 | |||
153 | Automatic enumeration/discovery start method is applicable only to built-in | ||
154 | enumeration/discovery RapidIO configuration selection. To enable automatic | ||
155 | enumeration/discovery start by existing basic enumerator method set use boot | ||
156 | command line parameter "rio-scan.scan=1". | ||
157 | |||
158 | This configuration requires synchronized start of all RapidIO endpoints that | ||
159 | form a network which will be enumerated/discovered. Discovering endpoints have | ||
160 | to be started before an enumeration starts to ensure that all RapidIO | ||
161 | controllers have been initialized and are ready to be discovered. Configuration | ||
162 | parameter CONFIG_RAPIDIO_DISC_TIMEOUT defines time (in seconds) which | ||
163 | a discovering endpoint will wait for enumeration to be completed. | ||
164 | |||
165 | When automatic enumeration/discovery start is selected, basic method's | ||
166 | initialization routine calls rio_init_mports() to perform enumeration or | ||
167 | discovery for all known mport devices. | ||
168 | |||
169 | Depending on RapidIO network size and configuration this automatic | ||
170 | enumeration/discovery start method may be difficult to use due to the | ||
171 | requirement for synchronized start of all endpoints. | ||
172 | |||
173 | 4.3 User-space Start of Enumeration and Discovery | ||
174 | ------------------------------------------------- | ||
175 | |||
176 | User-space start of enumeration and discovery can be used with built-in and | ||
177 | modular build configurations. For user-space controlled start RapidIO subsystem | ||
178 | creates the sysfs write-only attribute file '/sys/bus/rapidio/scan'. To initiate | ||
179 | an enumeration or discovery process on specific mport device, a user needs to | ||
180 | write mport_ID (not RapidIO destination ID) into that file. The mport_ID is a | ||
181 | sequential number (0 ... RIO_MAX_MPORTS) assigned during mport device | ||
182 | registration. For example for machine with single RapidIO controller, mport_ID | ||
183 | for that controller always will be 0. | ||
184 | |||
185 | To initiate RapidIO enumeration/discovery on all available mports a user may | ||
186 | write '-1' (or RIO_MPORT_ANY) into the scan attribute file. | ||
187 | |||
188 | 4.4 Basic Enumeration Method | ||
189 | ---------------------------- | ||
190 | |||
191 | This is an original enumeration/discovery method which is available since | ||
192 | first release of RapidIO subsystem code. The enumeration process is | ||
193 | implemented according to the enumeration algorithm outlined in the RapidIO | ||
194 | Interconnect Specification: Annex I [1]. | ||
195 | |||
196 | This method can be configured as statically linked or loadable module. | ||
197 | The method's single parameter "scan" allows to trigger the enumeration/discovery | ||
198 | process from module initialization routine. | ||
199 | |||
200 | This enumeration/discovery method can be started only once and does not support | ||
201 | unloading if it is built as a module. | ||
109 | 202 | ||
110 | The enumeration process traverses the network using a recursive depth-first | 203 | The enumeration process traverses the network using a recursive depth-first |
111 | algorithm. When a new device is found, the enumerator takes ownership of that | 204 | algorithm. When a new device is found, the enumerator takes ownership of that |
@@ -160,6 +253,19 @@ time period. If this wait time period expires before enumeration is completed, | |||
160 | an agent skips RapidIO discovery and continues with remaining kernel | 253 | an agent skips RapidIO discovery and continues with remaining kernel |
161 | initialization. | 254 | initialization. |
162 | 255 | ||
256 | 4.5 Adding New Enumeration/Discovery Method | ||
257 | ------------------------------------------- | ||
258 | |||
259 | RapidIO subsystem code organization allows addition of new enumeration/discovery | ||
260 | methods as new configuration options without significant impact to to the core | ||
261 | RapidIO code. | ||
262 | |||
263 | A new enumeration/discovery method has to be attached to one or more mport | ||
264 | devices before an enumeration/discovery process can be started. Normally, | ||
265 | method's module initialization routine calls rio_register_scan() to attach | ||
266 | an enumerator to a specified mport device (or devices). The basic enumerator | ||
267 | implementation demonstrates this process. | ||
268 | |||
163 | 5. References | 269 | 5. References |
164 | ------------- | 270 | ------------- |
165 | 271 | ||
diff --git a/Documentation/rapidio/sysfs.txt b/Documentation/rapidio/sysfs.txt index 97f71ce575d6..19878179da4c 100644 --- a/Documentation/rapidio/sysfs.txt +++ b/Documentation/rapidio/sysfs.txt | |||
@@ -88,3 +88,20 @@ that exports additional attributes. | |||
88 | 88 | ||
89 | IDT_GEN2: | 89 | IDT_GEN2: |
90 | errlog - reads contents of device error log until it is empty. | 90 | errlog - reads contents of device error log until it is empty. |
91 | |||
92 | |||
93 | 5. RapidIO Bus Attributes | ||
94 | ------------------------- | ||
95 | |||
96 | RapidIO bus subdirectory /sys/bus/rapidio implements the following bus-specific | ||
97 | attribute: | ||
98 | |||
99 | scan - allows to trigger enumeration discovery process from user space. This | ||
100 | is a write-only attribute. To initiate an enumeration or discovery | ||
101 | process on specific mport device, a user needs to write mport_ID (not | ||
102 | RapidIO destination ID) into this file. The mport_ID is a sequential | ||
103 | number (0 ... RIO_MAX_MPORTS) assigned to the mport device. | ||
104 | For example, for a machine with a single RapidIO controller, mport_ID | ||
105 | for that controller always will be 0. | ||
106 | To initiate RapidIO enumeration/discovery on all available mports | ||
107 | a user must write '-1' (or RIO_MPORT_ANY) into this attribute file. | ||
diff --git a/MAINTAINERS b/MAINTAINERS index b645a3d5fd30..f35a259a6564 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -3322,11 +3322,12 @@ F: drivers/net/wan/dlci.c | |||
3322 | F: drivers/net/wan/sdla.c | 3322 | F: drivers/net/wan/sdla.c |
3323 | 3323 | ||
3324 | FRAMEBUFFER LAYER | 3324 | FRAMEBUFFER LAYER |
3325 | M: Florian Tobias Schandinat <FlorianSchandinat@gmx.de> | 3325 | M: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com> |
3326 | M: Tomi Valkeinen <tomi.valkeinen@ti.com> | ||
3326 | L: linux-fbdev@vger.kernel.org | 3327 | L: linux-fbdev@vger.kernel.org |
3327 | W: http://linux-fbdev.sourceforge.net/ | 3328 | W: http://linux-fbdev.sourceforge.net/ |
3328 | Q: http://patchwork.kernel.org/project/linux-fbdev/list/ | 3329 | Q: http://patchwork.kernel.org/project/linux-fbdev/list/ |
3329 | T: git git://github.com/schandinat/linux-2.6.git fbdev-next | 3330 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/plagnioj/linux-fbdev.git |
3330 | S: Maintained | 3331 | S: Maintained |
3331 | F: Documentation/fb/ | 3332 | F: Documentation/fb/ |
3332 | F: Documentation/devicetree/bindings/fb/ | 3333 | F: Documentation/devicetree/bindings/fb/ |
@@ -6084,9 +6085,18 @@ L: linux-parisc@vger.kernel.org | |||
6084 | W: http://www.parisc-linux.org/ | 6085 | W: http://www.parisc-linux.org/ |
6085 | Q: http://patchwork.kernel.org/project/linux-parisc/list/ | 6086 | Q: http://patchwork.kernel.org/project/linux-parisc/list/ |
6086 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/parisc-2.6.git | 6087 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/parisc-2.6.git |
6088 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux.git | ||
6087 | S: Maintained | 6089 | S: Maintained |
6088 | F: arch/parisc/ | 6090 | F: arch/parisc/ |
6091 | F: Documentation/parisc/ | ||
6089 | F: drivers/parisc/ | 6092 | F: drivers/parisc/ |
6093 | F: drivers/char/agp/parisc-agp.c | ||
6094 | F: drivers/input/serio/gscps2.c | ||
6095 | F: drivers/parport/parport_gsc.* | ||
6096 | F: drivers/tty/serial/8250/8250_gsc.c | ||
6097 | F: drivers/video/sti* | ||
6098 | F: drivers/video/console/sti* | ||
6099 | F: drivers/video/logo/logo_parisc* | ||
6090 | 6100 | ||
6091 | PC87360 HARDWARE MONITORING DRIVER | 6101 | PC87360 HARDWARE MONITORING DRIVER |
6092 | M: Jim Cromie <jim.cromie@gmail.com> | 6102 | M: Jim Cromie <jim.cromie@gmail.com> |
@@ -1,7 +1,7 @@ | |||
1 | VERSION = 3 | 1 | VERSION = 3 |
2 | PATCHLEVEL = 10 | 2 | PATCHLEVEL = 10 |
3 | SUBLEVEL = 0 | 3 | SUBLEVEL = 0 |
4 | EXTRAVERSION = -rc2 | 4 | EXTRAVERSION = -rc4 |
5 | NAME = Unicycling Gorilla | 5 | NAME = Unicycling Gorilla |
6 | 6 | ||
7 | # *DOCUMENTATION* | 7 | # *DOCUMENTATION* |
diff --git a/arch/arc/boot/dts/abilis_tb100_dvk.dts b/arch/arc/boot/dts/abilis_tb100_dvk.dts index c0fd3623c393..0fa0d4abe795 100644 --- a/arch/arc/boot/dts/abilis_tb100_dvk.dts +++ b/arch/arc/boot/dts/abilis_tb100_dvk.dts | |||
@@ -37,7 +37,7 @@ | |||
37 | 37 | ||
38 | soc100 { | 38 | soc100 { |
39 | uart@FF100000 { | 39 | uart@FF100000 { |
40 | pinctrl-names = "abilis,simple-default"; | 40 | pinctrl-names = "default"; |
41 | pinctrl-0 = <&pctl_uart0>; | 41 | pinctrl-0 = <&pctl_uart0>; |
42 | }; | 42 | }; |
43 | ethernet@FE100000 { | 43 | ethernet@FE100000 { |
diff --git a/arch/arc/boot/dts/abilis_tb101_dvk.dts b/arch/arc/boot/dts/abilis_tb101_dvk.dts index 6f8c381f6268..a4d80ce283ae 100644 --- a/arch/arc/boot/dts/abilis_tb101_dvk.dts +++ b/arch/arc/boot/dts/abilis_tb101_dvk.dts | |||
@@ -37,7 +37,7 @@ | |||
37 | 37 | ||
38 | soc100 { | 38 | soc100 { |
39 | uart@FF100000 { | 39 | uart@FF100000 { |
40 | pinctrl-names = "abilis,simple-default"; | 40 | pinctrl-names = "default"; |
41 | pinctrl-0 = <&pctl_uart0>; | 41 | pinctrl-0 = <&pctl_uart0>; |
42 | }; | 42 | }; |
43 | ethernet@FE100000 { | 43 | ethernet@FE100000 { |
diff --git a/arch/arc/boot/dts/abilis_tb10x.dtsi b/arch/arc/boot/dts/abilis_tb10x.dtsi index a6139fc5aaa3..b97e3051ba4b 100644 --- a/arch/arc/boot/dts/abilis_tb10x.dtsi +++ b/arch/arc/boot/dts/abilis_tb10x.dtsi | |||
@@ -88,8 +88,7 @@ | |||
88 | }; | 88 | }; |
89 | 89 | ||
90 | uart@FF100000 { | 90 | uart@FF100000 { |
91 | compatible = "snps,dw-apb-uart", | 91 | compatible = "snps,dw-apb-uart"; |
92 | "abilis,simple-pinctrl"; | ||
93 | reg = <0xFF100000 0x100>; | 92 | reg = <0xFF100000 0x100>; |
94 | clock-frequency = <166666666>; | 93 | clock-frequency = <166666666>; |
95 | interrupts = <25 1>; | 94 | interrupts = <25 1>; |
@@ -184,8 +183,7 @@ | |||
184 | #address-cells = <1>; | 183 | #address-cells = <1>; |
185 | #size-cells = <0>; | 184 | #size-cells = <0>; |
186 | cell-index = <1>; | 185 | cell-index = <1>; |
187 | compatible = "abilis,tb100-spi", | 186 | compatible = "abilis,tb100-spi"; |
188 | "abilis,simple-pinctrl"; | ||
189 | num-cs = <2>; | 187 | num-cs = <2>; |
190 | reg = <0xFE011000 0x20>; | 188 | reg = <0xFE011000 0x20>; |
191 | interrupt-parent = <&tb10x_ictl>; | 189 | interrupt-parent = <&tb10x_ictl>; |
diff --git a/arch/arc/include/asm/cacheflush.h b/arch/arc/include/asm/cacheflush.h index 9f841af41092..ef62682e8d95 100644 --- a/arch/arc/include/asm/cacheflush.h +++ b/arch/arc/include/asm/cacheflush.h | |||
@@ -93,14 +93,16 @@ static inline int cache_is_vipt_aliasing(void) | |||
93 | #endif | 93 | #endif |
94 | } | 94 | } |
95 | 95 | ||
96 | #define CACHE_COLOR(addr) (((unsigned long)(addr) >> (PAGE_SHIFT)) & 3) | 96 | #define CACHE_COLOR(addr) (((unsigned long)(addr) >> (PAGE_SHIFT)) & 1) |
97 | 97 | ||
98 | /* | 98 | /* |
99 | * checks if two addresses (after page aligning) index into same cache set | 99 | * checks if two addresses (after page aligning) index into same cache set |
100 | */ | 100 | */ |
101 | #define addr_not_cache_congruent(addr1, addr2) \ | 101 | #define addr_not_cache_congruent(addr1, addr2) \ |
102 | ({ \ | ||
102 | cache_is_vipt_aliasing() ? \ | 103 | cache_is_vipt_aliasing() ? \ |
103 | (CACHE_COLOR(addr1) != CACHE_COLOR(addr2)) : 0 \ | 104 | (CACHE_COLOR(addr1) != CACHE_COLOR(addr2)) : 0; \ |
105 | }) | ||
104 | 106 | ||
105 | #define copy_to_user_page(vma, page, vaddr, dst, src, len) \ | 107 | #define copy_to_user_page(vma, page, vaddr, dst, src, len) \ |
106 | do { \ | 108 | do { \ |
diff --git a/arch/arc/include/asm/page.h b/arch/arc/include/asm/page.h index 374a35514116..ab84bf131fe1 100644 --- a/arch/arc/include/asm/page.h +++ b/arch/arc/include/asm/page.h | |||
@@ -19,13 +19,6 @@ | |||
19 | #define clear_page(paddr) memset((paddr), 0, PAGE_SIZE) | 19 | #define clear_page(paddr) memset((paddr), 0, PAGE_SIZE) |
20 | #define copy_page(to, from) memcpy((to), (from), PAGE_SIZE) | 20 | #define copy_page(to, from) memcpy((to), (from), PAGE_SIZE) |
21 | 21 | ||
22 | #ifndef CONFIG_ARC_CACHE_VIPT_ALIASING | ||
23 | |||
24 | #define clear_user_page(addr, vaddr, pg) clear_page(addr) | ||
25 | #define copy_user_page(vto, vfrom, vaddr, pg) copy_page(vto, vfrom) | ||
26 | |||
27 | #else /* VIPT aliasing dcache */ | ||
28 | |||
29 | struct vm_area_struct; | 22 | struct vm_area_struct; |
30 | struct page; | 23 | struct page; |
31 | 24 | ||
@@ -35,8 +28,6 @@ void copy_user_highpage(struct page *to, struct page *from, | |||
35 | unsigned long u_vaddr, struct vm_area_struct *vma); | 28 | unsigned long u_vaddr, struct vm_area_struct *vma); |
36 | void clear_user_page(void *to, unsigned long u_vaddr, struct page *page); | 29 | void clear_user_page(void *to, unsigned long u_vaddr, struct page *page); |
37 | 30 | ||
38 | #endif /* CONFIG_ARC_CACHE_VIPT_ALIASING */ | ||
39 | |||
40 | #undef STRICT_MM_TYPECHECKS | 31 | #undef STRICT_MM_TYPECHECKS |
41 | 32 | ||
42 | #ifdef STRICT_MM_TYPECHECKS | 33 | #ifdef STRICT_MM_TYPECHECKS |
diff --git a/arch/arc/include/asm/pgtable.h b/arch/arc/include/asm/pgtable.h index 1cc4720faccb..95b1522212a7 100644 --- a/arch/arc/include/asm/pgtable.h +++ b/arch/arc/include/asm/pgtable.h | |||
@@ -57,9 +57,9 @@ | |||
57 | 57 | ||
58 | #define _PAGE_ACCESSED (1<<1) /* Page is accessed (S) */ | 58 | #define _PAGE_ACCESSED (1<<1) /* Page is accessed (S) */ |
59 | #define _PAGE_CACHEABLE (1<<2) /* Page is cached (H) */ | 59 | #define _PAGE_CACHEABLE (1<<2) /* Page is cached (H) */ |
60 | #define _PAGE_EXECUTE (1<<3) /* Page has user execute perm (H) */ | 60 | #define _PAGE_U_EXECUTE (1<<3) /* Page has user execute perm (H) */ |
61 | #define _PAGE_WRITE (1<<4) /* Page has user write perm (H) */ | 61 | #define _PAGE_U_WRITE (1<<4) /* Page has user write perm (H) */ |
62 | #define _PAGE_READ (1<<5) /* Page has user read perm (H) */ | 62 | #define _PAGE_U_READ (1<<5) /* Page has user read perm (H) */ |
63 | #define _PAGE_K_EXECUTE (1<<6) /* Page has kernel execute perm (H) */ | 63 | #define _PAGE_K_EXECUTE (1<<6) /* Page has kernel execute perm (H) */ |
64 | #define _PAGE_K_WRITE (1<<7) /* Page has kernel write perm (H) */ | 64 | #define _PAGE_K_WRITE (1<<7) /* Page has kernel write perm (H) */ |
65 | #define _PAGE_K_READ (1<<8) /* Page has kernel perm (H) */ | 65 | #define _PAGE_K_READ (1<<8) /* Page has kernel perm (H) */ |
@@ -72,9 +72,9 @@ | |||
72 | 72 | ||
73 | /* PD1 */ | 73 | /* PD1 */ |
74 | #define _PAGE_CACHEABLE (1<<0) /* Page is cached (H) */ | 74 | #define _PAGE_CACHEABLE (1<<0) /* Page is cached (H) */ |
75 | #define _PAGE_EXECUTE (1<<1) /* Page has user execute perm (H) */ | 75 | #define _PAGE_U_EXECUTE (1<<1) /* Page has user execute perm (H) */ |
76 | #define _PAGE_WRITE (1<<2) /* Page has user write perm (H) */ | 76 | #define _PAGE_U_WRITE (1<<2) /* Page has user write perm (H) */ |
77 | #define _PAGE_READ (1<<3) /* Page has user read perm (H) */ | 77 | #define _PAGE_U_READ (1<<3) /* Page has user read perm (H) */ |
78 | #define _PAGE_K_EXECUTE (1<<4) /* Page has kernel execute perm (H) */ | 78 | #define _PAGE_K_EXECUTE (1<<4) /* Page has kernel execute perm (H) */ |
79 | #define _PAGE_K_WRITE (1<<5) /* Page has kernel write perm (H) */ | 79 | #define _PAGE_K_WRITE (1<<5) /* Page has kernel write perm (H) */ |
80 | #define _PAGE_K_READ (1<<6) /* Page has kernel perm (H) */ | 80 | #define _PAGE_K_READ (1<<6) /* Page has kernel perm (H) */ |
@@ -93,7 +93,8 @@ | |||
93 | #endif | 93 | #endif |
94 | 94 | ||
95 | /* Kernel allowed all permissions for all pages */ | 95 | /* Kernel allowed all permissions for all pages */ |
96 | #define _K_PAGE_PERMS (_PAGE_K_EXECUTE | _PAGE_K_WRITE | _PAGE_K_READ) | 96 | #define _K_PAGE_PERMS (_PAGE_K_EXECUTE | _PAGE_K_WRITE | _PAGE_K_READ | \ |
97 | _PAGE_GLOBAL | _PAGE_PRESENT) | ||
97 | 98 | ||
98 | #ifdef CONFIG_ARC_CACHE_PAGES | 99 | #ifdef CONFIG_ARC_CACHE_PAGES |
99 | #define _PAGE_DEF_CACHEABLE _PAGE_CACHEABLE | 100 | #define _PAGE_DEF_CACHEABLE _PAGE_CACHEABLE |
@@ -106,7 +107,11 @@ | |||
106 | * -by default cached, unless config otherwise | 107 | * -by default cached, unless config otherwise |
107 | * -present in memory | 108 | * -present in memory |
108 | */ | 109 | */ |
109 | #define ___DEF (_PAGE_PRESENT | _K_PAGE_PERMS | _PAGE_DEF_CACHEABLE) | 110 | #define ___DEF (_PAGE_PRESENT | _PAGE_DEF_CACHEABLE) |
111 | |||
112 | #define _PAGE_READ (_PAGE_U_READ | _PAGE_K_READ) | ||
113 | #define _PAGE_WRITE (_PAGE_U_WRITE | _PAGE_K_WRITE) | ||
114 | #define _PAGE_EXECUTE (_PAGE_U_EXECUTE | _PAGE_K_EXECUTE) | ||
110 | 115 | ||
111 | /* Set of bits not changed in pte_modify */ | 116 | /* Set of bits not changed in pte_modify */ |
112 | #define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_MODIFIED) | 117 | #define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_MODIFIED) |
@@ -125,11 +130,10 @@ | |||
125 | * kernel vaddr space - visible in all addr spaces, but kernel mode only | 130 | * kernel vaddr space - visible in all addr spaces, but kernel mode only |
126 | * Thus Global, all-kernel-access, no-user-access, cached | 131 | * Thus Global, all-kernel-access, no-user-access, cached |
127 | */ | 132 | */ |
128 | #define PAGE_KERNEL __pgprot(___DEF | _PAGE_GLOBAL) | 133 | #define PAGE_KERNEL __pgprot(_K_PAGE_PERMS | _PAGE_DEF_CACHEABLE) |
129 | 134 | ||
130 | /* ioremap */ | 135 | /* ioremap */ |
131 | #define PAGE_KERNEL_NO_CACHE __pgprot(_PAGE_PRESENT | _K_PAGE_PERMS | \ | 136 | #define PAGE_KERNEL_NO_CACHE __pgprot(_K_PAGE_PERMS) |
132 | _PAGE_GLOBAL) | ||
133 | 137 | ||
134 | /************************************************************************** | 138 | /************************************************************************** |
135 | * Mapping of vm_flags (Generic VM) to PTE flags (arch specific) | 139 | * Mapping of vm_flags (Generic VM) to PTE flags (arch specific) |
diff --git a/arch/arc/include/asm/tlb.h b/arch/arc/include/asm/tlb.h index 85b6df839bd7..cb0c708ca665 100644 --- a/arch/arc/include/asm/tlb.h +++ b/arch/arc/include/asm/tlb.h | |||
@@ -16,7 +16,7 @@ | |||
16 | /* Masks for actual TLB "PD"s */ | 16 | /* Masks for actual TLB "PD"s */ |
17 | #define PTE_BITS_IN_PD0 (_PAGE_GLOBAL | _PAGE_PRESENT) | 17 | #define PTE_BITS_IN_PD0 (_PAGE_GLOBAL | _PAGE_PRESENT) |
18 | #define PTE_BITS_IN_PD1 (PAGE_MASK | _PAGE_CACHEABLE | \ | 18 | #define PTE_BITS_IN_PD1 (PAGE_MASK | _PAGE_CACHEABLE | \ |
19 | _PAGE_EXECUTE | _PAGE_WRITE | _PAGE_READ | \ | 19 | _PAGE_U_EXECUTE | _PAGE_U_WRITE | _PAGE_U_READ | \ |
20 | _PAGE_K_EXECUTE | _PAGE_K_WRITE | _PAGE_K_READ) | 20 | _PAGE_K_EXECUTE | _PAGE_K_WRITE | _PAGE_K_READ) |
21 | 21 | ||
22 | #ifndef __ASSEMBLY__ | 22 | #ifndef __ASSEMBLY__ |
diff --git a/arch/arc/mm/cache_arc700.c b/arch/arc/mm/cache_arc700.c index 2f12bca8aef3..aedce1905441 100644 --- a/arch/arc/mm/cache_arc700.c +++ b/arch/arc/mm/cache_arc700.c | |||
@@ -610,7 +610,7 @@ void __sync_icache_dcache(unsigned long paddr, unsigned long vaddr, int len) | |||
610 | 610 | ||
611 | local_irq_save(flags); | 611 | local_irq_save(flags); |
612 | __ic_line_inv_vaddr(paddr, vaddr, len); | 612 | __ic_line_inv_vaddr(paddr, vaddr, len); |
613 | __dc_line_op(paddr, vaddr, len, OP_FLUSH); | 613 | __dc_line_op(paddr, vaddr, len, OP_FLUSH_N_INV); |
614 | local_irq_restore(flags); | 614 | local_irq_restore(flags); |
615 | } | 615 | } |
616 | 616 | ||
@@ -676,6 +676,17 @@ void flush_cache_range(struct vm_area_struct *vma, unsigned long start, | |||
676 | flush_cache_all(); | 676 | flush_cache_all(); |
677 | } | 677 | } |
678 | 678 | ||
679 | void flush_anon_page(struct vm_area_struct *vma, struct page *page, | ||
680 | unsigned long u_vaddr) | ||
681 | { | ||
682 | /* TBD: do we really need to clear the kernel mapping */ | ||
683 | __flush_dcache_page(page_address(page), u_vaddr); | ||
684 | __flush_dcache_page(page_address(page), page_address(page)); | ||
685 | |||
686 | } | ||
687 | |||
688 | #endif | ||
689 | |||
679 | void copy_user_highpage(struct page *to, struct page *from, | 690 | void copy_user_highpage(struct page *to, struct page *from, |
680 | unsigned long u_vaddr, struct vm_area_struct *vma) | 691 | unsigned long u_vaddr, struct vm_area_struct *vma) |
681 | { | 692 | { |
@@ -725,16 +736,6 @@ void clear_user_page(void *to, unsigned long u_vaddr, struct page *page) | |||
725 | set_bit(PG_arch_1, &page->flags); | 736 | set_bit(PG_arch_1, &page->flags); |
726 | } | 737 | } |
727 | 738 | ||
728 | void flush_anon_page(struct vm_area_struct *vma, struct page *page, | ||
729 | unsigned long u_vaddr) | ||
730 | { | ||
731 | /* TBD: do we really need to clear the kernel mapping */ | ||
732 | __flush_dcache_page(page_address(page), u_vaddr); | ||
733 | __flush_dcache_page(page_address(page), page_address(page)); | ||
734 | |||
735 | } | ||
736 | |||
737 | #endif | ||
738 | 739 | ||
739 | /********************************************************************** | 740 | /********************************************************************** |
740 | * Explicit Cache flush request from user space via syscall | 741 | * Explicit Cache flush request from user space via syscall |
diff --git a/arch/arc/mm/tlb.c b/arch/arc/mm/tlb.c index 066145b5f348..fe1c5a073afe 100644 --- a/arch/arc/mm/tlb.c +++ b/arch/arc/mm/tlb.c | |||
@@ -444,7 +444,8 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long vaddr_unaligned, | |||
444 | * so userspace sees the right data. | 444 | * so userspace sees the right data. |
445 | * (Avoids the flush for Non-exec + congruent mapping case) | 445 | * (Avoids the flush for Non-exec + congruent mapping case) |
446 | */ | 446 | */ |
447 | if (vma->vm_flags & VM_EXEC || addr_not_cache_congruent(paddr, vaddr)) { | 447 | if ((vma->vm_flags & VM_EXEC) || |
448 | addr_not_cache_congruent(paddr, vaddr)) { | ||
448 | struct page *page = pfn_to_page(pte_pfn(*ptep)); | 449 | struct page *page = pfn_to_page(pte_pfn(*ptep)); |
449 | 450 | ||
450 | int dirty = test_and_clear_bit(PG_arch_1, &page->flags); | 451 | int dirty = test_and_clear_bit(PG_arch_1, &page->flags); |
diff --git a/arch/arc/mm/tlbex.S b/arch/arc/mm/tlbex.S index 9df765dc7c3a..3357d26ffe54 100644 --- a/arch/arc/mm/tlbex.S +++ b/arch/arc/mm/tlbex.S | |||
@@ -277,7 +277,7 @@ ARC_ENTRY EV_TLBMissI | |||
277 | ;---------------------------------------------------------------- | 277 | ;---------------------------------------------------------------- |
278 | ; VERIFY_PTE: Check if PTE permissions approp for executing code | 278 | ; VERIFY_PTE: Check if PTE permissions approp for executing code |
279 | cmp_s r2, VMALLOC_START | 279 | cmp_s r2, VMALLOC_START |
280 | mov.lo r2, (_PAGE_PRESENT | _PAGE_READ | _PAGE_EXECUTE) | 280 | mov.lo r2, (_PAGE_PRESENT | _PAGE_U_READ | _PAGE_U_EXECUTE) |
281 | mov.hs r2, (_PAGE_PRESENT | _PAGE_K_READ | _PAGE_K_EXECUTE) | 281 | mov.hs r2, (_PAGE_PRESENT | _PAGE_K_READ | _PAGE_K_EXECUTE) |
282 | 282 | ||
283 | and r3, r0, r2 ; Mask out NON Flag bits from PTE | 283 | and r3, r0, r2 ; Mask out NON Flag bits from PTE |
@@ -320,9 +320,9 @@ ARC_ENTRY EV_TLBMissD | |||
320 | mov_s r2, 0 | 320 | mov_s r2, 0 |
321 | lr r3, [ecr] | 321 | lr r3, [ecr] |
322 | btst_s r3, ECR_C_BIT_DTLB_LD_MISS ; Read Access | 322 | btst_s r3, ECR_C_BIT_DTLB_LD_MISS ; Read Access |
323 | or.nz r2, r2, _PAGE_READ ; chk for Read flag in PTE | 323 | or.nz r2, r2, _PAGE_U_READ ; chk for Read flag in PTE |
324 | btst_s r3, ECR_C_BIT_DTLB_ST_MISS ; Write Access | 324 | btst_s r3, ECR_C_BIT_DTLB_ST_MISS ; Write Access |
325 | or.nz r2, r2, _PAGE_WRITE ; chk for Write flag in PTE | 325 | or.nz r2, r2, _PAGE_U_WRITE ; chk for Write flag in PTE |
326 | ; Above laddering takes care of XCHG access | 326 | ; Above laddering takes care of XCHG access |
327 | ; which is both Read and Write | 327 | ; which is both Read and Write |
328 | 328 | ||
diff --git a/arch/arc/plat-tb10x/tb10x.c b/arch/arc/plat-tb10x/tb10x.c index d3567691c7e1..06cb30929460 100644 --- a/arch/arc/plat-tb10x/tb10x.c +++ b/arch/arc/plat-tb10x/tb10x.c | |||
@@ -34,31 +34,6 @@ static void __init tb10x_platform_init(void) | |||
34 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | 34 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); |
35 | } | 35 | } |
36 | 36 | ||
37 | static void __init tb10x_platform_late_init(void) | ||
38 | { | ||
39 | struct device_node *dn; | ||
40 | |||
41 | /* | ||
42 | * Pinctrl documentation recommends setting up the iomux here for | ||
43 | * all modules which don't require control over the pins themselves. | ||
44 | * Modules which need this kind of assistance are compatible with | ||
45 | * "abilis,simple-pinctrl", i.e. we can easily iterate over them. | ||
46 | * TODO: Does this recommended method work cleanly with pins required | ||
47 | * by modules? | ||
48 | */ | ||
49 | for_each_compatible_node(dn, NULL, "abilis,simple-pinctrl") { | ||
50 | struct platform_device *pd = of_find_device_by_node(dn); | ||
51 | struct pinctrl *pctl; | ||
52 | |||
53 | pctl = pinctrl_get_select(&pd->dev, "abilis,simple-default"); | ||
54 | if (IS_ERR(pctl)) { | ||
55 | int ret = PTR_ERR(pctl); | ||
56 | dev_err(&pd->dev, "Could not set up pinctrl: %d\n", | ||
57 | ret); | ||
58 | } | ||
59 | } | ||
60 | } | ||
61 | |||
62 | static const char *tb10x_compat[] __initdata = { | 37 | static const char *tb10x_compat[] __initdata = { |
63 | "abilis,arc-tb10x", | 38 | "abilis,arc-tb10x", |
64 | NULL, | 39 | NULL, |
@@ -67,5 +42,4 @@ static const char *tb10x_compat[] __initdata = { | |||
67 | MACHINE_START(TB10x, "tb10x") | 42 | MACHINE_START(TB10x, "tb10x") |
68 | .dt_compat = tb10x_compat, | 43 | .dt_compat = tb10x_compat, |
69 | .init_machine = tb10x_platform_init, | 44 | .init_machine = tb10x_platform_init, |
70 | .init_late = tb10x_platform_late_init, | ||
71 | MACHINE_END | 45 | MACHINE_END |
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index b9f7121e6ecf..f0895c581a89 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile | |||
@@ -177,7 +177,9 @@ dtb-$(CONFIG_ARCH_SPEAR3XX)+= spear300-evb.dtb \ | |||
177 | spear320-evb.dtb \ | 177 | spear320-evb.dtb \ |
178 | spear320-hmi.dtb | 178 | spear320-hmi.dtb |
179 | dtb-$(CONFIG_ARCH_SPEAR6XX)+= spear600-evb.dtb | 179 | dtb-$(CONFIG_ARCH_SPEAR6XX)+= spear600-evb.dtb |
180 | dtb-$(CONFIG_ARCH_SUNXI) += sun4i-a10-cubieboard.dtb \ | 180 | dtb-$(CONFIG_ARCH_SUNXI) += \ |
181 | sun4i-a10-cubieboard.dtb \ | ||
182 | sun4i-a10-mini-xplus.dtb \ | ||
181 | sun4i-a10-hackberry.dtb \ | 183 | sun4i-a10-hackberry.dtb \ |
182 | sun5i-a13-olinuxino.dtb | 184 | sun5i-a13-olinuxino.dtb |
183 | dtb-$(CONFIG_ARCH_TEGRA) += tegra20-harmony.dtb \ | 185 | dtb-$(CONFIG_ARCH_TEGRA) += tegra20-harmony.dtb \ |
diff --git a/arch/arm/boot/dts/armada-370-xp.dtsi b/arch/arm/boot/dts/armada-370-xp.dtsi index 272bbc65fab0..550eb772c30e 100644 --- a/arch/arm/boot/dts/armada-370-xp.dtsi +++ b/arch/arm/boot/dts/armada-370-xp.dtsi | |||
@@ -33,7 +33,8 @@ | |||
33 | #size-cells = <1>; | 33 | #size-cells = <1>; |
34 | compatible = "simple-bus"; | 34 | compatible = "simple-bus"; |
35 | interrupt-parent = <&mpic>; | 35 | interrupt-parent = <&mpic>; |
36 | ranges = <0 0 0xd0000000 0x100000>; | 36 | ranges = <0 0 0xd0000000 0x0100000 /* internal registers */ |
37 | 0xe0000000 0 0xe0000000 0x8100000 /* PCIe */>; | ||
37 | 38 | ||
38 | internal-regs { | 39 | internal-regs { |
39 | compatible = "simple-bus"; | 40 | compatible = "simple-bus"; |
diff --git a/arch/arm/boot/dts/armada-370.dtsi b/arch/arm/boot/dts/armada-370.dtsi index b2c1b5af9749..aee2b1866ce2 100644 --- a/arch/arm/boot/dts/armada-370.dtsi +++ b/arch/arm/boot/dts/armada-370.dtsi | |||
@@ -29,7 +29,8 @@ | |||
29 | }; | 29 | }; |
30 | 30 | ||
31 | soc { | 31 | soc { |
32 | ranges = <0 0xd0000000 0x100000>; | 32 | ranges = <0 0xd0000000 0x0100000 /* internal registers */ |
33 | 0xe0000000 0xe0000000 0x8100000 /* PCIe */>; | ||
33 | internal-regs { | 34 | internal-regs { |
34 | system-controller@18200 { | 35 | system-controller@18200 { |
35 | compatible = "marvell,armada-370-xp-system-controller"; | 36 | compatible = "marvell,armada-370-xp-system-controller"; |
@@ -38,12 +39,12 @@ | |||
38 | 39 | ||
39 | L2: l2-cache { | 40 | L2: l2-cache { |
40 | compatible = "marvell,aurora-outer-cache"; | 41 | compatible = "marvell,aurora-outer-cache"; |
41 | reg = <0xd0008000 0x1000>; | 42 | reg = <0x08000 0x1000>; |
42 | cache-id-part = <0x100>; | 43 | cache-id-part = <0x100>; |
43 | wt-override; | 44 | wt-override; |
44 | }; | 45 | }; |
45 | 46 | ||
46 | mpic: interrupt-controller@20000 { | 47 | interrupt-controller@20000 { |
47 | reg = <0x20a00 0x1d0>, <0x21870 0x58>; | 48 | reg = <0x20a00 0x1d0>, <0x21870 0x58>; |
48 | }; | 49 | }; |
49 | 50 | ||
diff --git a/arch/arm/boot/dts/armada-xp-gp.dts b/arch/arm/boot/dts/armada-xp-gp.dts index 26ad06fc147e..3ee63d128e27 100644 --- a/arch/arm/boot/dts/armada-xp-gp.dts +++ b/arch/arm/boot/dts/armada-xp-gp.dts | |||
@@ -39,6 +39,9 @@ | |||
39 | }; | 39 | }; |
40 | 40 | ||
41 | soc { | 41 | soc { |
42 | ranges = <0 0 0xd0000000 0x100000 | ||
43 | 0xf0000000 0 0xf0000000 0x1000000>; | ||
44 | |||
42 | internal-regs { | 45 | internal-regs { |
43 | serial@12000 { | 46 | serial@12000 { |
44 | clock-frequency = <250000000>; | 47 | clock-frequency = <250000000>; |
diff --git a/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts b/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts index f14d36c46159..46b785064dd8 100644 --- a/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts +++ b/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts | |||
@@ -27,6 +27,9 @@ | |||
27 | }; | 27 | }; |
28 | 28 | ||
29 | soc { | 29 | soc { |
30 | ranges = <0 0 0xd0000000 0x100000 | ||
31 | 0xf0000000 0 0xf0000000 0x8000000>; | ||
32 | |||
30 | internal-regs { | 33 | internal-regs { |
31 | serial@12000 { | 34 | serial@12000 { |
32 | clock-frequency = <250000000>; | 35 | clock-frequency = <250000000>; |
diff --git a/arch/arm/boot/dts/armada-xp.dtsi b/arch/arm/boot/dts/armada-xp.dtsi index bacab11c10dc..5b902f9a3af2 100644 --- a/arch/arm/boot/dts/armada-xp.dtsi +++ b/arch/arm/boot/dts/armada-xp.dtsi | |||
@@ -31,7 +31,7 @@ | |||
31 | wt-override; | 31 | wt-override; |
32 | }; | 32 | }; |
33 | 33 | ||
34 | mpic: interrupt-controller@20000 { | 34 | interrupt-controller@20000 { |
35 | reg = <0x20a00 0x2d0>, <0x21070 0x58>; | 35 | reg = <0x20a00 0x2d0>, <0x21070 0x58>; |
36 | }; | 36 | }; |
37 | 37 | ||
diff --git a/arch/arm/boot/dts/at91sam9260.dtsi b/arch/arm/boot/dts/at91sam9260.dtsi index 70b5ccbac234..84c4bef2d726 100644 --- a/arch/arm/boot/dts/at91sam9260.dtsi +++ b/arch/arm/boot/dts/at91sam9260.dtsi | |||
@@ -264,7 +264,7 @@ | |||
264 | atmel,pins = | 264 | atmel,pins = |
265 | <0 10 0x2 0x0 /* PA10 periph B */ | 265 | <0 10 0x2 0x0 /* PA10 periph B */ |
266 | 0 11 0x2 0x0 /* PA11 periph B */ | 266 | 0 11 0x2 0x0 /* PA11 periph B */ |
267 | 0 24 0x2 0x0 /* PA24 periph B */ | 267 | 0 22 0x2 0x0 /* PA22 periph B */ |
268 | 0 25 0x2 0x0 /* PA25 periph B */ | 268 | 0 25 0x2 0x0 /* PA25 periph B */ |
269 | 0 26 0x2 0x0 /* PA26 periph B */ | 269 | 0 26 0x2 0x0 /* PA26 periph B */ |
270 | 0 27 0x2 0x0 /* PA27 periph B */ | 270 | 0 27 0x2 0x0 /* PA27 periph B */ |
diff --git a/arch/arm/boot/dts/at91sam9n12.dtsi b/arch/arm/boot/dts/at91sam9n12.dtsi index 3de8e6dfbcb1..8d25f889928e 100644 --- a/arch/arm/boot/dts/at91sam9n12.dtsi +++ b/arch/arm/boot/dts/at91sam9n12.dtsi | |||
@@ -57,6 +57,7 @@ | |||
57 | compatible = "atmel,at91rm9200-aic"; | 57 | compatible = "atmel,at91rm9200-aic"; |
58 | interrupt-controller; | 58 | interrupt-controller; |
59 | reg = <0xfffff000 0x200>; | 59 | reg = <0xfffff000 0x200>; |
60 | atmel,external-irqs = <31>; | ||
60 | }; | 61 | }; |
61 | 62 | ||
62 | ramc0: ramc@ffffe800 { | 63 | ramc0: ramc@ffffe800 { |
diff --git a/arch/arm/boot/dts/at91sam9x25ek.dts b/arch/arm/boot/dts/at91sam9x25ek.dts index 3b40d11d65e7..315250b4995e 100644 --- a/arch/arm/boot/dts/at91sam9x25ek.dts +++ b/arch/arm/boot/dts/at91sam9x25ek.dts | |||
@@ -11,7 +11,7 @@ | |||
11 | /include/ "at91sam9x5ek.dtsi" | 11 | /include/ "at91sam9x5ek.dtsi" |
12 | 12 | ||
13 | / { | 13 | / { |
14 | model = "Atmel AT91SAM9G25-EK"; | 14 | model = "Atmel AT91SAM9X25-EK"; |
15 | compatible = "atmel,at91sam9x25ek", "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9"; | 15 | compatible = "atmel,at91sam9x25ek", "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9"; |
16 | 16 | ||
17 | ahb { | 17 | ahb { |
diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi index 98dfc3ea5c0b..0673524238a6 100644 --- a/arch/arm/boot/dts/exynos5250.dtsi +++ b/arch/arm/boot/dts/exynos5250.dtsi | |||
@@ -497,6 +497,21 @@ | |||
497 | clock-names = "usbhost"; | 497 | clock-names = "usbhost"; |
498 | }; | 498 | }; |
499 | 499 | ||
500 | usbphy@12130000 { | ||
501 | compatible = "samsung,exynos5250-usb2phy"; | ||
502 | reg = <0x12130000 0x100>; | ||
503 | clocks = <&clock 1>, <&clock 285>; | ||
504 | clock-names = "ext_xtal", "usbhost"; | ||
505 | #address-cells = <1>; | ||
506 | #size-cells = <1>; | ||
507 | ranges; | ||
508 | |||
509 | usbphy-sys { | ||
510 | reg = <0x10040704 0x8>, | ||
511 | <0x10050230 0x4>; | ||
512 | }; | ||
513 | }; | ||
514 | |||
500 | amba { | 515 | amba { |
501 | #address-cells = <1>; | 516 | #address-cells = <1>; |
502 | #size-cells = <1>; | 517 | #size-cells = <1>; |
diff --git a/arch/arm/boot/dts/omap3.dtsi b/arch/arm/boot/dts/omap3.dtsi index 82a404da1c0d..99ba6e14ebf3 100644 --- a/arch/arm/boot/dts/omap3.dtsi +++ b/arch/arm/boot/dts/omap3.dtsi | |||
@@ -516,7 +516,7 @@ | |||
516 | usb_otg_hs: usb_otg_hs@480ab000 { | 516 | usb_otg_hs: usb_otg_hs@480ab000 { |
517 | compatible = "ti,omap3-musb"; | 517 | compatible = "ti,omap3-musb"; |
518 | reg = <0x480ab000 0x1000>; | 518 | reg = <0x480ab000 0x1000>; |
519 | interrupts = <0 92 0x4>, <0 93 0x4>; | 519 | interrupts = <92>, <93>; |
520 | interrupt-names = "mc", "dma"; | 520 | interrupt-names = "mc", "dma"; |
521 | ti,hwmods = "usb_otg_hs"; | 521 | ti,hwmods = "usb_otg_hs"; |
522 | multipoint = <1>; | 522 | multipoint = <1>; |
diff --git a/arch/arm/boot/dts/sama5d3.dtsi b/arch/arm/boot/dts/sama5d3.dtsi index 2e643ea51cce..5000e0d42849 100644 --- a/arch/arm/boot/dts/sama5d3.dtsi +++ b/arch/arm/boot/dts/sama5d3.dtsi | |||
@@ -75,11 +75,6 @@ | |||
75 | compatible = "atmel,at91sam9x5-spi"; | 75 | compatible = "atmel,at91sam9x5-spi"; |
76 | reg = <0xf0004000 0x100>; | 76 | reg = <0xf0004000 0x100>; |
77 | interrupts = <24 4 3>; | 77 | interrupts = <24 4 3>; |
78 | cs-gpios = <&pioD 13 0 | ||
79 | &pioD 14 0 /* conflicts with SCK0 and CANRX0 */ | ||
80 | &pioD 15 0 /* conflicts with CTS0 and CANTX0 */ | ||
81 | &pioD 16 0 /* conflicts with RTS0 and PWMFI3 */ | ||
82 | >; | ||
83 | pinctrl-names = "default"; | 78 | pinctrl-names = "default"; |
84 | pinctrl-0 = <&pinctrl_spi0>; | 79 | pinctrl-0 = <&pinctrl_spi0>; |
85 | status = "disabled"; | 80 | status = "disabled"; |
@@ -156,7 +151,7 @@ | |||
156 | }; | 151 | }; |
157 | 152 | ||
158 | macb0: ethernet@f0028000 { | 153 | macb0: ethernet@f0028000 { |
159 | compatible = "cnds,pc302-gem", "cdns,gem"; | 154 | compatible = "cdns,pc302-gem", "cdns,gem"; |
160 | reg = <0xf0028000 0x100>; | 155 | reg = <0xf0028000 0x100>; |
161 | interrupts = <34 4 3>; | 156 | interrupts = <34 4 3>; |
162 | pinctrl-names = "default"; | 157 | pinctrl-names = "default"; |
@@ -203,11 +198,6 @@ | |||
203 | compatible = "atmel,at91sam9x5-spi"; | 198 | compatible = "atmel,at91sam9x5-spi"; |
204 | reg = <0xf8008000 0x100>; | 199 | reg = <0xf8008000 0x100>; |
205 | interrupts = <25 4 3>; | 200 | interrupts = <25 4 3>; |
206 | cs-gpios = <&pioC 25 0 | ||
207 | &pioC 26 0 /* conflitcs with TWD1 and ISI_D11 */ | ||
208 | &pioC 27 0 /* conflitcs with TWCK1 and ISI_D10 */ | ||
209 | &pioC 28 0 /* conflitcs with PWMFI0 and ISI_D9 */ | ||
210 | >; | ||
211 | pinctrl-names = "default"; | 201 | pinctrl-names = "default"; |
212 | pinctrl-0 = <&pinctrl_spi1>; | 202 | pinctrl-0 = <&pinctrl_spi1>; |
213 | status = "disabled"; | 203 | status = "disabled"; |
diff --git a/arch/arm/boot/dts/sama5d3xcm.dtsi b/arch/arm/boot/dts/sama5d3xcm.dtsi index 1f8ed404626c..b336e7787cb3 100644 --- a/arch/arm/boot/dts/sama5d3xcm.dtsi +++ b/arch/arm/boot/dts/sama5d3xcm.dtsi | |||
@@ -32,6 +32,10 @@ | |||
32 | 32 | ||
33 | ahb { | 33 | ahb { |
34 | apb { | 34 | apb { |
35 | spi0: spi@f0004000 { | ||
36 | cs-gpios = <&pioD 13 0>, <0>, <0>, <0>; | ||
37 | }; | ||
38 | |||
35 | macb0: ethernet@f0028000 { | 39 | macb0: ethernet@f0028000 { |
36 | phy-mode = "rgmii"; | 40 | phy-mode = "rgmii"; |
37 | }; | 41 | }; |
diff --git a/arch/arm/boot/dts/ste-nomadik-s8815.dts b/arch/arm/boot/dts/ste-nomadik-s8815.dts index b28fbf3408e3..6f82d9368948 100644 --- a/arch/arm/boot/dts/ste-nomadik-s8815.dts +++ b/arch/arm/boot/dts/ste-nomadik-s8815.dts | |||
@@ -14,13 +14,19 @@ | |||
14 | bootargs = "root=/dev/ram0 console=ttyAMA1,115200n8 earlyprintk"; | 14 | bootargs = "root=/dev/ram0 console=ttyAMA1,115200n8 earlyprintk"; |
15 | }; | 15 | }; |
16 | 16 | ||
17 | /* This is where the interrupt is routed on the S8815 board */ | ||
18 | external-bus@34000000 { | ||
19 | ethernet@300 { | ||
20 | interrupt-parent = <&gpio3>; | ||
21 | interrupts = <8 0x1>; | ||
22 | }; | ||
23 | }; | ||
24 | |||
17 | /* Custom board node with GPIO pins to active etc */ | 25 | /* Custom board node with GPIO pins to active etc */ |
18 | usb-s8815 { | 26 | usb-s8815 { |
19 | /* The S8815 is using this very GPIO pin for the SMSC91x IRQs */ | 27 | /* The S8815 is using this very GPIO pin for the SMSC91x IRQs */ |
20 | ethernet-gpio { | 28 | ethernet-gpio { |
21 | gpios = <&gpio3 19 0x1>; | 29 | gpios = <&gpio3 8 0x1>; |
22 | interrupts = <19 0x1>; | ||
23 | interrupt-parent = <&gpio3>; | ||
24 | }; | 30 | }; |
25 | /* This will bias the MMC/SD card detect line */ | 31 | /* This will bias the MMC/SD card detect line */ |
26 | mmcsd-gpio { | 32 | mmcsd-gpio { |
diff --git a/arch/arm/boot/dts/sun4i-a10-mini-xplus.dts b/arch/arm/boot/dts/sun4i-a10-mini-xplus.dts index 4a7c35d6726a..078ed7f618d7 100644 --- a/arch/arm/boot/dts/sun4i-a10-mini-xplus.dts +++ b/arch/arm/boot/dts/sun4i-a10-mini-xplus.dts | |||
@@ -22,8 +22,8 @@ | |||
22 | bootargs = "earlyprintk console=ttyS0,115200"; | 22 | bootargs = "earlyprintk console=ttyS0,115200"; |
23 | }; | 23 | }; |
24 | 24 | ||
25 | soc { | 25 | soc@01c20000 { |
26 | uart0: uart@01c28000 { | 26 | uart0: serial@01c28000 { |
27 | pinctrl-names = "default"; | 27 | pinctrl-names = "default"; |
28 | pinctrl-0 = <&uart0_pins_a>; | 28 | pinctrl-0 = <&uart0_pins_a>; |
29 | status = "okay"; | 29 | status = "okay"; |
diff --git a/arch/arm/configs/exynos_defconfig b/arch/arm/configs/exynos_defconfig index e40b435d204e..227abf9cc601 100644 --- a/arch/arm/configs/exynos_defconfig +++ b/arch/arm/configs/exynos_defconfig | |||
@@ -1,4 +1,4 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | 1 | CONFIG_SYSVIPC=y |
2 | CONFIG_NO_HZ=y | 2 | CONFIG_NO_HZ=y |
3 | CONFIG_HIGH_RES_TIMERS=y | 3 | CONFIG_HIGH_RES_TIMERS=y |
4 | CONFIG_BLK_DEV_INITRD=y | 4 | CONFIG_BLK_DEV_INITRD=y |
@@ -7,17 +7,18 @@ CONFIG_MODULES=y | |||
7 | CONFIG_MODULE_UNLOAD=y | 7 | CONFIG_MODULE_UNLOAD=y |
8 | # CONFIG_BLK_DEV_BSG is not set | 8 | # CONFIG_BLK_DEV_BSG is not set |
9 | CONFIG_PARTITION_ADVANCED=y | 9 | CONFIG_PARTITION_ADVANCED=y |
10 | CONFIG_EFI_PARTITION=y | ||
11 | CONFIG_ARCH_EXYNOS=y | 10 | CONFIG_ARCH_EXYNOS=y |
12 | CONFIG_S3C_LOWLEVEL_UART_PORT=1 | 11 | CONFIG_S3C_LOWLEVEL_UART_PORT=3 |
13 | CONFIG_S3C24XX_PWM=y | 12 | CONFIG_S3C24XX_PWM=y |
14 | CONFIG_ARCH_EXYNOS5=y | 13 | CONFIG_ARCH_EXYNOS5=y |
15 | CONFIG_MACH_EXYNOS4_DT=y | 14 | CONFIG_MACH_EXYNOS4_DT=y |
16 | CONFIG_MACH_EXYNOS5_DT=y | ||
17 | CONFIG_SMP=y | 15 | CONFIG_SMP=y |
18 | CONFIG_NR_CPUS=2 | 16 | CONFIG_NR_CPUS=2 |
19 | CONFIG_PREEMPT=y | 17 | CONFIG_PREEMPT=y |
20 | CONFIG_AEABI=y | 18 | CONFIG_AEABI=y |
19 | CONFIG_HIGHMEM=y | ||
20 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
21 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
21 | CONFIG_ARM_APPENDED_DTB=y | 22 | CONFIG_ARM_APPENDED_DTB=y |
22 | CONFIG_ARM_ATAG_DTB_COMPAT=y | 23 | CONFIG_ARM_ATAG_DTB_COMPAT=y |
23 | CONFIG_CMDLINE="root=/dev/ram0 rw ramdisk=8192 initrd=0x41000000,8M console=ttySAC1,115200 init=/linuxrc mem=256M" | 24 | CONFIG_CMDLINE="root=/dev/ram0 rw ramdisk=8192 initrd=0x41000000,8M console=ttySAC1,115200 init=/linuxrc mem=256M" |
@@ -30,35 +31,58 @@ CONFIG_NET_KEY=y | |||
30 | CONFIG_INET=y | 31 | CONFIG_INET=y |
31 | CONFIG_RFKILL_REGULATOR=y | 32 | CONFIG_RFKILL_REGULATOR=y |
32 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 33 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
34 | CONFIG_DEVTMPFS=y | ||
35 | CONFIG_DEVTMPFS_MOUNT=y | ||
33 | CONFIG_PROC_DEVICETREE=y | 36 | CONFIG_PROC_DEVICETREE=y |
34 | CONFIG_BLK_DEV_LOOP=y | 37 | CONFIG_BLK_DEV_LOOP=y |
38 | CONFIG_BLK_DEV_CRYPTOLOOP=y | ||
35 | CONFIG_BLK_DEV_RAM=y | 39 | CONFIG_BLK_DEV_RAM=y |
36 | CONFIG_BLK_DEV_RAM_SIZE=8192 | 40 | CONFIG_BLK_DEV_RAM_SIZE=8192 |
37 | CONFIG_SCSI=y | 41 | CONFIG_SCSI=y |
38 | CONFIG_BLK_DEV_SD=y | 42 | CONFIG_BLK_DEV_SD=y |
39 | CONFIG_CHR_DEV_SG=y | 43 | CONFIG_CHR_DEV_SG=y |
44 | CONFIG_MD=y | ||
45 | CONFIG_BLK_DEV_DM=y | ||
46 | CONFIG_DM_CRYPT=m | ||
40 | CONFIG_NETDEVICES=y | 47 | CONFIG_NETDEVICES=y |
41 | CONFIG_SMSC911X=y | 48 | CONFIG_SMSC911X=y |
42 | CONFIG_USB_USBNET=y | 49 | CONFIG_USB_USBNET=y |
43 | CONFIG_USB_NET_SMSC75XX=y | 50 | CONFIG_USB_NET_SMSC75XX=y |
44 | CONFIG_USB_NET_SMSC95XX=y | 51 | CONFIG_USB_NET_SMSC95XX=y |
45 | CONFIG_INPUT_EVDEV=y | 52 | CONFIG_INPUT_EVDEV=y |
46 | # CONFIG_INPUT_KEYBOARD is not set | 53 | CONFIG_KEYBOARD_CROS_EC=y |
47 | # CONFIG_INPUT_MOUSE is not set | 54 | # CONFIG_MOUSE_PS2 is not set |
55 | CONFIG_MOUSE_CYAPA=y | ||
48 | CONFIG_INPUT_TOUCHSCREEN=y | 56 | CONFIG_INPUT_TOUCHSCREEN=y |
49 | CONFIG_SERIAL_8250=y | 57 | CONFIG_SERIAL_8250=y |
50 | CONFIG_SERIAL_SAMSUNG=y | 58 | CONFIG_SERIAL_SAMSUNG=y |
51 | CONFIG_SERIAL_SAMSUNG_CONSOLE=y | 59 | CONFIG_SERIAL_SAMSUNG_CONSOLE=y |
52 | CONFIG_SERIAL_OF_PLATFORM=y | 60 | CONFIG_SERIAL_OF_PLATFORM=y |
53 | CONFIG_HW_RANDOM=y | 61 | CONFIG_HW_RANDOM=y |
62 | CONFIG_TCG_TPM=y | ||
63 | CONFIG_TCG_TIS_I2C_INFINEON=y | ||
54 | CONFIG_I2C=y | 64 | CONFIG_I2C=y |
65 | CONFIG_I2C_MUX=y | ||
66 | CONFIG_I2C_ARB_GPIO_CHALLENGE=y | ||
67 | CONFIG_I2C_S3C2410=y | ||
68 | CONFIG_DEBUG_GPIO=y | ||
55 | # CONFIG_HWMON is not set | 69 | # CONFIG_HWMON is not set |
70 | CONFIG_MFD_CROS_EC=y | ||
71 | CONFIG_MFD_CROS_EC_I2C=y | ||
72 | CONFIG_MFD_MAX77686=y | ||
73 | CONFIG_MFD_MAX8997=y | ||
74 | CONFIG_MFD_SEC_CORE=y | ||
56 | CONFIG_MFD_TPS65090=y | 75 | CONFIG_MFD_TPS65090=y |
57 | CONFIG_REGULATOR=y | 76 | CONFIG_REGULATOR=y |
58 | CONFIG_REGULATOR_FIXED_VOLTAGE=y | 77 | CONFIG_REGULATOR_FIXED_VOLTAGE=y |
59 | CONFIG_REGULATOR_GPIO=y | 78 | CONFIG_REGULATOR_GPIO=y |
79 | CONFIG_REGULATOR_MAX8997=y | ||
80 | CONFIG_REGULATOR_MAX77686=y | ||
81 | CONFIG_REGULATOR_S5M8767=y | ||
60 | CONFIG_REGULATOR_TPS65090=y | 82 | CONFIG_REGULATOR_TPS65090=y |
61 | CONFIG_FB=y | 83 | CONFIG_FB=y |
84 | CONFIG_FB_MODE_HELPERS=y | ||
85 | CONFIG_FB_SIMPLE=y | ||
62 | CONFIG_EXYNOS_VIDEO=y | 86 | CONFIG_EXYNOS_VIDEO=y |
63 | CONFIG_EXYNOS_MIPI_DSI=y | 87 | CONFIG_EXYNOS_MIPI_DSI=y |
64 | CONFIG_EXYNOS_DP=y | 88 | CONFIG_EXYNOS_DP=y |
@@ -67,6 +91,20 @@ CONFIG_FONTS=y | |||
67 | CONFIG_FONT_7x14=y | 91 | CONFIG_FONT_7x14=y |
68 | CONFIG_LOGO=y | 92 | CONFIG_LOGO=y |
69 | CONFIG_USB=y | 93 | CONFIG_USB=y |
94 | CONFIG_USB_EHCI_HCD=y | ||
95 | CONFIG_USB_EHCI_S5P=y | ||
96 | CONFIG_USB_STORAGE=y | ||
97 | CONFIG_USB_DWC3=y | ||
98 | CONFIG_USB_PHY=y | ||
99 | CONFIG_SAMSUNG_USB2PHY=y | ||
100 | CONFIG_SAMSUNG_USB3PHY=y | ||
101 | CONFIG_MMC=y | ||
102 | CONFIG_MMC_SDHCI=y | ||
103 | CONFIG_MMC_SDHCI_S3C=y | ||
104 | CONFIG_MMC_DW=y | ||
105 | CONFIG_MMC_DW_IDMAC=y | ||
106 | CONFIG_MMC_DW_EXYNOS=y | ||
107 | CONFIG_COMMON_CLK_MAX77686=y | ||
70 | CONFIG_EXT2_FS=y | 108 | CONFIG_EXT2_FS=y |
71 | CONFIG_EXT3_FS=y | 109 | CONFIG_EXT3_FS=y |
72 | CONFIG_EXT4_FS=y | 110 | CONFIG_EXT4_FS=y |
@@ -79,6 +117,7 @@ CONFIG_ROMFS_FS=y | |||
79 | CONFIG_NLS_CODEPAGE_437=y | 117 | CONFIG_NLS_CODEPAGE_437=y |
80 | CONFIG_NLS_ASCII=y | 118 | CONFIG_NLS_ASCII=y |
81 | CONFIG_NLS_ISO8859_1=y | 119 | CONFIG_NLS_ISO8859_1=y |
120 | CONFIG_PRINTK_TIME=y | ||
82 | CONFIG_MAGIC_SYSRQ=y | 121 | CONFIG_MAGIC_SYSRQ=y |
83 | CONFIG_DEBUG_KERNEL=y | 122 | CONFIG_DEBUG_KERNEL=y |
84 | CONFIG_DETECT_HUNG_TASK=y | 123 | CONFIG_DETECT_HUNG_TASK=y |
@@ -87,6 +126,5 @@ CONFIG_DEBUG_SPINLOCK=y | |||
87 | CONFIG_DEBUG_MUTEXES=y | 126 | CONFIG_DEBUG_MUTEXES=y |
88 | CONFIG_DEBUG_INFO=y | 127 | CONFIG_DEBUG_INFO=y |
89 | CONFIG_DEBUG_USER=y | 128 | CONFIG_DEBUG_USER=y |
90 | CONFIG_DEBUG_LL=y | 129 | CONFIG_CRYPTO_SHA256=y |
91 | CONFIG_EARLY_PRINTK=y | ||
92 | CONFIG_CRC_CCITT=y | 130 | CONFIG_CRC_CCITT=y |
diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig index aa2100919ee5..769c0f039882 100644 --- a/arch/arm/configs/omap2plus_defconfig +++ b/arch/arm/configs/omap2plus_defconfig | |||
@@ -20,6 +20,7 @@ CONFIG_MODULE_FORCE_UNLOAD=y | |||
20 | CONFIG_MODVERSIONS=y | 20 | CONFIG_MODVERSIONS=y |
21 | CONFIG_MODULE_SRCVERSION_ALL=y | 21 | CONFIG_MODULE_SRCVERSION_ALL=y |
22 | # CONFIG_BLK_DEV_BSG is not set | 22 | # CONFIG_BLK_DEV_BSG is not set |
23 | CONFIG_ARCH_MULTI_V6=y | ||
23 | CONFIG_ARCH_OMAP2PLUS=y | 24 | CONFIG_ARCH_OMAP2PLUS=y |
24 | CONFIG_OMAP_RESET_CLOCKS=y | 25 | CONFIG_OMAP_RESET_CLOCKS=y |
25 | CONFIG_OMAP_MUX_DEBUG=y | 26 | CONFIG_OMAP_MUX_DEBUG=y |
diff --git a/arch/arm/configs/tegra_defconfig b/arch/arm/configs/tegra_defconfig index a5f0485133cf..f7ba316164d4 100644 --- a/arch/arm/configs/tegra_defconfig +++ b/arch/arm/configs/tegra_defconfig | |||
@@ -153,6 +153,7 @@ CONFIG_MEDIA_CAMERA_SUPPORT=y | |||
153 | CONFIG_MEDIA_USB_SUPPORT=y | 153 | CONFIG_MEDIA_USB_SUPPORT=y |
154 | CONFIG_USB_VIDEO_CLASS=m | 154 | CONFIG_USB_VIDEO_CLASS=m |
155 | CONFIG_DRM=y | 155 | CONFIG_DRM=y |
156 | CONFIG_TEGRA_HOST1X=y | ||
156 | CONFIG_DRM_TEGRA=y | 157 | CONFIG_DRM_TEGRA=y |
157 | CONFIG_BACKLIGHT_LCD_SUPPORT=y | 158 | CONFIG_BACKLIGHT_LCD_SUPPORT=y |
158 | # CONFIG_LCD_CLASS_DEVICE is not set | 159 | # CONFIG_LCD_CLASS_DEVICE is not set |
@@ -202,7 +203,7 @@ CONFIG_TEGRA20_APB_DMA=y | |||
202 | CONFIG_STAGING=y | 203 | CONFIG_STAGING=y |
203 | CONFIG_SENSORS_ISL29018=y | 204 | CONFIG_SENSORS_ISL29018=y |
204 | CONFIG_SENSORS_ISL29028=y | 205 | CONFIG_SENSORS_ISL29028=y |
205 | CONFIG_SENSORS_AK8975=y | 206 | CONFIG_AK8975=y |
206 | CONFIG_MFD_NVEC=y | 207 | CONFIG_MFD_NVEC=y |
207 | CONFIG_KEYBOARD_NVEC=y | 208 | CONFIG_KEYBOARD_NVEC=y |
208 | CONFIG_SERIO_NVEC_PS2=y | 209 | CONFIG_SERIO_NVEC_PS2=y |
diff --git a/arch/arm/crypto/sha1-armv4-large.S b/arch/arm/crypto/sha1-armv4-large.S index 92c6eed7aac9..99207c45ec10 100644 --- a/arch/arm/crypto/sha1-armv4-large.S +++ b/arch/arm/crypto/sha1-armv4-large.S | |||
@@ -195,6 +195,7 @@ ENTRY(sha1_block_data_order) | |||
195 | add r3,r3,r10 @ E+=F_00_19(B,C,D) | 195 | add r3,r3,r10 @ E+=F_00_19(B,C,D) |
196 | cmp r14,sp | 196 | cmp r14,sp |
197 | bne .L_00_15 @ [((11+4)*5+2)*3] | 197 | bne .L_00_15 @ [((11+4)*5+2)*3] |
198 | sub sp,sp,#25*4 | ||
198 | #if __ARM_ARCH__<7 | 199 | #if __ARM_ARCH__<7 |
199 | ldrb r10,[r1,#2] | 200 | ldrb r10,[r1,#2] |
200 | ldrb r9,[r1,#3] | 201 | ldrb r9,[r1,#3] |
@@ -290,7 +291,6 @@ ENTRY(sha1_block_data_order) | |||
290 | add r3,r3,r10 @ E+=F_00_19(B,C,D) | 291 | add r3,r3,r10 @ E+=F_00_19(B,C,D) |
291 | 292 | ||
292 | ldr r8,.LK_20_39 @ [+15+16*4] | 293 | ldr r8,.LK_20_39 @ [+15+16*4] |
293 | sub sp,sp,#25*4 | ||
294 | cmn sp,#0 @ [+3], clear carry to denote 20_39 | 294 | cmn sp,#0 @ [+3], clear carry to denote 20_39 |
295 | .L_20_39_or_60_79: | 295 | .L_20_39_or_60_79: |
296 | ldr r9,[r14,#15*4] | 296 | ldr r9,[r14,#15*4] |
diff --git a/arch/arm/include/debug/ux500.S b/arch/arm/include/debug/ux500.S index 2848857f5b62..fbd24beeb1fa 100644 --- a/arch/arm/include/debug/ux500.S +++ b/arch/arm/include/debug/ux500.S | |||
@@ -24,9 +24,9 @@ | |||
24 | #define U8500_UART0_PHYS_BASE (0x80120000) | 24 | #define U8500_UART0_PHYS_BASE (0x80120000) |
25 | #define U8500_UART1_PHYS_BASE (0x80121000) | 25 | #define U8500_UART1_PHYS_BASE (0x80121000) |
26 | #define U8500_UART2_PHYS_BASE (0x80007000) | 26 | #define U8500_UART2_PHYS_BASE (0x80007000) |
27 | #define U8500_UART0_VIRT_BASE (0xa8120000) | 27 | #define U8500_UART0_VIRT_BASE (0xf8120000) |
28 | #define U8500_UART1_VIRT_BASE (0xa8121000) | 28 | #define U8500_UART1_VIRT_BASE (0xf8121000) |
29 | #define U8500_UART2_VIRT_BASE (0xa8007000) | 29 | #define U8500_UART2_VIRT_BASE (0xf8007000) |
30 | #define __UX500_PHYS_UART(n) U8500_UART##n##_PHYS_BASE | 30 | #define __UX500_PHYS_UART(n) U8500_UART##n##_PHYS_BASE |
31 | #define __UX500_VIRT_UART(n) U8500_UART##n##_VIRT_BASE | 31 | #define __UX500_VIRT_UART(n) U8500_UART##n##_VIRT_BASE |
32 | #endif | 32 | #endif |
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index f21970316836..282de4826abb 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c | |||
@@ -411,7 +411,6 @@ static struct vm_area_struct gate_vma = { | |||
411 | .vm_start = 0xffff0000, | 411 | .vm_start = 0xffff0000, |
412 | .vm_end = 0xffff0000 + PAGE_SIZE, | 412 | .vm_end = 0xffff0000 + PAGE_SIZE, |
413 | .vm_flags = VM_READ | VM_EXEC | VM_MAYREAD | VM_MAYEXEC, | 413 | .vm_flags = VM_READ | VM_EXEC | VM_MAYREAD | VM_MAYEXEC, |
414 | .vm_mm = &init_mm, | ||
415 | }; | 414 | }; |
416 | 415 | ||
417 | static int __init gate_vma_init(void) | 416 | static int __init gate_vma_init(void) |
diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c index 37d216d814cd..ef1703b9587b 100644 --- a/arch/arm/kvm/arm.c +++ b/arch/arm/kvm/arm.c | |||
@@ -492,6 +492,11 @@ static void vcpu_pause(struct kvm_vcpu *vcpu) | |||
492 | wait_event_interruptible(*wq, !vcpu->arch.pause); | 492 | wait_event_interruptible(*wq, !vcpu->arch.pause); |
493 | } | 493 | } |
494 | 494 | ||
495 | static int kvm_vcpu_initialized(struct kvm_vcpu *vcpu) | ||
496 | { | ||
497 | return vcpu->arch.target >= 0; | ||
498 | } | ||
499 | |||
495 | /** | 500 | /** |
496 | * kvm_arch_vcpu_ioctl_run - the main VCPU run function to execute guest code | 501 | * kvm_arch_vcpu_ioctl_run - the main VCPU run function to execute guest code |
497 | * @vcpu: The VCPU pointer | 502 | * @vcpu: The VCPU pointer |
@@ -508,8 +513,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run) | |||
508 | int ret; | 513 | int ret; |
509 | sigset_t sigsaved; | 514 | sigset_t sigsaved; |
510 | 515 | ||
511 | /* Make sure they initialize the vcpu with KVM_ARM_VCPU_INIT */ | 516 | if (unlikely(!kvm_vcpu_initialized(vcpu))) |
512 | if (unlikely(vcpu->arch.target < 0)) | ||
513 | return -ENOEXEC; | 517 | return -ENOEXEC; |
514 | 518 | ||
515 | ret = kvm_vcpu_first_run_init(vcpu); | 519 | ret = kvm_vcpu_first_run_init(vcpu); |
@@ -710,6 +714,10 @@ long kvm_arch_vcpu_ioctl(struct file *filp, | |||
710 | case KVM_SET_ONE_REG: | 714 | case KVM_SET_ONE_REG: |
711 | case KVM_GET_ONE_REG: { | 715 | case KVM_GET_ONE_REG: { |
712 | struct kvm_one_reg reg; | 716 | struct kvm_one_reg reg; |
717 | |||
718 | if (unlikely(!kvm_vcpu_initialized(vcpu))) | ||
719 | return -ENOEXEC; | ||
720 | |||
713 | if (copy_from_user(®, argp, sizeof(reg))) | 721 | if (copy_from_user(®, argp, sizeof(reg))) |
714 | return -EFAULT; | 722 | return -EFAULT; |
715 | if (ioctl == KVM_SET_ONE_REG) | 723 | if (ioctl == KVM_SET_ONE_REG) |
@@ -722,6 +730,9 @@ long kvm_arch_vcpu_ioctl(struct file *filp, | |||
722 | struct kvm_reg_list reg_list; | 730 | struct kvm_reg_list reg_list; |
723 | unsigned n; | 731 | unsigned n; |
724 | 732 | ||
733 | if (unlikely(!kvm_vcpu_initialized(vcpu))) | ||
734 | return -ENOEXEC; | ||
735 | |||
725 | if (copy_from_user(®_list, user_list, sizeof(reg_list))) | 736 | if (copy_from_user(®_list, user_list, sizeof(reg_list))) |
726 | return -EFAULT; | 737 | return -EFAULT; |
727 | n = reg_list.n; | 738 | n = reg_list.n; |
diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c index 965706578f13..84ba67b982c0 100644 --- a/arch/arm/kvm/mmu.c +++ b/arch/arm/kvm/mmu.c | |||
@@ -43,7 +43,14 @@ static phys_addr_t hyp_idmap_vector; | |||
43 | 43 | ||
44 | static void kvm_tlb_flush_vmid_ipa(struct kvm *kvm, phys_addr_t ipa) | 44 | static void kvm_tlb_flush_vmid_ipa(struct kvm *kvm, phys_addr_t ipa) |
45 | { | 45 | { |
46 | kvm_call_hyp(__kvm_tlb_flush_vmid_ipa, kvm, ipa); | 46 | /* |
47 | * This function also gets called when dealing with HYP page | ||
48 | * tables. As HYP doesn't have an associated struct kvm (and | ||
49 | * the HYP page tables are fairly static), we don't do | ||
50 | * anything there. | ||
51 | */ | ||
52 | if (kvm) | ||
53 | kvm_call_hyp(__kvm_tlb_flush_vmid_ipa, kvm, ipa); | ||
47 | } | 54 | } |
48 | 55 | ||
49 | static int mmu_topup_memory_cache(struct kvm_mmu_memory_cache *cache, | 56 | static int mmu_topup_memory_cache(struct kvm_mmu_memory_cache *cache, |
@@ -78,18 +85,20 @@ static void *mmu_memory_cache_alloc(struct kvm_mmu_memory_cache *mc) | |||
78 | return p; | 85 | return p; |
79 | } | 86 | } |
80 | 87 | ||
81 | static void clear_pud_entry(pud_t *pud) | 88 | static void clear_pud_entry(struct kvm *kvm, pud_t *pud, phys_addr_t addr) |
82 | { | 89 | { |
83 | pmd_t *pmd_table = pmd_offset(pud, 0); | 90 | pmd_t *pmd_table = pmd_offset(pud, 0); |
84 | pud_clear(pud); | 91 | pud_clear(pud); |
92 | kvm_tlb_flush_vmid_ipa(kvm, addr); | ||
85 | pmd_free(NULL, pmd_table); | 93 | pmd_free(NULL, pmd_table); |
86 | put_page(virt_to_page(pud)); | 94 | put_page(virt_to_page(pud)); |
87 | } | 95 | } |
88 | 96 | ||
89 | static void clear_pmd_entry(pmd_t *pmd) | 97 | static void clear_pmd_entry(struct kvm *kvm, pmd_t *pmd, phys_addr_t addr) |
90 | { | 98 | { |
91 | pte_t *pte_table = pte_offset_kernel(pmd, 0); | 99 | pte_t *pte_table = pte_offset_kernel(pmd, 0); |
92 | pmd_clear(pmd); | 100 | pmd_clear(pmd); |
101 | kvm_tlb_flush_vmid_ipa(kvm, addr); | ||
93 | pte_free_kernel(NULL, pte_table); | 102 | pte_free_kernel(NULL, pte_table); |
94 | put_page(virt_to_page(pmd)); | 103 | put_page(virt_to_page(pmd)); |
95 | } | 104 | } |
@@ -100,11 +109,12 @@ static bool pmd_empty(pmd_t *pmd) | |||
100 | return page_count(pmd_page) == 1; | 109 | return page_count(pmd_page) == 1; |
101 | } | 110 | } |
102 | 111 | ||
103 | static void clear_pte_entry(pte_t *pte) | 112 | static void clear_pte_entry(struct kvm *kvm, pte_t *pte, phys_addr_t addr) |
104 | { | 113 | { |
105 | if (pte_present(*pte)) { | 114 | if (pte_present(*pte)) { |
106 | kvm_set_pte(pte, __pte(0)); | 115 | kvm_set_pte(pte, __pte(0)); |
107 | put_page(virt_to_page(pte)); | 116 | put_page(virt_to_page(pte)); |
117 | kvm_tlb_flush_vmid_ipa(kvm, addr); | ||
108 | } | 118 | } |
109 | } | 119 | } |
110 | 120 | ||
@@ -114,7 +124,8 @@ static bool pte_empty(pte_t *pte) | |||
114 | return page_count(pte_page) == 1; | 124 | return page_count(pte_page) == 1; |
115 | } | 125 | } |
116 | 126 | ||
117 | static void unmap_range(pgd_t *pgdp, unsigned long long start, u64 size) | 127 | static void unmap_range(struct kvm *kvm, pgd_t *pgdp, |
128 | unsigned long long start, u64 size) | ||
118 | { | 129 | { |
119 | pgd_t *pgd; | 130 | pgd_t *pgd; |
120 | pud_t *pud; | 131 | pud_t *pud; |
@@ -138,15 +149,15 @@ static void unmap_range(pgd_t *pgdp, unsigned long long start, u64 size) | |||
138 | } | 149 | } |
139 | 150 | ||
140 | pte = pte_offset_kernel(pmd, addr); | 151 | pte = pte_offset_kernel(pmd, addr); |
141 | clear_pte_entry(pte); | 152 | clear_pte_entry(kvm, pte, addr); |
142 | range = PAGE_SIZE; | 153 | range = PAGE_SIZE; |
143 | 154 | ||
144 | /* If we emptied the pte, walk back up the ladder */ | 155 | /* If we emptied the pte, walk back up the ladder */ |
145 | if (pte_empty(pte)) { | 156 | if (pte_empty(pte)) { |
146 | clear_pmd_entry(pmd); | 157 | clear_pmd_entry(kvm, pmd, addr); |
147 | range = PMD_SIZE; | 158 | range = PMD_SIZE; |
148 | if (pmd_empty(pmd)) { | 159 | if (pmd_empty(pmd)) { |
149 | clear_pud_entry(pud); | 160 | clear_pud_entry(kvm, pud, addr); |
150 | range = PUD_SIZE; | 161 | range = PUD_SIZE; |
151 | } | 162 | } |
152 | } | 163 | } |
@@ -165,14 +176,14 @@ void free_boot_hyp_pgd(void) | |||
165 | mutex_lock(&kvm_hyp_pgd_mutex); | 176 | mutex_lock(&kvm_hyp_pgd_mutex); |
166 | 177 | ||
167 | if (boot_hyp_pgd) { | 178 | if (boot_hyp_pgd) { |
168 | unmap_range(boot_hyp_pgd, hyp_idmap_start, PAGE_SIZE); | 179 | unmap_range(NULL, boot_hyp_pgd, hyp_idmap_start, PAGE_SIZE); |
169 | unmap_range(boot_hyp_pgd, TRAMPOLINE_VA, PAGE_SIZE); | 180 | unmap_range(NULL, boot_hyp_pgd, TRAMPOLINE_VA, PAGE_SIZE); |
170 | kfree(boot_hyp_pgd); | 181 | kfree(boot_hyp_pgd); |
171 | boot_hyp_pgd = NULL; | 182 | boot_hyp_pgd = NULL; |
172 | } | 183 | } |
173 | 184 | ||
174 | if (hyp_pgd) | 185 | if (hyp_pgd) |
175 | unmap_range(hyp_pgd, TRAMPOLINE_VA, PAGE_SIZE); | 186 | unmap_range(NULL, hyp_pgd, TRAMPOLINE_VA, PAGE_SIZE); |
176 | 187 | ||
177 | kfree(init_bounce_page); | 188 | kfree(init_bounce_page); |
178 | init_bounce_page = NULL; | 189 | init_bounce_page = NULL; |
@@ -200,9 +211,10 @@ void free_hyp_pgds(void) | |||
200 | 211 | ||
201 | if (hyp_pgd) { | 212 | if (hyp_pgd) { |
202 | for (addr = PAGE_OFFSET; virt_addr_valid(addr); addr += PGDIR_SIZE) | 213 | for (addr = PAGE_OFFSET; virt_addr_valid(addr); addr += PGDIR_SIZE) |
203 | unmap_range(hyp_pgd, KERN_TO_HYP(addr), PGDIR_SIZE); | 214 | unmap_range(NULL, hyp_pgd, KERN_TO_HYP(addr), PGDIR_SIZE); |
204 | for (addr = VMALLOC_START; is_vmalloc_addr((void*)addr); addr += PGDIR_SIZE) | 215 | for (addr = VMALLOC_START; is_vmalloc_addr((void*)addr); addr += PGDIR_SIZE) |
205 | unmap_range(hyp_pgd, KERN_TO_HYP(addr), PGDIR_SIZE); | 216 | unmap_range(NULL, hyp_pgd, KERN_TO_HYP(addr), PGDIR_SIZE); |
217 | |||
206 | kfree(hyp_pgd); | 218 | kfree(hyp_pgd); |
207 | hyp_pgd = NULL; | 219 | hyp_pgd = NULL; |
208 | } | 220 | } |
@@ -393,7 +405,7 @@ int kvm_alloc_stage2_pgd(struct kvm *kvm) | |||
393 | */ | 405 | */ |
394 | static void unmap_stage2_range(struct kvm *kvm, phys_addr_t start, u64 size) | 406 | static void unmap_stage2_range(struct kvm *kvm, phys_addr_t start, u64 size) |
395 | { | 407 | { |
396 | unmap_range(kvm->arch.pgd, start, size); | 408 | unmap_range(kvm, kvm->arch.pgd, start, size); |
397 | } | 409 | } |
398 | 410 | ||
399 | /** | 411 | /** |
@@ -675,7 +687,6 @@ static void handle_hva_to_gpa(struct kvm *kvm, | |||
675 | static void kvm_unmap_hva_handler(struct kvm *kvm, gpa_t gpa, void *data) | 687 | static void kvm_unmap_hva_handler(struct kvm *kvm, gpa_t gpa, void *data) |
676 | { | 688 | { |
677 | unmap_stage2_range(kvm, gpa, PAGE_SIZE); | 689 | unmap_stage2_range(kvm, gpa, PAGE_SIZE); |
678 | kvm_tlb_flush_vmid_ipa(kvm, gpa); | ||
679 | } | 690 | } |
680 | 691 | ||
681 | int kvm_unmap_hva(struct kvm *kvm, unsigned long hva) | 692 | int kvm_unmap_hva(struct kvm *kvm, unsigned long hva) |
diff --git a/arch/arm/mach-at91/at91rm9200_time.c b/arch/arm/mach-at91/at91rm9200_time.c index 2acdff4c1dfe..180b3024bec3 100644 --- a/arch/arm/mach-at91/at91rm9200_time.c +++ b/arch/arm/mach-at91/at91rm9200_time.c | |||
@@ -174,6 +174,7 @@ clkevt32k_next_event(unsigned long delta, struct clock_event_device *dev) | |||
174 | static struct clock_event_device clkevt = { | 174 | static struct clock_event_device clkevt = { |
175 | .name = "at91_tick", | 175 | .name = "at91_tick", |
176 | .features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT, | 176 | .features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT, |
177 | .shift = 32, | ||
177 | .rating = 150, | 178 | .rating = 150, |
178 | .set_next_event = clkevt32k_next_event, | 179 | .set_next_event = clkevt32k_next_event, |
179 | .set_mode = clkevt32k_mode, | 180 | .set_mode = clkevt32k_mode, |
@@ -264,9 +265,11 @@ void __init at91rm9200_timer_init(void) | |||
264 | at91_st_write(AT91_ST_RTMR, 1); | 265 | at91_st_write(AT91_ST_RTMR, 1); |
265 | 266 | ||
266 | /* Setup timer clockevent, with minimum of two ticks (important!!) */ | 267 | /* Setup timer clockevent, with minimum of two ticks (important!!) */ |
268 | clkevt.mult = div_sc(AT91_SLOW_CLOCK, NSEC_PER_SEC, clkevt.shift); | ||
269 | clkevt.max_delta_ns = clockevent_delta2ns(AT91_ST_ALMV, &clkevt); | ||
270 | clkevt.min_delta_ns = clockevent_delta2ns(2, &clkevt) + 1; | ||
267 | clkevt.cpumask = cpumask_of(0); | 271 | clkevt.cpumask = cpumask_of(0); |
268 | clockevents_config_and_register(&clkevt, AT91_SLOW_CLOCK, | 272 | clockevents_register_device(&clkevt); |
269 | 2, AT91_ST_ALMV); | ||
270 | 273 | ||
271 | /* register clocksource */ | 274 | /* register clocksource */ |
272 | clocksource_register_hz(&clk32k, AT91_SLOW_CLOCK); | 275 | clocksource_register_hz(&clk32k, AT91_SLOW_CLOCK); |
diff --git a/arch/arm/mach-at91/at91sam9n12.c b/arch/arm/mach-at91/at91sam9n12.c index 13cdbcd48f51..c7d670d11802 100644 --- a/arch/arm/mach-at91/at91sam9n12.c +++ b/arch/arm/mach-at91/at91sam9n12.c | |||
@@ -223,13 +223,7 @@ static void __init at91sam9n12_map_io(void) | |||
223 | at91_init_sram(0, AT91SAM9N12_SRAM_BASE, AT91SAM9N12_SRAM_SIZE); | 223 | at91_init_sram(0, AT91SAM9N12_SRAM_BASE, AT91SAM9N12_SRAM_SIZE); |
224 | } | 224 | } |
225 | 225 | ||
226 | void __init at91sam9n12_initialize(void) | ||
227 | { | ||
228 | at91_extern_irq = (1 << AT91SAM9N12_ID_IRQ0); | ||
229 | } | ||
230 | |||
231 | AT91_SOC_START(at91sam9n12) | 226 | AT91_SOC_START(at91sam9n12) |
232 | .map_io = at91sam9n12_map_io, | 227 | .map_io = at91sam9n12_map_io, |
233 | .register_clocks = at91sam9n12_register_clocks, | 228 | .register_clocks = at91sam9n12_register_clocks, |
234 | .init = at91sam9n12_initialize, | ||
235 | AT91_SOC_END | 229 | AT91_SOC_END |
diff --git a/arch/arm/mach-at91/include/mach/at91_pmc.h b/arch/arm/mach-at91/include/mach/at91_pmc.h index 31df12029c4e..2bd7f51b0b82 100644 --- a/arch/arm/mach-at91/include/mach/at91_pmc.h +++ b/arch/arm/mach-at91/include/mach/at91_pmc.h | |||
@@ -179,9 +179,9 @@ extern void __iomem *at91_pmc_base; | |||
179 | #define AT91_PMC_PCR_CMD (0x1 << 12) /* Command (read=0, write=1) */ | 179 | #define AT91_PMC_PCR_CMD (0x1 << 12) /* Command (read=0, write=1) */ |
180 | #define AT91_PMC_PCR_DIV(n) ((n) << 16) /* Divisor Value */ | 180 | #define AT91_PMC_PCR_DIV(n) ((n) << 16) /* Divisor Value */ |
181 | #define AT91_PMC_PCR_DIV0 0x0 /* Peripheral clock is MCK */ | 181 | #define AT91_PMC_PCR_DIV0 0x0 /* Peripheral clock is MCK */ |
182 | #define AT91_PMC_PCR_DIV2 0x2 /* Peripheral clock is MCK/2 */ | 182 | #define AT91_PMC_PCR_DIV2 0x1 /* Peripheral clock is MCK/2 */ |
183 | #define AT91_PMC_PCR_DIV4 0x4 /* Peripheral clock is MCK/4 */ | 183 | #define AT91_PMC_PCR_DIV4 0x2 /* Peripheral clock is MCK/4 */ |
184 | #define AT91_PMC_PCR_DIV8 0x8 /* Peripheral clock is MCK/8 */ | 184 | #define AT91_PMC_PCR_DIV8 0x3 /* Peripheral clock is MCK/8 */ |
185 | #define AT91_PMC_PCR_EN (0x1 << 28) /* Enable */ | 185 | #define AT91_PMC_PCR_EN (0x1 << 28) /* Enable */ |
186 | 186 | ||
187 | #endif | 187 | #endif |
diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig index d19edff0ea6e..ff18fc2ea46f 100644 --- a/arch/arm/mach-exynos/Kconfig +++ b/arch/arm/mach-exynos/Kconfig | |||
@@ -250,6 +250,7 @@ config MACH_ARMLEX4210 | |||
250 | config MACH_UNIVERSAL_C210 | 250 | config MACH_UNIVERSAL_C210 |
251 | bool "Mobile UNIVERSAL_C210 Board" | 251 | bool "Mobile UNIVERSAL_C210 Board" |
252 | select CLKSRC_MMIO | 252 | select CLKSRC_MMIO |
253 | select CLKSRC_SAMSUNG_PWM | ||
253 | select CPU_EXYNOS4210 | 254 | select CPU_EXYNOS4210 |
254 | select EXYNOS4_SETUP_FIMC | 255 | select EXYNOS4_SETUP_FIMC |
255 | select EXYNOS4_SETUP_FIMD0 | 256 | select EXYNOS4_SETUP_FIMD0 |
@@ -281,7 +282,6 @@ config MACH_UNIVERSAL_C210 | |||
281 | select S5P_DEV_TV | 282 | select S5P_DEV_TV |
282 | select S5P_GPIO_INT | 283 | select S5P_GPIO_INT |
283 | select S5P_SETUP_MIPIPHY | 284 | select S5P_SETUP_MIPIPHY |
284 | select SAMSUNG_HRT | ||
285 | help | 285 | help |
286 | Machine support for Samsung Mobile Universal S5PC210 Reference | 286 | Machine support for Samsung Mobile Universal S5PC210 Reference |
287 | Board. | 287 | Board. |
@@ -410,6 +410,7 @@ config MACH_EXYNOS4_DT | |||
410 | depends on ARCH_EXYNOS4 | 410 | depends on ARCH_EXYNOS4 |
411 | select ARM_AMBA | 411 | select ARM_AMBA |
412 | select CLKSRC_OF | 412 | select CLKSRC_OF |
413 | select CLKSRC_SAMSUNG_PWM if CPU_EXYNOS4210 | ||
413 | select CPU_EXYNOS4210 | 414 | select CPU_EXYNOS4210 |
414 | select KEYBOARD_SAMSUNG if INPUT_KEYBOARD | 415 | select KEYBOARD_SAMSUNG if INPUT_KEYBOARD |
415 | select PINCTRL | 416 | select PINCTRL |
diff --git a/arch/arm/mach-exynos/common.c b/arch/arm/mach-exynos/common.c index 745e304ad0de..027c9e7f0d13 100644 --- a/arch/arm/mach-exynos/common.c +++ b/arch/arm/mach-exynos/common.c | |||
@@ -10,12 +10,14 @@ | |||
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include <linux/kernel.h> | 12 | #include <linux/kernel.h> |
13 | #include <linux/bitops.h> | ||
13 | #include <linux/interrupt.h> | 14 | #include <linux/interrupt.h> |
14 | #include <linux/irq.h> | 15 | #include <linux/irq.h> |
15 | #include <linux/irqchip.h> | 16 | #include <linux/irqchip.h> |
16 | #include <linux/io.h> | 17 | #include <linux/io.h> |
17 | #include <linux/device.h> | 18 | #include <linux/device.h> |
18 | #include <linux/gpio.h> | 19 | #include <linux/gpio.h> |
20 | #include <clocksource/samsung_pwm.h> | ||
19 | #include <linux/sched.h> | 21 | #include <linux/sched.h> |
20 | #include <linux/serial_core.h> | 22 | #include <linux/serial_core.h> |
21 | #include <linux/of.h> | 23 | #include <linux/of.h> |
@@ -302,6 +304,13 @@ static struct map_desc exynos5440_iodesc0[] __initdata = { | |||
302 | }, | 304 | }, |
303 | }; | 305 | }; |
304 | 306 | ||
307 | static struct samsung_pwm_variant exynos4_pwm_variant = { | ||
308 | .bits = 32, | ||
309 | .div_base = 0, | ||
310 | .has_tint_cstat = true, | ||
311 | .tclk_mask = 0, | ||
312 | }; | ||
313 | |||
305 | void exynos4_restart(char mode, const char *cmd) | 314 | void exynos4_restart(char mode, const char *cmd) |
306 | { | 315 | { |
307 | __raw_writel(0x1, S5P_SWRESET); | 316 | __raw_writel(0x1, S5P_SWRESET); |
@@ -317,9 +326,16 @@ void exynos5_restart(char mode, const char *cmd) | |||
317 | val = 0x1; | 326 | val = 0x1; |
318 | addr = EXYNOS_SWRESET; | 327 | addr = EXYNOS_SWRESET; |
319 | } else if (of_machine_is_compatible("samsung,exynos5440")) { | 328 | } else if (of_machine_is_compatible("samsung,exynos5440")) { |
329 | u32 status; | ||
320 | np = of_find_compatible_node(NULL, NULL, "samsung,exynos5440-clock"); | 330 | np = of_find_compatible_node(NULL, NULL, "samsung,exynos5440-clock"); |
331 | |||
332 | addr = of_iomap(np, 0) + 0xbc; | ||
333 | status = __raw_readl(addr); | ||
334 | |||
321 | addr = of_iomap(np, 0) + 0xcc; | 335 | addr = of_iomap(np, 0) + 0xcc; |
322 | val = (0xfff << 20) | (0x1 << 16); | 336 | val = __raw_readl(addr); |
337 | |||
338 | val = (val & 0xffff0000) | (status & 0xffff); | ||
323 | } else { | 339 | } else { |
324 | pr_err("%s: cannot support non-DT\n", __func__); | 340 | pr_err("%s: cannot support non-DT\n", __func__); |
325 | return; | 341 | return; |
@@ -442,8 +458,20 @@ static void __init exynos5440_map_io(void) | |||
442 | iotable_init(exynos5440_iodesc0, ARRAY_SIZE(exynos5440_iodesc0)); | 458 | iotable_init(exynos5440_iodesc0, ARRAY_SIZE(exynos5440_iodesc0)); |
443 | } | 459 | } |
444 | 460 | ||
461 | void __init exynos_set_timer_source(u8 channels) | ||
462 | { | ||
463 | exynos4_pwm_variant.output_mask = BIT(SAMSUNG_PWM_NUM) - 1; | ||
464 | exynos4_pwm_variant.output_mask &= ~channels; | ||
465 | } | ||
466 | |||
445 | void __init exynos_init_time(void) | 467 | void __init exynos_init_time(void) |
446 | { | 468 | { |
469 | unsigned int timer_irqs[SAMSUNG_PWM_NUM] = { | ||
470 | EXYNOS4_IRQ_TIMER0_VIC, EXYNOS4_IRQ_TIMER1_VIC, | ||
471 | EXYNOS4_IRQ_TIMER2_VIC, EXYNOS4_IRQ_TIMER3_VIC, | ||
472 | EXYNOS4_IRQ_TIMER4_VIC, | ||
473 | }; | ||
474 | |||
447 | if (of_have_populated_dt()) { | 475 | if (of_have_populated_dt()) { |
448 | #ifdef CONFIG_OF | 476 | #ifdef CONFIG_OF |
449 | of_clk_init(NULL); | 477 | of_clk_init(NULL); |
@@ -455,7 +483,14 @@ void __init exynos_init_time(void) | |||
455 | exynos4_clk_init(NULL, !soc_is_exynos4210(), S5P_VA_CMU, readl(S5P_VA_CHIPID + 8) & 1); | 483 | exynos4_clk_init(NULL, !soc_is_exynos4210(), S5P_VA_CMU, readl(S5P_VA_CHIPID + 8) & 1); |
456 | exynos4_clk_register_fixed_ext(xxti_f, xusbxti_f); | 484 | exynos4_clk_register_fixed_ext(xxti_f, xusbxti_f); |
457 | #endif | 485 | #endif |
458 | mct_init(S5P_VA_SYSTIMER, EXYNOS4_IRQ_MCT_G0, EXYNOS4_IRQ_MCT_L0, EXYNOS4_IRQ_MCT_L1); | 486 | #ifdef CONFIG_CLKSRC_SAMSUNG_PWM |
487 | if (soc_is_exynos4210() && samsung_rev() == EXYNOS4210_REV_0) | ||
488 | samsung_pwm_clocksource_init(S3C_VA_TIMER, | ||
489 | timer_irqs, &exynos4_pwm_variant); | ||
490 | else | ||
491 | #endif | ||
492 | mct_init(S5P_VA_SYSTIMER, EXYNOS4_IRQ_MCT_G0, | ||
493 | EXYNOS4_IRQ_MCT_L0, EXYNOS4_IRQ_MCT_L1); | ||
459 | } | 494 | } |
460 | } | 495 | } |
461 | 496 | ||
diff --git a/arch/arm/mach-exynos/common.h b/arch/arm/mach-exynos/common.h index 60dd35cc01a6..11fc1e29819b 100644 --- a/arch/arm/mach-exynos/common.h +++ b/arch/arm/mach-exynos/common.h | |||
@@ -32,6 +32,8 @@ void exynos4_clk_register_fixed_ext(unsigned long, unsigned long); | |||
32 | 32 | ||
33 | void exynos_firmware_init(void); | 33 | void exynos_firmware_init(void); |
34 | 34 | ||
35 | void exynos_set_timer_source(u8 channels); | ||
36 | |||
35 | #ifdef CONFIG_PM_GENERIC_DOMAINS | 37 | #ifdef CONFIG_PM_GENERIC_DOMAINS |
36 | int exynos_pm_late_initcall(void); | 38 | int exynos_pm_late_initcall(void); |
37 | #else | 39 | #else |
diff --git a/arch/arm/mach-exynos/include/mach/pm-core.h b/arch/arm/mach-exynos/include/mach/pm-core.h index 7dbbfec13ea5..296090e7f423 100644 --- a/arch/arm/mach-exynos/include/mach/pm-core.h +++ b/arch/arm/mach-exynos/include/mach/pm-core.h | |||
@@ -18,8 +18,15 @@ | |||
18 | #ifndef __ASM_ARCH_PM_CORE_H | 18 | #ifndef __ASM_ARCH_PM_CORE_H |
19 | #define __ASM_ARCH_PM_CORE_H __FILE__ | 19 | #define __ASM_ARCH_PM_CORE_H __FILE__ |
20 | 20 | ||
21 | #include <linux/of.h> | ||
21 | #include <mach/regs-pmu.h> | 22 | #include <mach/regs-pmu.h> |
22 | 23 | ||
24 | #ifdef CONFIG_PINCTRL_EXYNOS | ||
25 | extern u32 exynos_get_eint_wake_mask(void); | ||
26 | #else | ||
27 | static inline u32 exynos_get_eint_wake_mask(void) { return 0xffffffff; } | ||
28 | #endif | ||
29 | |||
23 | static inline void s3c_pm_debug_init_uart(void) | 30 | static inline void s3c_pm_debug_init_uart(void) |
24 | { | 31 | { |
25 | /* nothing here yet */ | 32 | /* nothing here yet */ |
@@ -27,7 +34,12 @@ static inline void s3c_pm_debug_init_uart(void) | |||
27 | 34 | ||
28 | static inline void s3c_pm_arch_prepare_irqs(void) | 35 | static inline void s3c_pm_arch_prepare_irqs(void) |
29 | { | 36 | { |
30 | __raw_writel(s3c_irqwake_eintmask, S5P_EINT_WAKEUP_MASK); | 37 | u32 eintmask = s3c_irqwake_eintmask; |
38 | |||
39 | if (of_have_populated_dt()) | ||
40 | eintmask = exynos_get_eint_wake_mask(); | ||
41 | |||
42 | __raw_writel(eintmask, S5P_EINT_WAKEUP_MASK); | ||
31 | __raw_writel(s3c_irqwake_intmask & ~(1 << 31), S5P_WAKEUP_MASK); | 43 | __raw_writel(s3c_irqwake_intmask & ~(1 << 31), S5P_WAKEUP_MASK); |
32 | } | 44 | } |
33 | 45 | ||
diff --git a/arch/arm/mach-exynos/mach-universal_c210.c b/arch/arm/mach-exynos/mach-universal_c210.c index 327d50d4681d..74ddb2b55614 100644 --- a/arch/arm/mach-exynos/mach-universal_c210.c +++ b/arch/arm/mach-exynos/mach-universal_c210.c | |||
@@ -41,7 +41,6 @@ | |||
41 | #include <plat/mfc.h> | 41 | #include <plat/mfc.h> |
42 | #include <plat/sdhci.h> | 42 | #include <plat/sdhci.h> |
43 | #include <plat/fimc-core.h> | 43 | #include <plat/fimc-core.h> |
44 | #include <plat/samsung-time.h> | ||
45 | #include <plat/camport.h> | 44 | #include <plat/camport.h> |
46 | 45 | ||
47 | #include <mach/map.h> | 46 | #include <mach/map.h> |
@@ -1094,7 +1093,7 @@ static void __init universal_map_io(void) | |||
1094 | { | 1093 | { |
1095 | exynos_init_io(NULL, 0); | 1094 | exynos_init_io(NULL, 0); |
1096 | s3c24xx_init_uarts(universal_uartcfgs, ARRAY_SIZE(universal_uartcfgs)); | 1095 | s3c24xx_init_uarts(universal_uartcfgs, ARRAY_SIZE(universal_uartcfgs)); |
1097 | samsung_set_timer_source(SAMSUNG_PWM2, SAMSUNG_PWM4); | 1096 | exynos_set_timer_source(BIT(2) | BIT(4)); |
1098 | xxti_f = 0; | 1097 | xxti_f = 0; |
1099 | xusbxti_f = 24000000; | 1098 | xusbxti_f = 24000000; |
1100 | } | 1099 | } |
@@ -1154,7 +1153,7 @@ MACHINE_START(UNIVERSAL_C210, "UNIVERSAL_C210") | |||
1154 | .map_io = universal_map_io, | 1153 | .map_io = universal_map_io, |
1155 | .init_machine = universal_machine_init, | 1154 | .init_machine = universal_machine_init, |
1156 | .init_late = exynos_init_late, | 1155 | .init_late = exynos_init_late, |
1157 | .init_time = samsung_timer_init, | 1156 | .init_time = exynos_init_time, |
1158 | .reserve = &universal_reserve, | 1157 | .reserve = &universal_reserve, |
1159 | .restart = exynos4_restart, | 1158 | .restart = exynos4_restart, |
1160 | MACHINE_END | 1159 | MACHINE_END |
diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c index 151259003086..dda9a2bd3acb 100644 --- a/arch/arm/mach-imx/clk-imx6q.c +++ b/arch/arm/mach-imx/clk-imx6q.c | |||
@@ -177,7 +177,8 @@ int imx6q_set_lpm(enum mxc_cpu_pwr_mode mode) | |||
177 | static const char *step_sels[] = { "osc", "pll2_pfd2_396m", }; | 177 | static const char *step_sels[] = { "osc", "pll2_pfd2_396m", }; |
178 | static const char *pll1_sw_sels[] = { "pll1_sys", "step", }; | 178 | static const char *pll1_sw_sels[] = { "pll1_sys", "step", }; |
179 | static const char *periph_pre_sels[] = { "pll2_bus", "pll2_pfd2_396m", "pll2_pfd0_352m", "pll2_198m", }; | 179 | static const char *periph_pre_sels[] = { "pll2_bus", "pll2_pfd2_396m", "pll2_pfd0_352m", "pll2_198m", }; |
180 | static const char *periph_clk2_sels[] = { "pll3_usb_otg", "osc", }; | 180 | static const char *periph_clk2_sels[] = { "pll3_usb_otg", "osc", "osc", "dummy", }; |
181 | static const char *periph2_clk2_sels[] = { "pll3_usb_otg", "pll2_bus", }; | ||
181 | static const char *periph_sels[] = { "periph_pre", "periph_clk2", }; | 182 | static const char *periph_sels[] = { "periph_pre", "periph_clk2", }; |
182 | static const char *periph2_sels[] = { "periph2_pre", "periph2_clk2", }; | 183 | static const char *periph2_sels[] = { "periph2_pre", "periph2_clk2", }; |
183 | static const char *axi_sels[] = { "periph", "pll2_pfd2_396m", "pll3_pfd1_540m", }; | 184 | static const char *axi_sels[] = { "periph", "pll2_pfd2_396m", "pll3_pfd1_540m", }; |
@@ -185,7 +186,7 @@ static const char *audio_sels[] = { "pll4_post_div", "pll3_pfd2_508m", "pll3_pfd | |||
185 | static const char *gpu_axi_sels[] = { "axi", "ahb", }; | 186 | static const char *gpu_axi_sels[] = { "axi", "ahb", }; |
186 | static const char *gpu2d_core_sels[] = { "axi", "pll3_usb_otg", "pll2_pfd0_352m", "pll2_pfd2_396m", }; | 187 | static const char *gpu2d_core_sels[] = { "axi", "pll3_usb_otg", "pll2_pfd0_352m", "pll2_pfd2_396m", }; |
187 | static const char *gpu3d_core_sels[] = { "mmdc_ch0_axi", "pll3_usb_otg", "pll2_pfd1_594m", "pll2_pfd2_396m", }; | 188 | static const char *gpu3d_core_sels[] = { "mmdc_ch0_axi", "pll3_usb_otg", "pll2_pfd1_594m", "pll2_pfd2_396m", }; |
188 | static const char *gpu3d_shader_sels[] = { "mmdc_ch0_axi", "pll3_usb_otg", "pll2_pfd1_594m", "pll2_pfd9_720m", }; | 189 | static const char *gpu3d_shader_sels[] = { "mmdc_ch0_axi", "pll3_usb_otg", "pll2_pfd1_594m", "pll3_pfd0_720m", }; |
189 | static const char *ipu_sels[] = { "mmdc_ch0_axi", "pll2_pfd2_396m", "pll3_120m", "pll3_pfd1_540m", }; | 190 | static const char *ipu_sels[] = { "mmdc_ch0_axi", "pll2_pfd2_396m", "pll3_120m", "pll3_pfd1_540m", }; |
190 | static const char *ldb_di_sels[] = { "pll5_video", "pll2_pfd0_352m", "pll2_pfd2_396m", "mmdc_ch1_axi", "pll3_usb_otg", }; | 191 | static const char *ldb_di_sels[] = { "pll5_video", "pll2_pfd0_352m", "pll2_pfd2_396m", "mmdc_ch1_axi", "pll3_usb_otg", }; |
191 | static const char *ipu_di_pre_sels[] = { "mmdc_ch0_axi", "pll3_usb_otg", "pll5_video_div", "pll2_pfd0_352m", "pll2_pfd2_396m", "pll3_pfd1_540m", }; | 192 | static const char *ipu_di_pre_sels[] = { "mmdc_ch0_axi", "pll3_usb_otg", "pll5_video_div", "pll2_pfd0_352m", "pll2_pfd2_396m", "pll3_pfd1_540m", }; |
@@ -369,8 +370,8 @@ int __init mx6q_clocks_init(void) | |||
369 | clk[pll1_sw] = imx_clk_mux("pll1_sw", base + 0xc, 2, 1, pll1_sw_sels, ARRAY_SIZE(pll1_sw_sels)); | 370 | clk[pll1_sw] = imx_clk_mux("pll1_sw", base + 0xc, 2, 1, pll1_sw_sels, ARRAY_SIZE(pll1_sw_sels)); |
370 | clk[periph_pre] = imx_clk_mux("periph_pre", base + 0x18, 18, 2, periph_pre_sels, ARRAY_SIZE(periph_pre_sels)); | 371 | clk[periph_pre] = imx_clk_mux("periph_pre", base + 0x18, 18, 2, periph_pre_sels, ARRAY_SIZE(periph_pre_sels)); |
371 | clk[periph2_pre] = imx_clk_mux("periph2_pre", base + 0x18, 21, 2, periph_pre_sels, ARRAY_SIZE(periph_pre_sels)); | 372 | clk[periph2_pre] = imx_clk_mux("periph2_pre", base + 0x18, 21, 2, periph_pre_sels, ARRAY_SIZE(periph_pre_sels)); |
372 | clk[periph_clk2_sel] = imx_clk_mux("periph_clk2_sel", base + 0x18, 12, 1, periph_clk2_sels, ARRAY_SIZE(periph_clk2_sels)); | 373 | clk[periph_clk2_sel] = imx_clk_mux("periph_clk2_sel", base + 0x18, 12, 2, periph_clk2_sels, ARRAY_SIZE(periph_clk2_sels)); |
373 | clk[periph2_clk2_sel] = imx_clk_mux("periph2_clk2_sel", base + 0x18, 20, 1, periph_clk2_sels, ARRAY_SIZE(periph_clk2_sels)); | 374 | clk[periph2_clk2_sel] = imx_clk_mux("periph2_clk2_sel", base + 0x18, 20, 1, periph2_clk2_sels, ARRAY_SIZE(periph2_clk2_sels)); |
374 | clk[axi_sel] = imx_clk_mux("axi_sel", base + 0x14, 6, 2, axi_sels, ARRAY_SIZE(axi_sels)); | 375 | clk[axi_sel] = imx_clk_mux("axi_sel", base + 0x14, 6, 2, axi_sels, ARRAY_SIZE(axi_sels)); |
375 | clk[esai_sel] = imx_clk_mux("esai_sel", base + 0x20, 19, 2, audio_sels, ARRAY_SIZE(audio_sels)); | 376 | clk[esai_sel] = imx_clk_mux("esai_sel", base + 0x20, 19, 2, audio_sels, ARRAY_SIZE(audio_sels)); |
376 | clk[asrc_sel] = imx_clk_mux("asrc_sel", base + 0x30, 7, 2, audio_sels, ARRAY_SIZE(audio_sels)); | 377 | clk[asrc_sel] = imx_clk_mux("asrc_sel", base + 0x30, 7, 2, audio_sels, ARRAY_SIZE(audio_sels)); |
@@ -498,7 +499,7 @@ int __init mx6q_clocks_init(void) | |||
498 | clk[ldb_di1] = imx_clk_gate2("ldb_di1", "ldb_di1_podf", base + 0x74, 14); | 499 | clk[ldb_di1] = imx_clk_gate2("ldb_di1", "ldb_di1_podf", base + 0x74, 14); |
499 | clk[ipu2_di1] = imx_clk_gate2("ipu2_di1", "ipu2_di1_sel", base + 0x74, 10); | 500 | clk[ipu2_di1] = imx_clk_gate2("ipu2_di1", "ipu2_di1_sel", base + 0x74, 10); |
500 | clk[hsi_tx] = imx_clk_gate2("hsi_tx", "hsi_tx_podf", base + 0x74, 16); | 501 | clk[hsi_tx] = imx_clk_gate2("hsi_tx", "hsi_tx_podf", base + 0x74, 16); |
501 | clk[mlb] = imx_clk_gate2("mlb", "pll8_mlb", base + 0x74, 18); | 502 | clk[mlb] = imx_clk_gate2("mlb", "axi", base + 0x74, 18); |
502 | clk[mmdc_ch0_axi] = imx_clk_gate2("mmdc_ch0_axi", "mmdc_ch0_axi_podf", base + 0x74, 20); | 503 | clk[mmdc_ch0_axi] = imx_clk_gate2("mmdc_ch0_axi", "mmdc_ch0_axi_podf", base + 0x74, 20); |
503 | clk[mmdc_ch1_axi] = imx_clk_gate2("mmdc_ch1_axi", "mmdc_ch1_axi_podf", base + 0x74, 22); | 504 | clk[mmdc_ch1_axi] = imx_clk_gate2("mmdc_ch1_axi", "mmdc_ch1_axi_podf", base + 0x74, 22); |
504 | clk[ocram] = imx_clk_gate2("ocram", "ahb", base + 0x74, 28); | 505 | clk[ocram] = imx_clk_gate2("ocram", "ahb", base + 0x74, 28); |
diff --git a/arch/arm/mach-imx/headsmp.S b/arch/arm/mach-imx/headsmp.S index 67b9c48dcafe..627f16f0e9d1 100644 --- a/arch/arm/mach-imx/headsmp.S +++ b/arch/arm/mach-imx/headsmp.S | |||
@@ -18,8 +18,20 @@ | |||
18 | .section ".text.head", "ax" | 18 | .section ".text.head", "ax" |
19 | 19 | ||
20 | #ifdef CONFIG_SMP | 20 | #ifdef CONFIG_SMP |
21 | diag_reg_offset: | ||
22 | .word g_diag_reg - . | ||
23 | |||
24 | .macro set_diag_reg | ||
25 | adr r0, diag_reg_offset | ||
26 | ldr r1, [r0] | ||
27 | add r1, r1, r0 @ r1 = physical &g_diag_reg | ||
28 | ldr r0, [r1] | ||
29 | mcr p15, 0, r0, c15, c0, 1 @ write diagnostic register | ||
30 | .endm | ||
31 | |||
21 | ENTRY(v7_secondary_startup) | 32 | ENTRY(v7_secondary_startup) |
22 | bl v7_invalidate_l1 | 33 | bl v7_invalidate_l1 |
34 | set_diag_reg | ||
23 | b secondary_startup | 35 | b secondary_startup |
24 | ENDPROC(v7_secondary_startup) | 36 | ENDPROC(v7_secondary_startup) |
25 | #endif | 37 | #endif |
diff --git a/arch/arm/mach-imx/platsmp.c b/arch/arm/mach-imx/platsmp.c index 4a69305db65e..c6e1ab544882 100644 --- a/arch/arm/mach-imx/platsmp.c +++ b/arch/arm/mach-imx/platsmp.c | |||
@@ -12,6 +12,7 @@ | |||
12 | 12 | ||
13 | #include <linux/init.h> | 13 | #include <linux/init.h> |
14 | #include <linux/smp.h> | 14 | #include <linux/smp.h> |
15 | #include <asm/cacheflush.h> | ||
15 | #include <asm/page.h> | 16 | #include <asm/page.h> |
16 | #include <asm/smp_scu.h> | 17 | #include <asm/smp_scu.h> |
17 | #include <asm/mach/map.h> | 18 | #include <asm/mach/map.h> |
@@ -21,6 +22,7 @@ | |||
21 | 22 | ||
22 | #define SCU_STANDBY_ENABLE (1 << 5) | 23 | #define SCU_STANDBY_ENABLE (1 << 5) |
23 | 24 | ||
25 | u32 g_diag_reg; | ||
24 | static void __iomem *scu_base; | 26 | static void __iomem *scu_base; |
25 | 27 | ||
26 | static struct map_desc scu_io_desc __initdata = { | 28 | static struct map_desc scu_io_desc __initdata = { |
@@ -80,6 +82,18 @@ void imx_smp_prepare(void) | |||
80 | static void __init imx_smp_prepare_cpus(unsigned int max_cpus) | 82 | static void __init imx_smp_prepare_cpus(unsigned int max_cpus) |
81 | { | 83 | { |
82 | imx_smp_prepare(); | 84 | imx_smp_prepare(); |
85 | |||
86 | /* | ||
87 | * The diagnostic register holds the errata bits. Mostly bootloader | ||
88 | * does not bring up secondary cores, so that when errata bits are set | ||
89 | * in bootloader, they are set only for boot cpu. But on a SMP | ||
90 | * configuration, it should be equally done on every single core. | ||
91 | * Read the register from boot cpu here, and will replicate it into | ||
92 | * secondary cores when booting them. | ||
93 | */ | ||
94 | asm("mrc p15, 0, %0, c15, c0, 1" : "=r" (g_diag_reg) : : "cc"); | ||
95 | __cpuc_flush_dcache_area(&g_diag_reg, sizeof(g_diag_reg)); | ||
96 | outer_clean_range(__pa(&g_diag_reg), __pa(&g_diag_reg + 1)); | ||
83 | } | 97 | } |
84 | 98 | ||
85 | struct smp_operations imx_smp_ops __initdata = { | 99 | struct smp_operations imx_smp_ops __initdata = { |
diff --git a/arch/arm/mach-kirkwood/common.c b/arch/arm/mach-kirkwood/common.c index c2cae69e6d2b..f38922897563 100644 --- a/arch/arm/mach-kirkwood/common.c +++ b/arch/arm/mach-kirkwood/common.c | |||
@@ -528,12 +528,6 @@ void __init kirkwood_init_early(void) | |||
528 | { | 528 | { |
529 | orion_time_set_base(TIMER_VIRT_BASE); | 529 | orion_time_set_base(TIMER_VIRT_BASE); |
530 | 530 | ||
531 | /* | ||
532 | * Some Kirkwood devices allocate their coherent buffers from atomic | ||
533 | * context. Increase size of atomic coherent pool to make sure such | ||
534 | * the allocations won't fail. | ||
535 | */ | ||
536 | init_dma_coherent_pool_size(SZ_1M); | ||
537 | mvebu_mbus_init("marvell,kirkwood-mbus", | 531 | mvebu_mbus_init("marvell,kirkwood-mbus", |
538 | BRIDGE_WINS_BASE, BRIDGE_WINS_SZ, | 532 | BRIDGE_WINS_BASE, BRIDGE_WINS_SZ, |
539 | DDR_WINDOW_CPU_BASE, DDR_WINDOW_CPU_SZ); | 533 | DDR_WINDOW_CPU_BASE, DDR_WINDOW_CPU_SZ); |
diff --git a/arch/arm/mach-kirkwood/ts219-setup.c b/arch/arm/mach-kirkwood/ts219-setup.c index 283abff90228..e1267d6b468f 100644 --- a/arch/arm/mach-kirkwood/ts219-setup.c +++ b/arch/arm/mach-kirkwood/ts219-setup.c | |||
@@ -124,7 +124,7 @@ static void __init qnap_ts219_init(void) | |||
124 | static int __init ts219_pci_init(void) | 124 | static int __init ts219_pci_init(void) |
125 | { | 125 | { |
126 | if (machine_is_ts219()) | 126 | if (machine_is_ts219()) |
127 | kirkwood_pcie_init(KW_PCIE0); | 127 | kirkwood_pcie_init(KW_PCIE1 | KW_PCIE0); |
128 | 128 | ||
129 | return 0; | 129 | return 0; |
130 | } | 130 | } |
diff --git a/arch/arm/mach-mvebu/Kconfig b/arch/arm/mach-mvebu/Kconfig index e11acbb0a46d..80a8bcacd9d5 100644 --- a/arch/arm/mach-mvebu/Kconfig +++ b/arch/arm/mach-mvebu/Kconfig | |||
@@ -15,6 +15,7 @@ config ARCH_MVEBU | |||
15 | select MVEBU_CLK_GATING | 15 | select MVEBU_CLK_GATING |
16 | select MVEBU_MBUS | 16 | select MVEBU_MBUS |
17 | select ZONE_DMA if ARM_LPAE | 17 | select ZONE_DMA if ARM_LPAE |
18 | select ARCH_REQUIRE_GPIOLIB | ||
18 | 19 | ||
19 | if ARCH_MVEBU | 20 | if ARCH_MVEBU |
20 | 21 | ||
diff --git a/arch/arm/mach-mvebu/armada-370-xp.c b/arch/arm/mach-mvebu/armada-370-xp.c index 42a4cb3087e2..1c48890bb72b 100644 --- a/arch/arm/mach-mvebu/armada-370-xp.c +++ b/arch/arm/mach-mvebu/armada-370-xp.c | |||
@@ -54,13 +54,6 @@ void __init armada_370_xp_init_early(void) | |||
54 | char *mbus_soc_name; | 54 | char *mbus_soc_name; |
55 | 55 | ||
56 | /* | 56 | /* |
57 | * Some Armada 370/XP devices allocate their coherent buffers | ||
58 | * from atomic context. Increase size of atomic coherent pool | ||
59 | * to make sure such the allocations won't fail. | ||
60 | */ | ||
61 | init_dma_coherent_pool_size(SZ_1M); | ||
62 | |||
63 | /* | ||
64 | * This initialization will be replaced by a DT-based | 57 | * This initialization will be replaced by a DT-based |
65 | * initialization once the mvebu-mbus driver gains DT support. | 58 | * initialization once the mvebu-mbus driver gains DT support. |
66 | */ | 59 | */ |
diff --git a/arch/arm/mach-omap1/dma.c b/arch/arm/mach-omap1/dma.c index 68ab858e27b7..a94b3a718d1a 100644 --- a/arch/arm/mach-omap1/dma.c +++ b/arch/arm/mach-omap1/dma.c | |||
@@ -345,6 +345,7 @@ static int __init omap1_system_dma_init(void) | |||
345 | dev_err(&pdev->dev, | 345 | dev_err(&pdev->dev, |
346 | "%s: Memory allocation failed for d->chan!\n", | 346 | "%s: Memory allocation failed for d->chan!\n", |
347 | __func__); | 347 | __func__); |
348 | ret = -ENOMEM; | ||
348 | goto exit_release_d; | 349 | goto exit_release_d; |
349 | } | 350 | } |
350 | 351 | ||
diff --git a/arch/arm/mach-omap2/cclock33xx_data.c b/arch/arm/mach-omap2/cclock33xx_data.c index 6ebc7803bc3e..af3544ce4f02 100644 --- a/arch/arm/mach-omap2/cclock33xx_data.c +++ b/arch/arm/mach-omap2/cclock33xx_data.c | |||
@@ -454,9 +454,29 @@ DEFINE_CLK_GATE(cefuse_fck, "sys_clkin_ck", &sys_clkin_ck, 0x0, | |||
454 | */ | 454 | */ |
455 | DEFINE_CLK_FIXED_FACTOR(clkdiv32k_ck, "clk_24mhz", &clk_24mhz, 0x0, 1, 732); | 455 | DEFINE_CLK_FIXED_FACTOR(clkdiv32k_ck, "clk_24mhz", &clk_24mhz, 0x0, 1, 732); |
456 | 456 | ||
457 | DEFINE_CLK_GATE(clkdiv32k_ick, "clkdiv32k_ck", &clkdiv32k_ck, 0x0, | 457 | static struct clk clkdiv32k_ick; |
458 | AM33XX_CM_PER_CLKDIV32K_CLKCTRL, AM33XX_MODULEMODE_SWCTRL_SHIFT, | 458 | |
459 | 0x0, NULL); | 459 | static const char *clkdiv32k_ick_parent_names[] = { |
460 | "clkdiv32k_ck", | ||
461 | }; | ||
462 | |||
463 | static const struct clk_ops clkdiv32k_ick_ops = { | ||
464 | .enable = &omap2_dflt_clk_enable, | ||
465 | .disable = &omap2_dflt_clk_disable, | ||
466 | .is_enabled = &omap2_dflt_clk_is_enabled, | ||
467 | .init = &omap2_init_clk_clkdm, | ||
468 | }; | ||
469 | |||
470 | static struct clk_hw_omap clkdiv32k_ick_hw = { | ||
471 | .hw = { | ||
472 | .clk = &clkdiv32k_ick, | ||
473 | }, | ||
474 | .enable_reg = AM33XX_CM_PER_CLKDIV32K_CLKCTRL, | ||
475 | .enable_bit = AM33XX_MODULEMODE_SWCTRL_SHIFT, | ||
476 | .clkdm_name = "clk_24mhz_clkdm", | ||
477 | }; | ||
478 | |||
479 | DEFINE_STRUCT_CLK(clkdiv32k_ick, clkdiv32k_ick_parent_names, clkdiv32k_ick_ops); | ||
460 | 480 | ||
461 | /* "usbotg_fck" is an additional clock and not really a modulemode */ | 481 | /* "usbotg_fck" is an additional clock and not really a modulemode */ |
462 | DEFINE_CLK_GATE(usbotg_fck, "dpll_per_ck", &dpll_per_ck, 0x0, | 482 | DEFINE_CLK_GATE(usbotg_fck, "dpll_per_ck", &dpll_per_ck, 0x0, |
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index d25a95fe9921..7341eff63f56 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c | |||
@@ -1356,13 +1356,27 @@ static void _enable_sysc(struct omap_hwmod *oh) | |||
1356 | 1356 | ||
1357 | clkdm = _get_clkdm(oh); | 1357 | clkdm = _get_clkdm(oh); |
1358 | if (sf & SYSC_HAS_SIDLEMODE) { | 1358 | if (sf & SYSC_HAS_SIDLEMODE) { |
1359 | if (oh->flags & HWMOD_SWSUP_SIDLE || | ||
1360 | oh->flags & HWMOD_SWSUP_SIDLE_ACT) { | ||
1361 | idlemode = HWMOD_IDLEMODE_NO; | ||
1362 | } else { | ||
1363 | if (sf & SYSC_HAS_ENAWAKEUP) | ||
1364 | _enable_wakeup(oh, &v); | ||
1365 | if (oh->class->sysc->idlemodes & SIDLE_SMART_WKUP) | ||
1366 | idlemode = HWMOD_IDLEMODE_SMART_WKUP; | ||
1367 | else | ||
1368 | idlemode = HWMOD_IDLEMODE_SMART; | ||
1369 | } | ||
1370 | |||
1371 | /* | ||
1372 | * This is special handling for some IPs like | ||
1373 | * 32k sync timer. Force them to idle! | ||
1374 | */ | ||
1359 | clkdm_act = (clkdm && clkdm->flags & CLKDM_ACTIVE_WITH_MPU); | 1375 | clkdm_act = (clkdm && clkdm->flags & CLKDM_ACTIVE_WITH_MPU); |
1360 | if (clkdm_act && !(oh->class->sysc->idlemodes & | 1376 | if (clkdm_act && !(oh->class->sysc->idlemodes & |
1361 | (SIDLE_SMART | SIDLE_SMART_WKUP))) | 1377 | (SIDLE_SMART | SIDLE_SMART_WKUP))) |
1362 | idlemode = HWMOD_IDLEMODE_FORCE; | 1378 | idlemode = HWMOD_IDLEMODE_FORCE; |
1363 | else | 1379 | |
1364 | idlemode = (oh->flags & HWMOD_SWSUP_SIDLE) ? | ||
1365 | HWMOD_IDLEMODE_NO : HWMOD_IDLEMODE_SMART; | ||
1366 | _set_slave_idlemode(oh, idlemode, &v); | 1380 | _set_slave_idlemode(oh, idlemode, &v); |
1367 | } | 1381 | } |
1368 | 1382 | ||
@@ -1391,10 +1405,6 @@ static void _enable_sysc(struct omap_hwmod *oh) | |||
1391 | (sf & SYSC_HAS_CLOCKACTIVITY)) | 1405 | (sf & SYSC_HAS_CLOCKACTIVITY)) |
1392 | _set_clockactivity(oh, oh->class->sysc->clockact, &v); | 1406 | _set_clockactivity(oh, oh->class->sysc->clockact, &v); |
1393 | 1407 | ||
1394 | /* If slave is in SMARTIDLE, also enable wakeup */ | ||
1395 | if ((sf & SYSC_HAS_SIDLEMODE) && !(oh->flags & HWMOD_SWSUP_SIDLE)) | ||
1396 | _enable_wakeup(oh, &v); | ||
1397 | |||
1398 | _write_sysconfig(v, oh); | 1408 | _write_sysconfig(v, oh); |
1399 | 1409 | ||
1400 | /* | 1410 | /* |
@@ -1430,13 +1440,16 @@ static void _idle_sysc(struct omap_hwmod *oh) | |||
1430 | sf = oh->class->sysc->sysc_flags; | 1440 | sf = oh->class->sysc->sysc_flags; |
1431 | 1441 | ||
1432 | if (sf & SYSC_HAS_SIDLEMODE) { | 1442 | if (sf & SYSC_HAS_SIDLEMODE) { |
1433 | /* XXX What about HWMOD_IDLEMODE_SMART_WKUP? */ | 1443 | if (oh->flags & HWMOD_SWSUP_SIDLE) { |
1434 | if (oh->flags & HWMOD_SWSUP_SIDLE || | ||
1435 | !(oh->class->sysc->idlemodes & | ||
1436 | (SIDLE_SMART | SIDLE_SMART_WKUP))) | ||
1437 | idlemode = HWMOD_IDLEMODE_FORCE; | 1444 | idlemode = HWMOD_IDLEMODE_FORCE; |
1438 | else | 1445 | } else { |
1439 | idlemode = HWMOD_IDLEMODE_SMART; | 1446 | if (sf & SYSC_HAS_ENAWAKEUP) |
1447 | _enable_wakeup(oh, &v); | ||
1448 | if (oh->class->sysc->idlemodes & SIDLE_SMART_WKUP) | ||
1449 | idlemode = HWMOD_IDLEMODE_SMART_WKUP; | ||
1450 | else | ||
1451 | idlemode = HWMOD_IDLEMODE_SMART; | ||
1452 | } | ||
1440 | _set_slave_idlemode(oh, idlemode, &v); | 1453 | _set_slave_idlemode(oh, idlemode, &v); |
1441 | } | 1454 | } |
1442 | 1455 | ||
@@ -1455,10 +1468,6 @@ static void _idle_sysc(struct omap_hwmod *oh) | |||
1455 | _set_master_standbymode(oh, idlemode, &v); | 1468 | _set_master_standbymode(oh, idlemode, &v); |
1456 | } | 1469 | } |
1457 | 1470 | ||
1458 | /* If slave is in SMARTIDLE, also enable wakeup */ | ||
1459 | if ((sf & SYSC_HAS_SIDLEMODE) && !(oh->flags & HWMOD_SWSUP_SIDLE)) | ||
1460 | _enable_wakeup(oh, &v); | ||
1461 | |||
1462 | _write_sysconfig(v, oh); | 1471 | _write_sysconfig(v, oh); |
1463 | } | 1472 | } |
1464 | 1473 | ||
@@ -2065,7 +2074,7 @@ static int _omap4_get_context_lost(struct omap_hwmod *oh) | |||
2065 | * do so is present in the hwmod data, then call it and pass along the | 2074 | * do so is present in the hwmod data, then call it and pass along the |
2066 | * return value; otherwise, return 0. | 2075 | * return value; otherwise, return 0. |
2067 | */ | 2076 | */ |
2068 | static int __init _enable_preprogram(struct omap_hwmod *oh) | 2077 | static int _enable_preprogram(struct omap_hwmod *oh) |
2069 | { | 2078 | { |
2070 | if (!oh->class->enable_preprogram) | 2079 | if (!oh->class->enable_preprogram) |
2071 | return 0; | 2080 | return 0; |
@@ -2246,42 +2255,6 @@ static int _idle(struct omap_hwmod *oh) | |||
2246 | } | 2255 | } |
2247 | 2256 | ||
2248 | /** | 2257 | /** |
2249 | * omap_hwmod_set_ocp_autoidle - set the hwmod's OCP autoidle bit | ||
2250 | * @oh: struct omap_hwmod * | ||
2251 | * @autoidle: desired AUTOIDLE bitfield value (0 or 1) | ||
2252 | * | ||
2253 | * Sets the IP block's OCP autoidle bit in hardware, and updates our | ||
2254 | * local copy. Intended to be used by drivers that require | ||
2255 | * direct manipulation of the AUTOIDLE bits. | ||
2256 | * Returns -EINVAL if @oh is null or is not in the ENABLED state, or passes | ||
2257 | * along the return value from _set_module_autoidle(). | ||
2258 | * | ||
2259 | * Any users of this function should be scrutinized carefully. | ||
2260 | */ | ||
2261 | int omap_hwmod_set_ocp_autoidle(struct omap_hwmod *oh, u8 autoidle) | ||
2262 | { | ||
2263 | u32 v; | ||
2264 | int retval = 0; | ||
2265 | unsigned long flags; | ||
2266 | |||
2267 | if (!oh || oh->_state != _HWMOD_STATE_ENABLED) | ||
2268 | return -EINVAL; | ||
2269 | |||
2270 | spin_lock_irqsave(&oh->_lock, flags); | ||
2271 | |||
2272 | v = oh->_sysc_cache; | ||
2273 | |||
2274 | retval = _set_module_autoidle(oh, autoidle, &v); | ||
2275 | |||
2276 | if (!retval) | ||
2277 | _write_sysconfig(v, oh); | ||
2278 | |||
2279 | spin_unlock_irqrestore(&oh->_lock, flags); | ||
2280 | |||
2281 | return retval; | ||
2282 | } | ||
2283 | |||
2284 | /** | ||
2285 | * _shutdown - shutdown an omap_hwmod | 2258 | * _shutdown - shutdown an omap_hwmod |
2286 | * @oh: struct omap_hwmod * | 2259 | * @oh: struct omap_hwmod * |
2287 | * | 2260 | * |
@@ -3180,38 +3153,6 @@ error: | |||
3180 | } | 3153 | } |
3181 | 3154 | ||
3182 | /** | 3155 | /** |
3183 | * omap_hwmod_set_slave_idlemode - set the hwmod's OCP slave idlemode | ||
3184 | * @oh: struct omap_hwmod * | ||
3185 | * @idlemode: SIDLEMODE field bits (shifted to bit 0) | ||
3186 | * | ||
3187 | * Sets the IP block's OCP slave idlemode in hardware, and updates our | ||
3188 | * local copy. Intended to be used by drivers that have some erratum | ||
3189 | * that requires direct manipulation of the SIDLEMODE bits. Returns | ||
3190 | * -EINVAL if @oh is null, or passes along the return value from | ||
3191 | * _set_slave_idlemode(). | ||
3192 | * | ||
3193 | * XXX Does this function have any current users? If not, we should | ||
3194 | * remove it; it is better to let the rest of the hwmod code handle this. | ||
3195 | * Any users of this function should be scrutinized carefully. | ||
3196 | */ | ||
3197 | int omap_hwmod_set_slave_idlemode(struct omap_hwmod *oh, u8 idlemode) | ||
3198 | { | ||
3199 | u32 v; | ||
3200 | int retval = 0; | ||
3201 | |||
3202 | if (!oh) | ||
3203 | return -EINVAL; | ||
3204 | |||
3205 | v = oh->_sysc_cache; | ||
3206 | |||
3207 | retval = _set_slave_idlemode(oh, idlemode, &v); | ||
3208 | if (!retval) | ||
3209 | _write_sysconfig(v, oh); | ||
3210 | |||
3211 | return retval; | ||
3212 | } | ||
3213 | |||
3214 | /** | ||
3215 | * omap_hwmod_lookup - look up a registered omap_hwmod by name | 3156 | * omap_hwmod_lookup - look up a registered omap_hwmod by name |
3216 | * @name: name of the omap_hwmod to look up | 3157 | * @name: name of the omap_hwmod to look up |
3217 | * | 3158 | * |
diff --git a/arch/arm/mach-omap2/omap_hwmod.h b/arch/arm/mach-omap2/omap_hwmod.h index fe5962921f07..0c898f58ac9b 100644 --- a/arch/arm/mach-omap2/omap_hwmod.h +++ b/arch/arm/mach-omap2/omap_hwmod.h | |||
@@ -463,6 +463,9 @@ struct omap_hwmod_omap4_prcm { | |||
463 | * is kept in force-standby mode. Failing to do so causes PM problems | 463 | * is kept in force-standby mode. Failing to do so causes PM problems |
464 | * with musb on OMAP3630 at least. Note that musb has a dedicated register | 464 | * with musb on OMAP3630 at least. Note that musb has a dedicated register |
465 | * to control MSTANDBY signal when MIDLEMODE is set to force-standby. | 465 | * to control MSTANDBY signal when MIDLEMODE is set to force-standby. |
466 | * HWMOD_SWSUP_SIDLE_ACT: omap_hwmod code should manually bring the module | ||
467 | * out of idle, but rely on smart-idle to the put it back in idle, | ||
468 | * so the wakeups are still functional (Only known case for now is UART) | ||
466 | */ | 469 | */ |
467 | #define HWMOD_SWSUP_SIDLE (1 << 0) | 470 | #define HWMOD_SWSUP_SIDLE (1 << 0) |
468 | #define HWMOD_SWSUP_MSTANDBY (1 << 1) | 471 | #define HWMOD_SWSUP_MSTANDBY (1 << 1) |
@@ -476,6 +479,7 @@ struct omap_hwmod_omap4_prcm { | |||
476 | #define HWMOD_EXT_OPT_MAIN_CLK (1 << 9) | 479 | #define HWMOD_EXT_OPT_MAIN_CLK (1 << 9) |
477 | #define HWMOD_BLOCK_WFI (1 << 10) | 480 | #define HWMOD_BLOCK_WFI (1 << 10) |
478 | #define HWMOD_FORCE_MSTANDBY (1 << 11) | 481 | #define HWMOD_FORCE_MSTANDBY (1 << 11) |
482 | #define HWMOD_SWSUP_SIDLE_ACT (1 << 12) | ||
479 | 483 | ||
480 | /* | 484 | /* |
481 | * omap_hwmod._int_flags definitions | 485 | * omap_hwmod._int_flags definitions |
@@ -641,9 +645,6 @@ int omap_hwmod_read_hardreset(struct omap_hwmod *oh, const char *name); | |||
641 | int omap_hwmod_enable_clocks(struct omap_hwmod *oh); | 645 | int omap_hwmod_enable_clocks(struct omap_hwmod *oh); |
642 | int omap_hwmod_disable_clocks(struct omap_hwmod *oh); | 646 | int omap_hwmod_disable_clocks(struct omap_hwmod *oh); |
643 | 647 | ||
644 | int omap_hwmod_set_slave_idlemode(struct omap_hwmod *oh, u8 idlemode); | ||
645 | int omap_hwmod_set_ocp_autoidle(struct omap_hwmod *oh, u8 autoidle); | ||
646 | |||
647 | int omap_hwmod_reset(struct omap_hwmod *oh); | 648 | int omap_hwmod_reset(struct omap_hwmod *oh); |
648 | void omap_hwmod_ocp_barrier(struct omap_hwmod *oh); | 649 | void omap_hwmod_ocp_barrier(struct omap_hwmod *oh); |
649 | 650 | ||
diff --git a/arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c b/arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c index c8c64b3e1acc..d05fc7b54567 100644 --- a/arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c | |||
@@ -512,6 +512,7 @@ struct omap_hwmod omap2xxx_uart1_hwmod = { | |||
512 | .mpu_irqs = omap2_uart1_mpu_irqs, | 512 | .mpu_irqs = omap2_uart1_mpu_irqs, |
513 | .sdma_reqs = omap2_uart1_sdma_reqs, | 513 | .sdma_reqs = omap2_uart1_sdma_reqs, |
514 | .main_clk = "uart1_fck", | 514 | .main_clk = "uart1_fck", |
515 | .flags = HWMOD_SWSUP_SIDLE_ACT, | ||
515 | .prcm = { | 516 | .prcm = { |
516 | .omap2 = { | 517 | .omap2 = { |
517 | .module_offs = CORE_MOD, | 518 | .module_offs = CORE_MOD, |
@@ -531,6 +532,7 @@ struct omap_hwmod omap2xxx_uart2_hwmod = { | |||
531 | .mpu_irqs = omap2_uart2_mpu_irqs, | 532 | .mpu_irqs = omap2_uart2_mpu_irqs, |
532 | .sdma_reqs = omap2_uart2_sdma_reqs, | 533 | .sdma_reqs = omap2_uart2_sdma_reqs, |
533 | .main_clk = "uart2_fck", | 534 | .main_clk = "uart2_fck", |
535 | .flags = HWMOD_SWSUP_SIDLE_ACT, | ||
534 | .prcm = { | 536 | .prcm = { |
535 | .omap2 = { | 537 | .omap2 = { |
536 | .module_offs = CORE_MOD, | 538 | .module_offs = CORE_MOD, |
@@ -550,6 +552,7 @@ struct omap_hwmod omap2xxx_uart3_hwmod = { | |||
550 | .mpu_irqs = omap2_uart3_mpu_irqs, | 552 | .mpu_irqs = omap2_uart3_mpu_irqs, |
551 | .sdma_reqs = omap2_uart3_sdma_reqs, | 553 | .sdma_reqs = omap2_uart3_sdma_reqs, |
552 | .main_clk = "uart3_fck", | 554 | .main_clk = "uart3_fck", |
555 | .flags = HWMOD_SWSUP_SIDLE_ACT, | ||
553 | .prcm = { | 556 | .prcm = { |
554 | .omap2 = { | 557 | .omap2 = { |
555 | .module_offs = CORE_MOD, | 558 | .module_offs = CORE_MOD, |
diff --git a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c index 01d8f324450a..075f7cc51026 100644 --- a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c | |||
@@ -1995,6 +1995,7 @@ static struct omap_hwmod am33xx_uart1_hwmod = { | |||
1995 | .name = "uart1", | 1995 | .name = "uart1", |
1996 | .class = &uart_class, | 1996 | .class = &uart_class, |
1997 | .clkdm_name = "l4_wkup_clkdm", | 1997 | .clkdm_name = "l4_wkup_clkdm", |
1998 | .flags = HWMOD_SWSUP_SIDLE_ACT, | ||
1998 | .mpu_irqs = am33xx_uart1_irqs, | 1999 | .mpu_irqs = am33xx_uart1_irqs, |
1999 | .sdma_reqs = uart1_edma_reqs, | 2000 | .sdma_reqs = uart1_edma_reqs, |
2000 | .main_clk = "dpll_per_m2_div4_wkupdm_ck", | 2001 | .main_clk = "dpll_per_m2_div4_wkupdm_ck", |
@@ -2015,6 +2016,7 @@ static struct omap_hwmod am33xx_uart2_hwmod = { | |||
2015 | .name = "uart2", | 2016 | .name = "uart2", |
2016 | .class = &uart_class, | 2017 | .class = &uart_class, |
2017 | .clkdm_name = "l4ls_clkdm", | 2018 | .clkdm_name = "l4ls_clkdm", |
2019 | .flags = HWMOD_SWSUP_SIDLE_ACT, | ||
2018 | .mpu_irqs = am33xx_uart2_irqs, | 2020 | .mpu_irqs = am33xx_uart2_irqs, |
2019 | .sdma_reqs = uart1_edma_reqs, | 2021 | .sdma_reqs = uart1_edma_reqs, |
2020 | .main_clk = "dpll_per_m2_div4_ck", | 2022 | .main_clk = "dpll_per_m2_div4_ck", |
@@ -2042,6 +2044,7 @@ static struct omap_hwmod am33xx_uart3_hwmod = { | |||
2042 | .name = "uart3", | 2044 | .name = "uart3", |
2043 | .class = &uart_class, | 2045 | .class = &uart_class, |
2044 | .clkdm_name = "l4ls_clkdm", | 2046 | .clkdm_name = "l4ls_clkdm", |
2047 | .flags = HWMOD_SWSUP_SIDLE_ACT, | ||
2045 | .mpu_irqs = am33xx_uart3_irqs, | 2048 | .mpu_irqs = am33xx_uart3_irqs, |
2046 | .sdma_reqs = uart3_edma_reqs, | 2049 | .sdma_reqs = uart3_edma_reqs, |
2047 | .main_clk = "dpll_per_m2_div4_ck", | 2050 | .main_clk = "dpll_per_m2_div4_ck", |
@@ -2062,6 +2065,7 @@ static struct omap_hwmod am33xx_uart4_hwmod = { | |||
2062 | .name = "uart4", | 2065 | .name = "uart4", |
2063 | .class = &uart_class, | 2066 | .class = &uart_class, |
2064 | .clkdm_name = "l4ls_clkdm", | 2067 | .clkdm_name = "l4ls_clkdm", |
2068 | .flags = HWMOD_SWSUP_SIDLE_ACT, | ||
2065 | .mpu_irqs = am33xx_uart4_irqs, | 2069 | .mpu_irqs = am33xx_uart4_irqs, |
2066 | .sdma_reqs = uart1_edma_reqs, | 2070 | .sdma_reqs = uart1_edma_reqs, |
2067 | .main_clk = "dpll_per_m2_div4_ck", | 2071 | .main_clk = "dpll_per_m2_div4_ck", |
@@ -2082,6 +2086,7 @@ static struct omap_hwmod am33xx_uart5_hwmod = { | |||
2082 | .name = "uart5", | 2086 | .name = "uart5", |
2083 | .class = &uart_class, | 2087 | .class = &uart_class, |
2084 | .clkdm_name = "l4ls_clkdm", | 2088 | .clkdm_name = "l4ls_clkdm", |
2089 | .flags = HWMOD_SWSUP_SIDLE_ACT, | ||
2085 | .mpu_irqs = am33xx_uart5_irqs, | 2090 | .mpu_irqs = am33xx_uart5_irqs, |
2086 | .sdma_reqs = uart1_edma_reqs, | 2091 | .sdma_reqs = uart1_edma_reqs, |
2087 | .main_clk = "dpll_per_m2_div4_ck", | 2092 | .main_clk = "dpll_per_m2_div4_ck", |
@@ -2102,6 +2107,7 @@ static struct omap_hwmod am33xx_uart6_hwmod = { | |||
2102 | .name = "uart6", | 2107 | .name = "uart6", |
2103 | .class = &uart_class, | 2108 | .class = &uart_class, |
2104 | .clkdm_name = "l4ls_clkdm", | 2109 | .clkdm_name = "l4ls_clkdm", |
2110 | .flags = HWMOD_SWSUP_SIDLE_ACT, | ||
2105 | .mpu_irqs = am33xx_uart6_irqs, | 2111 | .mpu_irqs = am33xx_uart6_irqs, |
2106 | .sdma_reqs = uart1_edma_reqs, | 2112 | .sdma_reqs = uart1_edma_reqs, |
2107 | .main_clk = "dpll_per_m2_div4_ck", | 2113 | .main_clk = "dpll_per_m2_div4_ck", |
diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c index 4083606ea1da..31c7126eb3bb 100644 --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | |||
@@ -490,6 +490,7 @@ static struct omap_hwmod omap3xxx_uart1_hwmod = { | |||
490 | .mpu_irqs = omap2_uart1_mpu_irqs, | 490 | .mpu_irqs = omap2_uart1_mpu_irqs, |
491 | .sdma_reqs = omap2_uart1_sdma_reqs, | 491 | .sdma_reqs = omap2_uart1_sdma_reqs, |
492 | .main_clk = "uart1_fck", | 492 | .main_clk = "uart1_fck", |
493 | .flags = HWMOD_SWSUP_SIDLE_ACT, | ||
493 | .prcm = { | 494 | .prcm = { |
494 | .omap2 = { | 495 | .omap2 = { |
495 | .module_offs = CORE_MOD, | 496 | .module_offs = CORE_MOD, |
@@ -508,6 +509,7 @@ static struct omap_hwmod omap3xxx_uart2_hwmod = { | |||
508 | .mpu_irqs = omap2_uart2_mpu_irqs, | 509 | .mpu_irqs = omap2_uart2_mpu_irqs, |
509 | .sdma_reqs = omap2_uart2_sdma_reqs, | 510 | .sdma_reqs = omap2_uart2_sdma_reqs, |
510 | .main_clk = "uart2_fck", | 511 | .main_clk = "uart2_fck", |
512 | .flags = HWMOD_SWSUP_SIDLE_ACT, | ||
511 | .prcm = { | 513 | .prcm = { |
512 | .omap2 = { | 514 | .omap2 = { |
513 | .module_offs = CORE_MOD, | 515 | .module_offs = CORE_MOD, |
@@ -526,6 +528,7 @@ static struct omap_hwmod omap3xxx_uart3_hwmod = { | |||
526 | .mpu_irqs = omap2_uart3_mpu_irqs, | 528 | .mpu_irqs = omap2_uart3_mpu_irqs, |
527 | .sdma_reqs = omap2_uart3_sdma_reqs, | 529 | .sdma_reqs = omap2_uart3_sdma_reqs, |
528 | .main_clk = "uart3_fck", | 530 | .main_clk = "uart3_fck", |
531 | .flags = HWMOD_SWSUP_SIDLE_ACT, | ||
529 | .prcm = { | 532 | .prcm = { |
530 | .omap2 = { | 533 | .omap2 = { |
531 | .module_offs = OMAP3430_PER_MOD, | 534 | .module_offs = OMAP3430_PER_MOD, |
@@ -555,6 +558,7 @@ static struct omap_hwmod omap36xx_uart4_hwmod = { | |||
555 | .mpu_irqs = uart4_mpu_irqs, | 558 | .mpu_irqs = uart4_mpu_irqs, |
556 | .sdma_reqs = uart4_sdma_reqs, | 559 | .sdma_reqs = uart4_sdma_reqs, |
557 | .main_clk = "uart4_fck", | 560 | .main_clk = "uart4_fck", |
561 | .flags = HWMOD_SWSUP_SIDLE_ACT, | ||
558 | .prcm = { | 562 | .prcm = { |
559 | .omap2 = { | 563 | .omap2 = { |
560 | .module_offs = OMAP3430_PER_MOD, | 564 | .module_offs = OMAP3430_PER_MOD, |
diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c index eaba9dc91a0d..848b6dc67590 100644 --- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c | |||
@@ -3434,6 +3434,7 @@ static struct omap_hwmod omap44xx_uart1_hwmod = { | |||
3434 | .name = "uart1", | 3434 | .name = "uart1", |
3435 | .class = &omap44xx_uart_hwmod_class, | 3435 | .class = &omap44xx_uart_hwmod_class, |
3436 | .clkdm_name = "l4_per_clkdm", | 3436 | .clkdm_name = "l4_per_clkdm", |
3437 | .flags = HWMOD_SWSUP_SIDLE_ACT, | ||
3437 | .mpu_irqs = omap44xx_uart1_irqs, | 3438 | .mpu_irqs = omap44xx_uart1_irqs, |
3438 | .sdma_reqs = omap44xx_uart1_sdma_reqs, | 3439 | .sdma_reqs = omap44xx_uart1_sdma_reqs, |
3439 | .main_clk = "func_48m_fclk", | 3440 | .main_clk = "func_48m_fclk", |
@@ -3462,6 +3463,7 @@ static struct omap_hwmod omap44xx_uart2_hwmod = { | |||
3462 | .name = "uart2", | 3463 | .name = "uart2", |
3463 | .class = &omap44xx_uart_hwmod_class, | 3464 | .class = &omap44xx_uart_hwmod_class, |
3464 | .clkdm_name = "l4_per_clkdm", | 3465 | .clkdm_name = "l4_per_clkdm", |
3466 | .flags = HWMOD_SWSUP_SIDLE_ACT, | ||
3465 | .mpu_irqs = omap44xx_uart2_irqs, | 3467 | .mpu_irqs = omap44xx_uart2_irqs, |
3466 | .sdma_reqs = omap44xx_uart2_sdma_reqs, | 3468 | .sdma_reqs = omap44xx_uart2_sdma_reqs, |
3467 | .main_clk = "func_48m_fclk", | 3469 | .main_clk = "func_48m_fclk", |
@@ -3490,7 +3492,8 @@ static struct omap_hwmod omap44xx_uart3_hwmod = { | |||
3490 | .name = "uart3", | 3492 | .name = "uart3", |
3491 | .class = &omap44xx_uart_hwmod_class, | 3493 | .class = &omap44xx_uart_hwmod_class, |
3492 | .clkdm_name = "l4_per_clkdm", | 3494 | .clkdm_name = "l4_per_clkdm", |
3493 | .flags = HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET, | 3495 | .flags = HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET | |
3496 | HWMOD_SWSUP_SIDLE_ACT, | ||
3494 | .mpu_irqs = omap44xx_uart3_irqs, | 3497 | .mpu_irqs = omap44xx_uart3_irqs, |
3495 | .sdma_reqs = omap44xx_uart3_sdma_reqs, | 3498 | .sdma_reqs = omap44xx_uart3_sdma_reqs, |
3496 | .main_clk = "func_48m_fclk", | 3499 | .main_clk = "func_48m_fclk", |
@@ -3519,6 +3522,7 @@ static struct omap_hwmod omap44xx_uart4_hwmod = { | |||
3519 | .name = "uart4", | 3522 | .name = "uart4", |
3520 | .class = &omap44xx_uart_hwmod_class, | 3523 | .class = &omap44xx_uart_hwmod_class, |
3521 | .clkdm_name = "l4_per_clkdm", | 3524 | .clkdm_name = "l4_per_clkdm", |
3525 | .flags = HWMOD_SWSUP_SIDLE_ACT, | ||
3522 | .mpu_irqs = omap44xx_uart4_irqs, | 3526 | .mpu_irqs = omap44xx_uart4_irqs, |
3523 | .sdma_reqs = omap44xx_uart4_sdma_reqs, | 3527 | .sdma_reqs = omap44xx_uart4_sdma_reqs, |
3524 | .main_clk = "func_48m_fclk", | 3528 | .main_clk = "func_48m_fclk", |
diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c index 8396b5b7e912..f6601563aa69 100644 --- a/arch/arm/mach-omap2/serial.c +++ b/arch/arm/mach-omap2/serial.c | |||
@@ -95,38 +95,9 @@ static void omap_uart_enable_wakeup(struct device *dev, bool enable) | |||
95 | omap_hwmod_disable_wakeup(od->hwmods[0]); | 95 | omap_hwmod_disable_wakeup(od->hwmods[0]); |
96 | } | 96 | } |
97 | 97 | ||
98 | /* | ||
99 | * Errata i291: [UART]:Cannot Acknowledge Idle Requests | ||
100 | * in Smartidle Mode When Configured for DMA Operations. | ||
101 | * WA: configure uart in force idle mode. | ||
102 | */ | ||
103 | static void omap_uart_set_noidle(struct device *dev) | ||
104 | { | ||
105 | struct platform_device *pdev = to_platform_device(dev); | ||
106 | struct omap_device *od = to_omap_device(pdev); | ||
107 | |||
108 | omap_hwmod_set_slave_idlemode(od->hwmods[0], HWMOD_IDLEMODE_NO); | ||
109 | } | ||
110 | |||
111 | static void omap_uart_set_smartidle(struct device *dev) | ||
112 | { | ||
113 | struct platform_device *pdev = to_platform_device(dev); | ||
114 | struct omap_device *od = to_omap_device(pdev); | ||
115 | u8 idlemode; | ||
116 | |||
117 | if (od->hwmods[0]->class->sysc->idlemodes & SIDLE_SMART_WKUP) | ||
118 | idlemode = HWMOD_IDLEMODE_SMART_WKUP; | ||
119 | else | ||
120 | idlemode = HWMOD_IDLEMODE_SMART; | ||
121 | |||
122 | omap_hwmod_set_slave_idlemode(od->hwmods[0], idlemode); | ||
123 | } | ||
124 | |||
125 | #else | 98 | #else |
126 | static void omap_uart_enable_wakeup(struct device *dev, bool enable) | 99 | static void omap_uart_enable_wakeup(struct device *dev, bool enable) |
127 | {} | 100 | {} |
128 | static void omap_uart_set_noidle(struct device *dev) {} | ||
129 | static void omap_uart_set_smartidle(struct device *dev) {} | ||
130 | #endif /* CONFIG_PM */ | 101 | #endif /* CONFIG_PM */ |
131 | 102 | ||
132 | #ifdef CONFIG_OMAP_MUX | 103 | #ifdef CONFIG_OMAP_MUX |
@@ -299,8 +270,6 @@ void __init omap_serial_init_port(struct omap_board_data *bdata, | |||
299 | omap_up.uartclk = OMAP24XX_BASE_BAUD * 16; | 270 | omap_up.uartclk = OMAP24XX_BASE_BAUD * 16; |
300 | omap_up.flags = UPF_BOOT_AUTOCONF; | 271 | omap_up.flags = UPF_BOOT_AUTOCONF; |
301 | omap_up.get_context_loss_count = omap_pm_get_dev_context_loss_count; | 272 | omap_up.get_context_loss_count = omap_pm_get_dev_context_loss_count; |
302 | omap_up.set_forceidle = omap_uart_set_smartidle; | ||
303 | omap_up.set_noidle = omap_uart_set_noidle; | ||
304 | omap_up.enable_wakeup = omap_uart_enable_wakeup; | 273 | omap_up.enable_wakeup = omap_uart_enable_wakeup; |
305 | omap_up.dma_rx_buf_size = info->dma_rx_buf_size; | 274 | omap_up.dma_rx_buf_size = info->dma_rx_buf_size; |
306 | omap_up.dma_rx_timeout = info->dma_rx_timeout; | 275 | omap_up.dma_rx_timeout = info->dma_rx_timeout; |
diff --git a/arch/arm/mach-orion5x/common.c b/arch/arm/mach-orion5x/common.c index b97fd672e89d..f8a6db9239bf 100644 --- a/arch/arm/mach-orion5x/common.c +++ b/arch/arm/mach-orion5x/common.c | |||
@@ -199,13 +199,6 @@ void __init orion5x_init_early(void) | |||
199 | 199 | ||
200 | orion_time_set_base(TIMER_VIRT_BASE); | 200 | orion_time_set_base(TIMER_VIRT_BASE); |
201 | 201 | ||
202 | /* | ||
203 | * Some Orion5x devices allocate their coherent buffers from atomic | ||
204 | * context. Increase size of atomic coherent pool to make sure such | ||
205 | * the allocations won't fail. | ||
206 | */ | ||
207 | init_dma_coherent_pool_size(SZ_1M); | ||
208 | |||
209 | /* Initialize the MBUS driver */ | 202 | /* Initialize the MBUS driver */ |
210 | orion5x_pcie_id(&dev, &rev); | 203 | orion5x_pcie_id(&dev, &rev); |
211 | if (dev == MV88F5281_DEV_ID) | 204 | if (dev == MV88F5281_DEV_ID) |
diff --git a/arch/arm/mach-shmobile/board-marzen.c b/arch/arm/mach-shmobile/board-marzen.c index 91052855cc12..b9594e911ce7 100644 --- a/arch/arm/mach-shmobile/board-marzen.c +++ b/arch/arm/mach-shmobile/board-marzen.c | |||
@@ -212,8 +212,8 @@ static struct platform_device *marzen_devices[] __initdata = { | |||
212 | static struct usb_phy *phy; | 212 | static struct usb_phy *phy; |
213 | static int usb_power_on(struct platform_device *pdev) | 213 | static int usb_power_on(struct platform_device *pdev) |
214 | { | 214 | { |
215 | if (!phy) | 215 | if (IS_ERR(phy)) |
216 | return -EIO; | 216 | return PTR_ERR(phy); |
217 | 217 | ||
218 | pm_runtime_enable(&pdev->dev); | 218 | pm_runtime_enable(&pdev->dev); |
219 | pm_runtime_get_sync(&pdev->dev); | 219 | pm_runtime_get_sync(&pdev->dev); |
@@ -225,7 +225,7 @@ static int usb_power_on(struct platform_device *pdev) | |||
225 | 225 | ||
226 | static void usb_power_off(struct platform_device *pdev) | 226 | static void usb_power_off(struct platform_device *pdev) |
227 | { | 227 | { |
228 | if (!phy) | 228 | if (IS_ERR(phy)) |
229 | return; | 229 | return; |
230 | 230 | ||
231 | usb_phy_shutdown(phy); | 231 | usb_phy_shutdown(phy); |
diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig index d259c782d742..5b045e302b43 100644 --- a/arch/arm/mach-sunxi/Kconfig +++ b/arch/arm/mach-sunxi/Kconfig | |||
@@ -1,5 +1,6 @@ | |||
1 | config ARCH_SUNXI | 1 | config ARCH_SUNXI |
2 | bool "Allwinner A1X SOCs" if ARCH_MULTI_V7 | 2 | bool "Allwinner A1X SOCs" if ARCH_MULTI_V7 |
3 | select ARCH_REQUIRE_GPIOLIB | ||
3 | select CLKSRC_MMIO | 4 | select CLKSRC_MMIO |
4 | select CLKSRC_OF | 5 | select CLKSRC_OF |
5 | select COMMON_CLK | 6 | select COMMON_CLK |
diff --git a/arch/arm/mach-ux500/Kconfig b/arch/arm/mach-ux500/Kconfig index 6a4387e39df8..b19b07204aaf 100644 --- a/arch/arm/mach-ux500/Kconfig +++ b/arch/arm/mach-ux500/Kconfig | |||
@@ -51,6 +51,7 @@ config MACH_MOP500 | |||
51 | bool "U8500 Development platform, MOP500 versions" | 51 | bool "U8500 Development platform, MOP500 versions" |
52 | select I2C | 52 | select I2C |
53 | select I2C_NOMADIK | 53 | select I2C_NOMADIK |
54 | select REGULATOR | ||
54 | select REGULATOR_FIXED_VOLTAGE | 55 | select REGULATOR_FIXED_VOLTAGE |
55 | select SOC_BUS | 56 | select SOC_BUS |
56 | select UX500_SOC_DB8500 | 57 | select UX500_SOC_DB8500 |
diff --git a/arch/arm/mach-ux500/board-mop500.c b/arch/arm/mach-ux500/board-mop500.c index 3cd555ac6d0a..78389de94dde 100644 --- a/arch/arm/mach-ux500/board-mop500.c +++ b/arch/arm/mach-ux500/board-mop500.c | |||
@@ -623,7 +623,7 @@ static void __init mop500_init_machine(void) | |||
623 | sdi0_reg_info.gpios[0].gpio = GPIO_SDMMC_1V8_3V_SEL; | 623 | sdi0_reg_info.gpios[0].gpio = GPIO_SDMMC_1V8_3V_SEL; |
624 | 624 | ||
625 | mop500_pinmaps_init(); | 625 | mop500_pinmaps_init(); |
626 | parent = u8500_init_devices(&ab8500_platdata); | 626 | parent = u8500_init_devices(); |
627 | 627 | ||
628 | for (i = 0; i < ARRAY_SIZE(mop500_platform_devs); i++) | 628 | for (i = 0; i < ARRAY_SIZE(mop500_platform_devs); i++) |
629 | mop500_platform_devs[i]->dev.parent = parent; | 629 | mop500_platform_devs[i]->dev.parent = parent; |
@@ -660,7 +660,7 @@ static void __init snowball_init_machine(void) | |||
660 | sdi0_reg_info.gpios[0].gpio = SNOWBALL_SDMMC_1V8_3V_GPIO; | 660 | sdi0_reg_info.gpios[0].gpio = SNOWBALL_SDMMC_1V8_3V_GPIO; |
661 | 661 | ||
662 | snowball_pinmaps_init(); | 662 | snowball_pinmaps_init(); |
663 | parent = u8500_init_devices(&ab8500_platdata); | 663 | parent = u8500_init_devices(); |
664 | 664 | ||
665 | for (i = 0; i < ARRAY_SIZE(snowball_platform_devs); i++) | 665 | for (i = 0; i < ARRAY_SIZE(snowball_platform_devs); i++) |
666 | snowball_platform_devs[i]->dev.parent = parent; | 666 | snowball_platform_devs[i]->dev.parent = parent; |
@@ -698,7 +698,7 @@ static void __init hrefv60_init_machine(void) | |||
698 | sdi0_reg_info.gpios[0].gpio = HREFV60_SDMMC_1V8_3V_GPIO; | 698 | sdi0_reg_info.gpios[0].gpio = HREFV60_SDMMC_1V8_3V_GPIO; |
699 | 699 | ||
700 | hrefv60_pinmaps_init(); | 700 | hrefv60_pinmaps_init(); |
701 | parent = u8500_init_devices(&ab8500_platdata); | 701 | parent = u8500_init_devices(); |
702 | 702 | ||
703 | for (i = 0; i < ARRAY_SIZE(mop500_platform_devs); i++) | 703 | for (i = 0; i < ARRAY_SIZE(mop500_platform_devs); i++) |
704 | mop500_platform_devs[i]->dev.parent = parent; | 704 | mop500_platform_devs[i]->dev.parent = parent; |
diff --git a/arch/arm/mach-ux500/cpu-db8500.c b/arch/arm/mach-ux500/cpu-db8500.c index e90b5ab23b6d..46cca52890bc 100644 --- a/arch/arm/mach-ux500/cpu-db8500.c +++ b/arch/arm/mach-ux500/cpu-db8500.c | |||
@@ -206,7 +206,7 @@ static struct device * __init db8500_soc_device_init(void) | |||
206 | /* | 206 | /* |
207 | * This function is called from the board init | 207 | * This function is called from the board init |
208 | */ | 208 | */ |
209 | struct device * __init u8500_init_devices(struct ab8500_platform_data *ab8500) | 209 | struct device * __init u8500_init_devices(void) |
210 | { | 210 | { |
211 | struct device *parent; | 211 | struct device *parent; |
212 | int i; | 212 | int i; |
@@ -220,8 +220,6 @@ struct device * __init u8500_init_devices(struct ab8500_platform_data *ab8500) | |||
220 | for (i = 0; i < ARRAY_SIZE(platform_devs); i++) | 220 | for (i = 0; i < ARRAY_SIZE(platform_devs); i++) |
221 | platform_devs[i]->dev.parent = parent; | 221 | platform_devs[i]->dev.parent = parent; |
222 | 222 | ||
223 | db8500_prcmu_device.dev.platform_data = ab8500; | ||
224 | |||
225 | platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs)); | 223 | platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs)); |
226 | 224 | ||
227 | return parent; | 225 | return parent; |
@@ -278,7 +276,7 @@ static struct of_dev_auxdata u8500_auxdata_lookup[] __initdata = { | |||
278 | OF_DEV_AUXDATA("st,nomadik-i2c", 0x8012a000, "nmk-i2c.4", NULL), | 276 | OF_DEV_AUXDATA("st,nomadik-i2c", 0x8012a000, "nmk-i2c.4", NULL), |
279 | OF_DEV_AUXDATA("stericsson,db8500-prcmu", 0x80157000, "db8500-prcmu", | 277 | OF_DEV_AUXDATA("stericsson,db8500-prcmu", 0x80157000, "db8500-prcmu", |
280 | &db8500_prcmu_pdata), | 278 | &db8500_prcmu_pdata), |
281 | OF_DEV_AUXDATA("smsc,lan9115", 0x50000000, "smsc911x", NULL), | 279 | OF_DEV_AUXDATA("smsc,lan9115", 0x50000000, "smsc911x.0", NULL), |
282 | /* Requires device name bindings. */ | 280 | /* Requires device name bindings. */ |
283 | OF_DEV_AUXDATA("stericsson,nmk-pinctrl", U8500_PRCMU_BASE, | 281 | OF_DEV_AUXDATA("stericsson,nmk-pinctrl", U8500_PRCMU_BASE, |
284 | "pinctrl-db8500", NULL), | 282 | "pinctrl-db8500", NULL), |
diff --git a/arch/arm/mach-ux500/setup.h b/arch/arm/mach-ux500/setup.h index bddce2b49372..cad3ca86c540 100644 --- a/arch/arm/mach-ux500/setup.h +++ b/arch/arm/mach-ux500/setup.h | |||
@@ -18,7 +18,7 @@ | |||
18 | void __init ux500_map_io(void); | 18 | void __init ux500_map_io(void); |
19 | extern void __init u8500_map_io(void); | 19 | extern void __init u8500_map_io(void); |
20 | 20 | ||
21 | extern struct device * __init u8500_init_devices(struct ab8500_platform_data *ab8500); | 21 | extern struct device * __init u8500_init_devices(void); |
22 | 22 | ||
23 | extern void __init ux500_init_irq(void); | 23 | extern void __init ux500_init_irq(void); |
24 | extern void __init ux500_init_late(void); | 24 | extern void __init ux500_init_late(void); |
diff --git a/arch/arm/mach-vt8500/vt8500.c b/arch/arm/mach-vt8500/vt8500.c index 1dd281efc020..f5c33df7a597 100644 --- a/arch/arm/mach-vt8500/vt8500.c +++ b/arch/arm/mach-vt8500/vt8500.c | |||
@@ -173,6 +173,7 @@ static const char * const vt8500_dt_compat[] = { | |||
173 | "wm,wm8505", | 173 | "wm,wm8505", |
174 | "wm,wm8750", | 174 | "wm,wm8750", |
175 | "wm,wm8850", | 175 | "wm,wm8850", |
176 | NULL | ||
176 | }; | 177 | }; |
177 | 178 | ||
178 | DT_MACHINE_START(WMT_DT, "VIA/Wondermedia SoC (Device Tree Support)") | 179 | DT_MACHINE_START(WMT_DT, "VIA/Wondermedia SoC (Device Tree Support)") |
diff --git a/arch/arm/plat-orion/common.c b/arch/arm/plat-orion/common.c index 251f827271e9..c019b7aaf776 100644 --- a/arch/arm/plat-orion/common.c +++ b/arch/arm/plat-orion/common.c | |||
@@ -383,7 +383,7 @@ static struct resource orion_ge10_shared_resources[] = { | |||
383 | 383 | ||
384 | static struct platform_device orion_ge10_shared = { | 384 | static struct platform_device orion_ge10_shared = { |
385 | .name = MV643XX_ETH_SHARED_NAME, | 385 | .name = MV643XX_ETH_SHARED_NAME, |
386 | .id = 1, | 386 | .id = 2, |
387 | .dev = { | 387 | .dev = { |
388 | .platform_data = &orion_ge10_shared_data, | 388 | .platform_data = &orion_ge10_shared_data, |
389 | }, | 389 | }, |
@@ -398,8 +398,8 @@ static struct resource orion_ge10_resources[] = { | |||
398 | 398 | ||
399 | static struct platform_device orion_ge10 = { | 399 | static struct platform_device orion_ge10 = { |
400 | .name = MV643XX_ETH_NAME, | 400 | .name = MV643XX_ETH_NAME, |
401 | .id = 1, | 401 | .id = 2, |
402 | .num_resources = 2, | 402 | .num_resources = 1, |
403 | .resource = orion_ge10_resources, | 403 | .resource = orion_ge10_resources, |
404 | .dev = { | 404 | .dev = { |
405 | .coherent_dma_mask = DMA_BIT_MASK(32), | 405 | .coherent_dma_mask = DMA_BIT_MASK(32), |
@@ -432,7 +432,7 @@ static struct resource orion_ge11_shared_resources[] = { | |||
432 | 432 | ||
433 | static struct platform_device orion_ge11_shared = { | 433 | static struct platform_device orion_ge11_shared = { |
434 | .name = MV643XX_ETH_SHARED_NAME, | 434 | .name = MV643XX_ETH_SHARED_NAME, |
435 | .id = 1, | 435 | .id = 3, |
436 | .dev = { | 436 | .dev = { |
437 | .platform_data = &orion_ge11_shared_data, | 437 | .platform_data = &orion_ge11_shared_data, |
438 | }, | 438 | }, |
@@ -447,8 +447,8 @@ static struct resource orion_ge11_resources[] = { | |||
447 | 447 | ||
448 | static struct platform_device orion_ge11 = { | 448 | static struct platform_device orion_ge11 = { |
449 | .name = MV643XX_ETH_NAME, | 449 | .name = MV643XX_ETH_NAME, |
450 | .id = 1, | 450 | .id = 3, |
451 | .num_resources = 2, | 451 | .num_resources = 1, |
452 | .resource = orion_ge11_resources, | 452 | .resource = orion_ge11_resources, |
453 | .dev = { | 453 | .dev = { |
454 | .coherent_dma_mask = DMA_BIT_MASK(32), | 454 | .coherent_dma_mask = DMA_BIT_MASK(32), |
diff --git a/arch/arm/plat-orion/include/plat/common.h b/arch/arm/plat-orion/include/plat/common.h index e06fc5fefa14..d9a24f605a2b 100644 --- a/arch/arm/plat-orion/include/plat/common.h +++ b/arch/arm/plat-orion/include/plat/common.h | |||
@@ -10,6 +10,7 @@ | |||
10 | 10 | ||
11 | #ifndef __PLAT_COMMON_H | 11 | #ifndef __PLAT_COMMON_H |
12 | #include <linux/mv643xx_eth.h> | 12 | #include <linux/mv643xx_eth.h> |
13 | #include <linux/platform_data/usb-ehci-orion.h> | ||
13 | 14 | ||
14 | struct dsa_platform_data; | 15 | struct dsa_platform_data; |
15 | struct mv_sata_platform_data; | 16 | struct mv_sata_platform_data; |
diff --git a/arch/arm/plat-samsung/devs.c b/arch/arm/plat-samsung/devs.c index 30c2fe243f76..0f9c3f431a5f 100644 --- a/arch/arm/plat-samsung/devs.c +++ b/arch/arm/plat-samsung/devs.c | |||
@@ -311,9 +311,9 @@ struct platform_device s5p_device_jpeg = { | |||
311 | #ifdef CONFIG_S5P_DEV_FIMD0 | 311 | #ifdef CONFIG_S5P_DEV_FIMD0 |
312 | static struct resource s5p_fimd0_resource[] = { | 312 | static struct resource s5p_fimd0_resource[] = { |
313 | [0] = DEFINE_RES_MEM(S5P_PA_FIMD0, SZ_32K), | 313 | [0] = DEFINE_RES_MEM(S5P_PA_FIMD0, SZ_32K), |
314 | [1] = DEFINE_RES_IRQ(IRQ_FIMD0_VSYNC), | 314 | [1] = DEFINE_RES_IRQ_NAMED(IRQ_FIMD0_VSYNC, "vsync"), |
315 | [2] = DEFINE_RES_IRQ(IRQ_FIMD0_FIFO), | 315 | [2] = DEFINE_RES_IRQ_NAMED(IRQ_FIMD0_FIFO, "fifo"), |
316 | [3] = DEFINE_RES_IRQ(IRQ_FIMD0_SYSTEM), | 316 | [3] = DEFINE_RES_IRQ_NAMED(IRQ_FIMD0_SYSTEM, "lcd_sys"), |
317 | }; | 317 | }; |
318 | 318 | ||
319 | struct platform_device s5p_device_fimd0 = { | 319 | struct platform_device s5p_device_fimd0 = { |
diff --git a/arch/arm/vfp/entry.S b/arch/arm/vfp/entry.S index 323ce1a62bbf..46e17492fd1f 100644 --- a/arch/arm/vfp/entry.S +++ b/arch/arm/vfp/entry.S | |||
@@ -60,7 +60,7 @@ ENTRY(vfp_testing_entry) | |||
60 | str r11, [r10, #TI_PREEMPT] | 60 | str r11, [r10, #TI_PREEMPT] |
61 | #endif | 61 | #endif |
62 | ldr r0, VFP_arch_address | 62 | ldr r0, VFP_arch_address |
63 | str r5, [r0] @ known non-zero value | 63 | str r0, [r0] @ set to non-zero value |
64 | mov pc, r9 @ we have handled the fault | 64 | mov pc, r9 @ we have handled the fault |
65 | ENDPROC(vfp_testing_entry) | 65 | ENDPROC(vfp_testing_entry) |
66 | 66 | ||
diff --git a/arch/arm64/kernel/arm64ksyms.c b/arch/arm64/kernel/arm64ksyms.c index 7df1aad29b67..41b4f626d554 100644 --- a/arch/arm64/kernel/arm64ksyms.c +++ b/arch/arm64/kernel/arm64ksyms.c | |||
@@ -34,6 +34,7 @@ EXPORT_SYMBOL(__strnlen_user); | |||
34 | EXPORT_SYMBOL(__strncpy_from_user); | 34 | EXPORT_SYMBOL(__strncpy_from_user); |
35 | 35 | ||
36 | EXPORT_SYMBOL(copy_page); | 36 | EXPORT_SYMBOL(copy_page); |
37 | EXPORT_SYMBOL(clear_page); | ||
37 | 38 | ||
38 | EXPORT_SYMBOL(__copy_from_user); | 39 | EXPORT_SYMBOL(__copy_from_user); |
39 | EXPORT_SYMBOL(__copy_to_user); | 40 | EXPORT_SYMBOL(__copy_to_user); |
diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S index c7e047049f2c..1d1314280a03 100644 --- a/arch/arm64/kernel/entry.S +++ b/arch/arm64/kernel/entry.S | |||
@@ -390,6 +390,16 @@ el0_sync_compat: | |||
390 | b.eq el0_fpsimd_exc | 390 | b.eq el0_fpsimd_exc |
391 | cmp x24, #ESR_EL1_EC_UNKNOWN // unknown exception in EL0 | 391 | cmp x24, #ESR_EL1_EC_UNKNOWN // unknown exception in EL0 |
392 | b.eq el0_undef | 392 | b.eq el0_undef |
393 | cmp x24, #ESR_EL1_EC_CP15_32 // CP15 MRC/MCR trap | ||
394 | b.eq el0_undef | ||
395 | cmp x24, #ESR_EL1_EC_CP15_64 // CP15 MRRC/MCRR trap | ||
396 | b.eq el0_undef | ||
397 | cmp x24, #ESR_EL1_EC_CP14_MR // CP14 MRC/MCR trap | ||
398 | b.eq el0_undef | ||
399 | cmp x24, #ESR_EL1_EC_CP14_LS // CP14 LDC/STC trap | ||
400 | b.eq el0_undef | ||
401 | cmp x24, #ESR_EL1_EC_CP14_64 // CP14 MRRC/MCRR trap | ||
402 | b.eq el0_undef | ||
393 | cmp x24, #ESR_EL1_EC_BREAKPT_EL0 // debug exception in EL0 | 403 | cmp x24, #ESR_EL1_EC_BREAKPT_EL0 // debug exception in EL0 |
394 | b.ge el0_dbg | 404 | b.ge el0_dbg |
395 | b el0_inv | 405 | b el0_inv |
diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c index 61d7dd29f756..f30852d28590 100644 --- a/arch/arm64/kernel/traps.c +++ b/arch/arm64/kernel/traps.c | |||
@@ -267,7 +267,8 @@ asmlinkage void __exception do_undefinstr(struct pt_regs *regs) | |||
267 | return; | 267 | return; |
268 | #endif | 268 | #endif |
269 | 269 | ||
270 | if (show_unhandled_signals) { | 270 | if (show_unhandled_signals && unhandled_signal(current, SIGILL) && |
271 | printk_ratelimit()) { | ||
271 | pr_info("%s[%d]: undefined instruction: pc=%p\n", | 272 | pr_info("%s[%d]: undefined instruction: pc=%p\n", |
272 | current->comm, task_pid_nr(current), pc); | 273 | current->comm, task_pid_nr(current), pc); |
273 | dump_instr(KERN_INFO, regs); | 274 | dump_instr(KERN_INFO, regs); |
@@ -294,7 +295,7 @@ asmlinkage long do_ni_syscall(struct pt_regs *regs) | |||
294 | } | 295 | } |
295 | #endif | 296 | #endif |
296 | 297 | ||
297 | if (show_unhandled_signals) { | 298 | if (show_unhandled_signals && printk_ratelimit()) { |
298 | pr_info("%s[%d]: syscall %d\n", current->comm, | 299 | pr_info("%s[%d]: syscall %d\n", current->comm, |
299 | task_pid_nr(current), (int)regs->syscallno); | 300 | task_pid_nr(current), (int)regs->syscallno); |
300 | dump_instr("", regs); | 301 | dump_instr("", regs); |
@@ -310,14 +311,20 @@ asmlinkage long do_ni_syscall(struct pt_regs *regs) | |||
310 | */ | 311 | */ |
311 | asmlinkage void bad_mode(struct pt_regs *regs, int reason, unsigned int esr) | 312 | asmlinkage void bad_mode(struct pt_regs *regs, int reason, unsigned int esr) |
312 | { | 313 | { |
314 | siginfo_t info; | ||
315 | void __user *pc = (void __user *)instruction_pointer(regs); | ||
313 | console_verbose(); | 316 | console_verbose(); |
314 | 317 | ||
315 | pr_crit("Bad mode in %s handler detected, code 0x%08x\n", | 318 | pr_crit("Bad mode in %s handler detected, code 0x%08x\n", |
316 | handler[reason], esr); | 319 | handler[reason], esr); |
320 | __show_regs(regs); | ||
321 | |||
322 | info.si_signo = SIGILL; | ||
323 | info.si_errno = 0; | ||
324 | info.si_code = ILL_ILLOPC; | ||
325 | info.si_addr = pc; | ||
317 | 326 | ||
318 | die("Oops - bad mode", regs, 0); | 327 | arm64_notify_die("Oops - bad mode", regs, &info, 0); |
319 | local_irq_disable(); | ||
320 | panic("bad mode"); | ||
321 | } | 328 | } |
322 | 329 | ||
323 | void __pte_error(const char *file, int line, unsigned long val) | 330 | void __pte_error(const char *file, int line, unsigned long val) |
diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c index 98af6e760cce..1426468b77f3 100644 --- a/arch/arm64/mm/fault.c +++ b/arch/arm64/mm/fault.c | |||
@@ -113,7 +113,8 @@ static void __do_user_fault(struct task_struct *tsk, unsigned long addr, | |||
113 | { | 113 | { |
114 | struct siginfo si; | 114 | struct siginfo si; |
115 | 115 | ||
116 | if (show_unhandled_signals) { | 116 | if (show_unhandled_signals && unhandled_signal(tsk, sig) && |
117 | printk_ratelimit()) { | ||
117 | pr_info("%s[%d]: unhandled %s (%d) at 0x%08lx, esr 0x%03x\n", | 118 | pr_info("%s[%d]: unhandled %s (%d) at 0x%08lx, esr 0x%03x\n", |
118 | tsk->comm, task_pid_nr(tsk), fault_name(esr), sig, | 119 | tsk->comm, task_pid_nr(tsk), fault_name(esr), sig, |
119 | addr, esr); | 120 | addr, esr); |
diff --git a/arch/m68k/configs/amiga_defconfig b/arch/m68k/configs/amiga_defconfig index 90d3109c82f4..19325e117eea 100644 --- a/arch/m68k/configs/amiga_defconfig +++ b/arch/m68k/configs/amiga_defconfig | |||
@@ -1,55 +1,78 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | ||
2 | CONFIG_LOCALVERSION="-amiga" | 1 | CONFIG_LOCALVERSION="-amiga" |
3 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
4 | CONFIG_POSIX_MQUEUE=y | 3 | CONFIG_POSIX_MQUEUE=y |
4 | CONFIG_FHANDLE=y | ||
5 | CONFIG_BSD_PROCESS_ACCT=y | 5 | CONFIG_BSD_PROCESS_ACCT=y |
6 | CONFIG_LOG_BUF_SHIFT=14 | 6 | CONFIG_BSD_PROCESS_ACCT_V3=y |
7 | CONFIG_RELAY=y | 7 | CONFIG_LOG_BUF_SHIFT=16 |
8 | # CONFIG_UTS_NS is not set | ||
9 | # CONFIG_IPC_NS is not set | ||
10 | # CONFIG_PID_NS is not set | ||
11 | # CONFIG_NET_NS is not set | ||
8 | CONFIG_BLK_DEV_INITRD=y | 12 | CONFIG_BLK_DEV_INITRD=y |
9 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
10 | CONFIG_SLAB=y | 13 | CONFIG_SLAB=y |
11 | CONFIG_MODULES=y | 14 | CONFIG_MODULES=y |
12 | CONFIG_MODULE_UNLOAD=y | 15 | CONFIG_MODULE_UNLOAD=y |
13 | CONFIG_AMIGA=y | 16 | CONFIG_PARTITION_ADVANCED=y |
17 | CONFIG_ATARI_PARTITION=y | ||
18 | CONFIG_MAC_PARTITION=y | ||
19 | CONFIG_BSD_DISKLABEL=y | ||
20 | CONFIG_MINIX_SUBPARTITION=y | ||
21 | CONFIG_SOLARIS_X86_PARTITION=y | ||
22 | CONFIG_UNIXWARE_DISKLABEL=y | ||
23 | CONFIG_SUN_PARTITION=y | ||
24 | # CONFIG_EFI_PARTITION is not set | ||
25 | CONFIG_SYSV68_PARTITION=y | ||
26 | CONFIG_IOSCHED_DEADLINE=m | ||
14 | CONFIG_M68020=y | 27 | CONFIG_M68020=y |
15 | CONFIG_M68030=y | 28 | CONFIG_M68030=y |
16 | CONFIG_M68040=y | 29 | CONFIG_M68040=y |
17 | CONFIG_M68060=y | 30 | CONFIG_M68060=y |
18 | CONFIG_BINFMT_AOUT=m | 31 | CONFIG_AMIGA=y |
19 | CONFIG_BINFMT_MISC=m | ||
20 | CONFIG_ZORRO=y | 32 | CONFIG_ZORRO=y |
21 | CONFIG_AMIGA_PCMCIA=y | 33 | CONFIG_AMIGA_PCMCIA=y |
22 | CONFIG_HEARTBEAT=y | ||
23 | CONFIG_PROC_HARDWARE=y | ||
24 | CONFIG_ZORRO_NAMES=y | 34 | CONFIG_ZORRO_NAMES=y |
35 | # CONFIG_COMPACTION is not set | ||
36 | CONFIG_CLEANCACHE=y | ||
37 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
38 | CONFIG_BINFMT_AOUT=m | ||
39 | CONFIG_BINFMT_MISC=m | ||
25 | CONFIG_NET=y | 40 | CONFIG_NET=y |
26 | CONFIG_PACKET=y | 41 | CONFIG_PACKET=y |
42 | CONFIG_PACKET_DIAG=m | ||
27 | CONFIG_UNIX=y | 43 | CONFIG_UNIX=y |
44 | CONFIG_UNIX_DIAG=m | ||
45 | CONFIG_XFRM_MIGRATE=y | ||
28 | CONFIG_NET_KEY=y | 46 | CONFIG_NET_KEY=y |
29 | CONFIG_NET_KEY_MIGRATE=y | ||
30 | CONFIG_INET=y | 47 | CONFIG_INET=y |
31 | CONFIG_IP_PNP=y | 48 | CONFIG_IP_PNP=y |
49 | CONFIG_IP_PNP_DHCP=y | ||
50 | CONFIG_IP_PNP_BOOTP=y | ||
51 | CONFIG_IP_PNP_RARP=y | ||
32 | CONFIG_NET_IPIP=m | 52 | CONFIG_NET_IPIP=m |
53 | CONFIG_NET_IPGRE_DEMUX=m | ||
33 | CONFIG_NET_IPGRE=m | 54 | CONFIG_NET_IPGRE=m |
34 | CONFIG_SYN_COOKIES=y | 55 | CONFIG_SYN_COOKIES=y |
56 | CONFIG_NET_IPVTI=m | ||
35 | CONFIG_INET_AH=m | 57 | CONFIG_INET_AH=m |
36 | CONFIG_INET_ESP=m | 58 | CONFIG_INET_ESP=m |
37 | CONFIG_INET_IPCOMP=m | 59 | CONFIG_INET_IPCOMP=m |
38 | CONFIG_INET_XFRM_MODE_TRANSPORT=m | 60 | CONFIG_INET_XFRM_MODE_TRANSPORT=m |
39 | CONFIG_INET_XFRM_MODE_TUNNEL=m | 61 | CONFIG_INET_XFRM_MODE_TUNNEL=m |
40 | CONFIG_INET_XFRM_MODE_BEET=m | 62 | CONFIG_INET_XFRM_MODE_BEET=m |
63 | # CONFIG_INET_LRO is not set | ||
41 | CONFIG_INET_DIAG=m | 64 | CONFIG_INET_DIAG=m |
65 | CONFIG_INET_UDP_DIAG=m | ||
42 | CONFIG_IPV6_PRIVACY=y | 66 | CONFIG_IPV6_PRIVACY=y |
43 | CONFIG_IPV6_ROUTER_PREF=y | 67 | CONFIG_IPV6_ROUTER_PREF=y |
44 | CONFIG_IPV6_ROUTE_INFO=y | ||
45 | CONFIG_INET6_AH=m | 68 | CONFIG_INET6_AH=m |
46 | CONFIG_INET6_ESP=m | 69 | CONFIG_INET6_ESP=m |
47 | CONFIG_INET6_IPCOMP=m | 70 | CONFIG_INET6_IPCOMP=m |
48 | CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m | 71 | CONFIG_IPV6_GRE=m |
49 | CONFIG_IPV6_TUNNEL=m | ||
50 | CONFIG_NETFILTER=y | 72 | CONFIG_NETFILTER=y |
51 | CONFIG_NETFILTER_NETLINK_QUEUE=m | ||
52 | CONFIG_NF_CONNTRACK=m | 73 | CONFIG_NF_CONNTRACK=m |
74 | CONFIG_NF_CONNTRACK_ZONES=y | ||
75 | # CONFIG_NF_CONNTRACK_PROCFS is not set | ||
53 | # CONFIG_NF_CT_PROTO_DCCP is not set | 76 | # CONFIG_NF_CT_PROTO_DCCP is not set |
54 | CONFIG_NF_CT_PROTO_UDPLITE=m | 77 | CONFIG_NF_CT_PROTO_UDPLITE=m |
55 | CONFIG_NF_CONNTRACK_AMANDA=m | 78 | CONFIG_NF_CONNTRACK_AMANDA=m |
@@ -57,25 +80,37 @@ CONFIG_NF_CONNTRACK_FTP=m | |||
57 | CONFIG_NF_CONNTRACK_H323=m | 80 | CONFIG_NF_CONNTRACK_H323=m |
58 | CONFIG_NF_CONNTRACK_IRC=m | 81 | CONFIG_NF_CONNTRACK_IRC=m |
59 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m | 82 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m |
83 | CONFIG_NF_CONNTRACK_SNMP=m | ||
60 | CONFIG_NF_CONNTRACK_PPTP=m | 84 | CONFIG_NF_CONNTRACK_PPTP=m |
61 | CONFIG_NF_CONNTRACK_SANE=m | 85 | CONFIG_NF_CONNTRACK_SANE=m |
62 | CONFIG_NF_CONNTRACK_SIP=m | 86 | CONFIG_NF_CONNTRACK_SIP=m |
63 | CONFIG_NF_CONNTRACK_TFTP=m | 87 | CONFIG_NF_CONNTRACK_TFTP=m |
88 | CONFIG_NETFILTER_XT_SET=m | ||
89 | CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m | ||
64 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 90 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
65 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 91 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
66 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | 92 | CONFIG_NETFILTER_XT_TARGET_DSCP=m |
93 | CONFIG_NETFILTER_XT_TARGET_HMARK=m | ||
94 | CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m | ||
95 | CONFIG_NETFILTER_XT_TARGET_LOG=m | ||
67 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 96 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
68 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 97 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
69 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | 98 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m |
99 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | ||
100 | CONFIG_NETFILTER_XT_TARGET_TEE=m | ||
70 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | 101 | CONFIG_NETFILTER_XT_TARGET_TRACE=m |
71 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m | 102 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m |
72 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m | 103 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m |
104 | CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m | ||
105 | CONFIG_NETFILTER_XT_MATCH_BPF=m | ||
73 | CONFIG_NETFILTER_XT_MATCH_CLUSTER=m | 106 | CONFIG_NETFILTER_XT_MATCH_CLUSTER=m |
74 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m | 107 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m |
75 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m | 108 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m |
109 | CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m | ||
76 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m | 110 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m |
77 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m | 111 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m |
78 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | 112 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m |
113 | CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m | ||
79 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | 114 | CONFIG_NETFILTER_XT_MATCH_DSCP=m |
80 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 115 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
81 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | 116 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m |
@@ -86,6 +121,8 @@ CONFIG_NETFILTER_XT_MATCH_LIMIT=m | |||
86 | CONFIG_NETFILTER_XT_MATCH_MAC=m | 121 | CONFIG_NETFILTER_XT_MATCH_MAC=m |
87 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 122 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
88 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | 123 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m |
124 | CONFIG_NETFILTER_XT_MATCH_NFACCT=m | ||
125 | CONFIG_NETFILTER_XT_MATCH_OSF=m | ||
89 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | 126 | CONFIG_NETFILTER_XT_MATCH_OWNER=m |
90 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 127 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
91 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 128 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
@@ -99,22 +136,31 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m | |||
99 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 136 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
100 | CONFIG_NETFILTER_XT_MATCH_TIME=m | 137 | CONFIG_NETFILTER_XT_MATCH_TIME=m |
101 | CONFIG_NETFILTER_XT_MATCH_U32=m | 138 | CONFIG_NETFILTER_XT_MATCH_U32=m |
139 | CONFIG_IP_SET=m | ||
140 | CONFIG_IP_SET_BITMAP_IP=m | ||
141 | CONFIG_IP_SET_BITMAP_IPMAC=m | ||
142 | CONFIG_IP_SET_BITMAP_PORT=m | ||
143 | CONFIG_IP_SET_HASH_IP=m | ||
144 | CONFIG_IP_SET_HASH_IPPORT=m | ||
145 | CONFIG_IP_SET_HASH_IPPORTIP=m | ||
146 | CONFIG_IP_SET_HASH_IPPORTNET=m | ||
147 | CONFIG_IP_SET_HASH_NET=m | ||
148 | CONFIG_IP_SET_HASH_NETPORT=m | ||
149 | CONFIG_IP_SET_HASH_NETIFACE=m | ||
150 | CONFIG_IP_SET_LIST_SET=m | ||
102 | CONFIG_NF_CONNTRACK_IPV4=m | 151 | CONFIG_NF_CONNTRACK_IPV4=m |
103 | CONFIG_IP_NF_QUEUE=m | ||
104 | CONFIG_IP_NF_IPTABLES=m | 152 | CONFIG_IP_NF_IPTABLES=m |
105 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
106 | CONFIG_IP_NF_MATCH_AH=m | 153 | CONFIG_IP_NF_MATCH_AH=m |
107 | CONFIG_IP_NF_MATCH_ECN=m | 154 | CONFIG_IP_NF_MATCH_ECN=m |
155 | CONFIG_IP_NF_MATCH_RPFILTER=m | ||
108 | CONFIG_IP_NF_MATCH_TTL=m | 156 | CONFIG_IP_NF_MATCH_TTL=m |
109 | CONFIG_IP_NF_FILTER=m | 157 | CONFIG_IP_NF_FILTER=m |
110 | CONFIG_IP_NF_TARGET_REJECT=m | 158 | CONFIG_IP_NF_TARGET_REJECT=m |
111 | CONFIG_IP_NF_TARGET_LOG=m | ||
112 | CONFIG_IP_NF_TARGET_ULOG=m | 159 | CONFIG_IP_NF_TARGET_ULOG=m |
113 | CONFIG_NF_NAT=m | 160 | CONFIG_NF_NAT_IPV4=m |
114 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 161 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
115 | CONFIG_IP_NF_TARGET_NETMAP=m | 162 | CONFIG_IP_NF_TARGET_NETMAP=m |
116 | CONFIG_IP_NF_TARGET_REDIRECT=m | 163 | CONFIG_IP_NF_TARGET_REDIRECT=m |
117 | CONFIG_NF_NAT_SNMP_BASIC=m | ||
118 | CONFIG_IP_NF_MANGLE=m | 164 | CONFIG_IP_NF_MANGLE=m |
119 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | 165 | CONFIG_IP_NF_TARGET_CLUSTERIP=m |
120 | CONFIG_IP_NF_TARGET_ECN=m | 166 | CONFIG_IP_NF_TARGET_ECN=m |
@@ -124,7 +170,6 @@ CONFIG_IP_NF_ARPTABLES=m | |||
124 | CONFIG_IP_NF_ARPFILTER=m | 170 | CONFIG_IP_NF_ARPFILTER=m |
125 | CONFIG_IP_NF_ARP_MANGLE=m | 171 | CONFIG_IP_NF_ARP_MANGLE=m |
126 | CONFIG_NF_CONNTRACK_IPV6=m | 172 | CONFIG_NF_CONNTRACK_IPV6=m |
127 | CONFIG_IP6_NF_QUEUE=m | ||
128 | CONFIG_IP6_NF_IPTABLES=m | 173 | CONFIG_IP6_NF_IPTABLES=m |
129 | CONFIG_IP6_NF_MATCH_AH=m | 174 | CONFIG_IP6_NF_MATCH_AH=m |
130 | CONFIG_IP6_NF_MATCH_EUI64=m | 175 | CONFIG_IP6_NF_MATCH_EUI64=m |
@@ -133,18 +178,30 @@ CONFIG_IP6_NF_MATCH_OPTS=m | |||
133 | CONFIG_IP6_NF_MATCH_HL=m | 178 | CONFIG_IP6_NF_MATCH_HL=m |
134 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 179 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
135 | CONFIG_IP6_NF_MATCH_MH=m | 180 | CONFIG_IP6_NF_MATCH_MH=m |
181 | CONFIG_IP6_NF_MATCH_RPFILTER=m | ||
136 | CONFIG_IP6_NF_MATCH_RT=m | 182 | CONFIG_IP6_NF_MATCH_RT=m |
137 | CONFIG_IP6_NF_TARGET_HL=m | 183 | CONFIG_IP6_NF_TARGET_HL=m |
138 | CONFIG_IP6_NF_TARGET_LOG=m | ||
139 | CONFIG_IP6_NF_FILTER=m | 184 | CONFIG_IP6_NF_FILTER=m |
140 | CONFIG_IP6_NF_TARGET_REJECT=m | 185 | CONFIG_IP6_NF_TARGET_REJECT=m |
141 | CONFIG_IP6_NF_MANGLE=m | 186 | CONFIG_IP6_NF_MANGLE=m |
142 | CONFIG_IP6_NF_RAW=m | 187 | CONFIG_IP6_NF_RAW=m |
188 | CONFIG_NF_NAT_IPV6=m | ||
189 | CONFIG_IP6_NF_TARGET_MASQUERADE=m | ||
190 | CONFIG_IP6_NF_TARGET_NPT=m | ||
143 | CONFIG_IP_DCCP=m | 191 | CONFIG_IP_DCCP=m |
144 | # CONFIG_IP_DCCP_CCID3 is not set | 192 | # CONFIG_IP_DCCP_CCID3 is not set |
193 | CONFIG_SCTP_COOKIE_HMAC_SHA1=y | ||
194 | CONFIG_RDS=m | ||
195 | CONFIG_RDS_TCP=m | ||
196 | CONFIG_L2TP=m | ||
145 | CONFIG_ATALK=m | 197 | CONFIG_ATALK=m |
198 | CONFIG_BATMAN_ADV=m | ||
199 | CONFIG_BATMAN_ADV_DAT=y | ||
200 | # CONFIG_WIRELESS is not set | ||
146 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 201 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
202 | CONFIG_DEVTMPFS=y | ||
147 | # CONFIG_FIRMWARE_IN_KERNEL is not set | 203 | # CONFIG_FIRMWARE_IN_KERNEL is not set |
204 | # CONFIG_FW_LOADER_USER_HELPER is not set | ||
148 | CONFIG_CONNECTOR=m | 205 | CONFIG_CONNECTOR=m |
149 | CONFIG_PARPORT=m | 206 | CONFIG_PARPORT=m |
150 | CONFIG_PARPORT_AMIGA=m | 207 | CONFIG_PARPORT_AMIGA=m |
@@ -154,11 +211,13 @@ CONFIG_AMIGA_FLOPPY=y | |||
154 | CONFIG_AMIGA_Z2RAM=y | 211 | CONFIG_AMIGA_Z2RAM=y |
155 | CONFIG_BLK_DEV_LOOP=y | 212 | CONFIG_BLK_DEV_LOOP=y |
156 | CONFIG_BLK_DEV_CRYPTOLOOP=m | 213 | CONFIG_BLK_DEV_CRYPTOLOOP=m |
214 | CONFIG_BLK_DEV_DRBD=m | ||
157 | CONFIG_BLK_DEV_NBD=m | 215 | CONFIG_BLK_DEV_NBD=m |
158 | CONFIG_BLK_DEV_RAM=y | 216 | CONFIG_BLK_DEV_RAM=y |
159 | CONFIG_CDROM_PKTCDVD=m | 217 | CONFIG_CDROM_PKTCDVD=m |
160 | CONFIG_ATA_OVER_ETH=m | 218 | CONFIG_ATA_OVER_ETH=m |
161 | CONFIG_IDE=y | 219 | CONFIG_IDE=y |
220 | CONFIG_IDE_GD_ATAPI=y | ||
162 | CONFIG_BLK_DEV_IDECD=y | 221 | CONFIG_BLK_DEV_IDECD=y |
163 | CONFIG_BLK_DEV_GAYLE=y | 222 | CONFIG_BLK_DEV_GAYLE=y |
164 | CONFIG_BLK_DEV_BUDDHA=y | 223 | CONFIG_BLK_DEV_BUDDHA=y |
@@ -172,57 +231,77 @@ CONFIG_BLK_DEV_SR=y | |||
172 | CONFIG_BLK_DEV_SR_VENDOR=y | 231 | CONFIG_BLK_DEV_SR_VENDOR=y |
173 | CONFIG_CHR_DEV_SG=m | 232 | CONFIG_CHR_DEV_SG=m |
174 | CONFIG_SCSI_CONSTANTS=y | 233 | CONFIG_SCSI_CONSTANTS=y |
175 | CONFIG_SCSI_SAS_LIBSAS=m | 234 | CONFIG_SCSI_SAS_ATTRS=m |
176 | # CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set | ||
177 | CONFIG_SCSI_SRP_ATTRS=m | ||
178 | CONFIG_SCSI_SRP_TGT_ATTRS=y | ||
179 | CONFIG_ISCSI_TCP=m | 235 | CONFIG_ISCSI_TCP=m |
236 | CONFIG_ISCSI_BOOT_SYSFS=m | ||
180 | CONFIG_A3000_SCSI=y | 237 | CONFIG_A3000_SCSI=y |
181 | CONFIG_A2091_SCSI=y | 238 | CONFIG_A2091_SCSI=y |
182 | CONFIG_GVP11_SCSI=y | 239 | CONFIG_GVP11_SCSI=y |
183 | CONFIG_SCSI_A4000T=y | 240 | CONFIG_SCSI_A4000T=y |
184 | CONFIG_SCSI_ZORRO7XX=y | 241 | CONFIG_SCSI_ZORRO7XX=y |
185 | CONFIG_MD=y | 242 | CONFIG_MD=y |
186 | CONFIG_BLK_DEV_MD=m | ||
187 | CONFIG_MD_LINEAR=m | 243 | CONFIG_MD_LINEAR=m |
188 | CONFIG_MD_RAID0=m | 244 | CONFIG_MD_RAID0=m |
189 | CONFIG_MD_RAID1=m | ||
190 | CONFIG_MD_RAID456=m | ||
191 | CONFIG_BLK_DEV_DM=m | 245 | CONFIG_BLK_DEV_DM=m |
192 | CONFIG_DM_CRYPT=m | 246 | CONFIG_DM_CRYPT=m |
193 | CONFIG_DM_SNAPSHOT=m | 247 | CONFIG_DM_SNAPSHOT=m |
248 | CONFIG_DM_THIN_PROVISIONING=m | ||
249 | CONFIG_DM_CACHE=m | ||
194 | CONFIG_DM_MIRROR=m | 250 | CONFIG_DM_MIRROR=m |
251 | CONFIG_DM_RAID=m | ||
195 | CONFIG_DM_ZERO=m | 252 | CONFIG_DM_ZERO=m |
196 | CONFIG_DM_MULTIPATH=m | 253 | CONFIG_DM_MULTIPATH=m |
197 | CONFIG_DM_UEVENT=y | 254 | CONFIG_DM_UEVENT=y |
255 | CONFIG_TARGET_CORE=m | ||
256 | CONFIG_TCM_IBLOCK=m | ||
257 | CONFIG_TCM_FILEIO=m | ||
258 | CONFIG_TCM_PSCSI=m | ||
198 | CONFIG_NETDEVICES=y | 259 | CONFIG_NETDEVICES=y |
199 | CONFIG_DUMMY=m | 260 | CONFIG_DUMMY=m |
200 | CONFIG_MACVLAN=m | ||
201 | CONFIG_EQUALIZER=m | 261 | CONFIG_EQUALIZER=m |
262 | CONFIG_NET_TEAM=m | ||
263 | CONFIG_NET_TEAM_MODE_BROADCAST=m | ||
264 | CONFIG_NET_TEAM_MODE_ROUNDROBIN=m | ||
265 | CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m | ||
266 | CONFIG_NET_TEAM_MODE_LOADBALANCE=m | ||
267 | CONFIG_VXLAN=m | ||
268 | CONFIG_NETCONSOLE=m | ||
269 | CONFIG_NETCONSOLE_DYNAMIC=y | ||
202 | CONFIG_VETH=m | 270 | CONFIG_VETH=m |
203 | CONFIG_NET_ETHERNET=y | 271 | # CONFIG_NET_VENDOR_3COM is not set |
204 | CONFIG_ARIADNE=y | ||
205 | CONFIG_A2065=y | 272 | CONFIG_A2065=y |
273 | CONFIG_ARIADNE=y | ||
274 | # CONFIG_NET_CADENCE is not set | ||
275 | # CONFIG_NET_VENDOR_BROADCOM is not set | ||
276 | # CONFIG_NET_VENDOR_CIRRUS is not set | ||
277 | # CONFIG_NET_VENDOR_FUJITSU is not set | ||
278 | # CONFIG_NET_VENDOR_HP is not set | ||
279 | # CONFIG_NET_VENDOR_INTEL is not set | ||
280 | # CONFIG_NET_VENDOR_MARVELL is not set | ||
281 | # CONFIG_NET_VENDOR_MICREL is not set | ||
206 | CONFIG_HYDRA=y | 282 | CONFIG_HYDRA=y |
207 | CONFIG_ZORRO8390=y | ||
208 | CONFIG_APNE=y | 283 | CONFIG_APNE=y |
209 | # CONFIG_NETDEV_1000 is not set | 284 | CONFIG_ZORRO8390=y |
210 | # CONFIG_NETDEV_10000 is not set | 285 | # CONFIG_NET_VENDOR_SEEQ is not set |
286 | # CONFIG_NET_VENDOR_SMSC is not set | ||
287 | # CONFIG_NET_VENDOR_STMICRO is not set | ||
288 | # CONFIG_NET_VENDOR_WIZNET is not set | ||
211 | CONFIG_PPP=m | 289 | CONFIG_PPP=m |
212 | CONFIG_PPP_FILTER=y | ||
213 | CONFIG_PPP_ASYNC=m | ||
214 | CONFIG_PPP_SYNC_TTY=m | ||
215 | CONFIG_PPP_DEFLATE=m | ||
216 | CONFIG_PPP_BSDCOMP=m | 290 | CONFIG_PPP_BSDCOMP=m |
291 | CONFIG_PPP_DEFLATE=m | ||
292 | CONFIG_PPP_FILTER=y | ||
217 | CONFIG_PPP_MPPE=m | 293 | CONFIG_PPP_MPPE=m |
218 | CONFIG_PPPOE=m | 294 | CONFIG_PPPOE=m |
295 | CONFIG_PPTP=m | ||
296 | CONFIG_PPPOL2TP=m | ||
297 | CONFIG_PPP_ASYNC=m | ||
298 | CONFIG_PPP_SYNC_TTY=m | ||
219 | CONFIG_SLIP=m | 299 | CONFIG_SLIP=m |
220 | CONFIG_SLIP_COMPRESSED=y | 300 | CONFIG_SLIP_COMPRESSED=y |
221 | CONFIG_SLIP_SMART=y | 301 | CONFIG_SLIP_SMART=y |
222 | CONFIG_SLIP_MODE_SLIP6=y | 302 | CONFIG_SLIP_MODE_SLIP6=y |
223 | CONFIG_NETCONSOLE=m | 303 | # CONFIG_WLAN is not set |
224 | CONFIG_NETCONSOLE_DYNAMIC=y | 304 | CONFIG_INPUT_EVDEV=m |
225 | CONFIG_INPUT_FF_MEMLESS=m | ||
226 | CONFIG_KEYBOARD_AMIGA=y | 305 | CONFIG_KEYBOARD_AMIGA=y |
227 | # CONFIG_KEYBOARD_ATKBD is not set | 306 | # CONFIG_KEYBOARD_ATKBD is not set |
228 | # CONFIG_MOUSE_PS2 is not set | 307 | # CONFIG_MOUSE_PS2 is not set |
@@ -233,11 +312,14 @@ CONFIG_INPUT_MISC=y | |||
233 | CONFIG_INPUT_M68K_BEEP=m | 312 | CONFIG_INPUT_M68K_BEEP=m |
234 | # CONFIG_SERIO is not set | 313 | # CONFIG_SERIO is not set |
235 | CONFIG_VT_HW_CONSOLE_BINDING=y | 314 | CONFIG_VT_HW_CONSOLE_BINDING=y |
315 | # CONFIG_LEGACY_PTYS is not set | ||
236 | # CONFIG_DEVKMEM is not set | 316 | # CONFIG_DEVKMEM is not set |
237 | CONFIG_PRINTER=m | 317 | CONFIG_PRINTER=m |
238 | # CONFIG_HW_RANDOM is not set | 318 | # CONFIG_HW_RANDOM is not set |
239 | CONFIG_GEN_RTC=m | 319 | CONFIG_NTP_PPS=y |
240 | CONFIG_GEN_RTC_X=y | 320 | CONFIG_PPS_CLIENT_LDISC=m |
321 | CONFIG_PPS_CLIENT_PARPORT=m | ||
322 | CONFIG_PTP_1588_CLOCK=m | ||
241 | # CONFIG_HWMON is not set | 323 | # CONFIG_HWMON is not set |
242 | CONFIG_FB=y | 324 | CONFIG_FB=y |
243 | CONFIG_FB_CIRRUS=y | 325 | CONFIG_FB_CIRRUS=y |
@@ -252,48 +334,64 @@ CONFIG_SOUND=m | |||
252 | CONFIG_DMASOUND_PAULA=m | 334 | CONFIG_DMASOUND_PAULA=m |
253 | CONFIG_HID=m | 335 | CONFIG_HID=m |
254 | CONFIG_HIDRAW=y | 336 | CONFIG_HIDRAW=y |
337 | CONFIG_UHID=m | ||
338 | # CONFIG_HID_GENERIC is not set | ||
255 | # CONFIG_USB_SUPPORT is not set | 339 | # CONFIG_USB_SUPPORT is not set |
340 | CONFIG_RTC_CLASS=y | ||
341 | CONFIG_RTC_DRV_MSM6242=m | ||
342 | CONFIG_RTC_DRV_RP5C01=m | ||
343 | # CONFIG_IOMMU_SUPPORT is not set | ||
344 | CONFIG_HEARTBEAT=y | ||
345 | CONFIG_PROC_HARDWARE=y | ||
256 | CONFIG_AMIGA_BUILTIN_SERIAL=y | 346 | CONFIG_AMIGA_BUILTIN_SERIAL=y |
257 | CONFIG_SERIAL_CONSOLE=y | 347 | CONFIG_SERIAL_CONSOLE=y |
258 | CONFIG_EXT2_FS=y | 348 | CONFIG_EXT2_FS=y |
259 | CONFIG_EXT3_FS=y | 349 | CONFIG_EXT3_FS=y |
260 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | 350 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set |
261 | # CONFIG_EXT3_FS_XATTR is not set | 351 | # CONFIG_EXT3_FS_XATTR is not set |
352 | CONFIG_EXT4_FS=y | ||
262 | CONFIG_REISERFS_FS=m | 353 | CONFIG_REISERFS_FS=m |
263 | CONFIG_JFS_FS=m | 354 | CONFIG_JFS_FS=m |
264 | CONFIG_XFS_FS=m | 355 | CONFIG_XFS_FS=m |
265 | CONFIG_OCFS2_FS=m | 356 | CONFIG_OCFS2_FS=m |
266 | # CONFIG_OCFS2_FS_STATS is not set | ||
267 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 357 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
358 | CONFIG_FANOTIFY=y | ||
268 | CONFIG_QUOTA_NETLINK_INTERFACE=y | 359 | CONFIG_QUOTA_NETLINK_INTERFACE=y |
269 | # CONFIG_PRINT_QUOTA_WARNING is not set | 360 | # CONFIG_PRINT_QUOTA_WARNING is not set |
270 | CONFIG_AUTOFS_FS=m | ||
271 | CONFIG_AUTOFS4_FS=m | 361 | CONFIG_AUTOFS4_FS=m |
272 | CONFIG_FUSE_FS=m | 362 | CONFIG_FUSE_FS=m |
363 | CONFIG_CUSE=m | ||
273 | CONFIG_ISO9660_FS=y | 364 | CONFIG_ISO9660_FS=y |
274 | CONFIG_JOLIET=y | 365 | CONFIG_JOLIET=y |
275 | CONFIG_ZISOFS=y | 366 | CONFIG_ZISOFS=y |
276 | CONFIG_UDF_FS=m | 367 | CONFIG_UDF_FS=m |
277 | CONFIG_MSDOS_FS=y | 368 | CONFIG_MSDOS_FS=m |
278 | CONFIG_VFAT_FS=m | 369 | CONFIG_VFAT_FS=m |
279 | CONFIG_PROC_KCORE=y | 370 | CONFIG_PROC_KCORE=y |
280 | CONFIG_TMPFS=y | 371 | CONFIG_TMPFS=y |
281 | CONFIG_AFFS_FS=m | 372 | CONFIG_AFFS_FS=m |
373 | CONFIG_ECRYPT_FS=m | ||
374 | CONFIG_ECRYPT_FS_MESSAGING=y | ||
282 | CONFIG_HFS_FS=m | 375 | CONFIG_HFS_FS=m |
283 | CONFIG_HFSPLUS_FS=m | 376 | CONFIG_HFSPLUS_FS=m |
284 | CONFIG_CRAMFS=m | 377 | CONFIG_CRAMFS=m |
285 | CONFIG_SQUASHFS=m | 378 | CONFIG_SQUASHFS=m |
286 | CONFIG_MINIX_FS=y | 379 | CONFIG_SQUASHFS_LZO=y |
380 | CONFIG_MINIX_FS=m | ||
381 | CONFIG_OMFS_FS=m | ||
287 | CONFIG_HPFS_FS=m | 382 | CONFIG_HPFS_FS=m |
383 | CONFIG_QNX4FS_FS=m | ||
384 | CONFIG_QNX6FS_FS=m | ||
288 | CONFIG_SYSV_FS=m | 385 | CONFIG_SYSV_FS=m |
289 | CONFIG_UFS_FS=m | 386 | CONFIG_UFS_FS=m |
290 | CONFIG_NFS_FS=y | 387 | CONFIG_NFS_FS=y |
291 | CONFIG_NFS_V3=y | ||
292 | CONFIG_NFS_V4=y | 388 | CONFIG_NFS_V4=y |
389 | CONFIG_NFS_SWAP=y | ||
390 | CONFIG_ROOT_NFS=y | ||
293 | CONFIG_NFSD=m | 391 | CONFIG_NFSD=m |
294 | CONFIG_NFSD_V3=y | 392 | CONFIG_NFSD_V3=y |
295 | CONFIG_SMB_FS=m | 393 | CONFIG_CIFS=m |
296 | CONFIG_SMB_NLS_DEFAULT=y | 394 | # CONFIG_CIFS_DEBUG is not set |
297 | CONFIG_CODA_FS=m | 395 | CONFIG_CODA_FS=m |
298 | CONFIG_NLS_CODEPAGE_437=y | 396 | CONFIG_NLS_CODEPAGE_437=y |
299 | CONFIG_NLS_CODEPAGE_737=m | 397 | CONFIG_NLS_CODEPAGE_737=m |
@@ -332,10 +430,23 @@ CONFIG_NLS_ISO8859_14=m | |||
332 | CONFIG_NLS_ISO8859_15=m | 430 | CONFIG_NLS_ISO8859_15=m |
333 | CONFIG_NLS_KOI8_R=m | 431 | CONFIG_NLS_KOI8_R=m |
334 | CONFIG_NLS_KOI8_U=m | 432 | CONFIG_NLS_KOI8_U=m |
433 | CONFIG_NLS_MAC_ROMAN=m | ||
434 | CONFIG_NLS_MAC_CELTIC=m | ||
435 | CONFIG_NLS_MAC_CENTEURO=m | ||
436 | CONFIG_NLS_MAC_CROATIAN=m | ||
437 | CONFIG_NLS_MAC_CYRILLIC=m | ||
438 | CONFIG_NLS_MAC_GAELIC=m | ||
439 | CONFIG_NLS_MAC_GREEK=m | ||
440 | CONFIG_NLS_MAC_ICELAND=m | ||
441 | CONFIG_NLS_MAC_INUIT=m | ||
442 | CONFIG_NLS_MAC_ROMANIAN=m | ||
443 | CONFIG_NLS_MAC_TURKISH=m | ||
335 | CONFIG_DLM=m | 444 | CONFIG_DLM=m |
336 | CONFIG_MAGIC_SYSRQ=y | 445 | CONFIG_MAGIC_SYSRQ=y |
337 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 446 | CONFIG_ASYNC_RAID6_TEST=m |
338 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 447 | CONFIG_ENCRYPTED_KEYS=m |
448 | CONFIG_CRYPTO_MANAGER=y | ||
449 | CONFIG_CRYPTO_USER=m | ||
339 | CONFIG_CRYPTO_NULL=m | 450 | CONFIG_CRYPTO_NULL=m |
340 | CONFIG_CRYPTO_CRYPTD=m | 451 | CONFIG_CRYPTO_CRYPTD=m |
341 | CONFIG_CRYPTO_TEST=m | 452 | CONFIG_CRYPTO_TEST=m |
@@ -345,19 +456,16 @@ CONFIG_CRYPTO_CTS=m | |||
345 | CONFIG_CRYPTO_LRW=m | 456 | CONFIG_CRYPTO_LRW=m |
346 | CONFIG_CRYPTO_PCBC=m | 457 | CONFIG_CRYPTO_PCBC=m |
347 | CONFIG_CRYPTO_XTS=m | 458 | CONFIG_CRYPTO_XTS=m |
348 | CONFIG_CRYPTO_HMAC=y | ||
349 | CONFIG_CRYPTO_XCBC=m | 459 | CONFIG_CRYPTO_XCBC=m |
350 | CONFIG_CRYPTO_MD4=m | 460 | CONFIG_CRYPTO_VMAC=m |
351 | CONFIG_CRYPTO_MICHAEL_MIC=m | 461 | CONFIG_CRYPTO_MICHAEL_MIC=m |
352 | CONFIG_CRYPTO_RMD128=m | 462 | CONFIG_CRYPTO_RMD128=m |
353 | CONFIG_CRYPTO_RMD160=m | 463 | CONFIG_CRYPTO_RMD160=m |
354 | CONFIG_CRYPTO_RMD256=m | 464 | CONFIG_CRYPTO_RMD256=m |
355 | CONFIG_CRYPTO_RMD320=m | 465 | CONFIG_CRYPTO_RMD320=m |
356 | CONFIG_CRYPTO_SHA256=m | ||
357 | CONFIG_CRYPTO_SHA512=m | 466 | CONFIG_CRYPTO_SHA512=m |
358 | CONFIG_CRYPTO_TGR192=m | 467 | CONFIG_CRYPTO_TGR192=m |
359 | CONFIG_CRYPTO_WP512=m | 468 | CONFIG_CRYPTO_WP512=m |
360 | CONFIG_CRYPTO_AES=m | ||
361 | CONFIG_CRYPTO_ANUBIS=m | 469 | CONFIG_CRYPTO_ANUBIS=m |
362 | CONFIG_CRYPTO_BLOWFISH=m | 470 | CONFIG_CRYPTO_BLOWFISH=m |
363 | CONFIG_CRYPTO_CAMELLIA=m | 471 | CONFIG_CRYPTO_CAMELLIA=m |
@@ -373,6 +481,14 @@ CONFIG_CRYPTO_TWOFISH=m | |||
373 | CONFIG_CRYPTO_ZLIB=m | 481 | CONFIG_CRYPTO_ZLIB=m |
374 | CONFIG_CRYPTO_LZO=m | 482 | CONFIG_CRYPTO_LZO=m |
375 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 483 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
484 | CONFIG_CRYPTO_USER_API_HASH=m | ||
485 | CONFIG_CRYPTO_USER_API_SKCIPHER=m | ||
376 | # CONFIG_CRYPTO_HW is not set | 486 | # CONFIG_CRYPTO_HW is not set |
377 | CONFIG_CRC16=m | ||
378 | CONFIG_CRC_T10DIF=y | 487 | CONFIG_CRC_T10DIF=y |
488 | CONFIG_XZ_DEC_X86=y | ||
489 | CONFIG_XZ_DEC_POWERPC=y | ||
490 | CONFIG_XZ_DEC_IA64=y | ||
491 | CONFIG_XZ_DEC_ARM=y | ||
492 | CONFIG_XZ_DEC_ARMTHUMB=y | ||
493 | CONFIG_XZ_DEC_SPARC=y | ||
494 | CONFIG_XZ_DEC_TEST=m | ||
diff --git a/arch/m68k/configs/apollo_defconfig b/arch/m68k/configs/apollo_defconfig index 8f4f657fdbc6..14dc6ccda7f4 100644 --- a/arch/m68k/configs/apollo_defconfig +++ b/arch/m68k/configs/apollo_defconfig | |||
@@ -1,55 +1,76 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | ||
2 | CONFIG_LOCALVERSION="-apollo" | 1 | CONFIG_LOCALVERSION="-apollo" |
3 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
4 | CONFIG_POSIX_MQUEUE=y | 3 | CONFIG_POSIX_MQUEUE=y |
4 | CONFIG_FHANDLE=y | ||
5 | CONFIG_BSD_PROCESS_ACCT=y | 5 | CONFIG_BSD_PROCESS_ACCT=y |
6 | CONFIG_LOG_BUF_SHIFT=14 | 6 | CONFIG_BSD_PROCESS_ACCT_V3=y |
7 | CONFIG_RELAY=y | 7 | CONFIG_LOG_BUF_SHIFT=16 |
8 | # CONFIG_UTS_NS is not set | ||
9 | # CONFIG_IPC_NS is not set | ||
10 | # CONFIG_PID_NS is not set | ||
11 | # CONFIG_NET_NS is not set | ||
8 | CONFIG_BLK_DEV_INITRD=y | 12 | CONFIG_BLK_DEV_INITRD=y |
9 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
10 | CONFIG_SLAB=y | 13 | CONFIG_SLAB=y |
11 | CONFIG_MODULES=y | 14 | CONFIG_MODULES=y |
12 | CONFIG_MODULE_UNLOAD=y | 15 | CONFIG_MODULE_UNLOAD=y |
13 | CONFIG_APOLLO=y | 16 | CONFIG_PARTITION_ADVANCED=y |
17 | CONFIG_AMIGA_PARTITION=y | ||
18 | CONFIG_ATARI_PARTITION=y | ||
19 | CONFIG_MAC_PARTITION=y | ||
20 | CONFIG_BSD_DISKLABEL=y | ||
21 | CONFIG_MINIX_SUBPARTITION=y | ||
22 | CONFIG_SOLARIS_X86_PARTITION=y | ||
23 | CONFIG_UNIXWARE_DISKLABEL=y | ||
24 | CONFIG_SUN_PARTITION=y | ||
25 | # CONFIG_EFI_PARTITION is not set | ||
26 | CONFIG_SYSV68_PARTITION=y | ||
27 | CONFIG_IOSCHED_DEADLINE=m | ||
14 | CONFIG_M68020=y | 28 | CONFIG_M68020=y |
15 | CONFIG_M68030=y | 29 | CONFIG_M68030=y |
16 | CONFIG_M68040=y | 30 | CONFIG_M68040=y |
17 | CONFIG_M68060=y | 31 | CONFIG_M68060=y |
32 | CONFIG_APOLLO=y | ||
33 | # CONFIG_COMPACTION is not set | ||
34 | CONFIG_CLEANCACHE=y | ||
35 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
18 | CONFIG_BINFMT_AOUT=m | 36 | CONFIG_BINFMT_AOUT=m |
19 | CONFIG_BINFMT_MISC=m | 37 | CONFIG_BINFMT_MISC=m |
20 | CONFIG_HEARTBEAT=y | ||
21 | CONFIG_PROC_HARDWARE=y | ||
22 | CONFIG_NET=y | 38 | CONFIG_NET=y |
23 | CONFIG_PACKET=y | 39 | CONFIG_PACKET=y |
40 | CONFIG_PACKET_DIAG=m | ||
24 | CONFIG_UNIX=y | 41 | CONFIG_UNIX=y |
42 | CONFIG_UNIX_DIAG=m | ||
43 | CONFIG_XFRM_MIGRATE=y | ||
25 | CONFIG_NET_KEY=y | 44 | CONFIG_NET_KEY=y |
26 | CONFIG_NET_KEY_MIGRATE=y | ||
27 | CONFIG_INET=y | 45 | CONFIG_INET=y |
28 | CONFIG_IP_PNP=y | 46 | CONFIG_IP_PNP=y |
29 | CONFIG_IP_PNP_DHCP=y | 47 | CONFIG_IP_PNP_DHCP=y |
30 | CONFIG_IP_PNP_BOOTP=y | 48 | CONFIG_IP_PNP_BOOTP=y |
31 | CONFIG_IP_PNP_RARP=y | 49 | CONFIG_IP_PNP_RARP=y |
32 | CONFIG_NET_IPIP=m | 50 | CONFIG_NET_IPIP=m |
51 | CONFIG_NET_IPGRE_DEMUX=m | ||
33 | CONFIG_NET_IPGRE=m | 52 | CONFIG_NET_IPGRE=m |
34 | CONFIG_SYN_COOKIES=y | 53 | CONFIG_SYN_COOKIES=y |
54 | CONFIG_NET_IPVTI=m | ||
35 | CONFIG_INET_AH=m | 55 | CONFIG_INET_AH=m |
36 | CONFIG_INET_ESP=m | 56 | CONFIG_INET_ESP=m |
37 | CONFIG_INET_IPCOMP=m | 57 | CONFIG_INET_IPCOMP=m |
38 | CONFIG_INET_XFRM_MODE_TRANSPORT=m | 58 | CONFIG_INET_XFRM_MODE_TRANSPORT=m |
39 | CONFIG_INET_XFRM_MODE_TUNNEL=m | 59 | CONFIG_INET_XFRM_MODE_TUNNEL=m |
40 | CONFIG_INET_XFRM_MODE_BEET=m | 60 | CONFIG_INET_XFRM_MODE_BEET=m |
61 | # CONFIG_INET_LRO is not set | ||
41 | CONFIG_INET_DIAG=m | 62 | CONFIG_INET_DIAG=m |
63 | CONFIG_INET_UDP_DIAG=m | ||
42 | CONFIG_IPV6_PRIVACY=y | 64 | CONFIG_IPV6_PRIVACY=y |
43 | CONFIG_IPV6_ROUTER_PREF=y | 65 | CONFIG_IPV6_ROUTER_PREF=y |
44 | CONFIG_IPV6_ROUTE_INFO=y | ||
45 | CONFIG_INET6_AH=m | 66 | CONFIG_INET6_AH=m |
46 | CONFIG_INET6_ESP=m | 67 | CONFIG_INET6_ESP=m |
47 | CONFIG_INET6_IPCOMP=m | 68 | CONFIG_INET6_IPCOMP=m |
48 | CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m | 69 | CONFIG_IPV6_GRE=m |
49 | CONFIG_IPV6_TUNNEL=m | ||
50 | CONFIG_NETFILTER=y | 70 | CONFIG_NETFILTER=y |
51 | CONFIG_NETFILTER_NETLINK_QUEUE=m | ||
52 | CONFIG_NF_CONNTRACK=m | 71 | CONFIG_NF_CONNTRACK=m |
72 | CONFIG_NF_CONNTRACK_ZONES=y | ||
73 | # CONFIG_NF_CONNTRACK_PROCFS is not set | ||
53 | # CONFIG_NF_CT_PROTO_DCCP is not set | 74 | # CONFIG_NF_CT_PROTO_DCCP is not set |
54 | CONFIG_NF_CT_PROTO_UDPLITE=m | 75 | CONFIG_NF_CT_PROTO_UDPLITE=m |
55 | CONFIG_NF_CONNTRACK_AMANDA=m | 76 | CONFIG_NF_CONNTRACK_AMANDA=m |
@@ -57,25 +78,37 @@ CONFIG_NF_CONNTRACK_FTP=m | |||
57 | CONFIG_NF_CONNTRACK_H323=m | 78 | CONFIG_NF_CONNTRACK_H323=m |
58 | CONFIG_NF_CONNTRACK_IRC=m | 79 | CONFIG_NF_CONNTRACK_IRC=m |
59 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m | 80 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m |
81 | CONFIG_NF_CONNTRACK_SNMP=m | ||
60 | CONFIG_NF_CONNTRACK_PPTP=m | 82 | CONFIG_NF_CONNTRACK_PPTP=m |
61 | CONFIG_NF_CONNTRACK_SANE=m | 83 | CONFIG_NF_CONNTRACK_SANE=m |
62 | CONFIG_NF_CONNTRACK_SIP=m | 84 | CONFIG_NF_CONNTRACK_SIP=m |
63 | CONFIG_NF_CONNTRACK_TFTP=m | 85 | CONFIG_NF_CONNTRACK_TFTP=m |
86 | CONFIG_NETFILTER_XT_SET=m | ||
87 | CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m | ||
64 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 88 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
65 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 89 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
66 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | 90 | CONFIG_NETFILTER_XT_TARGET_DSCP=m |
91 | CONFIG_NETFILTER_XT_TARGET_HMARK=m | ||
92 | CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m | ||
93 | CONFIG_NETFILTER_XT_TARGET_LOG=m | ||
67 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 94 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
68 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 95 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
69 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | 96 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m |
97 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | ||
98 | CONFIG_NETFILTER_XT_TARGET_TEE=m | ||
70 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | 99 | CONFIG_NETFILTER_XT_TARGET_TRACE=m |
71 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m | 100 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m |
72 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m | 101 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m |
102 | CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m | ||
103 | CONFIG_NETFILTER_XT_MATCH_BPF=m | ||
73 | CONFIG_NETFILTER_XT_MATCH_CLUSTER=m | 104 | CONFIG_NETFILTER_XT_MATCH_CLUSTER=m |
74 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m | 105 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m |
75 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m | 106 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m |
107 | CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m | ||
76 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m | 108 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m |
77 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m | 109 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m |
78 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | 110 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m |
111 | CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m | ||
79 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | 112 | CONFIG_NETFILTER_XT_MATCH_DSCP=m |
80 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 113 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
81 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | 114 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m |
@@ -86,6 +119,8 @@ CONFIG_NETFILTER_XT_MATCH_LIMIT=m | |||
86 | CONFIG_NETFILTER_XT_MATCH_MAC=m | 119 | CONFIG_NETFILTER_XT_MATCH_MAC=m |
87 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 120 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
88 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | 121 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m |
122 | CONFIG_NETFILTER_XT_MATCH_NFACCT=m | ||
123 | CONFIG_NETFILTER_XT_MATCH_OSF=m | ||
89 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | 124 | CONFIG_NETFILTER_XT_MATCH_OWNER=m |
90 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 125 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
91 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 126 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
@@ -99,22 +134,31 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m | |||
99 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 134 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
100 | CONFIG_NETFILTER_XT_MATCH_TIME=m | 135 | CONFIG_NETFILTER_XT_MATCH_TIME=m |
101 | CONFIG_NETFILTER_XT_MATCH_U32=m | 136 | CONFIG_NETFILTER_XT_MATCH_U32=m |
137 | CONFIG_IP_SET=m | ||
138 | CONFIG_IP_SET_BITMAP_IP=m | ||
139 | CONFIG_IP_SET_BITMAP_IPMAC=m | ||
140 | CONFIG_IP_SET_BITMAP_PORT=m | ||
141 | CONFIG_IP_SET_HASH_IP=m | ||
142 | CONFIG_IP_SET_HASH_IPPORT=m | ||
143 | CONFIG_IP_SET_HASH_IPPORTIP=m | ||
144 | CONFIG_IP_SET_HASH_IPPORTNET=m | ||
145 | CONFIG_IP_SET_HASH_NET=m | ||
146 | CONFIG_IP_SET_HASH_NETPORT=m | ||
147 | CONFIG_IP_SET_HASH_NETIFACE=m | ||
148 | CONFIG_IP_SET_LIST_SET=m | ||
102 | CONFIG_NF_CONNTRACK_IPV4=m | 149 | CONFIG_NF_CONNTRACK_IPV4=m |
103 | CONFIG_IP_NF_QUEUE=m | ||
104 | CONFIG_IP_NF_IPTABLES=m | 150 | CONFIG_IP_NF_IPTABLES=m |
105 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
106 | CONFIG_IP_NF_MATCH_AH=m | 151 | CONFIG_IP_NF_MATCH_AH=m |
107 | CONFIG_IP_NF_MATCH_ECN=m | 152 | CONFIG_IP_NF_MATCH_ECN=m |
153 | CONFIG_IP_NF_MATCH_RPFILTER=m | ||
108 | CONFIG_IP_NF_MATCH_TTL=m | 154 | CONFIG_IP_NF_MATCH_TTL=m |
109 | CONFIG_IP_NF_FILTER=m | 155 | CONFIG_IP_NF_FILTER=m |
110 | CONFIG_IP_NF_TARGET_REJECT=m | 156 | CONFIG_IP_NF_TARGET_REJECT=m |
111 | CONFIG_IP_NF_TARGET_LOG=m | ||
112 | CONFIG_IP_NF_TARGET_ULOG=m | 157 | CONFIG_IP_NF_TARGET_ULOG=m |
113 | CONFIG_NF_NAT=m | 158 | CONFIG_NF_NAT_IPV4=m |
114 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 159 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
115 | CONFIG_IP_NF_TARGET_NETMAP=m | 160 | CONFIG_IP_NF_TARGET_NETMAP=m |
116 | CONFIG_IP_NF_TARGET_REDIRECT=m | 161 | CONFIG_IP_NF_TARGET_REDIRECT=m |
117 | CONFIG_NF_NAT_SNMP_BASIC=m | ||
118 | CONFIG_IP_NF_MANGLE=m | 162 | CONFIG_IP_NF_MANGLE=m |
119 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | 163 | CONFIG_IP_NF_TARGET_CLUSTERIP=m |
120 | CONFIG_IP_NF_TARGET_ECN=m | 164 | CONFIG_IP_NF_TARGET_ECN=m |
@@ -124,7 +168,6 @@ CONFIG_IP_NF_ARPTABLES=m | |||
124 | CONFIG_IP_NF_ARPFILTER=m | 168 | CONFIG_IP_NF_ARPFILTER=m |
125 | CONFIG_IP_NF_ARP_MANGLE=m | 169 | CONFIG_IP_NF_ARP_MANGLE=m |
126 | CONFIG_NF_CONNTRACK_IPV6=m | 170 | CONFIG_NF_CONNTRACK_IPV6=m |
127 | CONFIG_IP6_NF_QUEUE=m | ||
128 | CONFIG_IP6_NF_IPTABLES=m | 171 | CONFIG_IP6_NF_IPTABLES=m |
129 | CONFIG_IP6_NF_MATCH_AH=m | 172 | CONFIG_IP6_NF_MATCH_AH=m |
130 | CONFIG_IP6_NF_MATCH_EUI64=m | 173 | CONFIG_IP6_NF_MATCH_EUI64=m |
@@ -133,21 +176,34 @@ CONFIG_IP6_NF_MATCH_OPTS=m | |||
133 | CONFIG_IP6_NF_MATCH_HL=m | 176 | CONFIG_IP6_NF_MATCH_HL=m |
134 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 177 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
135 | CONFIG_IP6_NF_MATCH_MH=m | 178 | CONFIG_IP6_NF_MATCH_MH=m |
179 | CONFIG_IP6_NF_MATCH_RPFILTER=m | ||
136 | CONFIG_IP6_NF_MATCH_RT=m | 180 | CONFIG_IP6_NF_MATCH_RT=m |
137 | CONFIG_IP6_NF_TARGET_HL=m | 181 | CONFIG_IP6_NF_TARGET_HL=m |
138 | CONFIG_IP6_NF_TARGET_LOG=m | ||
139 | CONFIG_IP6_NF_FILTER=m | 182 | CONFIG_IP6_NF_FILTER=m |
140 | CONFIG_IP6_NF_TARGET_REJECT=m | 183 | CONFIG_IP6_NF_TARGET_REJECT=m |
141 | CONFIG_IP6_NF_MANGLE=m | 184 | CONFIG_IP6_NF_MANGLE=m |
142 | CONFIG_IP6_NF_RAW=m | 185 | CONFIG_IP6_NF_RAW=m |
186 | CONFIG_NF_NAT_IPV6=m | ||
187 | CONFIG_IP6_NF_TARGET_MASQUERADE=m | ||
188 | CONFIG_IP6_NF_TARGET_NPT=m | ||
143 | CONFIG_IP_DCCP=m | 189 | CONFIG_IP_DCCP=m |
144 | # CONFIG_IP_DCCP_CCID3 is not set | 190 | # CONFIG_IP_DCCP_CCID3 is not set |
191 | CONFIG_SCTP_COOKIE_HMAC_SHA1=y | ||
192 | CONFIG_RDS=m | ||
193 | CONFIG_RDS_TCP=m | ||
194 | CONFIG_L2TP=m | ||
145 | CONFIG_ATALK=m | 195 | CONFIG_ATALK=m |
196 | CONFIG_BATMAN_ADV=m | ||
197 | CONFIG_BATMAN_ADV_DAT=y | ||
198 | # CONFIG_WIRELESS is not set | ||
146 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 199 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
200 | CONFIG_DEVTMPFS=y | ||
147 | # CONFIG_FIRMWARE_IN_KERNEL is not set | 201 | # CONFIG_FIRMWARE_IN_KERNEL is not set |
202 | # CONFIG_FW_LOADER_USER_HELPER is not set | ||
148 | CONFIG_CONNECTOR=m | 203 | CONFIG_CONNECTOR=m |
149 | CONFIG_BLK_DEV_LOOP=y | 204 | CONFIG_BLK_DEV_LOOP=y |
150 | CONFIG_BLK_DEV_CRYPTOLOOP=m | 205 | CONFIG_BLK_DEV_CRYPTOLOOP=m |
206 | CONFIG_BLK_DEV_DRBD=m | ||
151 | CONFIG_BLK_DEV_NBD=m | 207 | CONFIG_BLK_DEV_NBD=m |
152 | CONFIG_BLK_DEV_RAM=y | 208 | CONFIG_BLK_DEV_RAM=y |
153 | CONFIG_CDROM_PKTCDVD=m | 209 | CONFIG_CDROM_PKTCDVD=m |
@@ -162,57 +218,74 @@ CONFIG_BLK_DEV_SR=y | |||
162 | CONFIG_BLK_DEV_SR_VENDOR=y | 218 | CONFIG_BLK_DEV_SR_VENDOR=y |
163 | CONFIG_CHR_DEV_SG=m | 219 | CONFIG_CHR_DEV_SG=m |
164 | CONFIG_SCSI_CONSTANTS=y | 220 | CONFIG_SCSI_CONSTANTS=y |
165 | CONFIG_SCSI_SAS_LIBSAS=m | 221 | CONFIG_SCSI_SAS_ATTRS=m |
166 | # CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set | ||
167 | CONFIG_SCSI_SRP_ATTRS=m | ||
168 | CONFIG_SCSI_SRP_TGT_ATTRS=y | ||
169 | CONFIG_ISCSI_TCP=m | 222 | CONFIG_ISCSI_TCP=m |
223 | CONFIG_ISCSI_BOOT_SYSFS=m | ||
170 | CONFIG_MD=y | 224 | CONFIG_MD=y |
171 | CONFIG_BLK_DEV_MD=m | ||
172 | CONFIG_MD_LINEAR=m | 225 | CONFIG_MD_LINEAR=m |
173 | CONFIG_MD_RAID0=m | 226 | CONFIG_MD_RAID0=m |
174 | CONFIG_MD_RAID1=m | ||
175 | CONFIG_MD_RAID456=m | ||
176 | CONFIG_BLK_DEV_DM=m | 227 | CONFIG_BLK_DEV_DM=m |
177 | CONFIG_DM_CRYPT=m | 228 | CONFIG_DM_CRYPT=m |
178 | CONFIG_DM_SNAPSHOT=m | 229 | CONFIG_DM_SNAPSHOT=m |
230 | CONFIG_DM_THIN_PROVISIONING=m | ||
231 | CONFIG_DM_CACHE=m | ||
179 | CONFIG_DM_MIRROR=m | 232 | CONFIG_DM_MIRROR=m |
233 | CONFIG_DM_RAID=m | ||
180 | CONFIG_DM_ZERO=m | 234 | CONFIG_DM_ZERO=m |
181 | CONFIG_DM_MULTIPATH=m | 235 | CONFIG_DM_MULTIPATH=m |
182 | CONFIG_DM_UEVENT=y | 236 | CONFIG_DM_UEVENT=y |
237 | CONFIG_TARGET_CORE=m | ||
238 | CONFIG_TCM_IBLOCK=m | ||
239 | CONFIG_TCM_FILEIO=m | ||
240 | CONFIG_TCM_PSCSI=m | ||
183 | CONFIG_NETDEVICES=y | 241 | CONFIG_NETDEVICES=y |
184 | CONFIG_DUMMY=m | 242 | CONFIG_DUMMY=m |
185 | CONFIG_MACVLAN=m | ||
186 | CONFIG_EQUALIZER=m | 243 | CONFIG_EQUALIZER=m |
244 | CONFIG_NET_TEAM=m | ||
245 | CONFIG_NET_TEAM_MODE_BROADCAST=m | ||
246 | CONFIG_NET_TEAM_MODE_ROUNDROBIN=m | ||
247 | CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m | ||
248 | CONFIG_NET_TEAM_MODE_LOADBALANCE=m | ||
249 | CONFIG_VXLAN=m | ||
250 | CONFIG_NETCONSOLE=m | ||
251 | CONFIG_NETCONSOLE_DYNAMIC=y | ||
187 | CONFIG_VETH=m | 252 | CONFIG_VETH=m |
188 | CONFIG_NET_ETHERNET=y | 253 | # CONFIG_NET_CADENCE is not set |
189 | # CONFIG_NETDEV_1000 is not set | 254 | # CONFIG_NET_VENDOR_BROADCOM is not set |
190 | # CONFIG_NETDEV_10000 is not set | 255 | # CONFIG_NET_VENDOR_INTEL is not set |
256 | # CONFIG_NET_VENDOR_MARVELL is not set | ||
257 | # CONFIG_NET_VENDOR_MICREL is not set | ||
258 | # CONFIG_NET_VENDOR_NATSEMI is not set | ||
259 | # CONFIG_NET_VENDOR_SEEQ is not set | ||
260 | # CONFIG_NET_VENDOR_STMICRO is not set | ||
261 | # CONFIG_NET_VENDOR_WIZNET is not set | ||
191 | CONFIG_PPP=m | 262 | CONFIG_PPP=m |
192 | CONFIG_PPP_FILTER=y | ||
193 | CONFIG_PPP_ASYNC=m | ||
194 | CONFIG_PPP_SYNC_TTY=m | ||
195 | CONFIG_PPP_DEFLATE=m | ||
196 | CONFIG_PPP_BSDCOMP=m | 263 | CONFIG_PPP_BSDCOMP=m |
264 | CONFIG_PPP_DEFLATE=m | ||
265 | CONFIG_PPP_FILTER=y | ||
197 | CONFIG_PPP_MPPE=m | 266 | CONFIG_PPP_MPPE=m |
198 | CONFIG_PPPOE=m | 267 | CONFIG_PPPOE=m |
268 | CONFIG_PPTP=m | ||
269 | CONFIG_PPPOL2TP=m | ||
270 | CONFIG_PPP_ASYNC=m | ||
271 | CONFIG_PPP_SYNC_TTY=m | ||
199 | CONFIG_SLIP=m | 272 | CONFIG_SLIP=m |
200 | CONFIG_SLIP_COMPRESSED=y | 273 | CONFIG_SLIP_COMPRESSED=y |
201 | CONFIG_SLIP_SMART=y | 274 | CONFIG_SLIP_SMART=y |
202 | CONFIG_SLIP_MODE_SLIP6=y | 275 | CONFIG_SLIP_MODE_SLIP6=y |
203 | CONFIG_NETCONSOLE=m | 276 | # CONFIG_WLAN is not set |
204 | CONFIG_NETCONSOLE_DYNAMIC=y | 277 | CONFIG_INPUT_EVDEV=m |
205 | CONFIG_INPUT_FF_MEMLESS=m | ||
206 | # CONFIG_KEYBOARD_ATKBD is not set | 278 | # CONFIG_KEYBOARD_ATKBD is not set |
207 | CONFIG_MOUSE_PS2=m | 279 | # CONFIG_MOUSE_PS2 is not set |
208 | CONFIG_MOUSE_SERIAL=m | 280 | CONFIG_MOUSE_SERIAL=m |
209 | CONFIG_SERIO=m | 281 | CONFIG_SERIO=m |
210 | # CONFIG_SERIO_SERPORT is not set | ||
211 | CONFIG_VT_HW_CONSOLE_BINDING=y | 282 | CONFIG_VT_HW_CONSOLE_BINDING=y |
283 | # CONFIG_LEGACY_PTYS is not set | ||
212 | # CONFIG_DEVKMEM is not set | 284 | # CONFIG_DEVKMEM is not set |
213 | # CONFIG_HW_RANDOM is not set | 285 | # CONFIG_HW_RANDOM is not set |
214 | CONFIG_GEN_RTC=m | 286 | CONFIG_NTP_PPS=y |
215 | CONFIG_GEN_RTC_X=y | 287 | CONFIG_PPS_CLIENT_LDISC=m |
288 | CONFIG_PTP_1588_CLOCK=m | ||
216 | # CONFIG_HWMON is not set | 289 | # CONFIG_HWMON is not set |
217 | CONFIG_FB=y | 290 | CONFIG_FB=y |
218 | CONFIG_FRAMEBUFFER_CONSOLE=y | 291 | CONFIG_FRAMEBUFFER_CONSOLE=y |
@@ -221,47 +294,61 @@ CONFIG_LOGO=y | |||
221 | # CONFIG_LOGO_LINUX_CLUT224 is not set | 294 | # CONFIG_LOGO_LINUX_CLUT224 is not set |
222 | CONFIG_HID=m | 295 | CONFIG_HID=m |
223 | CONFIG_HIDRAW=y | 296 | CONFIG_HIDRAW=y |
297 | CONFIG_UHID=m | ||
298 | # CONFIG_HID_GENERIC is not set | ||
224 | # CONFIG_USB_SUPPORT is not set | 299 | # CONFIG_USB_SUPPORT is not set |
300 | CONFIG_RTC_CLASS=y | ||
301 | CONFIG_RTC_DRV_GENERIC=m | ||
302 | # CONFIG_IOMMU_SUPPORT is not set | ||
303 | CONFIG_HEARTBEAT=y | ||
304 | CONFIG_PROC_HARDWARE=y | ||
225 | CONFIG_EXT2_FS=y | 305 | CONFIG_EXT2_FS=y |
226 | CONFIG_EXT3_FS=y | 306 | CONFIG_EXT3_FS=y |
227 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | 307 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set |
228 | # CONFIG_EXT3_FS_XATTR is not set | 308 | # CONFIG_EXT3_FS_XATTR is not set |
309 | CONFIG_EXT4_FS=y | ||
229 | CONFIG_REISERFS_FS=m | 310 | CONFIG_REISERFS_FS=m |
230 | CONFIG_JFS_FS=m | 311 | CONFIG_JFS_FS=m |
231 | CONFIG_XFS_FS=m | 312 | CONFIG_XFS_FS=m |
232 | CONFIG_OCFS2_FS=m | 313 | CONFIG_OCFS2_FS=m |
233 | # CONFIG_OCFS2_FS_STATS is not set | ||
234 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 314 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
315 | CONFIG_FANOTIFY=y | ||
235 | CONFIG_QUOTA_NETLINK_INTERFACE=y | 316 | CONFIG_QUOTA_NETLINK_INTERFACE=y |
236 | # CONFIG_PRINT_QUOTA_WARNING is not set | 317 | # CONFIG_PRINT_QUOTA_WARNING is not set |
237 | CONFIG_AUTOFS_FS=m | ||
238 | CONFIG_AUTOFS4_FS=m | 318 | CONFIG_AUTOFS4_FS=m |
239 | CONFIG_FUSE_FS=m | 319 | CONFIG_FUSE_FS=m |
320 | CONFIG_CUSE=m | ||
240 | CONFIG_ISO9660_FS=y | 321 | CONFIG_ISO9660_FS=y |
241 | CONFIG_JOLIET=y | 322 | CONFIG_JOLIET=y |
242 | CONFIG_ZISOFS=y | 323 | CONFIG_ZISOFS=y |
243 | CONFIG_UDF_FS=m | 324 | CONFIG_UDF_FS=m |
244 | CONFIG_MSDOS_FS=y | 325 | CONFIG_MSDOS_FS=m |
245 | CONFIG_VFAT_FS=m | 326 | CONFIG_VFAT_FS=m |
246 | CONFIG_PROC_KCORE=y | 327 | CONFIG_PROC_KCORE=y |
247 | CONFIG_TMPFS=y | 328 | CONFIG_TMPFS=y |
248 | CONFIG_AFFS_FS=m | 329 | CONFIG_AFFS_FS=m |
330 | CONFIG_ECRYPT_FS=m | ||
331 | CONFIG_ECRYPT_FS_MESSAGING=y | ||
249 | CONFIG_HFS_FS=m | 332 | CONFIG_HFS_FS=m |
250 | CONFIG_HFSPLUS_FS=m | 333 | CONFIG_HFSPLUS_FS=m |
251 | CONFIG_CRAMFS=m | 334 | CONFIG_CRAMFS=m |
252 | CONFIG_SQUASHFS=m | 335 | CONFIG_SQUASHFS=m |
253 | CONFIG_MINIX_FS=y | 336 | CONFIG_SQUASHFS_LZO=y |
337 | CONFIG_MINIX_FS=m | ||
338 | CONFIG_OMFS_FS=m | ||
254 | CONFIG_HPFS_FS=m | 339 | CONFIG_HPFS_FS=m |
340 | CONFIG_QNX4FS_FS=m | ||
341 | CONFIG_QNX6FS_FS=m | ||
255 | CONFIG_SYSV_FS=m | 342 | CONFIG_SYSV_FS=m |
256 | CONFIG_UFS_FS=m | 343 | CONFIG_UFS_FS=m |
257 | CONFIG_NFS_FS=y | 344 | CONFIG_NFS_FS=y |
258 | CONFIG_NFS_V3=y | ||
259 | CONFIG_NFS_V4=y | 345 | CONFIG_NFS_V4=y |
346 | CONFIG_NFS_SWAP=y | ||
260 | CONFIG_ROOT_NFS=y | 347 | CONFIG_ROOT_NFS=y |
261 | CONFIG_NFSD=m | 348 | CONFIG_NFSD=m |
262 | CONFIG_NFSD_V3=y | 349 | CONFIG_NFSD_V3=y |
263 | CONFIG_SMB_FS=m | 350 | CONFIG_CIFS=m |
264 | CONFIG_SMB_NLS_DEFAULT=y | 351 | # CONFIG_CIFS_DEBUG is not set |
265 | CONFIG_CODA_FS=m | 352 | CONFIG_CODA_FS=m |
266 | CONFIG_NLS_CODEPAGE_437=y | 353 | CONFIG_NLS_CODEPAGE_437=y |
267 | CONFIG_NLS_CODEPAGE_737=m | 354 | CONFIG_NLS_CODEPAGE_737=m |
@@ -300,10 +387,23 @@ CONFIG_NLS_ISO8859_14=m | |||
300 | CONFIG_NLS_ISO8859_15=m | 387 | CONFIG_NLS_ISO8859_15=m |
301 | CONFIG_NLS_KOI8_R=m | 388 | CONFIG_NLS_KOI8_R=m |
302 | CONFIG_NLS_KOI8_U=m | 389 | CONFIG_NLS_KOI8_U=m |
390 | CONFIG_NLS_MAC_ROMAN=m | ||
391 | CONFIG_NLS_MAC_CELTIC=m | ||
392 | CONFIG_NLS_MAC_CENTEURO=m | ||
393 | CONFIG_NLS_MAC_CROATIAN=m | ||
394 | CONFIG_NLS_MAC_CYRILLIC=m | ||
395 | CONFIG_NLS_MAC_GAELIC=m | ||
396 | CONFIG_NLS_MAC_GREEK=m | ||
397 | CONFIG_NLS_MAC_ICELAND=m | ||
398 | CONFIG_NLS_MAC_INUIT=m | ||
399 | CONFIG_NLS_MAC_ROMANIAN=m | ||
400 | CONFIG_NLS_MAC_TURKISH=m | ||
303 | CONFIG_DLM=m | 401 | CONFIG_DLM=m |
304 | CONFIG_MAGIC_SYSRQ=y | 402 | CONFIG_MAGIC_SYSRQ=y |
305 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 403 | CONFIG_ASYNC_RAID6_TEST=m |
306 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 404 | CONFIG_ENCRYPTED_KEYS=m |
405 | CONFIG_CRYPTO_MANAGER=y | ||
406 | CONFIG_CRYPTO_USER=m | ||
307 | CONFIG_CRYPTO_NULL=m | 407 | CONFIG_CRYPTO_NULL=m |
308 | CONFIG_CRYPTO_CRYPTD=m | 408 | CONFIG_CRYPTO_CRYPTD=m |
309 | CONFIG_CRYPTO_TEST=m | 409 | CONFIG_CRYPTO_TEST=m |
@@ -313,19 +413,16 @@ CONFIG_CRYPTO_CTS=m | |||
313 | CONFIG_CRYPTO_LRW=m | 413 | CONFIG_CRYPTO_LRW=m |
314 | CONFIG_CRYPTO_PCBC=m | 414 | CONFIG_CRYPTO_PCBC=m |
315 | CONFIG_CRYPTO_XTS=m | 415 | CONFIG_CRYPTO_XTS=m |
316 | CONFIG_CRYPTO_HMAC=y | ||
317 | CONFIG_CRYPTO_XCBC=m | 416 | CONFIG_CRYPTO_XCBC=m |
318 | CONFIG_CRYPTO_MD4=m | 417 | CONFIG_CRYPTO_VMAC=m |
319 | CONFIG_CRYPTO_MICHAEL_MIC=m | 418 | CONFIG_CRYPTO_MICHAEL_MIC=m |
320 | CONFIG_CRYPTO_RMD128=m | 419 | CONFIG_CRYPTO_RMD128=m |
321 | CONFIG_CRYPTO_RMD160=m | 420 | CONFIG_CRYPTO_RMD160=m |
322 | CONFIG_CRYPTO_RMD256=m | 421 | CONFIG_CRYPTO_RMD256=m |
323 | CONFIG_CRYPTO_RMD320=m | 422 | CONFIG_CRYPTO_RMD320=m |
324 | CONFIG_CRYPTO_SHA256=m | ||
325 | CONFIG_CRYPTO_SHA512=m | 423 | CONFIG_CRYPTO_SHA512=m |
326 | CONFIG_CRYPTO_TGR192=m | 424 | CONFIG_CRYPTO_TGR192=m |
327 | CONFIG_CRYPTO_WP512=m | 425 | CONFIG_CRYPTO_WP512=m |
328 | CONFIG_CRYPTO_AES=m | ||
329 | CONFIG_CRYPTO_ANUBIS=m | 426 | CONFIG_CRYPTO_ANUBIS=m |
330 | CONFIG_CRYPTO_BLOWFISH=m | 427 | CONFIG_CRYPTO_BLOWFISH=m |
331 | CONFIG_CRYPTO_CAMELLIA=m | 428 | CONFIG_CRYPTO_CAMELLIA=m |
@@ -341,6 +438,14 @@ CONFIG_CRYPTO_TWOFISH=m | |||
341 | CONFIG_CRYPTO_ZLIB=m | 438 | CONFIG_CRYPTO_ZLIB=m |
342 | CONFIG_CRYPTO_LZO=m | 439 | CONFIG_CRYPTO_LZO=m |
343 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 440 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
441 | CONFIG_CRYPTO_USER_API_HASH=m | ||
442 | CONFIG_CRYPTO_USER_API_SKCIPHER=m | ||
344 | # CONFIG_CRYPTO_HW is not set | 443 | # CONFIG_CRYPTO_HW is not set |
345 | CONFIG_CRC16=m | ||
346 | CONFIG_CRC_T10DIF=y | 444 | CONFIG_CRC_T10DIF=y |
445 | CONFIG_XZ_DEC_X86=y | ||
446 | CONFIG_XZ_DEC_POWERPC=y | ||
447 | CONFIG_XZ_DEC_IA64=y | ||
448 | CONFIG_XZ_DEC_ARM=y | ||
449 | CONFIG_XZ_DEC_ARMTHUMB=y | ||
450 | CONFIG_XZ_DEC_SPARC=y | ||
451 | CONFIG_XZ_DEC_TEST=m | ||
diff --git a/arch/m68k/configs/atari_defconfig b/arch/m68k/configs/atari_defconfig index 4571d33903fe..6d5370c914b2 100644 --- a/arch/m68k/configs/atari_defconfig +++ b/arch/m68k/configs/atari_defconfig | |||
@@ -1,53 +1,75 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | ||
2 | CONFIG_LOCALVERSION="-atari" | 1 | CONFIG_LOCALVERSION="-atari" |
3 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
4 | CONFIG_POSIX_MQUEUE=y | 3 | CONFIG_POSIX_MQUEUE=y |
4 | CONFIG_FHANDLE=y | ||
5 | CONFIG_BSD_PROCESS_ACCT=y | 5 | CONFIG_BSD_PROCESS_ACCT=y |
6 | CONFIG_LOG_BUF_SHIFT=14 | 6 | CONFIG_BSD_PROCESS_ACCT_V3=y |
7 | CONFIG_RELAY=y | 7 | CONFIG_LOG_BUF_SHIFT=16 |
8 | # CONFIG_UTS_NS is not set | ||
9 | # CONFIG_IPC_NS is not set | ||
10 | # CONFIG_PID_NS is not set | ||
11 | # CONFIG_NET_NS is not set | ||
8 | CONFIG_BLK_DEV_INITRD=y | 12 | CONFIG_BLK_DEV_INITRD=y |
9 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
10 | CONFIG_SLAB=y | 13 | CONFIG_SLAB=y |
11 | CONFIG_MODULES=y | 14 | CONFIG_MODULES=y |
12 | CONFIG_MODULE_UNLOAD=y | 15 | CONFIG_MODULE_UNLOAD=y |
13 | CONFIG_ATARI=y | 16 | CONFIG_PARTITION_ADVANCED=y |
17 | CONFIG_AMIGA_PARTITION=y | ||
18 | CONFIG_MAC_PARTITION=y | ||
19 | CONFIG_BSD_DISKLABEL=y | ||
20 | CONFIG_MINIX_SUBPARTITION=y | ||
21 | CONFIG_SOLARIS_X86_PARTITION=y | ||
22 | CONFIG_UNIXWARE_DISKLABEL=y | ||
23 | CONFIG_SUN_PARTITION=y | ||
24 | # CONFIG_EFI_PARTITION is not set | ||
25 | CONFIG_SYSV68_PARTITION=y | ||
26 | CONFIG_IOSCHED_DEADLINE=m | ||
14 | CONFIG_M68020=y | 27 | CONFIG_M68020=y |
15 | CONFIG_M68030=y | 28 | CONFIG_M68030=y |
16 | CONFIG_M68040=y | 29 | CONFIG_M68040=y |
17 | CONFIG_M68060=y | 30 | CONFIG_M68060=y |
31 | CONFIG_ATARI=y | ||
32 | # CONFIG_COMPACTION is not set | ||
33 | CONFIG_CLEANCACHE=y | ||
34 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
18 | CONFIG_BINFMT_AOUT=m | 35 | CONFIG_BINFMT_AOUT=m |
19 | CONFIG_BINFMT_MISC=m | 36 | CONFIG_BINFMT_MISC=m |
20 | CONFIG_STRAM_PROC=y | ||
21 | CONFIG_HEARTBEAT=y | ||
22 | CONFIG_PROC_HARDWARE=y | ||
23 | CONFIG_NET=y | 37 | CONFIG_NET=y |
24 | CONFIG_PACKET=y | 38 | CONFIG_PACKET=y |
39 | CONFIG_PACKET_DIAG=m | ||
25 | CONFIG_UNIX=y | 40 | CONFIG_UNIX=y |
41 | CONFIG_UNIX_DIAG=m | ||
42 | CONFIG_XFRM_MIGRATE=y | ||
26 | CONFIG_NET_KEY=y | 43 | CONFIG_NET_KEY=y |
27 | CONFIG_NET_KEY_MIGRATE=y | ||
28 | CONFIG_INET=y | 44 | CONFIG_INET=y |
29 | CONFIG_IP_PNP=y | 45 | CONFIG_IP_PNP=y |
46 | CONFIG_IP_PNP_DHCP=y | ||
47 | CONFIG_IP_PNP_BOOTP=y | ||
48 | CONFIG_IP_PNP_RARP=y | ||
30 | CONFIG_NET_IPIP=m | 49 | CONFIG_NET_IPIP=m |
50 | CONFIG_NET_IPGRE_DEMUX=m | ||
31 | CONFIG_NET_IPGRE=m | 51 | CONFIG_NET_IPGRE=m |
32 | CONFIG_SYN_COOKIES=y | 52 | CONFIG_SYN_COOKIES=y |
53 | CONFIG_NET_IPVTI=m | ||
33 | CONFIG_INET_AH=m | 54 | CONFIG_INET_AH=m |
34 | CONFIG_INET_ESP=m | 55 | CONFIG_INET_ESP=m |
35 | CONFIG_INET_IPCOMP=m | 56 | CONFIG_INET_IPCOMP=m |
36 | CONFIG_INET_XFRM_MODE_TRANSPORT=m | 57 | CONFIG_INET_XFRM_MODE_TRANSPORT=m |
37 | CONFIG_INET_XFRM_MODE_TUNNEL=m | 58 | CONFIG_INET_XFRM_MODE_TUNNEL=m |
38 | CONFIG_INET_XFRM_MODE_BEET=m | 59 | CONFIG_INET_XFRM_MODE_BEET=m |
60 | # CONFIG_INET_LRO is not set | ||
39 | CONFIG_INET_DIAG=m | 61 | CONFIG_INET_DIAG=m |
62 | CONFIG_INET_UDP_DIAG=m | ||
40 | CONFIG_IPV6_PRIVACY=y | 63 | CONFIG_IPV6_PRIVACY=y |
41 | CONFIG_IPV6_ROUTER_PREF=y | 64 | CONFIG_IPV6_ROUTER_PREF=y |
42 | CONFIG_IPV6_ROUTE_INFO=y | ||
43 | CONFIG_INET6_AH=m | 65 | CONFIG_INET6_AH=m |
44 | CONFIG_INET6_ESP=m | 66 | CONFIG_INET6_ESP=m |
45 | CONFIG_INET6_IPCOMP=m | 67 | CONFIG_INET6_IPCOMP=m |
46 | CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m | 68 | CONFIG_IPV6_GRE=m |
47 | CONFIG_IPV6_TUNNEL=m | ||
48 | CONFIG_NETFILTER=y | 69 | CONFIG_NETFILTER=y |
49 | CONFIG_NETFILTER_NETLINK_QUEUE=m | ||
50 | CONFIG_NF_CONNTRACK=m | 70 | CONFIG_NF_CONNTRACK=m |
71 | CONFIG_NF_CONNTRACK_ZONES=y | ||
72 | # CONFIG_NF_CONNTRACK_PROCFS is not set | ||
51 | # CONFIG_NF_CT_PROTO_DCCP is not set | 73 | # CONFIG_NF_CT_PROTO_DCCP is not set |
52 | CONFIG_NF_CT_PROTO_UDPLITE=m | 74 | CONFIG_NF_CT_PROTO_UDPLITE=m |
53 | CONFIG_NF_CONNTRACK_AMANDA=m | 75 | CONFIG_NF_CONNTRACK_AMANDA=m |
@@ -55,25 +77,37 @@ CONFIG_NF_CONNTRACK_FTP=m | |||
55 | CONFIG_NF_CONNTRACK_H323=m | 77 | CONFIG_NF_CONNTRACK_H323=m |
56 | CONFIG_NF_CONNTRACK_IRC=m | 78 | CONFIG_NF_CONNTRACK_IRC=m |
57 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m | 79 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m |
80 | CONFIG_NF_CONNTRACK_SNMP=m | ||
58 | CONFIG_NF_CONNTRACK_PPTP=m | 81 | CONFIG_NF_CONNTRACK_PPTP=m |
59 | CONFIG_NF_CONNTRACK_SANE=m | 82 | CONFIG_NF_CONNTRACK_SANE=m |
60 | CONFIG_NF_CONNTRACK_SIP=m | 83 | CONFIG_NF_CONNTRACK_SIP=m |
61 | CONFIG_NF_CONNTRACK_TFTP=m | 84 | CONFIG_NF_CONNTRACK_TFTP=m |
85 | CONFIG_NETFILTER_XT_SET=m | ||
86 | CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m | ||
62 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 87 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
63 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 88 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
64 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | 89 | CONFIG_NETFILTER_XT_TARGET_DSCP=m |
90 | CONFIG_NETFILTER_XT_TARGET_HMARK=m | ||
91 | CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m | ||
92 | CONFIG_NETFILTER_XT_TARGET_LOG=m | ||
65 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 93 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
66 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 94 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
67 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | 95 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m |
96 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | ||
97 | CONFIG_NETFILTER_XT_TARGET_TEE=m | ||
68 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | 98 | CONFIG_NETFILTER_XT_TARGET_TRACE=m |
69 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m | 99 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m |
70 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m | 100 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m |
101 | CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m | ||
102 | CONFIG_NETFILTER_XT_MATCH_BPF=m | ||
71 | CONFIG_NETFILTER_XT_MATCH_CLUSTER=m | 103 | CONFIG_NETFILTER_XT_MATCH_CLUSTER=m |
72 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m | 104 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m |
73 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m | 105 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m |
106 | CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m | ||
74 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m | 107 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m |
75 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m | 108 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m |
76 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | 109 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m |
110 | CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m | ||
77 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | 111 | CONFIG_NETFILTER_XT_MATCH_DSCP=m |
78 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 112 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
79 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | 113 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m |
@@ -84,6 +118,8 @@ CONFIG_NETFILTER_XT_MATCH_LIMIT=m | |||
84 | CONFIG_NETFILTER_XT_MATCH_MAC=m | 118 | CONFIG_NETFILTER_XT_MATCH_MAC=m |
85 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 119 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
86 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | 120 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m |
121 | CONFIG_NETFILTER_XT_MATCH_NFACCT=m | ||
122 | CONFIG_NETFILTER_XT_MATCH_OSF=m | ||
87 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | 123 | CONFIG_NETFILTER_XT_MATCH_OWNER=m |
88 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 124 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
89 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 125 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
@@ -97,22 +133,31 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m | |||
97 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 133 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
98 | CONFIG_NETFILTER_XT_MATCH_TIME=m | 134 | CONFIG_NETFILTER_XT_MATCH_TIME=m |
99 | CONFIG_NETFILTER_XT_MATCH_U32=m | 135 | CONFIG_NETFILTER_XT_MATCH_U32=m |
136 | CONFIG_IP_SET=m | ||
137 | CONFIG_IP_SET_BITMAP_IP=m | ||
138 | CONFIG_IP_SET_BITMAP_IPMAC=m | ||
139 | CONFIG_IP_SET_BITMAP_PORT=m | ||
140 | CONFIG_IP_SET_HASH_IP=m | ||
141 | CONFIG_IP_SET_HASH_IPPORT=m | ||
142 | CONFIG_IP_SET_HASH_IPPORTIP=m | ||
143 | CONFIG_IP_SET_HASH_IPPORTNET=m | ||
144 | CONFIG_IP_SET_HASH_NET=m | ||
145 | CONFIG_IP_SET_HASH_NETPORT=m | ||
146 | CONFIG_IP_SET_HASH_NETIFACE=m | ||
147 | CONFIG_IP_SET_LIST_SET=m | ||
100 | CONFIG_NF_CONNTRACK_IPV4=m | 148 | CONFIG_NF_CONNTRACK_IPV4=m |
101 | CONFIG_IP_NF_QUEUE=m | ||
102 | CONFIG_IP_NF_IPTABLES=m | 149 | CONFIG_IP_NF_IPTABLES=m |
103 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
104 | CONFIG_IP_NF_MATCH_AH=m | 150 | CONFIG_IP_NF_MATCH_AH=m |
105 | CONFIG_IP_NF_MATCH_ECN=m | 151 | CONFIG_IP_NF_MATCH_ECN=m |
152 | CONFIG_IP_NF_MATCH_RPFILTER=m | ||
106 | CONFIG_IP_NF_MATCH_TTL=m | 153 | CONFIG_IP_NF_MATCH_TTL=m |
107 | CONFIG_IP_NF_FILTER=m | 154 | CONFIG_IP_NF_FILTER=m |
108 | CONFIG_IP_NF_TARGET_REJECT=m | 155 | CONFIG_IP_NF_TARGET_REJECT=m |
109 | CONFIG_IP_NF_TARGET_LOG=m | ||
110 | CONFIG_IP_NF_TARGET_ULOG=m | 156 | CONFIG_IP_NF_TARGET_ULOG=m |
111 | CONFIG_NF_NAT=m | 157 | CONFIG_NF_NAT_IPV4=m |
112 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 158 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
113 | CONFIG_IP_NF_TARGET_NETMAP=m | 159 | CONFIG_IP_NF_TARGET_NETMAP=m |
114 | CONFIG_IP_NF_TARGET_REDIRECT=m | 160 | CONFIG_IP_NF_TARGET_REDIRECT=m |
115 | CONFIG_NF_NAT_SNMP_BASIC=m | ||
116 | CONFIG_IP_NF_MANGLE=m | 161 | CONFIG_IP_NF_MANGLE=m |
117 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | 162 | CONFIG_IP_NF_TARGET_CLUSTERIP=m |
118 | CONFIG_IP_NF_TARGET_ECN=m | 163 | CONFIG_IP_NF_TARGET_ECN=m |
@@ -122,7 +167,6 @@ CONFIG_IP_NF_ARPTABLES=m | |||
122 | CONFIG_IP_NF_ARPFILTER=m | 167 | CONFIG_IP_NF_ARPFILTER=m |
123 | CONFIG_IP_NF_ARP_MANGLE=m | 168 | CONFIG_IP_NF_ARP_MANGLE=m |
124 | CONFIG_NF_CONNTRACK_IPV6=m | 169 | CONFIG_NF_CONNTRACK_IPV6=m |
125 | CONFIG_IP6_NF_QUEUE=m | ||
126 | CONFIG_IP6_NF_IPTABLES=m | 170 | CONFIG_IP6_NF_IPTABLES=m |
127 | CONFIG_IP6_NF_MATCH_AH=m | 171 | CONFIG_IP6_NF_MATCH_AH=m |
128 | CONFIG_IP6_NF_MATCH_EUI64=m | 172 | CONFIG_IP6_NF_MATCH_EUI64=m |
@@ -131,18 +175,30 @@ CONFIG_IP6_NF_MATCH_OPTS=m | |||
131 | CONFIG_IP6_NF_MATCH_HL=m | 175 | CONFIG_IP6_NF_MATCH_HL=m |
132 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 176 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
133 | CONFIG_IP6_NF_MATCH_MH=m | 177 | CONFIG_IP6_NF_MATCH_MH=m |
178 | CONFIG_IP6_NF_MATCH_RPFILTER=m | ||
134 | CONFIG_IP6_NF_MATCH_RT=m | 179 | CONFIG_IP6_NF_MATCH_RT=m |
135 | CONFIG_IP6_NF_TARGET_HL=m | 180 | CONFIG_IP6_NF_TARGET_HL=m |
136 | CONFIG_IP6_NF_TARGET_LOG=m | ||
137 | CONFIG_IP6_NF_FILTER=m | 181 | CONFIG_IP6_NF_FILTER=m |
138 | CONFIG_IP6_NF_TARGET_REJECT=m | 182 | CONFIG_IP6_NF_TARGET_REJECT=m |
139 | CONFIG_IP6_NF_MANGLE=m | 183 | CONFIG_IP6_NF_MANGLE=m |
140 | CONFIG_IP6_NF_RAW=m | 184 | CONFIG_IP6_NF_RAW=m |
185 | CONFIG_NF_NAT_IPV6=m | ||
186 | CONFIG_IP6_NF_TARGET_MASQUERADE=m | ||
187 | CONFIG_IP6_NF_TARGET_NPT=m | ||
141 | CONFIG_IP_DCCP=m | 188 | CONFIG_IP_DCCP=m |
142 | # CONFIG_IP_DCCP_CCID3 is not set | 189 | # CONFIG_IP_DCCP_CCID3 is not set |
190 | CONFIG_SCTP_COOKIE_HMAC_SHA1=y | ||
191 | CONFIG_RDS=m | ||
192 | CONFIG_RDS_TCP=m | ||
193 | CONFIG_L2TP=m | ||
143 | CONFIG_ATALK=m | 194 | CONFIG_ATALK=m |
195 | CONFIG_BATMAN_ADV=m | ||
196 | CONFIG_BATMAN_ADV_DAT=y | ||
197 | # CONFIG_WIRELESS is not set | ||
144 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 198 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
199 | CONFIG_DEVTMPFS=y | ||
145 | # CONFIG_FIRMWARE_IN_KERNEL is not set | 200 | # CONFIG_FIRMWARE_IN_KERNEL is not set |
201 | # CONFIG_FW_LOADER_USER_HELPER is not set | ||
146 | CONFIG_CONNECTOR=m | 202 | CONFIG_CONNECTOR=m |
147 | CONFIG_PARPORT=m | 203 | CONFIG_PARPORT=m |
148 | CONFIG_PARPORT_ATARI=m | 204 | CONFIG_PARPORT_ATARI=m |
@@ -150,11 +206,13 @@ CONFIG_PARPORT_1284=y | |||
150 | CONFIG_ATARI_FLOPPY=y | 206 | CONFIG_ATARI_FLOPPY=y |
151 | CONFIG_BLK_DEV_LOOP=y | 207 | CONFIG_BLK_DEV_LOOP=y |
152 | CONFIG_BLK_DEV_CRYPTOLOOP=m | 208 | CONFIG_BLK_DEV_CRYPTOLOOP=m |
209 | CONFIG_BLK_DEV_DRBD=m | ||
153 | CONFIG_BLK_DEV_NBD=m | 210 | CONFIG_BLK_DEV_NBD=m |
154 | CONFIG_BLK_DEV_RAM=y | 211 | CONFIG_BLK_DEV_RAM=y |
155 | CONFIG_CDROM_PKTCDVD=m | 212 | CONFIG_CDROM_PKTCDVD=m |
156 | CONFIG_ATA_OVER_ETH=m | 213 | CONFIG_ATA_OVER_ETH=m |
157 | CONFIG_IDE=y | 214 | CONFIG_IDE=y |
215 | CONFIG_IDE_GD_ATAPI=y | ||
158 | CONFIG_BLK_DEV_IDECD=y | 216 | CONFIG_BLK_DEV_IDECD=y |
159 | CONFIG_BLK_DEV_FALCON_IDE=y | 217 | CONFIG_BLK_DEV_FALCON_IDE=y |
160 | CONFIG_RAID_ATTRS=m | 218 | CONFIG_RAID_ATTRS=m |
@@ -167,63 +225,81 @@ CONFIG_BLK_DEV_SR=y | |||
167 | CONFIG_BLK_DEV_SR_VENDOR=y | 225 | CONFIG_BLK_DEV_SR_VENDOR=y |
168 | CONFIG_CHR_DEV_SG=m | 226 | CONFIG_CHR_DEV_SG=m |
169 | CONFIG_SCSI_CONSTANTS=y | 227 | CONFIG_SCSI_CONSTANTS=y |
170 | CONFIG_SCSI_SAS_LIBSAS=m | 228 | CONFIG_SCSI_SAS_ATTRS=m |
171 | # CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set | ||
172 | CONFIG_SCSI_SRP_ATTRS=m | ||
173 | CONFIG_SCSI_SRP_TGT_ATTRS=y | ||
174 | CONFIG_ISCSI_TCP=m | 229 | CONFIG_ISCSI_TCP=m |
230 | CONFIG_ISCSI_BOOT_SYSFS=m | ||
175 | CONFIG_ATARI_SCSI=y | 231 | CONFIG_ATARI_SCSI=y |
176 | CONFIG_MD=y | 232 | CONFIG_MD=y |
177 | CONFIG_BLK_DEV_MD=m | ||
178 | CONFIG_MD_LINEAR=m | 233 | CONFIG_MD_LINEAR=m |
179 | CONFIG_MD_RAID0=m | 234 | CONFIG_MD_RAID0=m |
180 | CONFIG_MD_RAID1=m | ||
181 | CONFIG_MD_RAID456=m | ||
182 | CONFIG_BLK_DEV_DM=m | 235 | CONFIG_BLK_DEV_DM=m |
183 | CONFIG_DM_CRYPT=m | 236 | CONFIG_DM_CRYPT=m |
184 | CONFIG_DM_SNAPSHOT=m | 237 | CONFIG_DM_SNAPSHOT=m |
238 | CONFIG_DM_THIN_PROVISIONING=m | ||
239 | CONFIG_DM_CACHE=m | ||
185 | CONFIG_DM_MIRROR=m | 240 | CONFIG_DM_MIRROR=m |
241 | CONFIG_DM_RAID=m | ||
186 | CONFIG_DM_ZERO=m | 242 | CONFIG_DM_ZERO=m |
187 | CONFIG_DM_MULTIPATH=m | 243 | CONFIG_DM_MULTIPATH=m |
188 | CONFIG_DM_UEVENT=y | 244 | CONFIG_DM_UEVENT=y |
245 | CONFIG_TARGET_CORE=m | ||
246 | CONFIG_TCM_IBLOCK=m | ||
247 | CONFIG_TCM_FILEIO=m | ||
248 | CONFIG_TCM_PSCSI=m | ||
189 | CONFIG_NETDEVICES=y | 249 | CONFIG_NETDEVICES=y |
190 | CONFIG_DUMMY=m | 250 | CONFIG_DUMMY=m |
191 | CONFIG_MACVLAN=m | ||
192 | CONFIG_EQUALIZER=m | 251 | CONFIG_EQUALIZER=m |
193 | CONFIG_VETH=m | ||
194 | CONFIG_NET_ETHERNET=y | ||
195 | CONFIG_MII=y | 252 | CONFIG_MII=y |
253 | CONFIG_NET_TEAM=m | ||
254 | CONFIG_NET_TEAM_MODE_BROADCAST=m | ||
255 | CONFIG_NET_TEAM_MODE_ROUNDROBIN=m | ||
256 | CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m | ||
257 | CONFIG_NET_TEAM_MODE_LOADBALANCE=m | ||
258 | CONFIG_VXLAN=m | ||
259 | CONFIG_NETCONSOLE=m | ||
260 | CONFIG_NETCONSOLE_DYNAMIC=y | ||
261 | CONFIG_VETH=m | ||
196 | CONFIG_ATARILANCE=y | 262 | CONFIG_ATARILANCE=y |
197 | # CONFIG_NETDEV_1000 is not set | 263 | # CONFIG_NET_CADENCE is not set |
198 | # CONFIG_NETDEV_10000 is not set | 264 | # CONFIG_NET_VENDOR_BROADCOM is not set |
265 | # CONFIG_NET_VENDOR_INTEL is not set | ||
266 | # CONFIG_NET_VENDOR_MARVELL is not set | ||
267 | # CONFIG_NET_VENDOR_MICREL is not set | ||
268 | # CONFIG_NET_VENDOR_SEEQ is not set | ||
269 | # CONFIG_NET_VENDOR_STMICRO is not set | ||
270 | # CONFIG_NET_VENDOR_WIZNET is not set | ||
199 | CONFIG_PPP=m | 271 | CONFIG_PPP=m |
200 | CONFIG_PPP_FILTER=y | ||
201 | CONFIG_PPP_ASYNC=m | ||
202 | CONFIG_PPP_SYNC_TTY=m | ||
203 | CONFIG_PPP_DEFLATE=m | ||
204 | CONFIG_PPP_BSDCOMP=m | 272 | CONFIG_PPP_BSDCOMP=m |
273 | CONFIG_PPP_DEFLATE=m | ||
274 | CONFIG_PPP_FILTER=y | ||
205 | CONFIG_PPP_MPPE=m | 275 | CONFIG_PPP_MPPE=m |
206 | CONFIG_PPPOE=m | 276 | CONFIG_PPPOE=m |
277 | CONFIG_PPTP=m | ||
278 | CONFIG_PPPOL2TP=m | ||
279 | CONFIG_PPP_ASYNC=m | ||
280 | CONFIG_PPP_SYNC_TTY=m | ||
207 | CONFIG_SLIP=m | 281 | CONFIG_SLIP=m |
208 | CONFIG_SLIP_COMPRESSED=y | 282 | CONFIG_SLIP_COMPRESSED=y |
209 | CONFIG_SLIP_SMART=y | 283 | CONFIG_SLIP_SMART=y |
210 | CONFIG_SLIP_MODE_SLIP6=y | 284 | CONFIG_SLIP_MODE_SLIP6=y |
211 | CONFIG_NETCONSOLE=m | 285 | # CONFIG_WLAN is not set |
212 | CONFIG_NETCONSOLE_DYNAMIC=y | 286 | CONFIG_INPUT_EVDEV=m |
213 | CONFIG_INPUT_FF_MEMLESS=m | ||
214 | CONFIG_KEYBOARD_ATARI=y | 287 | CONFIG_KEYBOARD_ATARI=y |
215 | # CONFIG_KEYBOARD_ATKBD is not set | 288 | # CONFIG_KEYBOARD_ATKBD is not set |
216 | CONFIG_MOUSE_PS2=m | 289 | # CONFIG_MOUSE_PS2 is not set |
217 | CONFIG_MOUSE_ATARI=m | 290 | CONFIG_MOUSE_ATARI=m |
218 | CONFIG_INPUT_MISC=y | 291 | CONFIG_INPUT_MISC=y |
219 | CONFIG_INPUT_M68K_BEEP=m | 292 | CONFIG_INPUT_M68K_BEEP=m |
220 | # CONFIG_SERIO_SERPORT is not set | 293 | # CONFIG_SERIO is not set |
221 | CONFIG_VT_HW_CONSOLE_BINDING=y | 294 | CONFIG_VT_HW_CONSOLE_BINDING=y |
295 | # CONFIG_LEGACY_PTYS is not set | ||
222 | # CONFIG_DEVKMEM is not set | 296 | # CONFIG_DEVKMEM is not set |
223 | CONFIG_PRINTER=m | 297 | CONFIG_PRINTER=m |
224 | # CONFIG_HW_RANDOM is not set | 298 | # CONFIG_HW_RANDOM is not set |
225 | CONFIG_GEN_RTC=m | 299 | CONFIG_NTP_PPS=y |
226 | CONFIG_GEN_RTC_X=y | 300 | CONFIG_PPS_CLIENT_LDISC=m |
301 | CONFIG_PPS_CLIENT_PARPORT=m | ||
302 | CONFIG_PTP_1588_CLOCK=m | ||
227 | # CONFIG_HWMON is not set | 303 | # CONFIG_HWMON is not set |
228 | CONFIG_FB=y | 304 | CONFIG_FB=y |
229 | CONFIG_FB_ATARI=y | 305 | CONFIG_FB_ATARI=y |
@@ -233,47 +309,64 @@ CONFIG_SOUND=m | |||
233 | CONFIG_DMASOUND_ATARI=m | 309 | CONFIG_DMASOUND_ATARI=m |
234 | CONFIG_HID=m | 310 | CONFIG_HID=m |
235 | CONFIG_HIDRAW=y | 311 | CONFIG_HIDRAW=y |
236 | # CONFIG_USB_SUPPORT is not set | 312 | CONFIG_UHID=m |
313 | CONFIG_RTC_CLASS=y | ||
314 | CONFIG_RTC_DRV_GENERIC=m | ||
315 | # CONFIG_IOMMU_SUPPORT is not set | ||
316 | CONFIG_HEARTBEAT=y | ||
317 | CONFIG_PROC_HARDWARE=y | ||
318 | CONFIG_NATFEAT=y | ||
319 | CONFIG_NFBLOCK=y | ||
320 | CONFIG_NFCON=y | ||
321 | CONFIG_NFETH=y | ||
237 | CONFIG_ATARI_DSP56K=m | 322 | CONFIG_ATARI_DSP56K=m |
238 | CONFIG_EXT2_FS=y | 323 | CONFIG_EXT2_FS=y |
239 | CONFIG_EXT3_FS=y | 324 | CONFIG_EXT3_FS=y |
240 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | 325 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set |
241 | # CONFIG_EXT3_FS_XATTR is not set | 326 | # CONFIG_EXT3_FS_XATTR is not set |
327 | CONFIG_EXT4_FS=y | ||
242 | CONFIG_REISERFS_FS=m | 328 | CONFIG_REISERFS_FS=m |
243 | CONFIG_JFS_FS=m | 329 | CONFIG_JFS_FS=m |
244 | CONFIG_XFS_FS=m | 330 | CONFIG_XFS_FS=m |
245 | CONFIG_OCFS2_FS=m | 331 | CONFIG_OCFS2_FS=m |
246 | # CONFIG_OCFS2_FS_STATS is not set | ||
247 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 332 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
333 | CONFIG_FANOTIFY=y | ||
248 | CONFIG_QUOTA_NETLINK_INTERFACE=y | 334 | CONFIG_QUOTA_NETLINK_INTERFACE=y |
249 | # CONFIG_PRINT_QUOTA_WARNING is not set | 335 | # CONFIG_PRINT_QUOTA_WARNING is not set |
250 | CONFIG_AUTOFS_FS=m | ||
251 | CONFIG_AUTOFS4_FS=m | 336 | CONFIG_AUTOFS4_FS=m |
252 | CONFIG_FUSE_FS=m | 337 | CONFIG_FUSE_FS=m |
338 | CONFIG_CUSE=m | ||
253 | CONFIG_ISO9660_FS=y | 339 | CONFIG_ISO9660_FS=y |
254 | CONFIG_JOLIET=y | 340 | CONFIG_JOLIET=y |
255 | CONFIG_ZISOFS=y | 341 | CONFIG_ZISOFS=y |
256 | CONFIG_UDF_FS=m | 342 | CONFIG_UDF_FS=m |
257 | CONFIG_MSDOS_FS=y | 343 | CONFIG_MSDOS_FS=m |
258 | CONFIG_VFAT_FS=m | 344 | CONFIG_VFAT_FS=m |
259 | CONFIG_PROC_KCORE=y | 345 | CONFIG_PROC_KCORE=y |
260 | CONFIG_TMPFS=y | 346 | CONFIG_TMPFS=y |
261 | CONFIG_AFFS_FS=m | 347 | CONFIG_AFFS_FS=m |
348 | CONFIG_ECRYPT_FS=m | ||
349 | CONFIG_ECRYPT_FS_MESSAGING=y | ||
262 | CONFIG_HFS_FS=m | 350 | CONFIG_HFS_FS=m |
263 | CONFIG_HFSPLUS_FS=m | 351 | CONFIG_HFSPLUS_FS=m |
264 | CONFIG_CRAMFS=m | 352 | CONFIG_CRAMFS=m |
265 | CONFIG_SQUASHFS=m | 353 | CONFIG_SQUASHFS=m |
266 | CONFIG_MINIX_FS=y | 354 | CONFIG_SQUASHFS_LZO=y |
355 | CONFIG_MINIX_FS=m | ||
356 | CONFIG_OMFS_FS=m | ||
267 | CONFIG_HPFS_FS=m | 357 | CONFIG_HPFS_FS=m |
358 | CONFIG_QNX4FS_FS=m | ||
359 | CONFIG_QNX6FS_FS=m | ||
268 | CONFIG_SYSV_FS=m | 360 | CONFIG_SYSV_FS=m |
269 | CONFIG_UFS_FS=m | 361 | CONFIG_UFS_FS=m |
270 | CONFIG_NFS_FS=y | 362 | CONFIG_NFS_FS=y |
271 | CONFIG_NFS_V3=y | ||
272 | CONFIG_NFS_V4=y | 363 | CONFIG_NFS_V4=y |
364 | CONFIG_NFS_SWAP=y | ||
365 | CONFIG_ROOT_NFS=y | ||
273 | CONFIG_NFSD=m | 366 | CONFIG_NFSD=m |
274 | CONFIG_NFSD_V3=y | 367 | CONFIG_NFSD_V3=y |
275 | CONFIG_SMB_FS=m | 368 | CONFIG_CIFS=m |
276 | CONFIG_SMB_NLS_DEFAULT=y | 369 | # CONFIG_CIFS_DEBUG is not set |
277 | CONFIG_CODA_FS=m | 370 | CONFIG_CODA_FS=m |
278 | CONFIG_NLS_CODEPAGE_437=y | 371 | CONFIG_NLS_CODEPAGE_437=y |
279 | CONFIG_NLS_CODEPAGE_737=m | 372 | CONFIG_NLS_CODEPAGE_737=m |
@@ -312,10 +405,23 @@ CONFIG_NLS_ISO8859_14=m | |||
312 | CONFIG_NLS_ISO8859_15=m | 405 | CONFIG_NLS_ISO8859_15=m |
313 | CONFIG_NLS_KOI8_R=m | 406 | CONFIG_NLS_KOI8_R=m |
314 | CONFIG_NLS_KOI8_U=m | 407 | CONFIG_NLS_KOI8_U=m |
408 | CONFIG_NLS_MAC_ROMAN=m | ||
409 | CONFIG_NLS_MAC_CELTIC=m | ||
410 | CONFIG_NLS_MAC_CENTEURO=m | ||
411 | CONFIG_NLS_MAC_CROATIAN=m | ||
412 | CONFIG_NLS_MAC_CYRILLIC=m | ||
413 | CONFIG_NLS_MAC_GAELIC=m | ||
414 | CONFIG_NLS_MAC_GREEK=m | ||
415 | CONFIG_NLS_MAC_ICELAND=m | ||
416 | CONFIG_NLS_MAC_INUIT=m | ||
417 | CONFIG_NLS_MAC_ROMANIAN=m | ||
418 | CONFIG_NLS_MAC_TURKISH=m | ||
315 | CONFIG_DLM=m | 419 | CONFIG_DLM=m |
316 | CONFIG_MAGIC_SYSRQ=y | 420 | CONFIG_MAGIC_SYSRQ=y |
317 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 421 | CONFIG_ASYNC_RAID6_TEST=m |
318 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 422 | CONFIG_ENCRYPTED_KEYS=m |
423 | CONFIG_CRYPTO_MANAGER=y | ||
424 | CONFIG_CRYPTO_USER=m | ||
319 | CONFIG_CRYPTO_NULL=m | 425 | CONFIG_CRYPTO_NULL=m |
320 | CONFIG_CRYPTO_CRYPTD=m | 426 | CONFIG_CRYPTO_CRYPTD=m |
321 | CONFIG_CRYPTO_TEST=m | 427 | CONFIG_CRYPTO_TEST=m |
@@ -325,19 +431,16 @@ CONFIG_CRYPTO_CTS=m | |||
325 | CONFIG_CRYPTO_LRW=m | 431 | CONFIG_CRYPTO_LRW=m |
326 | CONFIG_CRYPTO_PCBC=m | 432 | CONFIG_CRYPTO_PCBC=m |
327 | CONFIG_CRYPTO_XTS=m | 433 | CONFIG_CRYPTO_XTS=m |
328 | CONFIG_CRYPTO_HMAC=y | ||
329 | CONFIG_CRYPTO_XCBC=m | 434 | CONFIG_CRYPTO_XCBC=m |
330 | CONFIG_CRYPTO_MD4=m | 435 | CONFIG_CRYPTO_VMAC=m |
331 | CONFIG_CRYPTO_MICHAEL_MIC=m | 436 | CONFIG_CRYPTO_MICHAEL_MIC=m |
332 | CONFIG_CRYPTO_RMD128=m | 437 | CONFIG_CRYPTO_RMD128=m |
333 | CONFIG_CRYPTO_RMD160=m | 438 | CONFIG_CRYPTO_RMD160=m |
334 | CONFIG_CRYPTO_RMD256=m | 439 | CONFIG_CRYPTO_RMD256=m |
335 | CONFIG_CRYPTO_RMD320=m | 440 | CONFIG_CRYPTO_RMD320=m |
336 | CONFIG_CRYPTO_SHA256=m | ||
337 | CONFIG_CRYPTO_SHA512=m | 441 | CONFIG_CRYPTO_SHA512=m |
338 | CONFIG_CRYPTO_TGR192=m | 442 | CONFIG_CRYPTO_TGR192=m |
339 | CONFIG_CRYPTO_WP512=m | 443 | CONFIG_CRYPTO_WP512=m |
340 | CONFIG_CRYPTO_AES=m | ||
341 | CONFIG_CRYPTO_ANUBIS=m | 444 | CONFIG_CRYPTO_ANUBIS=m |
342 | CONFIG_CRYPTO_BLOWFISH=m | 445 | CONFIG_CRYPTO_BLOWFISH=m |
343 | CONFIG_CRYPTO_CAMELLIA=m | 446 | CONFIG_CRYPTO_CAMELLIA=m |
@@ -353,6 +456,14 @@ CONFIG_CRYPTO_TWOFISH=m | |||
353 | CONFIG_CRYPTO_ZLIB=m | 456 | CONFIG_CRYPTO_ZLIB=m |
354 | CONFIG_CRYPTO_LZO=m | 457 | CONFIG_CRYPTO_LZO=m |
355 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 458 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
459 | CONFIG_CRYPTO_USER_API_HASH=m | ||
460 | CONFIG_CRYPTO_USER_API_SKCIPHER=m | ||
356 | # CONFIG_CRYPTO_HW is not set | 461 | # CONFIG_CRYPTO_HW is not set |
357 | CONFIG_CRC16=y | ||
358 | CONFIG_CRC_T10DIF=y | 462 | CONFIG_CRC_T10DIF=y |
463 | CONFIG_XZ_DEC_X86=y | ||
464 | CONFIG_XZ_DEC_POWERPC=y | ||
465 | CONFIG_XZ_DEC_IA64=y | ||
466 | CONFIG_XZ_DEC_ARM=y | ||
467 | CONFIG_XZ_DEC_ARMTHUMB=y | ||
468 | CONFIG_XZ_DEC_SPARC=y | ||
469 | CONFIG_XZ_DEC_TEST=m | ||
diff --git a/arch/m68k/configs/bvme6000_defconfig b/arch/m68k/configs/bvme6000_defconfig index 12f211733ba0..c015ddb6fd80 100644 --- a/arch/m68k/configs/bvme6000_defconfig +++ b/arch/m68k/configs/bvme6000_defconfig | |||
@@ -1,53 +1,74 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | ||
2 | CONFIG_LOCALVERSION="-bvme6000" | 1 | CONFIG_LOCALVERSION="-bvme6000" |
3 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
4 | CONFIG_POSIX_MQUEUE=y | 3 | CONFIG_POSIX_MQUEUE=y |
4 | CONFIG_FHANDLE=y | ||
5 | CONFIG_BSD_PROCESS_ACCT=y | 5 | CONFIG_BSD_PROCESS_ACCT=y |
6 | CONFIG_LOG_BUF_SHIFT=14 | 6 | CONFIG_BSD_PROCESS_ACCT_V3=y |
7 | CONFIG_RELAY=y | 7 | CONFIG_LOG_BUF_SHIFT=16 |
8 | # CONFIG_UTS_NS is not set | ||
9 | # CONFIG_IPC_NS is not set | ||
10 | # CONFIG_PID_NS is not set | ||
11 | # CONFIG_NET_NS is not set | ||
8 | CONFIG_BLK_DEV_INITRD=y | 12 | CONFIG_BLK_DEV_INITRD=y |
9 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
10 | CONFIG_SLAB=y | 13 | CONFIG_SLAB=y |
11 | CONFIG_MODULES=y | 14 | CONFIG_MODULES=y |
12 | CONFIG_MODULE_UNLOAD=y | 15 | CONFIG_MODULE_UNLOAD=y |
13 | CONFIG_VME=y | 16 | CONFIG_PARTITION_ADVANCED=y |
14 | CONFIG_BVME6000=y | 17 | CONFIG_AMIGA_PARTITION=y |
18 | CONFIG_ATARI_PARTITION=y | ||
19 | CONFIG_MAC_PARTITION=y | ||
20 | CONFIG_BSD_DISKLABEL=y | ||
21 | CONFIG_MINIX_SUBPARTITION=y | ||
22 | CONFIG_SOLARIS_X86_PARTITION=y | ||
23 | CONFIG_UNIXWARE_DISKLABEL=y | ||
24 | CONFIG_SUN_PARTITION=y | ||
25 | # CONFIG_EFI_PARTITION is not set | ||
26 | CONFIG_IOSCHED_DEADLINE=m | ||
15 | CONFIG_M68040=y | 27 | CONFIG_M68040=y |
16 | CONFIG_M68060=y | 28 | CONFIG_M68060=y |
29 | CONFIG_VME=y | ||
30 | CONFIG_BVME6000=y | ||
31 | # CONFIG_COMPACTION is not set | ||
32 | CONFIG_CLEANCACHE=y | ||
33 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
17 | CONFIG_BINFMT_AOUT=m | 34 | CONFIG_BINFMT_AOUT=m |
18 | CONFIG_BINFMT_MISC=m | 35 | CONFIG_BINFMT_MISC=m |
19 | CONFIG_PROC_HARDWARE=y | ||
20 | CONFIG_NET=y | 36 | CONFIG_NET=y |
21 | CONFIG_PACKET=y | 37 | CONFIG_PACKET=y |
38 | CONFIG_PACKET_DIAG=m | ||
22 | CONFIG_UNIX=y | 39 | CONFIG_UNIX=y |
40 | CONFIG_UNIX_DIAG=m | ||
41 | CONFIG_XFRM_MIGRATE=y | ||
23 | CONFIG_NET_KEY=y | 42 | CONFIG_NET_KEY=y |
24 | CONFIG_NET_KEY_MIGRATE=y | ||
25 | CONFIG_INET=y | 43 | CONFIG_INET=y |
26 | CONFIG_IP_PNP=y | 44 | CONFIG_IP_PNP=y |
27 | CONFIG_IP_PNP_DHCP=y | 45 | CONFIG_IP_PNP_DHCP=y |
28 | CONFIG_IP_PNP_BOOTP=y | 46 | CONFIG_IP_PNP_BOOTP=y |
29 | CONFIG_IP_PNP_RARP=y | 47 | CONFIG_IP_PNP_RARP=y |
30 | CONFIG_NET_IPIP=m | 48 | CONFIG_NET_IPIP=m |
49 | CONFIG_NET_IPGRE_DEMUX=m | ||
31 | CONFIG_NET_IPGRE=m | 50 | CONFIG_NET_IPGRE=m |
32 | CONFIG_SYN_COOKIES=y | 51 | CONFIG_SYN_COOKIES=y |
52 | CONFIG_NET_IPVTI=m | ||
33 | CONFIG_INET_AH=m | 53 | CONFIG_INET_AH=m |
34 | CONFIG_INET_ESP=m | 54 | CONFIG_INET_ESP=m |
35 | CONFIG_INET_IPCOMP=m | 55 | CONFIG_INET_IPCOMP=m |
36 | CONFIG_INET_XFRM_MODE_TRANSPORT=m | 56 | CONFIG_INET_XFRM_MODE_TRANSPORT=m |
37 | CONFIG_INET_XFRM_MODE_TUNNEL=m | 57 | CONFIG_INET_XFRM_MODE_TUNNEL=m |
38 | CONFIG_INET_XFRM_MODE_BEET=m | 58 | CONFIG_INET_XFRM_MODE_BEET=m |
59 | # CONFIG_INET_LRO is not set | ||
39 | CONFIG_INET_DIAG=m | 60 | CONFIG_INET_DIAG=m |
61 | CONFIG_INET_UDP_DIAG=m | ||
40 | CONFIG_IPV6_PRIVACY=y | 62 | CONFIG_IPV6_PRIVACY=y |
41 | CONFIG_IPV6_ROUTER_PREF=y | 63 | CONFIG_IPV6_ROUTER_PREF=y |
42 | CONFIG_IPV6_ROUTE_INFO=y | ||
43 | CONFIG_INET6_AH=m | 64 | CONFIG_INET6_AH=m |
44 | CONFIG_INET6_ESP=m | 65 | CONFIG_INET6_ESP=m |
45 | CONFIG_INET6_IPCOMP=m | 66 | CONFIG_INET6_IPCOMP=m |
46 | CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m | 67 | CONFIG_IPV6_GRE=m |
47 | CONFIG_IPV6_TUNNEL=m | ||
48 | CONFIG_NETFILTER=y | 68 | CONFIG_NETFILTER=y |
49 | CONFIG_NETFILTER_NETLINK_QUEUE=m | ||
50 | CONFIG_NF_CONNTRACK=m | 69 | CONFIG_NF_CONNTRACK=m |
70 | CONFIG_NF_CONNTRACK_ZONES=y | ||
71 | # CONFIG_NF_CONNTRACK_PROCFS is not set | ||
51 | # CONFIG_NF_CT_PROTO_DCCP is not set | 72 | # CONFIG_NF_CT_PROTO_DCCP is not set |
52 | CONFIG_NF_CT_PROTO_UDPLITE=m | 73 | CONFIG_NF_CT_PROTO_UDPLITE=m |
53 | CONFIG_NF_CONNTRACK_AMANDA=m | 74 | CONFIG_NF_CONNTRACK_AMANDA=m |
@@ -55,25 +76,37 @@ CONFIG_NF_CONNTRACK_FTP=m | |||
55 | CONFIG_NF_CONNTRACK_H323=m | 76 | CONFIG_NF_CONNTRACK_H323=m |
56 | CONFIG_NF_CONNTRACK_IRC=m | 77 | CONFIG_NF_CONNTRACK_IRC=m |
57 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m | 78 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m |
79 | CONFIG_NF_CONNTRACK_SNMP=m | ||
58 | CONFIG_NF_CONNTRACK_PPTP=m | 80 | CONFIG_NF_CONNTRACK_PPTP=m |
59 | CONFIG_NF_CONNTRACK_SANE=m | 81 | CONFIG_NF_CONNTRACK_SANE=m |
60 | CONFIG_NF_CONNTRACK_SIP=m | 82 | CONFIG_NF_CONNTRACK_SIP=m |
61 | CONFIG_NF_CONNTRACK_TFTP=m | 83 | CONFIG_NF_CONNTRACK_TFTP=m |
84 | CONFIG_NETFILTER_XT_SET=m | ||
85 | CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m | ||
62 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 86 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
63 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 87 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
64 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | 88 | CONFIG_NETFILTER_XT_TARGET_DSCP=m |
89 | CONFIG_NETFILTER_XT_TARGET_HMARK=m | ||
90 | CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m | ||
91 | CONFIG_NETFILTER_XT_TARGET_LOG=m | ||
65 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 92 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
66 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 93 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
67 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | 94 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m |
95 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | ||
96 | CONFIG_NETFILTER_XT_TARGET_TEE=m | ||
68 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | 97 | CONFIG_NETFILTER_XT_TARGET_TRACE=m |
69 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m | 98 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m |
70 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m | 99 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m |
100 | CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m | ||
101 | CONFIG_NETFILTER_XT_MATCH_BPF=m | ||
71 | CONFIG_NETFILTER_XT_MATCH_CLUSTER=m | 102 | CONFIG_NETFILTER_XT_MATCH_CLUSTER=m |
72 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m | 103 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m |
73 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m | 104 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m |
105 | CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m | ||
74 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m | 106 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m |
75 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m | 107 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m |
76 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | 108 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m |
109 | CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m | ||
77 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | 110 | CONFIG_NETFILTER_XT_MATCH_DSCP=m |
78 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 111 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
79 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | 112 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m |
@@ -84,6 +117,8 @@ CONFIG_NETFILTER_XT_MATCH_LIMIT=m | |||
84 | CONFIG_NETFILTER_XT_MATCH_MAC=m | 117 | CONFIG_NETFILTER_XT_MATCH_MAC=m |
85 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 118 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
86 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | 119 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m |
120 | CONFIG_NETFILTER_XT_MATCH_NFACCT=m | ||
121 | CONFIG_NETFILTER_XT_MATCH_OSF=m | ||
87 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | 122 | CONFIG_NETFILTER_XT_MATCH_OWNER=m |
88 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 123 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
89 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 124 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
@@ -97,22 +132,31 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m | |||
97 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 132 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
98 | CONFIG_NETFILTER_XT_MATCH_TIME=m | 133 | CONFIG_NETFILTER_XT_MATCH_TIME=m |
99 | CONFIG_NETFILTER_XT_MATCH_U32=m | 134 | CONFIG_NETFILTER_XT_MATCH_U32=m |
135 | CONFIG_IP_SET=m | ||
136 | CONFIG_IP_SET_BITMAP_IP=m | ||
137 | CONFIG_IP_SET_BITMAP_IPMAC=m | ||
138 | CONFIG_IP_SET_BITMAP_PORT=m | ||
139 | CONFIG_IP_SET_HASH_IP=m | ||
140 | CONFIG_IP_SET_HASH_IPPORT=m | ||
141 | CONFIG_IP_SET_HASH_IPPORTIP=m | ||
142 | CONFIG_IP_SET_HASH_IPPORTNET=m | ||
143 | CONFIG_IP_SET_HASH_NET=m | ||
144 | CONFIG_IP_SET_HASH_NETPORT=m | ||
145 | CONFIG_IP_SET_HASH_NETIFACE=m | ||
146 | CONFIG_IP_SET_LIST_SET=m | ||
100 | CONFIG_NF_CONNTRACK_IPV4=m | 147 | CONFIG_NF_CONNTRACK_IPV4=m |
101 | CONFIG_IP_NF_QUEUE=m | ||
102 | CONFIG_IP_NF_IPTABLES=m | 148 | CONFIG_IP_NF_IPTABLES=m |
103 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
104 | CONFIG_IP_NF_MATCH_AH=m | 149 | CONFIG_IP_NF_MATCH_AH=m |
105 | CONFIG_IP_NF_MATCH_ECN=m | 150 | CONFIG_IP_NF_MATCH_ECN=m |
151 | CONFIG_IP_NF_MATCH_RPFILTER=m | ||
106 | CONFIG_IP_NF_MATCH_TTL=m | 152 | CONFIG_IP_NF_MATCH_TTL=m |
107 | CONFIG_IP_NF_FILTER=m | 153 | CONFIG_IP_NF_FILTER=m |
108 | CONFIG_IP_NF_TARGET_REJECT=m | 154 | CONFIG_IP_NF_TARGET_REJECT=m |
109 | CONFIG_IP_NF_TARGET_LOG=m | ||
110 | CONFIG_IP_NF_TARGET_ULOG=m | 155 | CONFIG_IP_NF_TARGET_ULOG=m |
111 | CONFIG_NF_NAT=m | 156 | CONFIG_NF_NAT_IPV4=m |
112 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 157 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
113 | CONFIG_IP_NF_TARGET_NETMAP=m | 158 | CONFIG_IP_NF_TARGET_NETMAP=m |
114 | CONFIG_IP_NF_TARGET_REDIRECT=m | 159 | CONFIG_IP_NF_TARGET_REDIRECT=m |
115 | CONFIG_NF_NAT_SNMP_BASIC=m | ||
116 | CONFIG_IP_NF_MANGLE=m | 160 | CONFIG_IP_NF_MANGLE=m |
117 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | 161 | CONFIG_IP_NF_TARGET_CLUSTERIP=m |
118 | CONFIG_IP_NF_TARGET_ECN=m | 162 | CONFIG_IP_NF_TARGET_ECN=m |
@@ -122,7 +166,6 @@ CONFIG_IP_NF_ARPTABLES=m | |||
122 | CONFIG_IP_NF_ARPFILTER=m | 166 | CONFIG_IP_NF_ARPFILTER=m |
123 | CONFIG_IP_NF_ARP_MANGLE=m | 167 | CONFIG_IP_NF_ARP_MANGLE=m |
124 | CONFIG_NF_CONNTRACK_IPV6=m | 168 | CONFIG_NF_CONNTRACK_IPV6=m |
125 | CONFIG_IP6_NF_QUEUE=m | ||
126 | CONFIG_IP6_NF_IPTABLES=m | 169 | CONFIG_IP6_NF_IPTABLES=m |
127 | CONFIG_IP6_NF_MATCH_AH=m | 170 | CONFIG_IP6_NF_MATCH_AH=m |
128 | CONFIG_IP6_NF_MATCH_EUI64=m | 171 | CONFIG_IP6_NF_MATCH_EUI64=m |
@@ -131,21 +174,34 @@ CONFIG_IP6_NF_MATCH_OPTS=m | |||
131 | CONFIG_IP6_NF_MATCH_HL=m | 174 | CONFIG_IP6_NF_MATCH_HL=m |
132 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 175 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
133 | CONFIG_IP6_NF_MATCH_MH=m | 176 | CONFIG_IP6_NF_MATCH_MH=m |
177 | CONFIG_IP6_NF_MATCH_RPFILTER=m | ||
134 | CONFIG_IP6_NF_MATCH_RT=m | 178 | CONFIG_IP6_NF_MATCH_RT=m |
135 | CONFIG_IP6_NF_TARGET_HL=m | 179 | CONFIG_IP6_NF_TARGET_HL=m |
136 | CONFIG_IP6_NF_TARGET_LOG=m | ||
137 | CONFIG_IP6_NF_FILTER=m | 180 | CONFIG_IP6_NF_FILTER=m |
138 | CONFIG_IP6_NF_TARGET_REJECT=m | 181 | CONFIG_IP6_NF_TARGET_REJECT=m |
139 | CONFIG_IP6_NF_MANGLE=m | 182 | CONFIG_IP6_NF_MANGLE=m |
140 | CONFIG_IP6_NF_RAW=m | 183 | CONFIG_IP6_NF_RAW=m |
184 | CONFIG_NF_NAT_IPV6=m | ||
185 | CONFIG_IP6_NF_TARGET_MASQUERADE=m | ||
186 | CONFIG_IP6_NF_TARGET_NPT=m | ||
141 | CONFIG_IP_DCCP=m | 187 | CONFIG_IP_DCCP=m |
142 | # CONFIG_IP_DCCP_CCID3 is not set | 188 | # CONFIG_IP_DCCP_CCID3 is not set |
189 | CONFIG_SCTP_COOKIE_HMAC_SHA1=y | ||
190 | CONFIG_RDS=m | ||
191 | CONFIG_RDS_TCP=m | ||
192 | CONFIG_L2TP=m | ||
143 | CONFIG_ATALK=m | 193 | CONFIG_ATALK=m |
194 | CONFIG_BATMAN_ADV=m | ||
195 | CONFIG_BATMAN_ADV_DAT=y | ||
196 | # CONFIG_WIRELESS is not set | ||
144 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 197 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
198 | CONFIG_DEVTMPFS=y | ||
145 | # CONFIG_FIRMWARE_IN_KERNEL is not set | 199 | # CONFIG_FIRMWARE_IN_KERNEL is not set |
200 | # CONFIG_FW_LOADER_USER_HELPER is not set | ||
146 | CONFIG_CONNECTOR=m | 201 | CONFIG_CONNECTOR=m |
147 | CONFIG_BLK_DEV_LOOP=y | 202 | CONFIG_BLK_DEV_LOOP=y |
148 | CONFIG_BLK_DEV_CRYPTOLOOP=m | 203 | CONFIG_BLK_DEV_CRYPTOLOOP=m |
204 | CONFIG_BLK_DEV_DRBD=m | ||
149 | CONFIG_BLK_DEV_NBD=m | 205 | CONFIG_BLK_DEV_NBD=m |
150 | CONFIG_BLK_DEV_RAM=y | 206 | CONFIG_BLK_DEV_RAM=y |
151 | CONFIG_CDROM_PKTCDVD=m | 207 | CONFIG_CDROM_PKTCDVD=m |
@@ -160,103 +216,131 @@ CONFIG_BLK_DEV_SR=y | |||
160 | CONFIG_BLK_DEV_SR_VENDOR=y | 216 | CONFIG_BLK_DEV_SR_VENDOR=y |
161 | CONFIG_CHR_DEV_SG=m | 217 | CONFIG_CHR_DEV_SG=m |
162 | CONFIG_SCSI_CONSTANTS=y | 218 | CONFIG_SCSI_CONSTANTS=y |
163 | CONFIG_SCSI_SAS_LIBSAS=m | 219 | CONFIG_SCSI_SAS_ATTRS=m |
164 | # CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set | ||
165 | CONFIG_SCSI_SRP_ATTRS=m | ||
166 | CONFIG_SCSI_SRP_TGT_ATTRS=y | ||
167 | CONFIG_ISCSI_TCP=m | 220 | CONFIG_ISCSI_TCP=m |
221 | CONFIG_ISCSI_BOOT_SYSFS=m | ||
168 | CONFIG_BVME6000_SCSI=y | 222 | CONFIG_BVME6000_SCSI=y |
169 | CONFIG_MD=y | 223 | CONFIG_MD=y |
170 | CONFIG_BLK_DEV_MD=m | ||
171 | CONFIG_MD_LINEAR=m | 224 | CONFIG_MD_LINEAR=m |
172 | CONFIG_MD_RAID0=m | 225 | CONFIG_MD_RAID0=m |
173 | CONFIG_MD_RAID1=m | ||
174 | CONFIG_MD_RAID456=m | ||
175 | CONFIG_BLK_DEV_DM=m | 226 | CONFIG_BLK_DEV_DM=m |
176 | CONFIG_DM_CRYPT=m | 227 | CONFIG_DM_CRYPT=m |
177 | CONFIG_DM_SNAPSHOT=m | 228 | CONFIG_DM_SNAPSHOT=m |
229 | CONFIG_DM_THIN_PROVISIONING=m | ||
230 | CONFIG_DM_CACHE=m | ||
178 | CONFIG_DM_MIRROR=m | 231 | CONFIG_DM_MIRROR=m |
232 | CONFIG_DM_RAID=m | ||
179 | CONFIG_DM_ZERO=m | 233 | CONFIG_DM_ZERO=m |
180 | CONFIG_DM_MULTIPATH=m | 234 | CONFIG_DM_MULTIPATH=m |
181 | CONFIG_DM_UEVENT=y | 235 | CONFIG_DM_UEVENT=y |
236 | CONFIG_TARGET_CORE=m | ||
237 | CONFIG_TCM_IBLOCK=m | ||
238 | CONFIG_TCM_FILEIO=m | ||
239 | CONFIG_TCM_PSCSI=m | ||
182 | CONFIG_NETDEVICES=y | 240 | CONFIG_NETDEVICES=y |
183 | CONFIG_DUMMY=m | 241 | CONFIG_DUMMY=m |
184 | CONFIG_MACVLAN=m | ||
185 | CONFIG_EQUALIZER=m | 242 | CONFIG_EQUALIZER=m |
243 | CONFIG_NET_TEAM=m | ||
244 | CONFIG_NET_TEAM_MODE_BROADCAST=m | ||
245 | CONFIG_NET_TEAM_MODE_ROUNDROBIN=m | ||
246 | CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m | ||
247 | CONFIG_NET_TEAM_MODE_LOADBALANCE=m | ||
248 | CONFIG_VXLAN=m | ||
249 | CONFIG_NETCONSOLE=m | ||
250 | CONFIG_NETCONSOLE_DYNAMIC=y | ||
186 | CONFIG_VETH=m | 251 | CONFIG_VETH=m |
187 | CONFIG_NET_ETHERNET=y | 252 | # CONFIG_NET_CADENCE is not set |
253 | # CONFIG_NET_VENDOR_BROADCOM is not set | ||
188 | CONFIG_BVME6000_NET=y | 254 | CONFIG_BVME6000_NET=y |
189 | # CONFIG_NETDEV_1000 is not set | 255 | # CONFIG_NET_VENDOR_MARVELL is not set |
190 | # CONFIG_NETDEV_10000 is not set | 256 | # CONFIG_NET_VENDOR_MICREL is not set |
257 | # CONFIG_NET_VENDOR_NATSEMI is not set | ||
258 | # CONFIG_NET_VENDOR_SEEQ is not set | ||
259 | # CONFIG_NET_VENDOR_STMICRO is not set | ||
260 | # CONFIG_NET_VENDOR_WIZNET is not set | ||
191 | CONFIG_PPP=m | 261 | CONFIG_PPP=m |
192 | CONFIG_PPP_FILTER=y | ||
193 | CONFIG_PPP_ASYNC=m | ||
194 | CONFIG_PPP_SYNC_TTY=m | ||
195 | CONFIG_PPP_DEFLATE=m | ||
196 | CONFIG_PPP_BSDCOMP=m | 262 | CONFIG_PPP_BSDCOMP=m |
263 | CONFIG_PPP_DEFLATE=m | ||
264 | CONFIG_PPP_FILTER=y | ||
197 | CONFIG_PPP_MPPE=m | 265 | CONFIG_PPP_MPPE=m |
198 | CONFIG_PPPOE=m | 266 | CONFIG_PPPOE=m |
267 | CONFIG_PPTP=m | ||
268 | CONFIG_PPPOL2TP=m | ||
269 | CONFIG_PPP_ASYNC=m | ||
270 | CONFIG_PPP_SYNC_TTY=m | ||
199 | CONFIG_SLIP=m | 271 | CONFIG_SLIP=m |
200 | CONFIG_SLIP_COMPRESSED=y | 272 | CONFIG_SLIP_COMPRESSED=y |
201 | CONFIG_SLIP_SMART=y | 273 | CONFIG_SLIP_SMART=y |
202 | CONFIG_SLIP_MODE_SLIP6=y | 274 | CONFIG_SLIP_MODE_SLIP6=y |
203 | CONFIG_NETCONSOLE=m | 275 | # CONFIG_WLAN is not set |
204 | CONFIG_NETCONSOLE_DYNAMIC=y | 276 | CONFIG_INPUT_EVDEV=m |
205 | CONFIG_INPUT_FF_MEMLESS=m | ||
206 | # CONFIG_KEYBOARD_ATKBD is not set | 277 | # CONFIG_KEYBOARD_ATKBD is not set |
207 | CONFIG_MOUSE_PS2=m | 278 | # CONFIG_MOUSE_PS2 is not set |
208 | CONFIG_MOUSE_SERIAL=m | 279 | # CONFIG_SERIO is not set |
209 | CONFIG_SERIO=m | ||
210 | # CONFIG_SERIO_SERPORT is not set | ||
211 | CONFIG_VT_HW_CONSOLE_BINDING=y | 280 | CONFIG_VT_HW_CONSOLE_BINDING=y |
281 | # CONFIG_LEGACY_PTYS is not set | ||
212 | # CONFIG_DEVKMEM is not set | 282 | # CONFIG_DEVKMEM is not set |
213 | # CONFIG_HW_RANDOM is not set | 283 | # CONFIG_HW_RANDOM is not set |
214 | CONFIG_GEN_RTC=m | 284 | CONFIG_NTP_PPS=y |
215 | CONFIG_GEN_RTC_X=y | 285 | CONFIG_PPS_CLIENT_LDISC=m |
286 | CONFIG_PTP_1588_CLOCK=m | ||
216 | # CONFIG_HWMON is not set | 287 | # CONFIG_HWMON is not set |
217 | CONFIG_HID=m | 288 | CONFIG_HID=m |
218 | CONFIG_HIDRAW=y | 289 | CONFIG_HIDRAW=y |
290 | CONFIG_UHID=m | ||
291 | # CONFIG_HID_GENERIC is not set | ||
219 | # CONFIG_USB_SUPPORT is not set | 292 | # CONFIG_USB_SUPPORT is not set |
293 | CONFIG_RTC_CLASS=y | ||
294 | CONFIG_RTC_DRV_GENERIC=m | ||
295 | # CONFIG_IOMMU_SUPPORT is not set | ||
296 | CONFIG_PROC_HARDWARE=y | ||
220 | CONFIG_EXT2_FS=y | 297 | CONFIG_EXT2_FS=y |
221 | CONFIG_EXT3_FS=y | 298 | CONFIG_EXT3_FS=y |
222 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | 299 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set |
223 | # CONFIG_EXT3_FS_XATTR is not set | 300 | # CONFIG_EXT3_FS_XATTR is not set |
301 | CONFIG_EXT4_FS=y | ||
224 | CONFIG_REISERFS_FS=m | 302 | CONFIG_REISERFS_FS=m |
225 | CONFIG_JFS_FS=m | 303 | CONFIG_JFS_FS=m |
226 | CONFIG_XFS_FS=m | 304 | CONFIG_XFS_FS=m |
227 | CONFIG_OCFS2_FS=m | 305 | CONFIG_OCFS2_FS=m |
228 | # CONFIG_OCFS2_FS_STATS is not set | ||
229 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 306 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
307 | CONFIG_FANOTIFY=y | ||
230 | CONFIG_QUOTA_NETLINK_INTERFACE=y | 308 | CONFIG_QUOTA_NETLINK_INTERFACE=y |
231 | # CONFIG_PRINT_QUOTA_WARNING is not set | 309 | # CONFIG_PRINT_QUOTA_WARNING is not set |
232 | CONFIG_AUTOFS_FS=m | ||
233 | CONFIG_AUTOFS4_FS=m | 310 | CONFIG_AUTOFS4_FS=m |
234 | CONFIG_FUSE_FS=m | 311 | CONFIG_FUSE_FS=m |
312 | CONFIG_CUSE=m | ||
235 | CONFIG_ISO9660_FS=y | 313 | CONFIG_ISO9660_FS=y |
236 | CONFIG_JOLIET=y | 314 | CONFIG_JOLIET=y |
237 | CONFIG_ZISOFS=y | 315 | CONFIG_ZISOFS=y |
238 | CONFIG_UDF_FS=m | 316 | CONFIG_UDF_FS=m |
239 | CONFIG_MSDOS_FS=y | 317 | CONFIG_MSDOS_FS=m |
240 | CONFIG_VFAT_FS=m | 318 | CONFIG_VFAT_FS=m |
241 | CONFIG_PROC_KCORE=y | 319 | CONFIG_PROC_KCORE=y |
242 | CONFIG_TMPFS=y | 320 | CONFIG_TMPFS=y |
243 | CONFIG_AFFS_FS=m | 321 | CONFIG_AFFS_FS=m |
322 | CONFIG_ECRYPT_FS=m | ||
323 | CONFIG_ECRYPT_FS_MESSAGING=y | ||
244 | CONFIG_HFS_FS=m | 324 | CONFIG_HFS_FS=m |
245 | CONFIG_HFSPLUS_FS=m | 325 | CONFIG_HFSPLUS_FS=m |
246 | CONFIG_CRAMFS=m | 326 | CONFIG_CRAMFS=m |
247 | CONFIG_SQUASHFS=m | 327 | CONFIG_SQUASHFS=m |
248 | CONFIG_MINIX_FS=y | 328 | CONFIG_SQUASHFS_LZO=y |
329 | CONFIG_MINIX_FS=m | ||
330 | CONFIG_OMFS_FS=m | ||
249 | CONFIG_HPFS_FS=m | 331 | CONFIG_HPFS_FS=m |
332 | CONFIG_QNX4FS_FS=m | ||
333 | CONFIG_QNX6FS_FS=m | ||
250 | CONFIG_SYSV_FS=m | 334 | CONFIG_SYSV_FS=m |
251 | CONFIG_UFS_FS=m | 335 | CONFIG_UFS_FS=m |
252 | CONFIG_NFS_FS=y | 336 | CONFIG_NFS_FS=y |
253 | CONFIG_NFS_V3=y | ||
254 | CONFIG_NFS_V4=y | 337 | CONFIG_NFS_V4=y |
338 | CONFIG_NFS_SWAP=y | ||
255 | CONFIG_ROOT_NFS=y | 339 | CONFIG_ROOT_NFS=y |
256 | CONFIG_NFSD=m | 340 | CONFIG_NFSD=m |
257 | CONFIG_NFSD_V3=y | 341 | CONFIG_NFSD_V3=y |
258 | CONFIG_SMB_FS=m | 342 | CONFIG_CIFS=m |
259 | CONFIG_SMB_NLS_DEFAULT=y | 343 | # CONFIG_CIFS_DEBUG is not set |
260 | CONFIG_CODA_FS=m | 344 | CONFIG_CODA_FS=m |
261 | CONFIG_NLS_CODEPAGE_437=y | 345 | CONFIG_NLS_CODEPAGE_437=y |
262 | CONFIG_NLS_CODEPAGE_737=m | 346 | CONFIG_NLS_CODEPAGE_737=m |
@@ -295,10 +379,23 @@ CONFIG_NLS_ISO8859_14=m | |||
295 | CONFIG_NLS_ISO8859_15=m | 379 | CONFIG_NLS_ISO8859_15=m |
296 | CONFIG_NLS_KOI8_R=m | 380 | CONFIG_NLS_KOI8_R=m |
297 | CONFIG_NLS_KOI8_U=m | 381 | CONFIG_NLS_KOI8_U=m |
382 | CONFIG_NLS_MAC_ROMAN=m | ||
383 | CONFIG_NLS_MAC_CELTIC=m | ||
384 | CONFIG_NLS_MAC_CENTEURO=m | ||
385 | CONFIG_NLS_MAC_CROATIAN=m | ||
386 | CONFIG_NLS_MAC_CYRILLIC=m | ||
387 | CONFIG_NLS_MAC_GAELIC=m | ||
388 | CONFIG_NLS_MAC_GREEK=m | ||
389 | CONFIG_NLS_MAC_ICELAND=m | ||
390 | CONFIG_NLS_MAC_INUIT=m | ||
391 | CONFIG_NLS_MAC_ROMANIAN=m | ||
392 | CONFIG_NLS_MAC_TURKISH=m | ||
298 | CONFIG_DLM=m | 393 | CONFIG_DLM=m |
299 | CONFIG_MAGIC_SYSRQ=y | 394 | CONFIG_MAGIC_SYSRQ=y |
300 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 395 | CONFIG_ASYNC_RAID6_TEST=m |
301 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 396 | CONFIG_ENCRYPTED_KEYS=m |
397 | CONFIG_CRYPTO_MANAGER=y | ||
398 | CONFIG_CRYPTO_USER=m | ||
302 | CONFIG_CRYPTO_NULL=m | 399 | CONFIG_CRYPTO_NULL=m |
303 | CONFIG_CRYPTO_CRYPTD=m | 400 | CONFIG_CRYPTO_CRYPTD=m |
304 | CONFIG_CRYPTO_TEST=m | 401 | CONFIG_CRYPTO_TEST=m |
@@ -308,19 +405,16 @@ CONFIG_CRYPTO_CTS=m | |||
308 | CONFIG_CRYPTO_LRW=m | 405 | CONFIG_CRYPTO_LRW=m |
309 | CONFIG_CRYPTO_PCBC=m | 406 | CONFIG_CRYPTO_PCBC=m |
310 | CONFIG_CRYPTO_XTS=m | 407 | CONFIG_CRYPTO_XTS=m |
311 | CONFIG_CRYPTO_HMAC=y | ||
312 | CONFIG_CRYPTO_XCBC=m | 408 | CONFIG_CRYPTO_XCBC=m |
313 | CONFIG_CRYPTO_MD4=m | 409 | CONFIG_CRYPTO_VMAC=m |
314 | CONFIG_CRYPTO_MICHAEL_MIC=m | 410 | CONFIG_CRYPTO_MICHAEL_MIC=m |
315 | CONFIG_CRYPTO_RMD128=m | 411 | CONFIG_CRYPTO_RMD128=m |
316 | CONFIG_CRYPTO_RMD160=m | 412 | CONFIG_CRYPTO_RMD160=m |
317 | CONFIG_CRYPTO_RMD256=m | 413 | CONFIG_CRYPTO_RMD256=m |
318 | CONFIG_CRYPTO_RMD320=m | 414 | CONFIG_CRYPTO_RMD320=m |
319 | CONFIG_CRYPTO_SHA256=m | ||
320 | CONFIG_CRYPTO_SHA512=m | 415 | CONFIG_CRYPTO_SHA512=m |
321 | CONFIG_CRYPTO_TGR192=m | 416 | CONFIG_CRYPTO_TGR192=m |
322 | CONFIG_CRYPTO_WP512=m | 417 | CONFIG_CRYPTO_WP512=m |
323 | CONFIG_CRYPTO_AES=m | ||
324 | CONFIG_CRYPTO_ANUBIS=m | 418 | CONFIG_CRYPTO_ANUBIS=m |
325 | CONFIG_CRYPTO_BLOWFISH=m | 419 | CONFIG_CRYPTO_BLOWFISH=m |
326 | CONFIG_CRYPTO_CAMELLIA=m | 420 | CONFIG_CRYPTO_CAMELLIA=m |
@@ -336,7 +430,14 @@ CONFIG_CRYPTO_TWOFISH=m | |||
336 | CONFIG_CRYPTO_ZLIB=m | 430 | CONFIG_CRYPTO_ZLIB=m |
337 | CONFIG_CRYPTO_LZO=m | 431 | CONFIG_CRYPTO_LZO=m |
338 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 432 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
433 | CONFIG_CRYPTO_USER_API_HASH=m | ||
434 | CONFIG_CRYPTO_USER_API_SKCIPHER=m | ||
339 | # CONFIG_CRYPTO_HW is not set | 435 | # CONFIG_CRYPTO_HW is not set |
340 | CONFIG_CRC16=m | ||
341 | CONFIG_CRC_T10DIF=y | 436 | CONFIG_CRC_T10DIF=y |
342 | CONFIG_CRC32=m | 437 | CONFIG_XZ_DEC_X86=y |
438 | CONFIG_XZ_DEC_POWERPC=y | ||
439 | CONFIG_XZ_DEC_IA64=y | ||
440 | CONFIG_XZ_DEC_ARM=y | ||
441 | CONFIG_XZ_DEC_ARMTHUMB=y | ||
442 | CONFIG_XZ_DEC_SPARC=y | ||
443 | CONFIG_XZ_DEC_TEST=m | ||
diff --git a/arch/m68k/configs/hp300_defconfig b/arch/m68k/configs/hp300_defconfig index 215389a5407f..ec7382d8afff 100644 --- a/arch/m68k/configs/hp300_defconfig +++ b/arch/m68k/configs/hp300_defconfig | |||
@@ -1,54 +1,76 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | ||
2 | CONFIG_LOCALVERSION="-hp300" | 1 | CONFIG_LOCALVERSION="-hp300" |
3 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
4 | CONFIG_POSIX_MQUEUE=y | 3 | CONFIG_POSIX_MQUEUE=y |
4 | CONFIG_FHANDLE=y | ||
5 | CONFIG_BSD_PROCESS_ACCT=y | 5 | CONFIG_BSD_PROCESS_ACCT=y |
6 | CONFIG_LOG_BUF_SHIFT=14 | 6 | CONFIG_BSD_PROCESS_ACCT_V3=y |
7 | CONFIG_RELAY=y | 7 | CONFIG_LOG_BUF_SHIFT=16 |
8 | # CONFIG_UTS_NS is not set | ||
9 | # CONFIG_IPC_NS is not set | ||
10 | # CONFIG_PID_NS is not set | ||
11 | # CONFIG_NET_NS is not set | ||
8 | CONFIG_BLK_DEV_INITRD=y | 12 | CONFIG_BLK_DEV_INITRD=y |
9 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
10 | CONFIG_SLAB=y | 13 | CONFIG_SLAB=y |
11 | CONFIG_MODULES=y | 14 | CONFIG_MODULES=y |
12 | CONFIG_MODULE_UNLOAD=y | 15 | CONFIG_MODULE_UNLOAD=y |
13 | CONFIG_HP300=y | 16 | CONFIG_PARTITION_ADVANCED=y |
17 | CONFIG_AMIGA_PARTITION=y | ||
18 | CONFIG_ATARI_PARTITION=y | ||
19 | CONFIG_MAC_PARTITION=y | ||
20 | CONFIG_BSD_DISKLABEL=y | ||
21 | CONFIG_MINIX_SUBPARTITION=y | ||
22 | CONFIG_SOLARIS_X86_PARTITION=y | ||
23 | CONFIG_UNIXWARE_DISKLABEL=y | ||
24 | CONFIG_SUN_PARTITION=y | ||
25 | # CONFIG_EFI_PARTITION is not set | ||
26 | CONFIG_SYSV68_PARTITION=y | ||
27 | CONFIG_IOSCHED_DEADLINE=m | ||
14 | CONFIG_M68020=y | 28 | CONFIG_M68020=y |
15 | CONFIG_M68030=y | 29 | CONFIG_M68030=y |
16 | CONFIG_M68040=y | 30 | CONFIG_M68040=y |
17 | CONFIG_M68060=y | 31 | CONFIG_M68060=y |
32 | CONFIG_HP300=y | ||
33 | # CONFIG_COMPACTION is not set | ||
34 | CONFIG_CLEANCACHE=y | ||
35 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
18 | CONFIG_BINFMT_AOUT=m | 36 | CONFIG_BINFMT_AOUT=m |
19 | CONFIG_BINFMT_MISC=m | 37 | CONFIG_BINFMT_MISC=m |
20 | CONFIG_PROC_HARDWARE=y | ||
21 | CONFIG_NET=y | 38 | CONFIG_NET=y |
22 | CONFIG_PACKET=y | 39 | CONFIG_PACKET=y |
40 | CONFIG_PACKET_DIAG=m | ||
23 | CONFIG_UNIX=y | 41 | CONFIG_UNIX=y |
42 | CONFIG_UNIX_DIAG=m | ||
43 | CONFIG_XFRM_MIGRATE=y | ||
24 | CONFIG_NET_KEY=y | 44 | CONFIG_NET_KEY=y |
25 | CONFIG_NET_KEY_MIGRATE=y | ||
26 | CONFIG_INET=y | 45 | CONFIG_INET=y |
27 | CONFIG_IP_PNP=y | 46 | CONFIG_IP_PNP=y |
28 | CONFIG_IP_PNP_DHCP=y | 47 | CONFIG_IP_PNP_DHCP=y |
29 | CONFIG_IP_PNP_BOOTP=y | 48 | CONFIG_IP_PNP_BOOTP=y |
30 | CONFIG_IP_PNP_RARP=y | 49 | CONFIG_IP_PNP_RARP=y |
31 | CONFIG_NET_IPIP=m | 50 | CONFIG_NET_IPIP=m |
51 | CONFIG_NET_IPGRE_DEMUX=m | ||
32 | CONFIG_NET_IPGRE=m | 52 | CONFIG_NET_IPGRE=m |
33 | CONFIG_SYN_COOKIES=y | 53 | CONFIG_SYN_COOKIES=y |
54 | CONFIG_NET_IPVTI=m | ||
34 | CONFIG_INET_AH=m | 55 | CONFIG_INET_AH=m |
35 | CONFIG_INET_ESP=m | 56 | CONFIG_INET_ESP=m |
36 | CONFIG_INET_IPCOMP=m | 57 | CONFIG_INET_IPCOMP=m |
37 | CONFIG_INET_XFRM_MODE_TRANSPORT=m | 58 | CONFIG_INET_XFRM_MODE_TRANSPORT=m |
38 | CONFIG_INET_XFRM_MODE_TUNNEL=m | 59 | CONFIG_INET_XFRM_MODE_TUNNEL=m |
39 | CONFIG_INET_XFRM_MODE_BEET=m | 60 | CONFIG_INET_XFRM_MODE_BEET=m |
61 | # CONFIG_INET_LRO is not set | ||
40 | CONFIG_INET_DIAG=m | 62 | CONFIG_INET_DIAG=m |
63 | CONFIG_INET_UDP_DIAG=m | ||
41 | CONFIG_IPV6_PRIVACY=y | 64 | CONFIG_IPV6_PRIVACY=y |
42 | CONFIG_IPV6_ROUTER_PREF=y | 65 | CONFIG_IPV6_ROUTER_PREF=y |
43 | CONFIG_IPV6_ROUTE_INFO=y | ||
44 | CONFIG_INET6_AH=m | 66 | CONFIG_INET6_AH=m |
45 | CONFIG_INET6_ESP=m | 67 | CONFIG_INET6_ESP=m |
46 | CONFIG_INET6_IPCOMP=m | 68 | CONFIG_INET6_IPCOMP=m |
47 | CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m | 69 | CONFIG_IPV6_GRE=m |
48 | CONFIG_IPV6_TUNNEL=m | ||
49 | CONFIG_NETFILTER=y | 70 | CONFIG_NETFILTER=y |
50 | CONFIG_NETFILTER_NETLINK_QUEUE=m | ||
51 | CONFIG_NF_CONNTRACK=m | 71 | CONFIG_NF_CONNTRACK=m |
72 | CONFIG_NF_CONNTRACK_ZONES=y | ||
73 | # CONFIG_NF_CONNTRACK_PROCFS is not set | ||
52 | # CONFIG_NF_CT_PROTO_DCCP is not set | 74 | # CONFIG_NF_CT_PROTO_DCCP is not set |
53 | CONFIG_NF_CT_PROTO_UDPLITE=m | 75 | CONFIG_NF_CT_PROTO_UDPLITE=m |
54 | CONFIG_NF_CONNTRACK_AMANDA=m | 76 | CONFIG_NF_CONNTRACK_AMANDA=m |
@@ -56,25 +78,37 @@ CONFIG_NF_CONNTRACK_FTP=m | |||
56 | CONFIG_NF_CONNTRACK_H323=m | 78 | CONFIG_NF_CONNTRACK_H323=m |
57 | CONFIG_NF_CONNTRACK_IRC=m | 79 | CONFIG_NF_CONNTRACK_IRC=m |
58 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m | 80 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m |
81 | CONFIG_NF_CONNTRACK_SNMP=m | ||
59 | CONFIG_NF_CONNTRACK_PPTP=m | 82 | CONFIG_NF_CONNTRACK_PPTP=m |
60 | CONFIG_NF_CONNTRACK_SANE=m | 83 | CONFIG_NF_CONNTRACK_SANE=m |
61 | CONFIG_NF_CONNTRACK_SIP=m | 84 | CONFIG_NF_CONNTRACK_SIP=m |
62 | CONFIG_NF_CONNTRACK_TFTP=m | 85 | CONFIG_NF_CONNTRACK_TFTP=m |
86 | CONFIG_NETFILTER_XT_SET=m | ||
87 | CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m | ||
63 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 88 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
64 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 89 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
65 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | 90 | CONFIG_NETFILTER_XT_TARGET_DSCP=m |
91 | CONFIG_NETFILTER_XT_TARGET_HMARK=m | ||
92 | CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m | ||
93 | CONFIG_NETFILTER_XT_TARGET_LOG=m | ||
66 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 94 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
67 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 95 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
68 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | 96 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m |
97 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | ||
98 | CONFIG_NETFILTER_XT_TARGET_TEE=m | ||
69 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | 99 | CONFIG_NETFILTER_XT_TARGET_TRACE=m |
70 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m | 100 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m |
71 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m | 101 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m |
102 | CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m | ||
103 | CONFIG_NETFILTER_XT_MATCH_BPF=m | ||
72 | CONFIG_NETFILTER_XT_MATCH_CLUSTER=m | 104 | CONFIG_NETFILTER_XT_MATCH_CLUSTER=m |
73 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m | 105 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m |
74 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m | 106 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m |
107 | CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m | ||
75 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m | 108 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m |
76 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m | 109 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m |
77 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | 110 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m |
111 | CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m | ||
78 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | 112 | CONFIG_NETFILTER_XT_MATCH_DSCP=m |
79 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 113 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
80 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | 114 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m |
@@ -85,6 +119,8 @@ CONFIG_NETFILTER_XT_MATCH_LIMIT=m | |||
85 | CONFIG_NETFILTER_XT_MATCH_MAC=m | 119 | CONFIG_NETFILTER_XT_MATCH_MAC=m |
86 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 120 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
87 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | 121 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m |
122 | CONFIG_NETFILTER_XT_MATCH_NFACCT=m | ||
123 | CONFIG_NETFILTER_XT_MATCH_OSF=m | ||
88 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | 124 | CONFIG_NETFILTER_XT_MATCH_OWNER=m |
89 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 125 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
90 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 126 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
@@ -98,22 +134,31 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m | |||
98 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 134 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
99 | CONFIG_NETFILTER_XT_MATCH_TIME=m | 135 | CONFIG_NETFILTER_XT_MATCH_TIME=m |
100 | CONFIG_NETFILTER_XT_MATCH_U32=m | 136 | CONFIG_NETFILTER_XT_MATCH_U32=m |
137 | CONFIG_IP_SET=m | ||
138 | CONFIG_IP_SET_BITMAP_IP=m | ||
139 | CONFIG_IP_SET_BITMAP_IPMAC=m | ||
140 | CONFIG_IP_SET_BITMAP_PORT=m | ||
141 | CONFIG_IP_SET_HASH_IP=m | ||
142 | CONFIG_IP_SET_HASH_IPPORT=m | ||
143 | CONFIG_IP_SET_HASH_IPPORTIP=m | ||
144 | CONFIG_IP_SET_HASH_IPPORTNET=m | ||
145 | CONFIG_IP_SET_HASH_NET=m | ||
146 | CONFIG_IP_SET_HASH_NETPORT=m | ||
147 | CONFIG_IP_SET_HASH_NETIFACE=m | ||
148 | CONFIG_IP_SET_LIST_SET=m | ||
101 | CONFIG_NF_CONNTRACK_IPV4=m | 149 | CONFIG_NF_CONNTRACK_IPV4=m |
102 | CONFIG_IP_NF_QUEUE=m | ||
103 | CONFIG_IP_NF_IPTABLES=m | 150 | CONFIG_IP_NF_IPTABLES=m |
104 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
105 | CONFIG_IP_NF_MATCH_AH=m | 151 | CONFIG_IP_NF_MATCH_AH=m |
106 | CONFIG_IP_NF_MATCH_ECN=m | 152 | CONFIG_IP_NF_MATCH_ECN=m |
153 | CONFIG_IP_NF_MATCH_RPFILTER=m | ||
107 | CONFIG_IP_NF_MATCH_TTL=m | 154 | CONFIG_IP_NF_MATCH_TTL=m |
108 | CONFIG_IP_NF_FILTER=m | 155 | CONFIG_IP_NF_FILTER=m |
109 | CONFIG_IP_NF_TARGET_REJECT=m | 156 | CONFIG_IP_NF_TARGET_REJECT=m |
110 | CONFIG_IP_NF_TARGET_LOG=m | ||
111 | CONFIG_IP_NF_TARGET_ULOG=m | 157 | CONFIG_IP_NF_TARGET_ULOG=m |
112 | CONFIG_NF_NAT=m | 158 | CONFIG_NF_NAT_IPV4=m |
113 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 159 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
114 | CONFIG_IP_NF_TARGET_NETMAP=m | 160 | CONFIG_IP_NF_TARGET_NETMAP=m |
115 | CONFIG_IP_NF_TARGET_REDIRECT=m | 161 | CONFIG_IP_NF_TARGET_REDIRECT=m |
116 | CONFIG_NF_NAT_SNMP_BASIC=m | ||
117 | CONFIG_IP_NF_MANGLE=m | 162 | CONFIG_IP_NF_MANGLE=m |
118 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | 163 | CONFIG_IP_NF_TARGET_CLUSTERIP=m |
119 | CONFIG_IP_NF_TARGET_ECN=m | 164 | CONFIG_IP_NF_TARGET_ECN=m |
@@ -123,7 +168,6 @@ CONFIG_IP_NF_ARPTABLES=m | |||
123 | CONFIG_IP_NF_ARPFILTER=m | 168 | CONFIG_IP_NF_ARPFILTER=m |
124 | CONFIG_IP_NF_ARP_MANGLE=m | 169 | CONFIG_IP_NF_ARP_MANGLE=m |
125 | CONFIG_NF_CONNTRACK_IPV6=m | 170 | CONFIG_NF_CONNTRACK_IPV6=m |
126 | CONFIG_IP6_NF_QUEUE=m | ||
127 | CONFIG_IP6_NF_IPTABLES=m | 171 | CONFIG_IP6_NF_IPTABLES=m |
128 | CONFIG_IP6_NF_MATCH_AH=m | 172 | CONFIG_IP6_NF_MATCH_AH=m |
129 | CONFIG_IP6_NF_MATCH_EUI64=m | 173 | CONFIG_IP6_NF_MATCH_EUI64=m |
@@ -132,21 +176,34 @@ CONFIG_IP6_NF_MATCH_OPTS=m | |||
132 | CONFIG_IP6_NF_MATCH_HL=m | 176 | CONFIG_IP6_NF_MATCH_HL=m |
133 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 177 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
134 | CONFIG_IP6_NF_MATCH_MH=m | 178 | CONFIG_IP6_NF_MATCH_MH=m |
179 | CONFIG_IP6_NF_MATCH_RPFILTER=m | ||
135 | CONFIG_IP6_NF_MATCH_RT=m | 180 | CONFIG_IP6_NF_MATCH_RT=m |
136 | CONFIG_IP6_NF_TARGET_HL=m | 181 | CONFIG_IP6_NF_TARGET_HL=m |
137 | CONFIG_IP6_NF_TARGET_LOG=m | ||
138 | CONFIG_IP6_NF_FILTER=m | 182 | CONFIG_IP6_NF_FILTER=m |
139 | CONFIG_IP6_NF_TARGET_REJECT=m | 183 | CONFIG_IP6_NF_TARGET_REJECT=m |
140 | CONFIG_IP6_NF_MANGLE=m | 184 | CONFIG_IP6_NF_MANGLE=m |
141 | CONFIG_IP6_NF_RAW=m | 185 | CONFIG_IP6_NF_RAW=m |
186 | CONFIG_NF_NAT_IPV6=m | ||
187 | CONFIG_IP6_NF_TARGET_MASQUERADE=m | ||
188 | CONFIG_IP6_NF_TARGET_NPT=m | ||
142 | CONFIG_IP_DCCP=m | 189 | CONFIG_IP_DCCP=m |
143 | # CONFIG_IP_DCCP_CCID3 is not set | 190 | # CONFIG_IP_DCCP_CCID3 is not set |
191 | CONFIG_SCTP_COOKIE_HMAC_SHA1=y | ||
192 | CONFIG_RDS=m | ||
193 | CONFIG_RDS_TCP=m | ||
194 | CONFIG_L2TP=m | ||
144 | CONFIG_ATALK=m | 195 | CONFIG_ATALK=m |
196 | CONFIG_BATMAN_ADV=m | ||
197 | CONFIG_BATMAN_ADV_DAT=y | ||
198 | # CONFIG_WIRELESS is not set | ||
145 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 199 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
200 | CONFIG_DEVTMPFS=y | ||
146 | # CONFIG_FIRMWARE_IN_KERNEL is not set | 201 | # CONFIG_FIRMWARE_IN_KERNEL is not set |
202 | # CONFIG_FW_LOADER_USER_HELPER is not set | ||
147 | CONFIG_CONNECTOR=m | 203 | CONFIG_CONNECTOR=m |
148 | CONFIG_BLK_DEV_LOOP=y | 204 | CONFIG_BLK_DEV_LOOP=y |
149 | CONFIG_BLK_DEV_CRYPTOLOOP=m | 205 | CONFIG_BLK_DEV_CRYPTOLOOP=m |
206 | CONFIG_BLK_DEV_DRBD=m | ||
150 | CONFIG_BLK_DEV_NBD=m | 207 | CONFIG_BLK_DEV_NBD=m |
151 | CONFIG_BLK_DEV_RAM=y | 208 | CONFIG_BLK_DEV_RAM=y |
152 | CONFIG_CDROM_PKTCDVD=m | 209 | CONFIG_CDROM_PKTCDVD=m |
@@ -161,59 +218,77 @@ CONFIG_BLK_DEV_SR=y | |||
161 | CONFIG_BLK_DEV_SR_VENDOR=y | 218 | CONFIG_BLK_DEV_SR_VENDOR=y |
162 | CONFIG_CHR_DEV_SG=m | 219 | CONFIG_CHR_DEV_SG=m |
163 | CONFIG_SCSI_CONSTANTS=y | 220 | CONFIG_SCSI_CONSTANTS=y |
164 | CONFIG_SCSI_SAS_LIBSAS=m | 221 | CONFIG_SCSI_SAS_ATTRS=m |
165 | # CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set | ||
166 | CONFIG_SCSI_SRP_ATTRS=m | ||
167 | CONFIG_SCSI_SRP_TGT_ATTRS=y | ||
168 | CONFIG_ISCSI_TCP=m | 222 | CONFIG_ISCSI_TCP=m |
223 | CONFIG_ISCSI_BOOT_SYSFS=m | ||
169 | CONFIG_MD=y | 224 | CONFIG_MD=y |
170 | CONFIG_BLK_DEV_MD=m | ||
171 | CONFIG_MD_LINEAR=m | 225 | CONFIG_MD_LINEAR=m |
172 | CONFIG_MD_RAID0=m | 226 | CONFIG_MD_RAID0=m |
173 | CONFIG_MD_RAID1=m | ||
174 | CONFIG_MD_RAID456=m | ||
175 | CONFIG_BLK_DEV_DM=m | 227 | CONFIG_BLK_DEV_DM=m |
176 | CONFIG_DM_CRYPT=m | 228 | CONFIG_DM_CRYPT=m |
177 | CONFIG_DM_SNAPSHOT=m | 229 | CONFIG_DM_SNAPSHOT=m |
230 | CONFIG_DM_THIN_PROVISIONING=m | ||
231 | CONFIG_DM_CACHE=m | ||
178 | CONFIG_DM_MIRROR=m | 232 | CONFIG_DM_MIRROR=m |
233 | CONFIG_DM_RAID=m | ||
179 | CONFIG_DM_ZERO=m | 234 | CONFIG_DM_ZERO=m |
180 | CONFIG_DM_MULTIPATH=m | 235 | CONFIG_DM_MULTIPATH=m |
181 | CONFIG_DM_UEVENT=y | 236 | CONFIG_DM_UEVENT=y |
237 | CONFIG_TARGET_CORE=m | ||
238 | CONFIG_TCM_IBLOCK=m | ||
239 | CONFIG_TCM_FILEIO=m | ||
240 | CONFIG_TCM_PSCSI=m | ||
182 | CONFIG_NETDEVICES=y | 241 | CONFIG_NETDEVICES=y |
183 | CONFIG_DUMMY=m | 242 | CONFIG_DUMMY=m |
184 | CONFIG_MACVLAN=m | ||
185 | CONFIG_EQUALIZER=m | 243 | CONFIG_EQUALIZER=m |
244 | CONFIG_NET_TEAM=m | ||
245 | CONFIG_NET_TEAM_MODE_BROADCAST=m | ||
246 | CONFIG_NET_TEAM_MODE_ROUNDROBIN=m | ||
247 | CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m | ||
248 | CONFIG_NET_TEAM_MODE_LOADBALANCE=m | ||
249 | CONFIG_VXLAN=m | ||
250 | CONFIG_NETCONSOLE=m | ||
251 | CONFIG_NETCONSOLE_DYNAMIC=y | ||
186 | CONFIG_VETH=m | 252 | CONFIG_VETH=m |
187 | CONFIG_NET_ETHERNET=y | ||
188 | CONFIG_HPLANCE=y | 253 | CONFIG_HPLANCE=y |
189 | # CONFIG_NETDEV_1000 is not set | 254 | # CONFIG_NET_CADENCE is not set |
190 | # CONFIG_NETDEV_10000 is not set | 255 | # CONFIG_NET_VENDOR_BROADCOM is not set |
256 | # CONFIG_NET_VENDOR_INTEL is not set | ||
257 | # CONFIG_NET_VENDOR_MARVELL is not set | ||
258 | # CONFIG_NET_VENDOR_MICREL is not set | ||
259 | # CONFIG_NET_VENDOR_NATSEMI is not set | ||
260 | # CONFIG_NET_VENDOR_SEEQ is not set | ||
261 | # CONFIG_NET_VENDOR_STMICRO is not set | ||
262 | # CONFIG_NET_VENDOR_WIZNET is not set | ||
191 | CONFIG_PPP=m | 263 | CONFIG_PPP=m |
192 | CONFIG_PPP_FILTER=y | ||
193 | CONFIG_PPP_ASYNC=m | ||
194 | CONFIG_PPP_SYNC_TTY=m | ||
195 | CONFIG_PPP_DEFLATE=m | ||
196 | CONFIG_PPP_BSDCOMP=m | 264 | CONFIG_PPP_BSDCOMP=m |
265 | CONFIG_PPP_DEFLATE=m | ||
266 | CONFIG_PPP_FILTER=y | ||
197 | CONFIG_PPP_MPPE=m | 267 | CONFIG_PPP_MPPE=m |
198 | CONFIG_PPPOE=m | 268 | CONFIG_PPPOE=m |
269 | CONFIG_PPTP=m | ||
270 | CONFIG_PPPOL2TP=m | ||
271 | CONFIG_PPP_ASYNC=m | ||
272 | CONFIG_PPP_SYNC_TTY=m | ||
199 | CONFIG_SLIP=m | 273 | CONFIG_SLIP=m |
200 | CONFIG_SLIP_COMPRESSED=y | 274 | CONFIG_SLIP_COMPRESSED=y |
201 | CONFIG_SLIP_SMART=y | 275 | CONFIG_SLIP_SMART=y |
202 | CONFIG_SLIP_MODE_SLIP6=y | 276 | CONFIG_SLIP_MODE_SLIP6=y |
203 | CONFIG_NETCONSOLE=m | 277 | # CONFIG_WLAN is not set |
204 | CONFIG_NETCONSOLE_DYNAMIC=y | 278 | CONFIG_INPUT_EVDEV=m |
205 | CONFIG_INPUT_FF_MEMLESS=m | ||
206 | # CONFIG_KEYBOARD_ATKBD is not set | 279 | # CONFIG_KEYBOARD_ATKBD is not set |
207 | CONFIG_MOUSE_PS2=m | 280 | # CONFIG_MOUSE_PS2 is not set |
208 | CONFIG_MOUSE_SERIAL=m | 281 | CONFIG_MOUSE_SERIAL=m |
209 | CONFIG_INPUT_MISC=y | 282 | CONFIG_INPUT_MISC=y |
210 | CONFIG_HP_SDC_RTC=m | 283 | CONFIG_HP_SDC_RTC=m |
211 | # CONFIG_SERIO_SERPORT is not set | 284 | CONFIG_SERIO_SERPORT=m |
212 | CONFIG_VT_HW_CONSOLE_BINDING=y | 285 | CONFIG_VT_HW_CONSOLE_BINDING=y |
286 | # CONFIG_LEGACY_PTYS is not set | ||
213 | # CONFIG_DEVKMEM is not set | 287 | # CONFIG_DEVKMEM is not set |
214 | # CONFIG_HW_RANDOM is not set | 288 | # CONFIG_HW_RANDOM is not set |
215 | CONFIG_GEN_RTC=m | 289 | CONFIG_NTP_PPS=y |
216 | CONFIG_GEN_RTC_X=y | 290 | CONFIG_PPS_CLIENT_LDISC=m |
291 | CONFIG_PTP_1588_CLOCK=m | ||
217 | # CONFIG_HWMON is not set | 292 | # CONFIG_HWMON is not set |
218 | CONFIG_FB=y | 293 | CONFIG_FB=y |
219 | CONFIG_FRAMEBUFFER_CONSOLE=y | 294 | CONFIG_FRAMEBUFFER_CONSOLE=y |
@@ -222,47 +297,60 @@ CONFIG_LOGO=y | |||
222 | # CONFIG_LOGO_LINUX_VGA16 is not set | 297 | # CONFIG_LOGO_LINUX_VGA16 is not set |
223 | CONFIG_HID=m | 298 | CONFIG_HID=m |
224 | CONFIG_HIDRAW=y | 299 | CONFIG_HIDRAW=y |
300 | CONFIG_UHID=m | ||
301 | # CONFIG_HID_GENERIC is not set | ||
225 | # CONFIG_USB_SUPPORT is not set | 302 | # CONFIG_USB_SUPPORT is not set |
303 | CONFIG_RTC_CLASS=y | ||
304 | CONFIG_RTC_DRV_GENERIC=m | ||
305 | # CONFIG_IOMMU_SUPPORT is not set | ||
306 | CONFIG_PROC_HARDWARE=y | ||
226 | CONFIG_EXT2_FS=y | 307 | CONFIG_EXT2_FS=y |
227 | CONFIG_EXT3_FS=y | 308 | CONFIG_EXT3_FS=y |
228 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | 309 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set |
229 | # CONFIG_EXT3_FS_XATTR is not set | 310 | # CONFIG_EXT3_FS_XATTR is not set |
311 | CONFIG_EXT4_FS=y | ||
230 | CONFIG_REISERFS_FS=m | 312 | CONFIG_REISERFS_FS=m |
231 | CONFIG_JFS_FS=m | 313 | CONFIG_JFS_FS=m |
232 | CONFIG_XFS_FS=m | 314 | CONFIG_XFS_FS=m |
233 | CONFIG_OCFS2_FS=m | 315 | CONFIG_OCFS2_FS=m |
234 | # CONFIG_OCFS2_FS_STATS is not set | ||
235 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 316 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
317 | CONFIG_FANOTIFY=y | ||
236 | CONFIG_QUOTA_NETLINK_INTERFACE=y | 318 | CONFIG_QUOTA_NETLINK_INTERFACE=y |
237 | # CONFIG_PRINT_QUOTA_WARNING is not set | 319 | # CONFIG_PRINT_QUOTA_WARNING is not set |
238 | CONFIG_AUTOFS_FS=m | ||
239 | CONFIG_AUTOFS4_FS=m | 320 | CONFIG_AUTOFS4_FS=m |
240 | CONFIG_FUSE_FS=m | 321 | CONFIG_FUSE_FS=m |
322 | CONFIG_CUSE=m | ||
241 | CONFIG_ISO9660_FS=y | 323 | CONFIG_ISO9660_FS=y |
242 | CONFIG_JOLIET=y | 324 | CONFIG_JOLIET=y |
243 | CONFIG_ZISOFS=y | 325 | CONFIG_ZISOFS=y |
244 | CONFIG_UDF_FS=m | 326 | CONFIG_UDF_FS=m |
245 | CONFIG_MSDOS_FS=y | 327 | CONFIG_MSDOS_FS=m |
246 | CONFIG_VFAT_FS=m | 328 | CONFIG_VFAT_FS=m |
247 | CONFIG_PROC_KCORE=y | 329 | CONFIG_PROC_KCORE=y |
248 | CONFIG_TMPFS=y | 330 | CONFIG_TMPFS=y |
249 | CONFIG_AFFS_FS=m | 331 | CONFIG_AFFS_FS=m |
332 | CONFIG_ECRYPT_FS=m | ||
333 | CONFIG_ECRYPT_FS_MESSAGING=y | ||
250 | CONFIG_HFS_FS=m | 334 | CONFIG_HFS_FS=m |
251 | CONFIG_HFSPLUS_FS=m | 335 | CONFIG_HFSPLUS_FS=m |
252 | CONFIG_CRAMFS=m | 336 | CONFIG_CRAMFS=m |
253 | CONFIG_SQUASHFS=m | 337 | CONFIG_SQUASHFS=m |
254 | CONFIG_MINIX_FS=y | 338 | CONFIG_SQUASHFS_LZO=y |
339 | CONFIG_MINIX_FS=m | ||
340 | CONFIG_OMFS_FS=m | ||
255 | CONFIG_HPFS_FS=m | 341 | CONFIG_HPFS_FS=m |
342 | CONFIG_QNX4FS_FS=m | ||
343 | CONFIG_QNX6FS_FS=m | ||
256 | CONFIG_SYSV_FS=m | 344 | CONFIG_SYSV_FS=m |
257 | CONFIG_UFS_FS=m | 345 | CONFIG_UFS_FS=m |
258 | CONFIG_NFS_FS=y | 346 | CONFIG_NFS_FS=y |
259 | CONFIG_NFS_V3=y | ||
260 | CONFIG_NFS_V4=y | 347 | CONFIG_NFS_V4=y |
348 | CONFIG_NFS_SWAP=y | ||
261 | CONFIG_ROOT_NFS=y | 349 | CONFIG_ROOT_NFS=y |
262 | CONFIG_NFSD=m | 350 | CONFIG_NFSD=m |
263 | CONFIG_NFSD_V3=y | 351 | CONFIG_NFSD_V3=y |
264 | CONFIG_SMB_FS=m | 352 | CONFIG_CIFS=m |
265 | CONFIG_SMB_NLS_DEFAULT=y | 353 | # CONFIG_CIFS_DEBUG is not set |
266 | CONFIG_CODA_FS=m | 354 | CONFIG_CODA_FS=m |
267 | CONFIG_NLS_CODEPAGE_437=y | 355 | CONFIG_NLS_CODEPAGE_437=y |
268 | CONFIG_NLS_CODEPAGE_737=m | 356 | CONFIG_NLS_CODEPAGE_737=m |
@@ -301,10 +389,23 @@ CONFIG_NLS_ISO8859_14=m | |||
301 | CONFIG_NLS_ISO8859_15=m | 389 | CONFIG_NLS_ISO8859_15=m |
302 | CONFIG_NLS_KOI8_R=m | 390 | CONFIG_NLS_KOI8_R=m |
303 | CONFIG_NLS_KOI8_U=m | 391 | CONFIG_NLS_KOI8_U=m |
392 | CONFIG_NLS_MAC_ROMAN=m | ||
393 | CONFIG_NLS_MAC_CELTIC=m | ||
394 | CONFIG_NLS_MAC_CENTEURO=m | ||
395 | CONFIG_NLS_MAC_CROATIAN=m | ||
396 | CONFIG_NLS_MAC_CYRILLIC=m | ||
397 | CONFIG_NLS_MAC_GAELIC=m | ||
398 | CONFIG_NLS_MAC_GREEK=m | ||
399 | CONFIG_NLS_MAC_ICELAND=m | ||
400 | CONFIG_NLS_MAC_INUIT=m | ||
401 | CONFIG_NLS_MAC_ROMANIAN=m | ||
402 | CONFIG_NLS_MAC_TURKISH=m | ||
304 | CONFIG_DLM=m | 403 | CONFIG_DLM=m |
305 | CONFIG_MAGIC_SYSRQ=y | 404 | CONFIG_MAGIC_SYSRQ=y |
306 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 405 | CONFIG_ASYNC_RAID6_TEST=m |
307 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 406 | CONFIG_ENCRYPTED_KEYS=m |
407 | CONFIG_CRYPTO_MANAGER=y | ||
408 | CONFIG_CRYPTO_USER=m | ||
308 | CONFIG_CRYPTO_NULL=m | 409 | CONFIG_CRYPTO_NULL=m |
309 | CONFIG_CRYPTO_CRYPTD=m | 410 | CONFIG_CRYPTO_CRYPTD=m |
310 | CONFIG_CRYPTO_TEST=m | 411 | CONFIG_CRYPTO_TEST=m |
@@ -314,19 +415,16 @@ CONFIG_CRYPTO_CTS=m | |||
314 | CONFIG_CRYPTO_LRW=m | 415 | CONFIG_CRYPTO_LRW=m |
315 | CONFIG_CRYPTO_PCBC=m | 416 | CONFIG_CRYPTO_PCBC=m |
316 | CONFIG_CRYPTO_XTS=m | 417 | CONFIG_CRYPTO_XTS=m |
317 | CONFIG_CRYPTO_HMAC=y | ||
318 | CONFIG_CRYPTO_XCBC=m | 418 | CONFIG_CRYPTO_XCBC=m |
319 | CONFIG_CRYPTO_MD4=m | 419 | CONFIG_CRYPTO_VMAC=m |
320 | CONFIG_CRYPTO_MICHAEL_MIC=m | 420 | CONFIG_CRYPTO_MICHAEL_MIC=m |
321 | CONFIG_CRYPTO_RMD128=m | 421 | CONFIG_CRYPTO_RMD128=m |
322 | CONFIG_CRYPTO_RMD160=m | 422 | CONFIG_CRYPTO_RMD160=m |
323 | CONFIG_CRYPTO_RMD256=m | 423 | CONFIG_CRYPTO_RMD256=m |
324 | CONFIG_CRYPTO_RMD320=m | 424 | CONFIG_CRYPTO_RMD320=m |
325 | CONFIG_CRYPTO_SHA256=m | ||
326 | CONFIG_CRYPTO_SHA512=m | 425 | CONFIG_CRYPTO_SHA512=m |
327 | CONFIG_CRYPTO_TGR192=m | 426 | CONFIG_CRYPTO_TGR192=m |
328 | CONFIG_CRYPTO_WP512=m | 427 | CONFIG_CRYPTO_WP512=m |
329 | CONFIG_CRYPTO_AES=m | ||
330 | CONFIG_CRYPTO_ANUBIS=m | 428 | CONFIG_CRYPTO_ANUBIS=m |
331 | CONFIG_CRYPTO_BLOWFISH=m | 429 | CONFIG_CRYPTO_BLOWFISH=m |
332 | CONFIG_CRYPTO_CAMELLIA=m | 430 | CONFIG_CRYPTO_CAMELLIA=m |
@@ -342,6 +440,14 @@ CONFIG_CRYPTO_TWOFISH=m | |||
342 | CONFIG_CRYPTO_ZLIB=m | 440 | CONFIG_CRYPTO_ZLIB=m |
343 | CONFIG_CRYPTO_LZO=m | 441 | CONFIG_CRYPTO_LZO=m |
344 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 442 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
443 | CONFIG_CRYPTO_USER_API_HASH=m | ||
444 | CONFIG_CRYPTO_USER_API_SKCIPHER=m | ||
345 | # CONFIG_CRYPTO_HW is not set | 445 | # CONFIG_CRYPTO_HW is not set |
346 | CONFIG_CRC16=m | ||
347 | CONFIG_CRC_T10DIF=y | 446 | CONFIG_CRC_T10DIF=y |
447 | CONFIG_XZ_DEC_X86=y | ||
448 | CONFIG_XZ_DEC_POWERPC=y | ||
449 | CONFIG_XZ_DEC_IA64=y | ||
450 | CONFIG_XZ_DEC_ARM=y | ||
451 | CONFIG_XZ_DEC_ARMTHUMB=y | ||
452 | CONFIG_XZ_DEC_SPARC=y | ||
453 | CONFIG_XZ_DEC_TEST=m | ||
diff --git a/arch/m68k/configs/mac_defconfig b/arch/m68k/configs/mac_defconfig index cb9dfb30b674..7d46fbec7042 100644 --- a/arch/m68k/configs/mac_defconfig +++ b/arch/m68k/configs/mac_defconfig | |||
@@ -1,49 +1,75 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | ||
2 | CONFIG_LOCALVERSION="-mac" | 1 | CONFIG_LOCALVERSION="-mac" |
3 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
4 | CONFIG_POSIX_MQUEUE=y | 3 | CONFIG_POSIX_MQUEUE=y |
4 | CONFIG_FHANDLE=y | ||
5 | CONFIG_BSD_PROCESS_ACCT=y | 5 | CONFIG_BSD_PROCESS_ACCT=y |
6 | CONFIG_LOG_BUF_SHIFT=14 | 6 | CONFIG_BSD_PROCESS_ACCT_V3=y |
7 | CONFIG_RELAY=y | 7 | CONFIG_LOG_BUF_SHIFT=16 |
8 | # CONFIG_UTS_NS is not set | ||
9 | # CONFIG_IPC_NS is not set | ||
10 | # CONFIG_PID_NS is not set | ||
11 | # CONFIG_NET_NS is not set | ||
8 | CONFIG_BLK_DEV_INITRD=y | 12 | CONFIG_BLK_DEV_INITRD=y |
9 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
10 | CONFIG_SLAB=y | 13 | CONFIG_SLAB=y |
11 | CONFIG_MODULES=y | 14 | CONFIG_MODULES=y |
12 | CONFIG_MODULE_UNLOAD=y | 15 | CONFIG_MODULE_UNLOAD=y |
13 | CONFIG_MAC=y | 16 | CONFIG_PARTITION_ADVANCED=y |
17 | CONFIG_AMIGA_PARTITION=y | ||
18 | CONFIG_ATARI_PARTITION=y | ||
19 | CONFIG_BSD_DISKLABEL=y | ||
20 | CONFIG_MINIX_SUBPARTITION=y | ||
21 | CONFIG_SOLARIS_X86_PARTITION=y | ||
22 | CONFIG_UNIXWARE_DISKLABEL=y | ||
23 | CONFIG_SUN_PARTITION=y | ||
24 | # CONFIG_EFI_PARTITION is not set | ||
25 | CONFIG_SYSV68_PARTITION=y | ||
26 | CONFIG_IOSCHED_DEADLINE=m | ||
14 | CONFIG_M68020=y | 27 | CONFIG_M68020=y |
15 | CONFIG_M68030=y | 28 | CONFIG_M68030=y |
16 | CONFIG_M68040=y | 29 | CONFIG_M68040=y |
30 | CONFIG_M68KFPU_EMU=y | ||
31 | CONFIG_MAC=y | ||
32 | # CONFIG_COMPACTION is not set | ||
33 | CONFIG_CLEANCACHE=y | ||
34 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
17 | CONFIG_BINFMT_AOUT=m | 35 | CONFIG_BINFMT_AOUT=m |
18 | CONFIG_BINFMT_MISC=m | 36 | CONFIG_BINFMT_MISC=m |
19 | CONFIG_PROC_HARDWARE=y | ||
20 | CONFIG_NET=y | 37 | CONFIG_NET=y |
21 | CONFIG_PACKET=y | 38 | CONFIG_PACKET=y |
39 | CONFIG_PACKET_DIAG=m | ||
22 | CONFIG_UNIX=y | 40 | CONFIG_UNIX=y |
41 | CONFIG_UNIX_DIAG=m | ||
42 | CONFIG_XFRM_MIGRATE=y | ||
23 | CONFIG_NET_KEY=y | 43 | CONFIG_NET_KEY=y |
24 | CONFIG_NET_KEY_MIGRATE=y | ||
25 | CONFIG_INET=y | 44 | CONFIG_INET=y |
45 | CONFIG_IP_PNP=y | ||
46 | CONFIG_IP_PNP_DHCP=y | ||
47 | CONFIG_IP_PNP_BOOTP=y | ||
48 | CONFIG_IP_PNP_RARP=y | ||
26 | CONFIG_NET_IPIP=m | 49 | CONFIG_NET_IPIP=m |
50 | CONFIG_NET_IPGRE_DEMUX=m | ||
27 | CONFIG_NET_IPGRE=m | 51 | CONFIG_NET_IPGRE=m |
28 | CONFIG_SYN_COOKIES=y | 52 | CONFIG_SYN_COOKIES=y |
53 | CONFIG_NET_IPVTI=m | ||
29 | CONFIG_INET_AH=m | 54 | CONFIG_INET_AH=m |
30 | CONFIG_INET_ESP=m | 55 | CONFIG_INET_ESP=m |
31 | CONFIG_INET_IPCOMP=m | 56 | CONFIG_INET_IPCOMP=m |
32 | CONFIG_INET_XFRM_MODE_TRANSPORT=m | 57 | CONFIG_INET_XFRM_MODE_TRANSPORT=m |
33 | CONFIG_INET_XFRM_MODE_TUNNEL=m | 58 | CONFIG_INET_XFRM_MODE_TUNNEL=m |
34 | CONFIG_INET_XFRM_MODE_BEET=m | 59 | CONFIG_INET_XFRM_MODE_BEET=m |
60 | # CONFIG_INET_LRO is not set | ||
35 | CONFIG_INET_DIAG=m | 61 | CONFIG_INET_DIAG=m |
62 | CONFIG_INET_UDP_DIAG=m | ||
36 | CONFIG_IPV6_PRIVACY=y | 63 | CONFIG_IPV6_PRIVACY=y |
37 | CONFIG_IPV6_ROUTER_PREF=y | 64 | CONFIG_IPV6_ROUTER_PREF=y |
38 | CONFIG_IPV6_ROUTE_INFO=y | ||
39 | CONFIG_INET6_AH=m | 65 | CONFIG_INET6_AH=m |
40 | CONFIG_INET6_ESP=m | 66 | CONFIG_INET6_ESP=m |
41 | CONFIG_INET6_IPCOMP=m | 67 | CONFIG_INET6_IPCOMP=m |
42 | CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m | 68 | CONFIG_IPV6_GRE=m |
43 | CONFIG_IPV6_TUNNEL=m | ||
44 | CONFIG_NETFILTER=y | 69 | CONFIG_NETFILTER=y |
45 | CONFIG_NETFILTER_NETLINK_QUEUE=m | ||
46 | CONFIG_NF_CONNTRACK=m | 70 | CONFIG_NF_CONNTRACK=m |
71 | CONFIG_NF_CONNTRACK_ZONES=y | ||
72 | # CONFIG_NF_CONNTRACK_PROCFS is not set | ||
47 | # CONFIG_NF_CT_PROTO_DCCP is not set | 73 | # CONFIG_NF_CT_PROTO_DCCP is not set |
48 | CONFIG_NF_CT_PROTO_UDPLITE=m | 74 | CONFIG_NF_CT_PROTO_UDPLITE=m |
49 | CONFIG_NF_CONNTRACK_AMANDA=m | 75 | CONFIG_NF_CONNTRACK_AMANDA=m |
@@ -51,25 +77,37 @@ CONFIG_NF_CONNTRACK_FTP=m | |||
51 | CONFIG_NF_CONNTRACK_H323=m | 77 | CONFIG_NF_CONNTRACK_H323=m |
52 | CONFIG_NF_CONNTRACK_IRC=m | 78 | CONFIG_NF_CONNTRACK_IRC=m |
53 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m | 79 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m |
80 | CONFIG_NF_CONNTRACK_SNMP=m | ||
54 | CONFIG_NF_CONNTRACK_PPTP=m | 81 | CONFIG_NF_CONNTRACK_PPTP=m |
55 | CONFIG_NF_CONNTRACK_SANE=m | 82 | CONFIG_NF_CONNTRACK_SANE=m |
56 | CONFIG_NF_CONNTRACK_SIP=m | 83 | CONFIG_NF_CONNTRACK_SIP=m |
57 | CONFIG_NF_CONNTRACK_TFTP=m | 84 | CONFIG_NF_CONNTRACK_TFTP=m |
85 | CONFIG_NETFILTER_XT_SET=m | ||
86 | CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m | ||
58 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 87 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
59 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 88 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
60 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | 89 | CONFIG_NETFILTER_XT_TARGET_DSCP=m |
90 | CONFIG_NETFILTER_XT_TARGET_HMARK=m | ||
91 | CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m | ||
92 | CONFIG_NETFILTER_XT_TARGET_LOG=m | ||
61 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 93 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
62 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 94 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
63 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | 95 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m |
96 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | ||
97 | CONFIG_NETFILTER_XT_TARGET_TEE=m | ||
64 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | 98 | CONFIG_NETFILTER_XT_TARGET_TRACE=m |
65 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m | 99 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m |
66 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m | 100 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m |
101 | CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m | ||
102 | CONFIG_NETFILTER_XT_MATCH_BPF=m | ||
67 | CONFIG_NETFILTER_XT_MATCH_CLUSTER=m | 103 | CONFIG_NETFILTER_XT_MATCH_CLUSTER=m |
68 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m | 104 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m |
69 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m | 105 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m |
106 | CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m | ||
70 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m | 107 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m |
71 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m | 108 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m |
72 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | 109 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m |
110 | CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m | ||
73 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | 111 | CONFIG_NETFILTER_XT_MATCH_DSCP=m |
74 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 112 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
75 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | 113 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m |
@@ -80,6 +118,8 @@ CONFIG_NETFILTER_XT_MATCH_LIMIT=m | |||
80 | CONFIG_NETFILTER_XT_MATCH_MAC=m | 118 | CONFIG_NETFILTER_XT_MATCH_MAC=m |
81 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 119 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
82 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | 120 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m |
121 | CONFIG_NETFILTER_XT_MATCH_NFACCT=m | ||
122 | CONFIG_NETFILTER_XT_MATCH_OSF=m | ||
83 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | 123 | CONFIG_NETFILTER_XT_MATCH_OWNER=m |
84 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 124 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
85 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 125 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
@@ -93,22 +133,31 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m | |||
93 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 133 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
94 | CONFIG_NETFILTER_XT_MATCH_TIME=m | 134 | CONFIG_NETFILTER_XT_MATCH_TIME=m |
95 | CONFIG_NETFILTER_XT_MATCH_U32=m | 135 | CONFIG_NETFILTER_XT_MATCH_U32=m |
136 | CONFIG_IP_SET=m | ||
137 | CONFIG_IP_SET_BITMAP_IP=m | ||
138 | CONFIG_IP_SET_BITMAP_IPMAC=m | ||
139 | CONFIG_IP_SET_BITMAP_PORT=m | ||
140 | CONFIG_IP_SET_HASH_IP=m | ||
141 | CONFIG_IP_SET_HASH_IPPORT=m | ||
142 | CONFIG_IP_SET_HASH_IPPORTIP=m | ||
143 | CONFIG_IP_SET_HASH_IPPORTNET=m | ||
144 | CONFIG_IP_SET_HASH_NET=m | ||
145 | CONFIG_IP_SET_HASH_NETPORT=m | ||
146 | CONFIG_IP_SET_HASH_NETIFACE=m | ||
147 | CONFIG_IP_SET_LIST_SET=m | ||
96 | CONFIG_NF_CONNTRACK_IPV4=m | 148 | CONFIG_NF_CONNTRACK_IPV4=m |
97 | CONFIG_IP_NF_QUEUE=m | ||
98 | CONFIG_IP_NF_IPTABLES=m | 149 | CONFIG_IP_NF_IPTABLES=m |
99 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
100 | CONFIG_IP_NF_MATCH_AH=m | 150 | CONFIG_IP_NF_MATCH_AH=m |
101 | CONFIG_IP_NF_MATCH_ECN=m | 151 | CONFIG_IP_NF_MATCH_ECN=m |
152 | CONFIG_IP_NF_MATCH_RPFILTER=m | ||
102 | CONFIG_IP_NF_MATCH_TTL=m | 153 | CONFIG_IP_NF_MATCH_TTL=m |
103 | CONFIG_IP_NF_FILTER=m | 154 | CONFIG_IP_NF_FILTER=m |
104 | CONFIG_IP_NF_TARGET_REJECT=m | 155 | CONFIG_IP_NF_TARGET_REJECT=m |
105 | CONFIG_IP_NF_TARGET_LOG=m | ||
106 | CONFIG_IP_NF_TARGET_ULOG=m | 156 | CONFIG_IP_NF_TARGET_ULOG=m |
107 | CONFIG_NF_NAT=m | 157 | CONFIG_NF_NAT_IPV4=m |
108 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 158 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
109 | CONFIG_IP_NF_TARGET_NETMAP=m | 159 | CONFIG_IP_NF_TARGET_NETMAP=m |
110 | CONFIG_IP_NF_TARGET_REDIRECT=m | 160 | CONFIG_IP_NF_TARGET_REDIRECT=m |
111 | CONFIG_NF_NAT_SNMP_BASIC=m | ||
112 | CONFIG_IP_NF_MANGLE=m | 161 | CONFIG_IP_NF_MANGLE=m |
113 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | 162 | CONFIG_IP_NF_TARGET_CLUSTERIP=m |
114 | CONFIG_IP_NF_TARGET_ECN=m | 163 | CONFIG_IP_NF_TARGET_ECN=m |
@@ -118,7 +167,6 @@ CONFIG_IP_NF_ARPTABLES=m | |||
118 | CONFIG_IP_NF_ARPFILTER=m | 167 | CONFIG_IP_NF_ARPFILTER=m |
119 | CONFIG_IP_NF_ARP_MANGLE=m | 168 | CONFIG_IP_NF_ARP_MANGLE=m |
120 | CONFIG_NF_CONNTRACK_IPV6=m | 169 | CONFIG_NF_CONNTRACK_IPV6=m |
121 | CONFIG_IP6_NF_QUEUE=m | ||
122 | CONFIG_IP6_NF_IPTABLES=m | 170 | CONFIG_IP6_NF_IPTABLES=m |
123 | CONFIG_IP6_NF_MATCH_AH=m | 171 | CONFIG_IP6_NF_MATCH_AH=m |
124 | CONFIG_IP6_NF_MATCH_EUI64=m | 172 | CONFIG_IP6_NF_MATCH_EUI64=m |
@@ -127,31 +175,45 @@ CONFIG_IP6_NF_MATCH_OPTS=m | |||
127 | CONFIG_IP6_NF_MATCH_HL=m | 175 | CONFIG_IP6_NF_MATCH_HL=m |
128 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 176 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
129 | CONFIG_IP6_NF_MATCH_MH=m | 177 | CONFIG_IP6_NF_MATCH_MH=m |
178 | CONFIG_IP6_NF_MATCH_RPFILTER=m | ||
130 | CONFIG_IP6_NF_MATCH_RT=m | 179 | CONFIG_IP6_NF_MATCH_RT=m |
131 | CONFIG_IP6_NF_TARGET_HL=m | 180 | CONFIG_IP6_NF_TARGET_HL=m |
132 | CONFIG_IP6_NF_TARGET_LOG=m | ||
133 | CONFIG_IP6_NF_FILTER=m | 181 | CONFIG_IP6_NF_FILTER=m |
134 | CONFIG_IP6_NF_TARGET_REJECT=m | 182 | CONFIG_IP6_NF_TARGET_REJECT=m |
135 | CONFIG_IP6_NF_MANGLE=m | 183 | CONFIG_IP6_NF_MANGLE=m |
136 | CONFIG_IP6_NF_RAW=m | 184 | CONFIG_IP6_NF_RAW=m |
185 | CONFIG_NF_NAT_IPV6=m | ||
186 | CONFIG_IP6_NF_TARGET_MASQUERADE=m | ||
187 | CONFIG_IP6_NF_TARGET_NPT=m | ||
137 | CONFIG_IP_DCCP=m | 188 | CONFIG_IP_DCCP=m |
138 | # CONFIG_IP_DCCP_CCID3 is not set | 189 | # CONFIG_IP_DCCP_CCID3 is not set |
190 | CONFIG_SCTP_COOKIE_HMAC_SHA1=y | ||
191 | CONFIG_RDS=m | ||
192 | CONFIG_RDS_TCP=m | ||
193 | CONFIG_L2TP=m | ||
139 | CONFIG_ATALK=m | 194 | CONFIG_ATALK=m |
140 | CONFIG_DEV_APPLETALK=m | 195 | CONFIG_DEV_APPLETALK=m |
141 | CONFIG_IPDDP=m | 196 | CONFIG_IPDDP=m |
142 | CONFIG_IPDDP_ENCAP=y | 197 | CONFIG_IPDDP_ENCAP=y |
143 | CONFIG_IPDDP_DECAP=y | 198 | CONFIG_IPDDP_DECAP=y |
199 | CONFIG_BATMAN_ADV=m | ||
200 | CONFIG_BATMAN_ADV_DAT=y | ||
201 | # CONFIG_WIRELESS is not set | ||
144 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 202 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
203 | CONFIG_DEVTMPFS=y | ||
145 | # CONFIG_FIRMWARE_IN_KERNEL is not set | 204 | # CONFIG_FIRMWARE_IN_KERNEL is not set |
205 | # CONFIG_FW_LOADER_USER_HELPER is not set | ||
146 | CONFIG_CONNECTOR=m | 206 | CONFIG_CONNECTOR=m |
147 | CONFIG_BLK_DEV_SWIM=y | 207 | CONFIG_BLK_DEV_SWIM=m |
148 | CONFIG_BLK_DEV_LOOP=y | 208 | CONFIG_BLK_DEV_LOOP=y |
149 | CONFIG_BLK_DEV_CRYPTOLOOP=m | 209 | CONFIG_BLK_DEV_CRYPTOLOOP=m |
210 | CONFIG_BLK_DEV_DRBD=m | ||
150 | CONFIG_BLK_DEV_NBD=m | 211 | CONFIG_BLK_DEV_NBD=m |
151 | CONFIG_BLK_DEV_RAM=y | 212 | CONFIG_BLK_DEV_RAM=y |
152 | CONFIG_CDROM_PKTCDVD=m | 213 | CONFIG_CDROM_PKTCDVD=m |
153 | CONFIG_ATA_OVER_ETH=m | 214 | CONFIG_ATA_OVER_ETH=m |
154 | CONFIG_IDE=y | 215 | CONFIG_IDE=y |
216 | CONFIG_IDE_GD_ATAPI=y | ||
155 | CONFIG_BLK_DEV_IDECD=y | 217 | CONFIG_BLK_DEV_IDECD=y |
156 | CONFIG_BLK_DEV_MAC_IDE=y | 218 | CONFIG_BLK_DEV_MAC_IDE=y |
157 | CONFIG_RAID_ATTRS=m | 219 | CONFIG_RAID_ATTRS=m |
@@ -164,29 +226,30 @@ CONFIG_BLK_DEV_SR=y | |||
164 | CONFIG_BLK_DEV_SR_VENDOR=y | 226 | CONFIG_BLK_DEV_SR_VENDOR=y |
165 | CONFIG_CHR_DEV_SG=m | 227 | CONFIG_CHR_DEV_SG=m |
166 | CONFIG_SCSI_CONSTANTS=y | 228 | CONFIG_SCSI_CONSTANTS=y |
167 | CONFIG_SCSI_SAS_LIBSAS=m | 229 | CONFIG_SCSI_SAS_ATTRS=m |
168 | # CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set | ||
169 | CONFIG_SCSI_SRP_ATTRS=m | ||
170 | CONFIG_SCSI_SRP_TGT_ATTRS=y | ||
171 | CONFIG_ISCSI_TCP=m | 230 | CONFIG_ISCSI_TCP=m |
231 | CONFIG_ISCSI_BOOT_SYSFS=m | ||
172 | CONFIG_MAC_SCSI=y | 232 | CONFIG_MAC_SCSI=y |
173 | CONFIG_SCSI_MAC_ESP=y | 233 | CONFIG_SCSI_MAC_ESP=y |
174 | CONFIG_MD=y | 234 | CONFIG_MD=y |
175 | CONFIG_BLK_DEV_MD=m | ||
176 | CONFIG_MD_LINEAR=m | 235 | CONFIG_MD_LINEAR=m |
177 | CONFIG_MD_RAID0=m | 236 | CONFIG_MD_RAID0=m |
178 | CONFIG_MD_RAID1=m | ||
179 | CONFIG_MD_RAID456=m | ||
180 | CONFIG_BLK_DEV_DM=m | 237 | CONFIG_BLK_DEV_DM=m |
181 | CONFIG_DM_CRYPT=m | 238 | CONFIG_DM_CRYPT=m |
182 | CONFIG_DM_SNAPSHOT=m | 239 | CONFIG_DM_SNAPSHOT=m |
240 | CONFIG_DM_THIN_PROVISIONING=m | ||
241 | CONFIG_DM_CACHE=m | ||
183 | CONFIG_DM_MIRROR=m | 242 | CONFIG_DM_MIRROR=m |
243 | CONFIG_DM_RAID=m | ||
184 | CONFIG_DM_ZERO=m | 244 | CONFIG_DM_ZERO=m |
185 | CONFIG_DM_MULTIPATH=m | 245 | CONFIG_DM_MULTIPATH=m |
186 | CONFIG_DM_UEVENT=y | 246 | CONFIG_DM_UEVENT=y |
247 | CONFIG_TARGET_CORE=m | ||
248 | CONFIG_TCM_IBLOCK=m | ||
249 | CONFIG_TCM_FILEIO=m | ||
250 | CONFIG_TCM_PSCSI=m | ||
187 | CONFIG_ADB=y | 251 | CONFIG_ADB=y |
188 | CONFIG_ADB_MACII=y | 252 | CONFIG_ADB_MACII=y |
189 | CONFIG_ADB_MACIISI=y | ||
190 | CONFIG_ADB_IOP=y | 253 | CONFIG_ADB_IOP=y |
191 | CONFIG_ADB_PMU68K=y | 254 | CONFIG_ADB_PMU68K=y |
192 | CONFIG_ADB_CUDA=y | 255 | CONFIG_ADB_CUDA=y |
@@ -194,46 +257,61 @@ CONFIG_INPUT_ADBHID=y | |||
194 | CONFIG_MAC_EMUMOUSEBTN=y | 257 | CONFIG_MAC_EMUMOUSEBTN=y |
195 | CONFIG_NETDEVICES=y | 258 | CONFIG_NETDEVICES=y |
196 | CONFIG_DUMMY=m | 259 | CONFIG_DUMMY=m |
197 | CONFIG_MACVLAN=m | ||
198 | CONFIG_EQUALIZER=m | 260 | CONFIG_EQUALIZER=m |
261 | CONFIG_NET_TEAM=m | ||
262 | CONFIG_NET_TEAM_MODE_BROADCAST=m | ||
263 | CONFIG_NET_TEAM_MODE_ROUNDROBIN=m | ||
264 | CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m | ||
265 | CONFIG_NET_TEAM_MODE_LOADBALANCE=m | ||
266 | CONFIG_VXLAN=m | ||
267 | CONFIG_NETCONSOLE=m | ||
268 | CONFIG_NETCONSOLE_DYNAMIC=y | ||
199 | CONFIG_VETH=m | 269 | CONFIG_VETH=m |
200 | CONFIG_NET_ETHERNET=y | ||
201 | CONFIG_MAC8390=y | ||
202 | CONFIG_MAC89x0=m | ||
203 | CONFIG_MACSONIC=m | ||
204 | CONFIG_MACMACE=y | 270 | CONFIG_MACMACE=y |
205 | # CONFIG_NETDEV_1000 is not set | 271 | # CONFIG_NET_CADENCE is not set |
206 | # CONFIG_NETDEV_10000 is not set | 272 | # CONFIG_NET_VENDOR_BROADCOM is not set |
273 | CONFIG_MAC89x0=y | ||
274 | # CONFIG_NET_VENDOR_INTEL is not set | ||
275 | # CONFIG_NET_VENDOR_MARVELL is not set | ||
276 | # CONFIG_NET_VENDOR_MICREL is not set | ||
277 | CONFIG_MACSONIC=y | ||
278 | CONFIG_MAC8390=y | ||
279 | # CONFIG_NET_VENDOR_SEEQ is not set | ||
280 | # CONFIG_NET_VENDOR_SMSC is not set | ||
281 | # CONFIG_NET_VENDOR_STMICRO is not set | ||
282 | # CONFIG_NET_VENDOR_WIZNET is not set | ||
207 | CONFIG_PPP=m | 283 | CONFIG_PPP=m |
208 | CONFIG_PPP_FILTER=y | ||
209 | CONFIG_PPP_ASYNC=m | ||
210 | CONFIG_PPP_SYNC_TTY=m | ||
211 | CONFIG_PPP_DEFLATE=m | ||
212 | CONFIG_PPP_BSDCOMP=m | 284 | CONFIG_PPP_BSDCOMP=m |
285 | CONFIG_PPP_DEFLATE=m | ||
286 | CONFIG_PPP_FILTER=y | ||
213 | CONFIG_PPP_MPPE=m | 287 | CONFIG_PPP_MPPE=m |
214 | CONFIG_PPPOE=m | 288 | CONFIG_PPPOE=m |
289 | CONFIG_PPTP=m | ||
290 | CONFIG_PPPOL2TP=m | ||
291 | CONFIG_PPP_ASYNC=m | ||
292 | CONFIG_PPP_SYNC_TTY=m | ||
215 | CONFIG_SLIP=m | 293 | CONFIG_SLIP=m |
216 | CONFIG_SLIP_COMPRESSED=y | 294 | CONFIG_SLIP_COMPRESSED=y |
217 | CONFIG_SLIP_SMART=y | 295 | CONFIG_SLIP_SMART=y |
218 | CONFIG_SLIP_MODE_SLIP6=y | 296 | CONFIG_SLIP_MODE_SLIP6=y |
219 | CONFIG_NETCONSOLE=m | 297 | # CONFIG_WLAN is not set |
220 | CONFIG_NETCONSOLE_DYNAMIC=y | 298 | CONFIG_INPUT_EVDEV=m |
221 | CONFIG_INPUT_FF_MEMLESS=m | ||
222 | # CONFIG_KEYBOARD_ATKBD is not set | 299 | # CONFIG_KEYBOARD_ATKBD is not set |
223 | CONFIG_MOUSE_PS2=m | 300 | # CONFIG_MOUSE_PS2 is not set |
224 | CONFIG_MOUSE_SERIAL=m | 301 | CONFIG_MOUSE_SERIAL=m |
225 | CONFIG_INPUT_MISC=y | 302 | CONFIG_INPUT_MISC=y |
226 | CONFIG_INPUT_M68K_BEEP=m | 303 | CONFIG_INPUT_M68K_BEEP=m |
227 | CONFIG_SERIO=m | 304 | CONFIG_SERIO=m |
228 | # CONFIG_SERIO_SERPORT is not set | ||
229 | CONFIG_VT_HW_CONSOLE_BINDING=y | 305 | CONFIG_VT_HW_CONSOLE_BINDING=y |
306 | # CONFIG_LEGACY_PTYS is not set | ||
230 | # CONFIG_DEVKMEM is not set | 307 | # CONFIG_DEVKMEM is not set |
231 | CONFIG_SERIAL_PMACZILOG=y | 308 | CONFIG_SERIAL_PMACZILOG=y |
232 | CONFIG_SERIAL_PMACZILOG_TTYS=y | 309 | CONFIG_SERIAL_PMACZILOG_TTYS=y |
233 | CONFIG_SERIAL_PMACZILOG_CONSOLE=y | 310 | CONFIG_SERIAL_PMACZILOG_CONSOLE=y |
234 | # CONFIG_HW_RANDOM is not set | 311 | # CONFIG_HW_RANDOM is not set |
235 | CONFIG_GEN_RTC=m | 312 | CONFIG_NTP_PPS=y |
236 | CONFIG_GEN_RTC_X=y | 313 | CONFIG_PPS_CLIENT_LDISC=m |
314 | CONFIG_PTP_1588_CLOCK=m | ||
237 | # CONFIG_HWMON is not set | 315 | # CONFIG_HWMON is not set |
238 | CONFIG_FB=y | 316 | CONFIG_FB=y |
239 | CONFIG_FB_VALKYRIE=y | 317 | CONFIG_FB_VALKYRIE=y |
@@ -242,46 +320,60 @@ CONFIG_FRAMEBUFFER_CONSOLE=y | |||
242 | CONFIG_LOGO=y | 320 | CONFIG_LOGO=y |
243 | CONFIG_HID=m | 321 | CONFIG_HID=m |
244 | CONFIG_HIDRAW=y | 322 | CONFIG_HIDRAW=y |
323 | CONFIG_UHID=m | ||
324 | # CONFIG_HID_GENERIC is not set | ||
245 | # CONFIG_USB_SUPPORT is not set | 325 | # CONFIG_USB_SUPPORT is not set |
326 | CONFIG_RTC_CLASS=y | ||
327 | CONFIG_RTC_DRV_GENERIC=m | ||
328 | # CONFIG_IOMMU_SUPPORT is not set | ||
329 | CONFIG_PROC_HARDWARE=y | ||
246 | CONFIG_EXT2_FS=y | 330 | CONFIG_EXT2_FS=y |
247 | CONFIG_EXT3_FS=y | 331 | CONFIG_EXT3_FS=y |
248 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | 332 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set |
249 | # CONFIG_EXT3_FS_XATTR is not set | 333 | # CONFIG_EXT3_FS_XATTR is not set |
334 | CONFIG_EXT4_FS=y | ||
250 | CONFIG_REISERFS_FS=m | 335 | CONFIG_REISERFS_FS=m |
251 | CONFIG_JFS_FS=m | 336 | CONFIG_JFS_FS=m |
252 | CONFIG_XFS_FS=m | 337 | CONFIG_XFS_FS=m |
253 | CONFIG_OCFS2_FS=m | 338 | CONFIG_OCFS2_FS=m |
254 | # CONFIG_OCFS2_FS_STATS is not set | ||
255 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 339 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
340 | CONFIG_FANOTIFY=y | ||
256 | CONFIG_QUOTA_NETLINK_INTERFACE=y | 341 | CONFIG_QUOTA_NETLINK_INTERFACE=y |
257 | # CONFIG_PRINT_QUOTA_WARNING is not set | 342 | # CONFIG_PRINT_QUOTA_WARNING is not set |
258 | CONFIG_AUTOFS_FS=m | ||
259 | CONFIG_AUTOFS4_FS=m | 343 | CONFIG_AUTOFS4_FS=m |
260 | CONFIG_FUSE_FS=m | 344 | CONFIG_FUSE_FS=m |
345 | CONFIG_CUSE=m | ||
261 | CONFIG_ISO9660_FS=y | 346 | CONFIG_ISO9660_FS=y |
262 | CONFIG_JOLIET=y | 347 | CONFIG_JOLIET=y |
263 | CONFIG_ZISOFS=y | 348 | CONFIG_ZISOFS=y |
264 | CONFIG_UDF_FS=m | 349 | CONFIG_UDF_FS=m |
265 | CONFIG_MSDOS_FS=y | 350 | CONFIG_MSDOS_FS=m |
266 | CONFIG_VFAT_FS=m | 351 | CONFIG_VFAT_FS=m |
267 | CONFIG_PROC_KCORE=y | 352 | CONFIG_PROC_KCORE=y |
268 | CONFIG_TMPFS=y | 353 | CONFIG_TMPFS=y |
269 | CONFIG_AFFS_FS=m | 354 | CONFIG_AFFS_FS=m |
270 | CONFIG_HFS_FS=y | 355 | CONFIG_ECRYPT_FS=m |
271 | CONFIG_HFSPLUS_FS=y | 356 | CONFIG_ECRYPT_FS_MESSAGING=y |
357 | CONFIG_HFS_FS=m | ||
358 | CONFIG_HFSPLUS_FS=m | ||
272 | CONFIG_CRAMFS=m | 359 | CONFIG_CRAMFS=m |
273 | CONFIG_SQUASHFS=m | 360 | CONFIG_SQUASHFS=m |
274 | CONFIG_MINIX_FS=y | 361 | CONFIG_SQUASHFS_LZO=y |
362 | CONFIG_MINIX_FS=m | ||
363 | CONFIG_OMFS_FS=m | ||
275 | CONFIG_HPFS_FS=m | 364 | CONFIG_HPFS_FS=m |
365 | CONFIG_QNX4FS_FS=m | ||
366 | CONFIG_QNX6FS_FS=m | ||
276 | CONFIG_SYSV_FS=m | 367 | CONFIG_SYSV_FS=m |
277 | CONFIG_UFS_FS=m | 368 | CONFIG_UFS_FS=m |
278 | CONFIG_NFS_FS=m | 369 | CONFIG_NFS_FS=y |
279 | CONFIG_NFS_V3=y | ||
280 | CONFIG_NFS_V4=y | 370 | CONFIG_NFS_V4=y |
371 | CONFIG_NFS_SWAP=y | ||
372 | CONFIG_ROOT_NFS=y | ||
281 | CONFIG_NFSD=m | 373 | CONFIG_NFSD=m |
282 | CONFIG_NFSD_V3=y | 374 | CONFIG_NFSD_V3=y |
283 | CONFIG_SMB_FS=m | 375 | CONFIG_CIFS=m |
284 | CONFIG_SMB_NLS_DEFAULT=y | 376 | # CONFIG_CIFS_DEBUG is not set |
285 | CONFIG_CODA_FS=m | 377 | CONFIG_CODA_FS=m |
286 | CONFIG_NLS_CODEPAGE_437=y | 378 | CONFIG_NLS_CODEPAGE_437=y |
287 | CONFIG_NLS_CODEPAGE_737=m | 379 | CONFIG_NLS_CODEPAGE_737=m |
@@ -320,10 +412,23 @@ CONFIG_NLS_ISO8859_14=m | |||
320 | CONFIG_NLS_ISO8859_15=m | 412 | CONFIG_NLS_ISO8859_15=m |
321 | CONFIG_NLS_KOI8_R=m | 413 | CONFIG_NLS_KOI8_R=m |
322 | CONFIG_NLS_KOI8_U=m | 414 | CONFIG_NLS_KOI8_U=m |
415 | CONFIG_NLS_MAC_ROMAN=m | ||
416 | CONFIG_NLS_MAC_CELTIC=m | ||
417 | CONFIG_NLS_MAC_CENTEURO=m | ||
418 | CONFIG_NLS_MAC_CROATIAN=m | ||
419 | CONFIG_NLS_MAC_CYRILLIC=m | ||
420 | CONFIG_NLS_MAC_GAELIC=m | ||
421 | CONFIG_NLS_MAC_GREEK=m | ||
422 | CONFIG_NLS_MAC_ICELAND=m | ||
423 | CONFIG_NLS_MAC_INUIT=m | ||
424 | CONFIG_NLS_MAC_ROMANIAN=m | ||
425 | CONFIG_NLS_MAC_TURKISH=m | ||
323 | CONFIG_DLM=m | 426 | CONFIG_DLM=m |
324 | CONFIG_MAGIC_SYSRQ=y | 427 | CONFIG_MAGIC_SYSRQ=y |
325 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 428 | CONFIG_ASYNC_RAID6_TEST=m |
326 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 429 | CONFIG_ENCRYPTED_KEYS=m |
430 | CONFIG_CRYPTO_MANAGER=y | ||
431 | CONFIG_CRYPTO_USER=m | ||
327 | CONFIG_CRYPTO_NULL=m | 432 | CONFIG_CRYPTO_NULL=m |
328 | CONFIG_CRYPTO_CRYPTD=m | 433 | CONFIG_CRYPTO_CRYPTD=m |
329 | CONFIG_CRYPTO_TEST=m | 434 | CONFIG_CRYPTO_TEST=m |
@@ -333,19 +438,16 @@ CONFIG_CRYPTO_CTS=m | |||
333 | CONFIG_CRYPTO_LRW=m | 438 | CONFIG_CRYPTO_LRW=m |
334 | CONFIG_CRYPTO_PCBC=m | 439 | CONFIG_CRYPTO_PCBC=m |
335 | CONFIG_CRYPTO_XTS=m | 440 | CONFIG_CRYPTO_XTS=m |
336 | CONFIG_CRYPTO_HMAC=y | ||
337 | CONFIG_CRYPTO_XCBC=m | 441 | CONFIG_CRYPTO_XCBC=m |
338 | CONFIG_CRYPTO_MD4=m | 442 | CONFIG_CRYPTO_VMAC=m |
339 | CONFIG_CRYPTO_MICHAEL_MIC=m | 443 | CONFIG_CRYPTO_MICHAEL_MIC=m |
340 | CONFIG_CRYPTO_RMD128=m | 444 | CONFIG_CRYPTO_RMD128=m |
341 | CONFIG_CRYPTO_RMD160=m | 445 | CONFIG_CRYPTO_RMD160=m |
342 | CONFIG_CRYPTO_RMD256=m | 446 | CONFIG_CRYPTO_RMD256=m |
343 | CONFIG_CRYPTO_RMD320=m | 447 | CONFIG_CRYPTO_RMD320=m |
344 | CONFIG_CRYPTO_SHA256=m | ||
345 | CONFIG_CRYPTO_SHA512=m | 448 | CONFIG_CRYPTO_SHA512=m |
346 | CONFIG_CRYPTO_TGR192=m | 449 | CONFIG_CRYPTO_TGR192=m |
347 | CONFIG_CRYPTO_WP512=m | 450 | CONFIG_CRYPTO_WP512=m |
348 | CONFIG_CRYPTO_AES=m | ||
349 | CONFIG_CRYPTO_ANUBIS=m | 451 | CONFIG_CRYPTO_ANUBIS=m |
350 | CONFIG_CRYPTO_BLOWFISH=m | 452 | CONFIG_CRYPTO_BLOWFISH=m |
351 | CONFIG_CRYPTO_CAMELLIA=m | 453 | CONFIG_CRYPTO_CAMELLIA=m |
@@ -361,6 +463,14 @@ CONFIG_CRYPTO_TWOFISH=m | |||
361 | CONFIG_CRYPTO_ZLIB=m | 463 | CONFIG_CRYPTO_ZLIB=m |
362 | CONFIG_CRYPTO_LZO=m | 464 | CONFIG_CRYPTO_LZO=m |
363 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 465 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
466 | CONFIG_CRYPTO_USER_API_HASH=m | ||
467 | CONFIG_CRYPTO_USER_API_SKCIPHER=m | ||
364 | # CONFIG_CRYPTO_HW is not set | 468 | # CONFIG_CRYPTO_HW is not set |
365 | CONFIG_CRC16=m | ||
366 | CONFIG_CRC_T10DIF=y | 469 | CONFIG_CRC_T10DIF=y |
470 | CONFIG_XZ_DEC_X86=y | ||
471 | CONFIG_XZ_DEC_POWERPC=y | ||
472 | CONFIG_XZ_DEC_IA64=y | ||
473 | CONFIG_XZ_DEC_ARM=y | ||
474 | CONFIG_XZ_DEC_ARMTHUMB=y | ||
475 | CONFIG_XZ_DEC_SPARC=y | ||
476 | CONFIG_XZ_DEC_TEST=m | ||
diff --git a/arch/m68k/configs/multi_defconfig b/arch/m68k/configs/multi_defconfig index 8d5def4a31e0..0f795d8e65fa 100644 --- a/arch/m68k/configs/multi_defconfig +++ b/arch/m68k/configs/multi_defconfig | |||
@@ -1,15 +1,29 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | ||
2 | CONFIG_LOCALVERSION="-multi" | 1 | CONFIG_LOCALVERSION="-multi" |
3 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
4 | CONFIG_POSIX_MQUEUE=y | 3 | CONFIG_POSIX_MQUEUE=y |
4 | CONFIG_FHANDLE=y | ||
5 | CONFIG_BSD_PROCESS_ACCT=y | 5 | CONFIG_BSD_PROCESS_ACCT=y |
6 | CONFIG_LOG_BUF_SHIFT=14 | 6 | CONFIG_BSD_PROCESS_ACCT_V3=y |
7 | CONFIG_RELAY=y | 7 | CONFIG_LOG_BUF_SHIFT=16 |
8 | # CONFIG_UTS_NS is not set | ||
9 | # CONFIG_IPC_NS is not set | ||
10 | # CONFIG_PID_NS is not set | ||
11 | # CONFIG_NET_NS is not set | ||
8 | CONFIG_BLK_DEV_INITRD=y | 12 | CONFIG_BLK_DEV_INITRD=y |
9 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
10 | CONFIG_SLAB=y | 13 | CONFIG_SLAB=y |
11 | CONFIG_MODULES=y | 14 | CONFIG_MODULES=y |
12 | CONFIG_MODULE_UNLOAD=y | 15 | CONFIG_MODULE_UNLOAD=y |
16 | CONFIG_PARTITION_ADVANCED=y | ||
17 | CONFIG_BSD_DISKLABEL=y | ||
18 | CONFIG_MINIX_SUBPARTITION=y | ||
19 | CONFIG_SOLARIS_X86_PARTITION=y | ||
20 | CONFIG_UNIXWARE_DISKLABEL=y | ||
21 | # CONFIG_EFI_PARTITION is not set | ||
22 | CONFIG_IOSCHED_DEADLINE=m | ||
23 | CONFIG_M68020=y | ||
24 | CONFIG_M68040=y | ||
25 | CONFIG_M68060=y | ||
26 | CONFIG_M68KFPU_EMU=y | ||
13 | CONFIG_AMIGA=y | 27 | CONFIG_AMIGA=y |
14 | CONFIG_ATARI=y | 28 | CONFIG_ATARI=y |
15 | CONFIG_MAC=y | 29 | CONFIG_MAC=y |
@@ -21,48 +35,50 @@ CONFIG_BVME6000=y | |||
21 | CONFIG_HP300=y | 35 | CONFIG_HP300=y |
22 | CONFIG_SUN3X=y | 36 | CONFIG_SUN3X=y |
23 | CONFIG_Q40=y | 37 | CONFIG_Q40=y |
24 | CONFIG_M68020=y | ||
25 | CONFIG_M68040=y | ||
26 | CONFIG_M68060=y | ||
27 | CONFIG_BINFMT_AOUT=m | ||
28 | CONFIG_BINFMT_MISC=m | ||
29 | CONFIG_ZORRO=y | 38 | CONFIG_ZORRO=y |
30 | CONFIG_AMIGA_PCMCIA=y | 39 | CONFIG_AMIGA_PCMCIA=y |
31 | CONFIG_STRAM_PROC=y | ||
32 | CONFIG_HEARTBEAT=y | ||
33 | CONFIG_PROC_HARDWARE=y | ||
34 | CONFIG_ZORRO_NAMES=y | 40 | CONFIG_ZORRO_NAMES=y |
41 | # CONFIG_COMPACTION is not set | ||
42 | CONFIG_CLEANCACHE=y | ||
43 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
44 | CONFIG_BINFMT_AOUT=m | ||
45 | CONFIG_BINFMT_MISC=m | ||
35 | CONFIG_NET=y | 46 | CONFIG_NET=y |
36 | CONFIG_PACKET=y | 47 | CONFIG_PACKET=y |
48 | CONFIG_PACKET_DIAG=m | ||
37 | CONFIG_UNIX=y | 49 | CONFIG_UNIX=y |
50 | CONFIG_UNIX_DIAG=m | ||
51 | CONFIG_XFRM_MIGRATE=y | ||
38 | CONFIG_NET_KEY=y | 52 | CONFIG_NET_KEY=y |
39 | CONFIG_NET_KEY_MIGRATE=y | ||
40 | CONFIG_INET=y | 53 | CONFIG_INET=y |
41 | CONFIG_IP_PNP=y | 54 | CONFIG_IP_PNP=y |
42 | CONFIG_IP_PNP_DHCP=y | 55 | CONFIG_IP_PNP_DHCP=y |
43 | CONFIG_IP_PNP_BOOTP=y | 56 | CONFIG_IP_PNP_BOOTP=y |
44 | CONFIG_IP_PNP_RARP=y | 57 | CONFIG_IP_PNP_RARP=y |
45 | CONFIG_NET_IPIP=m | 58 | CONFIG_NET_IPIP=m |
59 | CONFIG_NET_IPGRE_DEMUX=m | ||
46 | CONFIG_NET_IPGRE=m | 60 | CONFIG_NET_IPGRE=m |
47 | CONFIG_SYN_COOKIES=y | 61 | CONFIG_SYN_COOKIES=y |
62 | CONFIG_NET_IPVTI=m | ||
48 | CONFIG_INET_AH=m | 63 | CONFIG_INET_AH=m |
49 | CONFIG_INET_ESP=m | 64 | CONFIG_INET_ESP=m |
50 | CONFIG_INET_IPCOMP=m | 65 | CONFIG_INET_IPCOMP=m |
51 | CONFIG_INET_XFRM_MODE_TRANSPORT=m | 66 | CONFIG_INET_XFRM_MODE_TRANSPORT=m |
52 | CONFIG_INET_XFRM_MODE_TUNNEL=m | 67 | CONFIG_INET_XFRM_MODE_TUNNEL=m |
53 | CONFIG_INET_XFRM_MODE_BEET=m | 68 | CONFIG_INET_XFRM_MODE_BEET=m |
69 | # CONFIG_INET_LRO is not set | ||
54 | CONFIG_INET_DIAG=m | 70 | CONFIG_INET_DIAG=m |
71 | CONFIG_INET_UDP_DIAG=m | ||
55 | CONFIG_IPV6_PRIVACY=y | 72 | CONFIG_IPV6_PRIVACY=y |
56 | CONFIG_IPV6_ROUTER_PREF=y | 73 | CONFIG_IPV6_ROUTER_PREF=y |
57 | CONFIG_IPV6_ROUTE_INFO=y | ||
58 | CONFIG_INET6_AH=m | 74 | CONFIG_INET6_AH=m |
59 | CONFIG_INET6_ESP=m | 75 | CONFIG_INET6_ESP=m |
60 | CONFIG_INET6_IPCOMP=m | 76 | CONFIG_INET6_IPCOMP=m |
61 | CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m | 77 | CONFIG_IPV6_GRE=m |
62 | CONFIG_IPV6_TUNNEL=m | ||
63 | CONFIG_NETFILTER=y | 78 | CONFIG_NETFILTER=y |
64 | CONFIG_NETFILTER_NETLINK_QUEUE=m | ||
65 | CONFIG_NF_CONNTRACK=m | 79 | CONFIG_NF_CONNTRACK=m |
80 | CONFIG_NF_CONNTRACK_ZONES=y | ||
81 | # CONFIG_NF_CONNTRACK_PROCFS is not set | ||
66 | # CONFIG_NF_CT_PROTO_DCCP is not set | 82 | # CONFIG_NF_CT_PROTO_DCCP is not set |
67 | CONFIG_NF_CT_PROTO_UDPLITE=m | 83 | CONFIG_NF_CT_PROTO_UDPLITE=m |
68 | CONFIG_NF_CONNTRACK_AMANDA=m | 84 | CONFIG_NF_CONNTRACK_AMANDA=m |
@@ -70,25 +86,37 @@ CONFIG_NF_CONNTRACK_FTP=m | |||
70 | CONFIG_NF_CONNTRACK_H323=m | 86 | CONFIG_NF_CONNTRACK_H323=m |
71 | CONFIG_NF_CONNTRACK_IRC=m | 87 | CONFIG_NF_CONNTRACK_IRC=m |
72 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m | 88 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m |
89 | CONFIG_NF_CONNTRACK_SNMP=m | ||
73 | CONFIG_NF_CONNTRACK_PPTP=m | 90 | CONFIG_NF_CONNTRACK_PPTP=m |
74 | CONFIG_NF_CONNTRACK_SANE=m | 91 | CONFIG_NF_CONNTRACK_SANE=m |
75 | CONFIG_NF_CONNTRACK_SIP=m | 92 | CONFIG_NF_CONNTRACK_SIP=m |
76 | CONFIG_NF_CONNTRACK_TFTP=m | 93 | CONFIG_NF_CONNTRACK_TFTP=m |
94 | CONFIG_NETFILTER_XT_SET=m | ||
95 | CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m | ||
77 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 96 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
78 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 97 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
79 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | 98 | CONFIG_NETFILTER_XT_TARGET_DSCP=m |
99 | CONFIG_NETFILTER_XT_TARGET_HMARK=m | ||
100 | CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m | ||
101 | CONFIG_NETFILTER_XT_TARGET_LOG=m | ||
80 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 102 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
81 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 103 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
82 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | 104 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m |
105 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | ||
106 | CONFIG_NETFILTER_XT_TARGET_TEE=m | ||
83 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | 107 | CONFIG_NETFILTER_XT_TARGET_TRACE=m |
84 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m | 108 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m |
85 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m | 109 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m |
110 | CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m | ||
111 | CONFIG_NETFILTER_XT_MATCH_BPF=m | ||
86 | CONFIG_NETFILTER_XT_MATCH_CLUSTER=m | 112 | CONFIG_NETFILTER_XT_MATCH_CLUSTER=m |
87 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m | 113 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m |
88 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m | 114 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m |
115 | CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m | ||
89 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m | 116 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m |
90 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m | 117 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m |
91 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | 118 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m |
119 | CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m | ||
92 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | 120 | CONFIG_NETFILTER_XT_MATCH_DSCP=m |
93 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 121 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
94 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | 122 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m |
@@ -99,6 +127,8 @@ CONFIG_NETFILTER_XT_MATCH_LIMIT=m | |||
99 | CONFIG_NETFILTER_XT_MATCH_MAC=m | 127 | CONFIG_NETFILTER_XT_MATCH_MAC=m |
100 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 128 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
101 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | 129 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m |
130 | CONFIG_NETFILTER_XT_MATCH_NFACCT=m | ||
131 | CONFIG_NETFILTER_XT_MATCH_OSF=m | ||
102 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | 132 | CONFIG_NETFILTER_XT_MATCH_OWNER=m |
103 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 133 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
104 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 134 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
@@ -112,22 +142,31 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m | |||
112 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 142 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
113 | CONFIG_NETFILTER_XT_MATCH_TIME=m | 143 | CONFIG_NETFILTER_XT_MATCH_TIME=m |
114 | CONFIG_NETFILTER_XT_MATCH_U32=m | 144 | CONFIG_NETFILTER_XT_MATCH_U32=m |
145 | CONFIG_IP_SET=m | ||
146 | CONFIG_IP_SET_BITMAP_IP=m | ||
147 | CONFIG_IP_SET_BITMAP_IPMAC=m | ||
148 | CONFIG_IP_SET_BITMAP_PORT=m | ||
149 | CONFIG_IP_SET_HASH_IP=m | ||
150 | CONFIG_IP_SET_HASH_IPPORT=m | ||
151 | CONFIG_IP_SET_HASH_IPPORTIP=m | ||
152 | CONFIG_IP_SET_HASH_IPPORTNET=m | ||
153 | CONFIG_IP_SET_HASH_NET=m | ||
154 | CONFIG_IP_SET_HASH_NETPORT=m | ||
155 | CONFIG_IP_SET_HASH_NETIFACE=m | ||
156 | CONFIG_IP_SET_LIST_SET=m | ||
115 | CONFIG_NF_CONNTRACK_IPV4=m | 157 | CONFIG_NF_CONNTRACK_IPV4=m |
116 | CONFIG_IP_NF_QUEUE=m | ||
117 | CONFIG_IP_NF_IPTABLES=m | 158 | CONFIG_IP_NF_IPTABLES=m |
118 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
119 | CONFIG_IP_NF_MATCH_AH=m | 159 | CONFIG_IP_NF_MATCH_AH=m |
120 | CONFIG_IP_NF_MATCH_ECN=m | 160 | CONFIG_IP_NF_MATCH_ECN=m |
161 | CONFIG_IP_NF_MATCH_RPFILTER=m | ||
121 | CONFIG_IP_NF_MATCH_TTL=m | 162 | CONFIG_IP_NF_MATCH_TTL=m |
122 | CONFIG_IP_NF_FILTER=m | 163 | CONFIG_IP_NF_FILTER=m |
123 | CONFIG_IP_NF_TARGET_REJECT=m | 164 | CONFIG_IP_NF_TARGET_REJECT=m |
124 | CONFIG_IP_NF_TARGET_LOG=m | ||
125 | CONFIG_IP_NF_TARGET_ULOG=m | 165 | CONFIG_IP_NF_TARGET_ULOG=m |
126 | CONFIG_NF_NAT=m | 166 | CONFIG_NF_NAT_IPV4=m |
127 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 167 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
128 | CONFIG_IP_NF_TARGET_NETMAP=m | 168 | CONFIG_IP_NF_TARGET_NETMAP=m |
129 | CONFIG_IP_NF_TARGET_REDIRECT=m | 169 | CONFIG_IP_NF_TARGET_REDIRECT=m |
130 | CONFIG_NF_NAT_SNMP_BASIC=m | ||
131 | CONFIG_IP_NF_MANGLE=m | 170 | CONFIG_IP_NF_MANGLE=m |
132 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | 171 | CONFIG_IP_NF_TARGET_CLUSTERIP=m |
133 | CONFIG_IP_NF_TARGET_ECN=m | 172 | CONFIG_IP_NF_TARGET_ECN=m |
@@ -137,7 +176,6 @@ CONFIG_IP_NF_ARPTABLES=m | |||
137 | CONFIG_IP_NF_ARPFILTER=m | 176 | CONFIG_IP_NF_ARPFILTER=m |
138 | CONFIG_IP_NF_ARP_MANGLE=m | 177 | CONFIG_IP_NF_ARP_MANGLE=m |
139 | CONFIG_NF_CONNTRACK_IPV6=m | 178 | CONFIG_NF_CONNTRACK_IPV6=m |
140 | CONFIG_IP6_NF_QUEUE=m | ||
141 | CONFIG_IP6_NF_IPTABLES=m | 179 | CONFIG_IP6_NF_IPTABLES=m |
142 | CONFIG_IP6_NF_MATCH_AH=m | 180 | CONFIG_IP6_NF_MATCH_AH=m |
143 | CONFIG_IP6_NF_MATCH_EUI64=m | 181 | CONFIG_IP6_NF_MATCH_EUI64=m |
@@ -146,22 +184,34 @@ CONFIG_IP6_NF_MATCH_OPTS=m | |||
146 | CONFIG_IP6_NF_MATCH_HL=m | 184 | CONFIG_IP6_NF_MATCH_HL=m |
147 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 185 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
148 | CONFIG_IP6_NF_MATCH_MH=m | 186 | CONFIG_IP6_NF_MATCH_MH=m |
187 | CONFIG_IP6_NF_MATCH_RPFILTER=m | ||
149 | CONFIG_IP6_NF_MATCH_RT=m | 188 | CONFIG_IP6_NF_MATCH_RT=m |
150 | CONFIG_IP6_NF_TARGET_HL=m | 189 | CONFIG_IP6_NF_TARGET_HL=m |
151 | CONFIG_IP6_NF_TARGET_LOG=m | ||
152 | CONFIG_IP6_NF_FILTER=m | 190 | CONFIG_IP6_NF_FILTER=m |
153 | CONFIG_IP6_NF_TARGET_REJECT=m | 191 | CONFIG_IP6_NF_TARGET_REJECT=m |
154 | CONFIG_IP6_NF_MANGLE=m | 192 | CONFIG_IP6_NF_MANGLE=m |
155 | CONFIG_IP6_NF_RAW=m | 193 | CONFIG_IP6_NF_RAW=m |
194 | CONFIG_NF_NAT_IPV6=m | ||
195 | CONFIG_IP6_NF_TARGET_MASQUERADE=m | ||
196 | CONFIG_IP6_NF_TARGET_NPT=m | ||
156 | CONFIG_IP_DCCP=m | 197 | CONFIG_IP_DCCP=m |
157 | # CONFIG_IP_DCCP_CCID3 is not set | 198 | # CONFIG_IP_DCCP_CCID3 is not set |
199 | CONFIG_SCTP_COOKIE_HMAC_SHA1=y | ||
200 | CONFIG_RDS=m | ||
201 | CONFIG_RDS_TCP=m | ||
202 | CONFIG_L2TP=m | ||
158 | CONFIG_ATALK=m | 203 | CONFIG_ATALK=m |
159 | CONFIG_DEV_APPLETALK=m | 204 | CONFIG_DEV_APPLETALK=m |
160 | CONFIG_IPDDP=m | 205 | CONFIG_IPDDP=m |
161 | CONFIG_IPDDP_ENCAP=y | 206 | CONFIG_IPDDP_ENCAP=y |
162 | CONFIG_IPDDP_DECAP=y | 207 | CONFIG_IPDDP_DECAP=y |
208 | CONFIG_BATMAN_ADV=m | ||
209 | CONFIG_BATMAN_ADV_DAT=y | ||
210 | # CONFIG_WIRELESS is not set | ||
163 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 211 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
212 | CONFIG_DEVTMPFS=y | ||
164 | # CONFIG_FIRMWARE_IN_KERNEL is not set | 213 | # CONFIG_FIRMWARE_IN_KERNEL is not set |
214 | # CONFIG_FW_LOADER_USER_HELPER is not set | ||
165 | CONFIG_CONNECTOR=m | 215 | CONFIG_CONNECTOR=m |
166 | CONFIG_PARPORT=m | 216 | CONFIG_PARPORT=m |
167 | CONFIG_PARPORT_AMIGA=m | 217 | CONFIG_PARPORT_AMIGA=m |
@@ -170,15 +220,17 @@ CONFIG_PARPORT_ATARI=m | |||
170 | CONFIG_PARPORT_1284=y | 220 | CONFIG_PARPORT_1284=y |
171 | CONFIG_AMIGA_FLOPPY=y | 221 | CONFIG_AMIGA_FLOPPY=y |
172 | CONFIG_ATARI_FLOPPY=y | 222 | CONFIG_ATARI_FLOPPY=y |
173 | CONFIG_BLK_DEV_SWIM=y | 223 | CONFIG_BLK_DEV_SWIM=m |
174 | CONFIG_AMIGA_Z2RAM=y | 224 | CONFIG_AMIGA_Z2RAM=y |
175 | CONFIG_BLK_DEV_LOOP=y | 225 | CONFIG_BLK_DEV_LOOP=y |
176 | CONFIG_BLK_DEV_CRYPTOLOOP=m | 226 | CONFIG_BLK_DEV_CRYPTOLOOP=m |
227 | CONFIG_BLK_DEV_DRBD=m | ||
177 | CONFIG_BLK_DEV_NBD=m | 228 | CONFIG_BLK_DEV_NBD=m |
178 | CONFIG_BLK_DEV_RAM=y | 229 | CONFIG_BLK_DEV_RAM=y |
179 | CONFIG_CDROM_PKTCDVD=m | 230 | CONFIG_CDROM_PKTCDVD=m |
180 | CONFIG_ATA_OVER_ETH=m | 231 | CONFIG_ATA_OVER_ETH=m |
181 | CONFIG_IDE=y | 232 | CONFIG_IDE=y |
233 | CONFIG_IDE_GD_ATAPI=y | ||
182 | CONFIG_BLK_DEV_IDECD=y | 234 | CONFIG_BLK_DEV_IDECD=y |
183 | CONFIG_BLK_DEV_GAYLE=y | 235 | CONFIG_BLK_DEV_GAYLE=y |
184 | CONFIG_BLK_DEV_BUDDHA=y | 236 | CONFIG_BLK_DEV_BUDDHA=y |
@@ -195,11 +247,9 @@ CONFIG_BLK_DEV_SR=y | |||
195 | CONFIG_BLK_DEV_SR_VENDOR=y | 247 | CONFIG_BLK_DEV_SR_VENDOR=y |
196 | CONFIG_CHR_DEV_SG=m | 248 | CONFIG_CHR_DEV_SG=m |
197 | CONFIG_SCSI_CONSTANTS=y | 249 | CONFIG_SCSI_CONSTANTS=y |
198 | CONFIG_SCSI_SAS_LIBSAS=m | 250 | CONFIG_SCSI_SAS_ATTRS=m |
199 | # CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set | ||
200 | CONFIG_SCSI_SRP_ATTRS=m | ||
201 | CONFIG_SCSI_SRP_TGT_ATTRS=y | ||
202 | CONFIG_ISCSI_TCP=m | 251 | CONFIG_ISCSI_TCP=m |
252 | CONFIG_ISCSI_BOOT_SYSFS=m | ||
203 | CONFIG_A3000_SCSI=y | 253 | CONFIG_A3000_SCSI=y |
204 | CONFIG_A2091_SCSI=y | 254 | CONFIG_A2091_SCSI=y |
205 | CONFIG_GVP11_SCSI=y | 255 | CONFIG_GVP11_SCSI=y |
@@ -213,21 +263,24 @@ CONFIG_MVME16x_SCSI=y | |||
213 | CONFIG_BVME6000_SCSI=y | 263 | CONFIG_BVME6000_SCSI=y |
214 | CONFIG_SUN3X_ESP=y | 264 | CONFIG_SUN3X_ESP=y |
215 | CONFIG_MD=y | 265 | CONFIG_MD=y |
216 | CONFIG_BLK_DEV_MD=m | ||
217 | CONFIG_MD_LINEAR=m | 266 | CONFIG_MD_LINEAR=m |
218 | CONFIG_MD_RAID0=m | 267 | CONFIG_MD_RAID0=m |
219 | CONFIG_MD_RAID1=m | ||
220 | CONFIG_MD_RAID456=m | ||
221 | CONFIG_BLK_DEV_DM=m | 268 | CONFIG_BLK_DEV_DM=m |
222 | CONFIG_DM_CRYPT=m | 269 | CONFIG_DM_CRYPT=m |
223 | CONFIG_DM_SNAPSHOT=m | 270 | CONFIG_DM_SNAPSHOT=m |
271 | CONFIG_DM_THIN_PROVISIONING=m | ||
272 | CONFIG_DM_CACHE=m | ||
224 | CONFIG_DM_MIRROR=m | 273 | CONFIG_DM_MIRROR=m |
274 | CONFIG_DM_RAID=m | ||
225 | CONFIG_DM_ZERO=m | 275 | CONFIG_DM_ZERO=m |
226 | CONFIG_DM_MULTIPATH=m | 276 | CONFIG_DM_MULTIPATH=m |
227 | CONFIG_DM_UEVENT=y | 277 | CONFIG_DM_UEVENT=y |
278 | CONFIG_TARGET_CORE=m | ||
279 | CONFIG_TCM_IBLOCK=m | ||
280 | CONFIG_TCM_FILEIO=m | ||
281 | CONFIG_TCM_PSCSI=m | ||
228 | CONFIG_ADB=y | 282 | CONFIG_ADB=y |
229 | CONFIG_ADB_MACII=y | 283 | CONFIG_ADB_MACII=y |
230 | CONFIG_ADB_MACIISI=y | ||
231 | CONFIG_ADB_IOP=y | 284 | CONFIG_ADB_IOP=y |
232 | CONFIG_ADB_PMU68K=y | 285 | CONFIG_ADB_PMU68K=y |
233 | CONFIG_ADB_CUDA=y | 286 | CONFIG_ADB_CUDA=y |
@@ -235,49 +288,64 @@ CONFIG_INPUT_ADBHID=y | |||
235 | CONFIG_MAC_EMUMOUSEBTN=y | 288 | CONFIG_MAC_EMUMOUSEBTN=y |
236 | CONFIG_NETDEVICES=y | 289 | CONFIG_NETDEVICES=y |
237 | CONFIG_DUMMY=m | 290 | CONFIG_DUMMY=m |
238 | CONFIG_MACVLAN=m | ||
239 | CONFIG_EQUALIZER=m | 291 | CONFIG_EQUALIZER=m |
240 | CONFIG_VETH=m | ||
241 | CONFIG_NET_ETHERNET=y | ||
242 | CONFIG_MII=y | 292 | CONFIG_MII=y |
243 | CONFIG_ARIADNE=y | 293 | CONFIG_NET_TEAM=m |
294 | CONFIG_NET_TEAM_MODE_BROADCAST=m | ||
295 | CONFIG_NET_TEAM_MODE_ROUNDROBIN=m | ||
296 | CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m | ||
297 | CONFIG_NET_TEAM_MODE_LOADBALANCE=m | ||
298 | CONFIG_VXLAN=m | ||
299 | CONFIG_NETCONSOLE=m | ||
300 | CONFIG_NETCONSOLE_DYNAMIC=y | ||
301 | CONFIG_VETH=m | ||
302 | # CONFIG_NET_VENDOR_3COM is not set | ||
244 | CONFIG_A2065=y | 303 | CONFIG_A2065=y |
245 | CONFIG_HYDRA=y | 304 | CONFIG_ARIADNE=y |
246 | CONFIG_ZORRO8390=y | ||
247 | CONFIG_APNE=y | ||
248 | CONFIG_MAC8390=y | ||
249 | CONFIG_MAC89x0=y | ||
250 | CONFIG_MACSONIC=y | ||
251 | CONFIG_MACMACE=y | ||
252 | CONFIG_MVME147_NET=y | ||
253 | CONFIG_MVME16x_NET=y | ||
254 | CONFIG_BVME6000_NET=y | ||
255 | CONFIG_ATARILANCE=y | 305 | CONFIG_ATARILANCE=y |
256 | CONFIG_SUN3LANCE=y | ||
257 | CONFIG_HPLANCE=y | 306 | CONFIG_HPLANCE=y |
307 | CONFIG_MVME147_NET=y | ||
308 | CONFIG_SUN3LANCE=y | ||
309 | CONFIG_MACMACE=y | ||
310 | # CONFIG_NET_CADENCE is not set | ||
311 | # CONFIG_NET_VENDOR_BROADCOM is not set | ||
312 | CONFIG_MAC89x0=y | ||
313 | # CONFIG_NET_VENDOR_FUJITSU is not set | ||
314 | # CONFIG_NET_VENDOR_HP is not set | ||
315 | CONFIG_BVME6000_NET=y | ||
316 | CONFIG_MVME16x_NET=y | ||
317 | # CONFIG_NET_VENDOR_MARVELL is not set | ||
318 | # CONFIG_NET_VENDOR_MICREL is not set | ||
319 | CONFIG_MACSONIC=y | ||
320 | CONFIG_HYDRA=y | ||
321 | CONFIG_MAC8390=y | ||
258 | CONFIG_NE2000=m | 322 | CONFIG_NE2000=m |
259 | # CONFIG_NETDEV_1000 is not set | 323 | CONFIG_APNE=y |
260 | # CONFIG_NETDEV_10000 is not set | 324 | CONFIG_ZORRO8390=y |
325 | # CONFIG_NET_VENDOR_SEEQ is not set | ||
326 | # CONFIG_NET_VENDOR_STMICRO is not set | ||
327 | # CONFIG_NET_VENDOR_WIZNET is not set | ||
261 | CONFIG_PPP=m | 328 | CONFIG_PPP=m |
262 | CONFIG_PPP_FILTER=y | ||
263 | CONFIG_PPP_ASYNC=m | ||
264 | CONFIG_PPP_SYNC_TTY=m | ||
265 | CONFIG_PPP_DEFLATE=m | ||
266 | CONFIG_PPP_BSDCOMP=m | 329 | CONFIG_PPP_BSDCOMP=m |
330 | CONFIG_PPP_DEFLATE=m | ||
331 | CONFIG_PPP_FILTER=y | ||
267 | CONFIG_PPP_MPPE=m | 332 | CONFIG_PPP_MPPE=m |
268 | CONFIG_PPPOE=m | 333 | CONFIG_PPPOE=m |
334 | CONFIG_PPTP=m | ||
335 | CONFIG_PPPOL2TP=m | ||
336 | CONFIG_PPP_ASYNC=m | ||
337 | CONFIG_PPP_SYNC_TTY=m | ||
269 | CONFIG_SLIP=m | 338 | CONFIG_SLIP=m |
270 | CONFIG_SLIP_COMPRESSED=y | 339 | CONFIG_SLIP_COMPRESSED=y |
271 | CONFIG_SLIP_SMART=y | 340 | CONFIG_SLIP_SMART=y |
272 | CONFIG_SLIP_MODE_SLIP6=y | 341 | CONFIG_SLIP_MODE_SLIP6=y |
273 | CONFIG_NETCONSOLE=m | 342 | # CONFIG_WLAN is not set |
274 | CONFIG_NETCONSOLE_DYNAMIC=y | 343 | CONFIG_INPUT_EVDEV=m |
275 | CONFIG_INPUT_FF_MEMLESS=m | ||
276 | CONFIG_KEYBOARD_AMIGA=y | 344 | CONFIG_KEYBOARD_AMIGA=y |
277 | CONFIG_KEYBOARD_ATARI=y | 345 | CONFIG_KEYBOARD_ATARI=y |
278 | # CONFIG_KEYBOARD_ATKBD is not set | 346 | # CONFIG_KEYBOARD_ATKBD is not set |
279 | CONFIG_KEYBOARD_SUNKBD=y | 347 | CONFIG_KEYBOARD_SUNKBD=y |
280 | CONFIG_MOUSE_PS2=m | 348 | # CONFIG_MOUSE_PS2 is not set |
281 | CONFIG_MOUSE_SERIAL=m | 349 | CONFIG_MOUSE_SERIAL=m |
282 | CONFIG_MOUSE_AMIGA=m | 350 | CONFIG_MOUSE_AMIGA=m |
283 | CONFIG_MOUSE_ATARI=m | 351 | CONFIG_MOUSE_ATARI=m |
@@ -285,18 +353,20 @@ CONFIG_INPUT_JOYSTICK=y | |||
285 | CONFIG_JOYSTICK_AMIGA=m | 353 | CONFIG_JOYSTICK_AMIGA=m |
286 | CONFIG_INPUT_MISC=y | 354 | CONFIG_INPUT_MISC=y |
287 | CONFIG_INPUT_M68K_BEEP=m | 355 | CONFIG_INPUT_M68K_BEEP=m |
288 | CONFIG_HP_SDC_RTC=y | 356 | CONFIG_HP_SDC_RTC=m |
289 | # CONFIG_SERIO_SERPORT is not set | ||
290 | CONFIG_SERIO_Q40KBD=y | 357 | CONFIG_SERIO_Q40KBD=y |
291 | CONFIG_VT_HW_CONSOLE_BINDING=y | 358 | CONFIG_VT_HW_CONSOLE_BINDING=y |
359 | # CONFIG_LEGACY_PTYS is not set | ||
292 | # CONFIG_DEVKMEM is not set | 360 | # CONFIG_DEVKMEM is not set |
293 | CONFIG_SERIAL_PMACZILOG=y | 361 | CONFIG_SERIAL_PMACZILOG=y |
294 | CONFIG_SERIAL_PMACZILOG_TTYS=y | 362 | CONFIG_SERIAL_PMACZILOG_TTYS=y |
295 | CONFIG_SERIAL_PMACZILOG_CONSOLE=y | 363 | CONFIG_SERIAL_PMACZILOG_CONSOLE=y |
296 | CONFIG_PRINTER=m | 364 | CONFIG_PRINTER=m |
297 | # CONFIG_HW_RANDOM is not set | 365 | # CONFIG_HW_RANDOM is not set |
298 | CONFIG_GEN_RTC=y | 366 | CONFIG_NTP_PPS=y |
299 | CONFIG_GEN_RTC_X=y | 367 | CONFIG_PPS_CLIENT_LDISC=m |
368 | CONFIG_PPS_CLIENT_PARPORT=m | ||
369 | CONFIG_PTP_1588_CLOCK=m | ||
300 | # CONFIG_HWMON is not set | 370 | # CONFIG_HWMON is not set |
301 | CONFIG_FB=y | 371 | CONFIG_FB=y |
302 | CONFIG_FB_CIRRUS=y | 372 | CONFIG_FB_CIRRUS=y |
@@ -316,7 +386,20 @@ CONFIG_DMASOUND_PAULA=m | |||
316 | CONFIG_DMASOUND_Q40=m | 386 | CONFIG_DMASOUND_Q40=m |
317 | CONFIG_HID=m | 387 | CONFIG_HID=m |
318 | CONFIG_HIDRAW=y | 388 | CONFIG_HIDRAW=y |
389 | CONFIG_UHID=m | ||
390 | # CONFIG_HID_GENERIC is not set | ||
319 | # CONFIG_USB_SUPPORT is not set | 391 | # CONFIG_USB_SUPPORT is not set |
392 | CONFIG_RTC_CLASS=y | ||
393 | CONFIG_RTC_DRV_MSM6242=m | ||
394 | CONFIG_RTC_DRV_RP5C01=m | ||
395 | CONFIG_RTC_DRV_GENERIC=m | ||
396 | # CONFIG_IOMMU_SUPPORT is not set | ||
397 | CONFIG_HEARTBEAT=y | ||
398 | CONFIG_PROC_HARDWARE=y | ||
399 | CONFIG_NATFEAT=y | ||
400 | CONFIG_NFBLOCK=y | ||
401 | CONFIG_NFCON=y | ||
402 | CONFIG_NFETH=y | ||
320 | CONFIG_ATARI_DSP56K=m | 403 | CONFIG_ATARI_DSP56K=m |
321 | CONFIG_AMIGA_BUILTIN_SERIAL=y | 404 | CONFIG_AMIGA_BUILTIN_SERIAL=y |
322 | CONFIG_SERIAL_CONSOLE=y | 405 | CONFIG_SERIAL_CONSOLE=y |
@@ -324,42 +407,49 @@ CONFIG_EXT2_FS=y | |||
324 | CONFIG_EXT3_FS=y | 407 | CONFIG_EXT3_FS=y |
325 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | 408 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set |
326 | # CONFIG_EXT3_FS_XATTR is not set | 409 | # CONFIG_EXT3_FS_XATTR is not set |
410 | CONFIG_EXT4_FS=y | ||
327 | CONFIG_REISERFS_FS=m | 411 | CONFIG_REISERFS_FS=m |
328 | CONFIG_JFS_FS=m | 412 | CONFIG_JFS_FS=m |
329 | CONFIG_XFS_FS=m | 413 | CONFIG_XFS_FS=m |
330 | CONFIG_OCFS2_FS=m | 414 | CONFIG_OCFS2_FS=m |
331 | # CONFIG_OCFS2_FS_STATS is not set | ||
332 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 415 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
416 | CONFIG_FANOTIFY=y | ||
333 | CONFIG_QUOTA_NETLINK_INTERFACE=y | 417 | CONFIG_QUOTA_NETLINK_INTERFACE=y |
334 | # CONFIG_PRINT_QUOTA_WARNING is not set | 418 | # CONFIG_PRINT_QUOTA_WARNING is not set |
335 | CONFIG_AUTOFS_FS=m | ||
336 | CONFIG_AUTOFS4_FS=m | 419 | CONFIG_AUTOFS4_FS=m |
337 | CONFIG_FUSE_FS=m | 420 | CONFIG_FUSE_FS=m |
421 | CONFIG_CUSE=m | ||
338 | CONFIG_ISO9660_FS=y | 422 | CONFIG_ISO9660_FS=y |
339 | CONFIG_JOLIET=y | 423 | CONFIG_JOLIET=y |
340 | CONFIG_ZISOFS=y | 424 | CONFIG_ZISOFS=y |
341 | CONFIG_UDF_FS=m | 425 | CONFIG_UDF_FS=m |
342 | CONFIG_MSDOS_FS=y | 426 | CONFIG_MSDOS_FS=m |
343 | CONFIG_VFAT_FS=m | 427 | CONFIG_VFAT_FS=m |
344 | CONFIG_PROC_KCORE=y | 428 | CONFIG_PROC_KCORE=y |
345 | CONFIG_TMPFS=y | 429 | CONFIG_TMPFS=y |
346 | CONFIG_AFFS_FS=m | 430 | CONFIG_AFFS_FS=m |
347 | CONFIG_HFS_FS=y | 431 | CONFIG_ECRYPT_FS=m |
348 | CONFIG_HFSPLUS_FS=y | 432 | CONFIG_ECRYPT_FS_MESSAGING=y |
433 | CONFIG_HFS_FS=m | ||
434 | CONFIG_HFSPLUS_FS=m | ||
349 | CONFIG_CRAMFS=m | 435 | CONFIG_CRAMFS=m |
350 | CONFIG_SQUASHFS=m | 436 | CONFIG_SQUASHFS=m |
351 | CONFIG_MINIX_FS=y | 437 | CONFIG_SQUASHFS_LZO=y |
438 | CONFIG_MINIX_FS=m | ||
439 | CONFIG_OMFS_FS=m | ||
352 | CONFIG_HPFS_FS=m | 440 | CONFIG_HPFS_FS=m |
441 | CONFIG_QNX4FS_FS=m | ||
442 | CONFIG_QNX6FS_FS=m | ||
353 | CONFIG_SYSV_FS=m | 443 | CONFIG_SYSV_FS=m |
354 | CONFIG_UFS_FS=m | 444 | CONFIG_UFS_FS=m |
355 | CONFIG_NFS_FS=y | 445 | CONFIG_NFS_FS=y |
356 | CONFIG_NFS_V3=y | ||
357 | CONFIG_NFS_V4=y | 446 | CONFIG_NFS_V4=y |
447 | CONFIG_NFS_SWAP=y | ||
358 | CONFIG_ROOT_NFS=y | 448 | CONFIG_ROOT_NFS=y |
359 | CONFIG_NFSD=m | 449 | CONFIG_NFSD=m |
360 | CONFIG_NFSD_V3=y | 450 | CONFIG_NFSD_V3=y |
361 | CONFIG_SMB_FS=m | 451 | CONFIG_CIFS=m |
362 | CONFIG_SMB_NLS_DEFAULT=y | 452 | # CONFIG_CIFS_DEBUG is not set |
363 | CONFIG_CODA_FS=m | 453 | CONFIG_CODA_FS=m |
364 | CONFIG_NLS_CODEPAGE_437=y | 454 | CONFIG_NLS_CODEPAGE_437=y |
365 | CONFIG_NLS_CODEPAGE_737=m | 455 | CONFIG_NLS_CODEPAGE_737=m |
@@ -398,10 +488,23 @@ CONFIG_NLS_ISO8859_14=m | |||
398 | CONFIG_NLS_ISO8859_15=m | 488 | CONFIG_NLS_ISO8859_15=m |
399 | CONFIG_NLS_KOI8_R=m | 489 | CONFIG_NLS_KOI8_R=m |
400 | CONFIG_NLS_KOI8_U=m | 490 | CONFIG_NLS_KOI8_U=m |
491 | CONFIG_NLS_MAC_ROMAN=m | ||
492 | CONFIG_NLS_MAC_CELTIC=m | ||
493 | CONFIG_NLS_MAC_CENTEURO=m | ||
494 | CONFIG_NLS_MAC_CROATIAN=m | ||
495 | CONFIG_NLS_MAC_CYRILLIC=m | ||
496 | CONFIG_NLS_MAC_GAELIC=m | ||
497 | CONFIG_NLS_MAC_GREEK=m | ||
498 | CONFIG_NLS_MAC_ICELAND=m | ||
499 | CONFIG_NLS_MAC_INUIT=m | ||
500 | CONFIG_NLS_MAC_ROMANIAN=m | ||
501 | CONFIG_NLS_MAC_TURKISH=m | ||
401 | CONFIG_DLM=m | 502 | CONFIG_DLM=m |
402 | CONFIG_MAGIC_SYSRQ=y | 503 | CONFIG_MAGIC_SYSRQ=y |
403 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 504 | CONFIG_ASYNC_RAID6_TEST=m |
404 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 505 | CONFIG_ENCRYPTED_KEYS=m |
506 | CONFIG_CRYPTO_MANAGER=y | ||
507 | CONFIG_CRYPTO_USER=m | ||
405 | CONFIG_CRYPTO_NULL=m | 508 | CONFIG_CRYPTO_NULL=m |
406 | CONFIG_CRYPTO_CRYPTD=m | 509 | CONFIG_CRYPTO_CRYPTD=m |
407 | CONFIG_CRYPTO_TEST=m | 510 | CONFIG_CRYPTO_TEST=m |
@@ -411,19 +514,16 @@ CONFIG_CRYPTO_CTS=m | |||
411 | CONFIG_CRYPTO_LRW=m | 514 | CONFIG_CRYPTO_LRW=m |
412 | CONFIG_CRYPTO_PCBC=m | 515 | CONFIG_CRYPTO_PCBC=m |
413 | CONFIG_CRYPTO_XTS=m | 516 | CONFIG_CRYPTO_XTS=m |
414 | CONFIG_CRYPTO_HMAC=y | ||
415 | CONFIG_CRYPTO_XCBC=m | 517 | CONFIG_CRYPTO_XCBC=m |
416 | CONFIG_CRYPTO_MD4=m | 518 | CONFIG_CRYPTO_VMAC=m |
417 | CONFIG_CRYPTO_MICHAEL_MIC=m | 519 | CONFIG_CRYPTO_MICHAEL_MIC=m |
418 | CONFIG_CRYPTO_RMD128=m | 520 | CONFIG_CRYPTO_RMD128=m |
419 | CONFIG_CRYPTO_RMD160=m | 521 | CONFIG_CRYPTO_RMD160=m |
420 | CONFIG_CRYPTO_RMD256=m | 522 | CONFIG_CRYPTO_RMD256=m |
421 | CONFIG_CRYPTO_RMD320=m | 523 | CONFIG_CRYPTO_RMD320=m |
422 | CONFIG_CRYPTO_SHA256=m | ||
423 | CONFIG_CRYPTO_SHA512=m | 524 | CONFIG_CRYPTO_SHA512=m |
424 | CONFIG_CRYPTO_TGR192=m | 525 | CONFIG_CRYPTO_TGR192=m |
425 | CONFIG_CRYPTO_WP512=m | 526 | CONFIG_CRYPTO_WP512=m |
426 | CONFIG_CRYPTO_AES=m | ||
427 | CONFIG_CRYPTO_ANUBIS=m | 527 | CONFIG_CRYPTO_ANUBIS=m |
428 | CONFIG_CRYPTO_BLOWFISH=m | 528 | CONFIG_CRYPTO_BLOWFISH=m |
429 | CONFIG_CRYPTO_CAMELLIA=m | 529 | CONFIG_CRYPTO_CAMELLIA=m |
@@ -439,6 +539,14 @@ CONFIG_CRYPTO_TWOFISH=m | |||
439 | CONFIG_CRYPTO_ZLIB=m | 539 | CONFIG_CRYPTO_ZLIB=m |
440 | CONFIG_CRYPTO_LZO=m | 540 | CONFIG_CRYPTO_LZO=m |
441 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 541 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
542 | CONFIG_CRYPTO_USER_API_HASH=m | ||
543 | CONFIG_CRYPTO_USER_API_SKCIPHER=m | ||
442 | # CONFIG_CRYPTO_HW is not set | 544 | # CONFIG_CRYPTO_HW is not set |
443 | CONFIG_CRC16=y | ||
444 | CONFIG_CRC_T10DIF=y | 545 | CONFIG_CRC_T10DIF=y |
546 | CONFIG_XZ_DEC_X86=y | ||
547 | CONFIG_XZ_DEC_POWERPC=y | ||
548 | CONFIG_XZ_DEC_IA64=y | ||
549 | CONFIG_XZ_DEC_ARM=y | ||
550 | CONFIG_XZ_DEC_ARMTHUMB=y | ||
551 | CONFIG_XZ_DEC_SPARC=y | ||
552 | CONFIG_XZ_DEC_TEST=m | ||
diff --git a/arch/m68k/configs/mvme147_defconfig b/arch/m68k/configs/mvme147_defconfig index e2af46f530c1..5586c6529fce 100644 --- a/arch/m68k/configs/mvme147_defconfig +++ b/arch/m68k/configs/mvme147_defconfig | |||
@@ -1,52 +1,73 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | ||
2 | CONFIG_LOCALVERSION="-mvme147" | 1 | CONFIG_LOCALVERSION="-mvme147" |
3 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
4 | CONFIG_POSIX_MQUEUE=y | 3 | CONFIG_POSIX_MQUEUE=y |
4 | CONFIG_FHANDLE=y | ||
5 | CONFIG_BSD_PROCESS_ACCT=y | 5 | CONFIG_BSD_PROCESS_ACCT=y |
6 | CONFIG_LOG_BUF_SHIFT=14 | 6 | CONFIG_BSD_PROCESS_ACCT_V3=y |
7 | CONFIG_RELAY=y | 7 | CONFIG_LOG_BUF_SHIFT=16 |
8 | # CONFIG_UTS_NS is not set | ||
9 | # CONFIG_IPC_NS is not set | ||
10 | # CONFIG_PID_NS is not set | ||
11 | # CONFIG_NET_NS is not set | ||
8 | CONFIG_BLK_DEV_INITRD=y | 12 | CONFIG_BLK_DEV_INITRD=y |
9 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
10 | CONFIG_SLAB=y | 13 | CONFIG_SLAB=y |
11 | CONFIG_MODULES=y | 14 | CONFIG_MODULES=y |
12 | CONFIG_MODULE_UNLOAD=y | 15 | CONFIG_MODULE_UNLOAD=y |
16 | CONFIG_PARTITION_ADVANCED=y | ||
17 | CONFIG_AMIGA_PARTITION=y | ||
18 | CONFIG_ATARI_PARTITION=y | ||
19 | CONFIG_MAC_PARTITION=y | ||
20 | CONFIG_BSD_DISKLABEL=y | ||
21 | CONFIG_MINIX_SUBPARTITION=y | ||
22 | CONFIG_SOLARIS_X86_PARTITION=y | ||
23 | CONFIG_UNIXWARE_DISKLABEL=y | ||
24 | CONFIG_SUN_PARTITION=y | ||
25 | # CONFIG_EFI_PARTITION is not set | ||
26 | CONFIG_IOSCHED_DEADLINE=m | ||
27 | CONFIG_M68030=y | ||
13 | CONFIG_VME=y | 28 | CONFIG_VME=y |
14 | CONFIG_MVME147=y | 29 | CONFIG_MVME147=y |
15 | CONFIG_M68030=y | 30 | # CONFIG_COMPACTION is not set |
31 | CONFIG_CLEANCACHE=y | ||
32 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
16 | CONFIG_BINFMT_AOUT=m | 33 | CONFIG_BINFMT_AOUT=m |
17 | CONFIG_BINFMT_MISC=m | 34 | CONFIG_BINFMT_MISC=m |
18 | CONFIG_PROC_HARDWARE=y | ||
19 | CONFIG_NET=y | 35 | CONFIG_NET=y |
20 | CONFIG_PACKET=y | 36 | CONFIG_PACKET=y |
37 | CONFIG_PACKET_DIAG=m | ||
21 | CONFIG_UNIX=y | 38 | CONFIG_UNIX=y |
39 | CONFIG_UNIX_DIAG=m | ||
40 | CONFIG_XFRM_MIGRATE=y | ||
22 | CONFIG_NET_KEY=y | 41 | CONFIG_NET_KEY=y |
23 | CONFIG_NET_KEY_MIGRATE=y | ||
24 | CONFIG_INET=y | 42 | CONFIG_INET=y |
25 | CONFIG_IP_PNP=y | 43 | CONFIG_IP_PNP=y |
26 | CONFIG_IP_PNP_DHCP=y | 44 | CONFIG_IP_PNP_DHCP=y |
27 | CONFIG_IP_PNP_BOOTP=y | 45 | CONFIG_IP_PNP_BOOTP=y |
28 | CONFIG_IP_PNP_RARP=y | 46 | CONFIG_IP_PNP_RARP=y |
29 | CONFIG_NET_IPIP=m | 47 | CONFIG_NET_IPIP=m |
48 | CONFIG_NET_IPGRE_DEMUX=m | ||
30 | CONFIG_NET_IPGRE=m | 49 | CONFIG_NET_IPGRE=m |
31 | CONFIG_SYN_COOKIES=y | 50 | CONFIG_SYN_COOKIES=y |
51 | CONFIG_NET_IPVTI=m | ||
32 | CONFIG_INET_AH=m | 52 | CONFIG_INET_AH=m |
33 | CONFIG_INET_ESP=m | 53 | CONFIG_INET_ESP=m |
34 | CONFIG_INET_IPCOMP=m | 54 | CONFIG_INET_IPCOMP=m |
35 | CONFIG_INET_XFRM_MODE_TRANSPORT=m | 55 | CONFIG_INET_XFRM_MODE_TRANSPORT=m |
36 | CONFIG_INET_XFRM_MODE_TUNNEL=m | 56 | CONFIG_INET_XFRM_MODE_TUNNEL=m |
37 | CONFIG_INET_XFRM_MODE_BEET=m | 57 | CONFIG_INET_XFRM_MODE_BEET=m |
58 | # CONFIG_INET_LRO is not set | ||
38 | CONFIG_INET_DIAG=m | 59 | CONFIG_INET_DIAG=m |
60 | CONFIG_INET_UDP_DIAG=m | ||
39 | CONFIG_IPV6_PRIVACY=y | 61 | CONFIG_IPV6_PRIVACY=y |
40 | CONFIG_IPV6_ROUTER_PREF=y | 62 | CONFIG_IPV6_ROUTER_PREF=y |
41 | CONFIG_IPV6_ROUTE_INFO=y | ||
42 | CONFIG_INET6_AH=m | 63 | CONFIG_INET6_AH=m |
43 | CONFIG_INET6_ESP=m | 64 | CONFIG_INET6_ESP=m |
44 | CONFIG_INET6_IPCOMP=m | 65 | CONFIG_INET6_IPCOMP=m |
45 | CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m | 66 | CONFIG_IPV6_GRE=m |
46 | CONFIG_IPV6_TUNNEL=m | ||
47 | CONFIG_NETFILTER=y | 67 | CONFIG_NETFILTER=y |
48 | CONFIG_NETFILTER_NETLINK_QUEUE=m | ||
49 | CONFIG_NF_CONNTRACK=m | 68 | CONFIG_NF_CONNTRACK=m |
69 | CONFIG_NF_CONNTRACK_ZONES=y | ||
70 | # CONFIG_NF_CONNTRACK_PROCFS is not set | ||
50 | # CONFIG_NF_CT_PROTO_DCCP is not set | 71 | # CONFIG_NF_CT_PROTO_DCCP is not set |
51 | CONFIG_NF_CT_PROTO_UDPLITE=m | 72 | CONFIG_NF_CT_PROTO_UDPLITE=m |
52 | CONFIG_NF_CONNTRACK_AMANDA=m | 73 | CONFIG_NF_CONNTRACK_AMANDA=m |
@@ -54,25 +75,37 @@ CONFIG_NF_CONNTRACK_FTP=m | |||
54 | CONFIG_NF_CONNTRACK_H323=m | 75 | CONFIG_NF_CONNTRACK_H323=m |
55 | CONFIG_NF_CONNTRACK_IRC=m | 76 | CONFIG_NF_CONNTRACK_IRC=m |
56 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m | 77 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m |
78 | CONFIG_NF_CONNTRACK_SNMP=m | ||
57 | CONFIG_NF_CONNTRACK_PPTP=m | 79 | CONFIG_NF_CONNTRACK_PPTP=m |
58 | CONFIG_NF_CONNTRACK_SANE=m | 80 | CONFIG_NF_CONNTRACK_SANE=m |
59 | CONFIG_NF_CONNTRACK_SIP=m | 81 | CONFIG_NF_CONNTRACK_SIP=m |
60 | CONFIG_NF_CONNTRACK_TFTP=m | 82 | CONFIG_NF_CONNTRACK_TFTP=m |
83 | CONFIG_NETFILTER_XT_SET=m | ||
84 | CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m | ||
61 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 85 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
62 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 86 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
63 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | 87 | CONFIG_NETFILTER_XT_TARGET_DSCP=m |
88 | CONFIG_NETFILTER_XT_TARGET_HMARK=m | ||
89 | CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m | ||
90 | CONFIG_NETFILTER_XT_TARGET_LOG=m | ||
64 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 91 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
65 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 92 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
66 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | 93 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m |
94 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | ||
95 | CONFIG_NETFILTER_XT_TARGET_TEE=m | ||
67 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | 96 | CONFIG_NETFILTER_XT_TARGET_TRACE=m |
68 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m | 97 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m |
69 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m | 98 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m |
99 | CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m | ||
100 | CONFIG_NETFILTER_XT_MATCH_BPF=m | ||
70 | CONFIG_NETFILTER_XT_MATCH_CLUSTER=m | 101 | CONFIG_NETFILTER_XT_MATCH_CLUSTER=m |
71 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m | 102 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m |
72 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m | 103 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m |
104 | CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m | ||
73 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m | 105 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m |
74 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m | 106 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m |
75 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | 107 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m |
108 | CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m | ||
76 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | 109 | CONFIG_NETFILTER_XT_MATCH_DSCP=m |
77 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 110 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
78 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | 111 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m |
@@ -83,6 +116,8 @@ CONFIG_NETFILTER_XT_MATCH_LIMIT=m | |||
83 | CONFIG_NETFILTER_XT_MATCH_MAC=m | 116 | CONFIG_NETFILTER_XT_MATCH_MAC=m |
84 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 117 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
85 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | 118 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m |
119 | CONFIG_NETFILTER_XT_MATCH_NFACCT=m | ||
120 | CONFIG_NETFILTER_XT_MATCH_OSF=m | ||
86 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | 121 | CONFIG_NETFILTER_XT_MATCH_OWNER=m |
87 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 122 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
88 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 123 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
@@ -96,22 +131,31 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m | |||
96 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 131 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
97 | CONFIG_NETFILTER_XT_MATCH_TIME=m | 132 | CONFIG_NETFILTER_XT_MATCH_TIME=m |
98 | CONFIG_NETFILTER_XT_MATCH_U32=m | 133 | CONFIG_NETFILTER_XT_MATCH_U32=m |
134 | CONFIG_IP_SET=m | ||
135 | CONFIG_IP_SET_BITMAP_IP=m | ||
136 | CONFIG_IP_SET_BITMAP_IPMAC=m | ||
137 | CONFIG_IP_SET_BITMAP_PORT=m | ||
138 | CONFIG_IP_SET_HASH_IP=m | ||
139 | CONFIG_IP_SET_HASH_IPPORT=m | ||
140 | CONFIG_IP_SET_HASH_IPPORTIP=m | ||
141 | CONFIG_IP_SET_HASH_IPPORTNET=m | ||
142 | CONFIG_IP_SET_HASH_NET=m | ||
143 | CONFIG_IP_SET_HASH_NETPORT=m | ||
144 | CONFIG_IP_SET_HASH_NETIFACE=m | ||
145 | CONFIG_IP_SET_LIST_SET=m | ||
99 | CONFIG_NF_CONNTRACK_IPV4=m | 146 | CONFIG_NF_CONNTRACK_IPV4=m |
100 | CONFIG_IP_NF_QUEUE=m | ||
101 | CONFIG_IP_NF_IPTABLES=m | 147 | CONFIG_IP_NF_IPTABLES=m |
102 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
103 | CONFIG_IP_NF_MATCH_AH=m | 148 | CONFIG_IP_NF_MATCH_AH=m |
104 | CONFIG_IP_NF_MATCH_ECN=m | 149 | CONFIG_IP_NF_MATCH_ECN=m |
150 | CONFIG_IP_NF_MATCH_RPFILTER=m | ||
105 | CONFIG_IP_NF_MATCH_TTL=m | 151 | CONFIG_IP_NF_MATCH_TTL=m |
106 | CONFIG_IP_NF_FILTER=m | 152 | CONFIG_IP_NF_FILTER=m |
107 | CONFIG_IP_NF_TARGET_REJECT=m | 153 | CONFIG_IP_NF_TARGET_REJECT=m |
108 | CONFIG_IP_NF_TARGET_LOG=m | ||
109 | CONFIG_IP_NF_TARGET_ULOG=m | 154 | CONFIG_IP_NF_TARGET_ULOG=m |
110 | CONFIG_NF_NAT=m | 155 | CONFIG_NF_NAT_IPV4=m |
111 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 156 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
112 | CONFIG_IP_NF_TARGET_NETMAP=m | 157 | CONFIG_IP_NF_TARGET_NETMAP=m |
113 | CONFIG_IP_NF_TARGET_REDIRECT=m | 158 | CONFIG_IP_NF_TARGET_REDIRECT=m |
114 | CONFIG_NF_NAT_SNMP_BASIC=m | ||
115 | CONFIG_IP_NF_MANGLE=m | 159 | CONFIG_IP_NF_MANGLE=m |
116 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | 160 | CONFIG_IP_NF_TARGET_CLUSTERIP=m |
117 | CONFIG_IP_NF_TARGET_ECN=m | 161 | CONFIG_IP_NF_TARGET_ECN=m |
@@ -121,7 +165,6 @@ CONFIG_IP_NF_ARPTABLES=m | |||
121 | CONFIG_IP_NF_ARPFILTER=m | 165 | CONFIG_IP_NF_ARPFILTER=m |
122 | CONFIG_IP_NF_ARP_MANGLE=m | 166 | CONFIG_IP_NF_ARP_MANGLE=m |
123 | CONFIG_NF_CONNTRACK_IPV6=m | 167 | CONFIG_NF_CONNTRACK_IPV6=m |
124 | CONFIG_IP6_NF_QUEUE=m | ||
125 | CONFIG_IP6_NF_IPTABLES=m | 168 | CONFIG_IP6_NF_IPTABLES=m |
126 | CONFIG_IP6_NF_MATCH_AH=m | 169 | CONFIG_IP6_NF_MATCH_AH=m |
127 | CONFIG_IP6_NF_MATCH_EUI64=m | 170 | CONFIG_IP6_NF_MATCH_EUI64=m |
@@ -130,21 +173,34 @@ CONFIG_IP6_NF_MATCH_OPTS=m | |||
130 | CONFIG_IP6_NF_MATCH_HL=m | 173 | CONFIG_IP6_NF_MATCH_HL=m |
131 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 174 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
132 | CONFIG_IP6_NF_MATCH_MH=m | 175 | CONFIG_IP6_NF_MATCH_MH=m |
176 | CONFIG_IP6_NF_MATCH_RPFILTER=m | ||
133 | CONFIG_IP6_NF_MATCH_RT=m | 177 | CONFIG_IP6_NF_MATCH_RT=m |
134 | CONFIG_IP6_NF_TARGET_HL=m | 178 | CONFIG_IP6_NF_TARGET_HL=m |
135 | CONFIG_IP6_NF_TARGET_LOG=m | ||
136 | CONFIG_IP6_NF_FILTER=m | 179 | CONFIG_IP6_NF_FILTER=m |
137 | CONFIG_IP6_NF_TARGET_REJECT=m | 180 | CONFIG_IP6_NF_TARGET_REJECT=m |
138 | CONFIG_IP6_NF_MANGLE=m | 181 | CONFIG_IP6_NF_MANGLE=m |
139 | CONFIG_IP6_NF_RAW=m | 182 | CONFIG_IP6_NF_RAW=m |
183 | CONFIG_NF_NAT_IPV6=m | ||
184 | CONFIG_IP6_NF_TARGET_MASQUERADE=m | ||
185 | CONFIG_IP6_NF_TARGET_NPT=m | ||
140 | CONFIG_IP_DCCP=m | 186 | CONFIG_IP_DCCP=m |
141 | # CONFIG_IP_DCCP_CCID3 is not set | 187 | # CONFIG_IP_DCCP_CCID3 is not set |
188 | CONFIG_SCTP_COOKIE_HMAC_SHA1=y | ||
189 | CONFIG_RDS=m | ||
190 | CONFIG_RDS_TCP=m | ||
191 | CONFIG_L2TP=m | ||
142 | CONFIG_ATALK=m | 192 | CONFIG_ATALK=m |
193 | CONFIG_BATMAN_ADV=m | ||
194 | CONFIG_BATMAN_ADV_DAT=y | ||
195 | # CONFIG_WIRELESS is not set | ||
143 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 196 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
197 | CONFIG_DEVTMPFS=y | ||
144 | # CONFIG_FIRMWARE_IN_KERNEL is not set | 198 | # CONFIG_FIRMWARE_IN_KERNEL is not set |
199 | # CONFIG_FW_LOADER_USER_HELPER is not set | ||
145 | CONFIG_CONNECTOR=m | 200 | CONFIG_CONNECTOR=m |
146 | CONFIG_BLK_DEV_LOOP=y | 201 | CONFIG_BLK_DEV_LOOP=y |
147 | CONFIG_BLK_DEV_CRYPTOLOOP=m | 202 | CONFIG_BLK_DEV_CRYPTOLOOP=m |
203 | CONFIG_BLK_DEV_DRBD=m | ||
148 | CONFIG_BLK_DEV_NBD=m | 204 | CONFIG_BLK_DEV_NBD=m |
149 | CONFIG_BLK_DEV_RAM=y | 205 | CONFIG_BLK_DEV_RAM=y |
150 | CONFIG_CDROM_PKTCDVD=m | 206 | CONFIG_CDROM_PKTCDVD=m |
@@ -159,103 +215,132 @@ CONFIG_BLK_DEV_SR=y | |||
159 | CONFIG_BLK_DEV_SR_VENDOR=y | 215 | CONFIG_BLK_DEV_SR_VENDOR=y |
160 | CONFIG_CHR_DEV_SG=m | 216 | CONFIG_CHR_DEV_SG=m |
161 | CONFIG_SCSI_CONSTANTS=y | 217 | CONFIG_SCSI_CONSTANTS=y |
162 | CONFIG_SCSI_SAS_LIBSAS=m | 218 | CONFIG_SCSI_SAS_ATTRS=m |
163 | # CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set | ||
164 | CONFIG_SCSI_SRP_ATTRS=m | ||
165 | CONFIG_SCSI_SRP_TGT_ATTRS=y | ||
166 | CONFIG_ISCSI_TCP=m | 219 | CONFIG_ISCSI_TCP=m |
220 | CONFIG_ISCSI_BOOT_SYSFS=m | ||
167 | CONFIG_MVME147_SCSI=y | 221 | CONFIG_MVME147_SCSI=y |
168 | CONFIG_MD=y | 222 | CONFIG_MD=y |
169 | CONFIG_BLK_DEV_MD=m | ||
170 | CONFIG_MD_LINEAR=m | 223 | CONFIG_MD_LINEAR=m |
171 | CONFIG_MD_RAID0=m | 224 | CONFIG_MD_RAID0=m |
172 | CONFIG_MD_RAID1=m | ||
173 | CONFIG_MD_RAID456=m | ||
174 | CONFIG_BLK_DEV_DM=m | 225 | CONFIG_BLK_DEV_DM=m |
175 | CONFIG_DM_CRYPT=m | 226 | CONFIG_DM_CRYPT=m |
176 | CONFIG_DM_SNAPSHOT=m | 227 | CONFIG_DM_SNAPSHOT=m |
228 | CONFIG_DM_THIN_PROVISIONING=m | ||
229 | CONFIG_DM_CACHE=m | ||
177 | CONFIG_DM_MIRROR=m | 230 | CONFIG_DM_MIRROR=m |
231 | CONFIG_DM_RAID=m | ||
178 | CONFIG_DM_ZERO=m | 232 | CONFIG_DM_ZERO=m |
179 | CONFIG_DM_MULTIPATH=m | 233 | CONFIG_DM_MULTIPATH=m |
180 | CONFIG_DM_UEVENT=y | 234 | CONFIG_DM_UEVENT=y |
235 | CONFIG_TARGET_CORE=m | ||
236 | CONFIG_TCM_IBLOCK=m | ||
237 | CONFIG_TCM_FILEIO=m | ||
238 | CONFIG_TCM_PSCSI=m | ||
181 | CONFIG_NETDEVICES=y | 239 | CONFIG_NETDEVICES=y |
182 | CONFIG_DUMMY=m | 240 | CONFIG_DUMMY=m |
183 | CONFIG_MACVLAN=m | ||
184 | CONFIG_EQUALIZER=m | 241 | CONFIG_EQUALIZER=m |
242 | CONFIG_NET_TEAM=m | ||
243 | CONFIG_NET_TEAM_MODE_BROADCAST=m | ||
244 | CONFIG_NET_TEAM_MODE_ROUNDROBIN=m | ||
245 | CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m | ||
246 | CONFIG_NET_TEAM_MODE_LOADBALANCE=m | ||
247 | CONFIG_VXLAN=m | ||
248 | CONFIG_NETCONSOLE=m | ||
249 | CONFIG_NETCONSOLE_DYNAMIC=y | ||
185 | CONFIG_VETH=m | 250 | CONFIG_VETH=m |
186 | CONFIG_NET_ETHERNET=y | ||
187 | CONFIG_MVME147_NET=y | 251 | CONFIG_MVME147_NET=y |
188 | # CONFIG_NETDEV_1000 is not set | 252 | # CONFIG_NET_CADENCE is not set |
189 | # CONFIG_NETDEV_10000 is not set | 253 | # CONFIG_NET_VENDOR_BROADCOM is not set |
254 | # CONFIG_NET_VENDOR_INTEL is not set | ||
255 | # CONFIG_NET_VENDOR_MARVELL is not set | ||
256 | # CONFIG_NET_VENDOR_MICREL is not set | ||
257 | # CONFIG_NET_VENDOR_NATSEMI is not set | ||
258 | # CONFIG_NET_VENDOR_SEEQ is not set | ||
259 | # CONFIG_NET_VENDOR_STMICRO is not set | ||
260 | # CONFIG_NET_VENDOR_WIZNET is not set | ||
190 | CONFIG_PPP=m | 261 | CONFIG_PPP=m |
191 | CONFIG_PPP_FILTER=y | ||
192 | CONFIG_PPP_ASYNC=m | ||
193 | CONFIG_PPP_SYNC_TTY=m | ||
194 | CONFIG_PPP_DEFLATE=m | ||
195 | CONFIG_PPP_BSDCOMP=m | 262 | CONFIG_PPP_BSDCOMP=m |
263 | CONFIG_PPP_DEFLATE=m | ||
264 | CONFIG_PPP_FILTER=y | ||
196 | CONFIG_PPP_MPPE=m | 265 | CONFIG_PPP_MPPE=m |
197 | CONFIG_PPPOE=m | 266 | CONFIG_PPPOE=m |
267 | CONFIG_PPTP=m | ||
268 | CONFIG_PPPOL2TP=m | ||
269 | CONFIG_PPP_ASYNC=m | ||
270 | CONFIG_PPP_SYNC_TTY=m | ||
198 | CONFIG_SLIP=m | 271 | CONFIG_SLIP=m |
199 | CONFIG_SLIP_COMPRESSED=y | 272 | CONFIG_SLIP_COMPRESSED=y |
200 | CONFIG_SLIP_SMART=y | 273 | CONFIG_SLIP_SMART=y |
201 | CONFIG_SLIP_MODE_SLIP6=y | 274 | CONFIG_SLIP_MODE_SLIP6=y |
202 | CONFIG_NETCONSOLE=m | 275 | # CONFIG_WLAN is not set |
203 | CONFIG_NETCONSOLE_DYNAMIC=y | 276 | CONFIG_INPUT_EVDEV=m |
204 | CONFIG_INPUT_FF_MEMLESS=m | ||
205 | # CONFIG_KEYBOARD_ATKBD is not set | 277 | # CONFIG_KEYBOARD_ATKBD is not set |
206 | CONFIG_MOUSE_PS2=m | 278 | # CONFIG_MOUSE_PS2 is not set |
207 | CONFIG_MOUSE_SERIAL=m | 279 | # CONFIG_SERIO is not set |
208 | CONFIG_SERIO=m | ||
209 | # CONFIG_SERIO_SERPORT is not set | ||
210 | CONFIG_VT_HW_CONSOLE_BINDING=y | 280 | CONFIG_VT_HW_CONSOLE_BINDING=y |
281 | # CONFIG_LEGACY_PTYS is not set | ||
211 | # CONFIG_DEVKMEM is not set | 282 | # CONFIG_DEVKMEM is not set |
212 | # CONFIG_HW_RANDOM is not set | 283 | # CONFIG_HW_RANDOM is not set |
213 | CONFIG_GEN_RTC=m | 284 | CONFIG_NTP_PPS=y |
214 | CONFIG_GEN_RTC_X=y | 285 | CONFIG_PPS_CLIENT_LDISC=m |
286 | CONFIG_PTP_1588_CLOCK=m | ||
215 | # CONFIG_HWMON is not set | 287 | # CONFIG_HWMON is not set |
216 | CONFIG_HID=m | 288 | CONFIG_HID=m |
217 | CONFIG_HIDRAW=y | 289 | CONFIG_HIDRAW=y |
290 | CONFIG_UHID=m | ||
291 | # CONFIG_HID_GENERIC is not set | ||
218 | # CONFIG_USB_SUPPORT is not set | 292 | # CONFIG_USB_SUPPORT is not set |
293 | CONFIG_RTC_CLASS=y | ||
294 | CONFIG_RTC_DRV_GENERIC=m | ||
295 | # CONFIG_IOMMU_SUPPORT is not set | ||
296 | CONFIG_PROC_HARDWARE=y | ||
219 | CONFIG_EXT2_FS=y | 297 | CONFIG_EXT2_FS=y |
220 | CONFIG_EXT3_FS=y | 298 | CONFIG_EXT3_FS=y |
221 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | 299 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set |
222 | # CONFIG_EXT3_FS_XATTR is not set | 300 | # CONFIG_EXT3_FS_XATTR is not set |
301 | CONFIG_EXT4_FS=y | ||
223 | CONFIG_REISERFS_FS=m | 302 | CONFIG_REISERFS_FS=m |
224 | CONFIG_JFS_FS=m | 303 | CONFIG_JFS_FS=m |
225 | CONFIG_XFS_FS=m | 304 | CONFIG_XFS_FS=m |
226 | CONFIG_OCFS2_FS=m | 305 | CONFIG_OCFS2_FS=m |
227 | # CONFIG_OCFS2_FS_STATS is not set | ||
228 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 306 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
307 | CONFIG_FANOTIFY=y | ||
229 | CONFIG_QUOTA_NETLINK_INTERFACE=y | 308 | CONFIG_QUOTA_NETLINK_INTERFACE=y |
230 | # CONFIG_PRINT_QUOTA_WARNING is not set | 309 | # CONFIG_PRINT_QUOTA_WARNING is not set |
231 | CONFIG_AUTOFS_FS=m | ||
232 | CONFIG_AUTOFS4_FS=m | 310 | CONFIG_AUTOFS4_FS=m |
233 | CONFIG_FUSE_FS=m | 311 | CONFIG_FUSE_FS=m |
312 | CONFIG_CUSE=m | ||
234 | CONFIG_ISO9660_FS=y | 313 | CONFIG_ISO9660_FS=y |
235 | CONFIG_JOLIET=y | 314 | CONFIG_JOLIET=y |
236 | CONFIG_ZISOFS=y | 315 | CONFIG_ZISOFS=y |
237 | CONFIG_UDF_FS=m | 316 | CONFIG_UDF_FS=m |
238 | CONFIG_MSDOS_FS=y | 317 | CONFIG_MSDOS_FS=m |
239 | CONFIG_VFAT_FS=m | 318 | CONFIG_VFAT_FS=m |
240 | CONFIG_PROC_KCORE=y | 319 | CONFIG_PROC_KCORE=y |
241 | CONFIG_TMPFS=y | 320 | CONFIG_TMPFS=y |
242 | CONFIG_AFFS_FS=m | 321 | CONFIG_AFFS_FS=m |
322 | CONFIG_ECRYPT_FS=m | ||
323 | CONFIG_ECRYPT_FS_MESSAGING=y | ||
243 | CONFIG_HFS_FS=m | 324 | CONFIG_HFS_FS=m |
244 | CONFIG_HFSPLUS_FS=m | 325 | CONFIG_HFSPLUS_FS=m |
245 | CONFIG_CRAMFS=m | 326 | CONFIG_CRAMFS=m |
246 | CONFIG_SQUASHFS=m | 327 | CONFIG_SQUASHFS=m |
247 | CONFIG_MINIX_FS=y | 328 | CONFIG_SQUASHFS_LZO=y |
329 | CONFIG_MINIX_FS=m | ||
330 | CONFIG_OMFS_FS=m | ||
248 | CONFIG_HPFS_FS=m | 331 | CONFIG_HPFS_FS=m |
332 | CONFIG_QNX4FS_FS=m | ||
333 | CONFIG_QNX6FS_FS=m | ||
249 | CONFIG_SYSV_FS=m | 334 | CONFIG_SYSV_FS=m |
250 | CONFIG_UFS_FS=m | 335 | CONFIG_UFS_FS=m |
251 | CONFIG_NFS_FS=y | 336 | CONFIG_NFS_FS=y |
252 | CONFIG_NFS_V3=y | ||
253 | CONFIG_NFS_V4=y | 337 | CONFIG_NFS_V4=y |
338 | CONFIG_NFS_SWAP=y | ||
254 | CONFIG_ROOT_NFS=y | 339 | CONFIG_ROOT_NFS=y |
255 | CONFIG_NFSD=m | 340 | CONFIG_NFSD=m |
256 | CONFIG_NFSD_V3=y | 341 | CONFIG_NFSD_V3=y |
257 | CONFIG_SMB_FS=m | 342 | CONFIG_CIFS=m |
258 | CONFIG_SMB_NLS_DEFAULT=y | 343 | # CONFIG_CIFS_DEBUG is not set |
259 | CONFIG_CODA_FS=m | 344 | CONFIG_CODA_FS=m |
260 | CONFIG_NLS_CODEPAGE_437=y | 345 | CONFIG_NLS_CODEPAGE_437=y |
261 | CONFIG_NLS_CODEPAGE_737=m | 346 | CONFIG_NLS_CODEPAGE_737=m |
@@ -294,10 +379,23 @@ CONFIG_NLS_ISO8859_14=m | |||
294 | CONFIG_NLS_ISO8859_15=m | 379 | CONFIG_NLS_ISO8859_15=m |
295 | CONFIG_NLS_KOI8_R=m | 380 | CONFIG_NLS_KOI8_R=m |
296 | CONFIG_NLS_KOI8_U=m | 381 | CONFIG_NLS_KOI8_U=m |
382 | CONFIG_NLS_MAC_ROMAN=m | ||
383 | CONFIG_NLS_MAC_CELTIC=m | ||
384 | CONFIG_NLS_MAC_CENTEURO=m | ||
385 | CONFIG_NLS_MAC_CROATIAN=m | ||
386 | CONFIG_NLS_MAC_CYRILLIC=m | ||
387 | CONFIG_NLS_MAC_GAELIC=m | ||
388 | CONFIG_NLS_MAC_GREEK=m | ||
389 | CONFIG_NLS_MAC_ICELAND=m | ||
390 | CONFIG_NLS_MAC_INUIT=m | ||
391 | CONFIG_NLS_MAC_ROMANIAN=m | ||
392 | CONFIG_NLS_MAC_TURKISH=m | ||
297 | CONFIG_DLM=m | 393 | CONFIG_DLM=m |
298 | CONFIG_MAGIC_SYSRQ=y | 394 | CONFIG_MAGIC_SYSRQ=y |
299 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 395 | CONFIG_ASYNC_RAID6_TEST=m |
300 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 396 | CONFIG_ENCRYPTED_KEYS=m |
397 | CONFIG_CRYPTO_MANAGER=y | ||
398 | CONFIG_CRYPTO_USER=m | ||
301 | CONFIG_CRYPTO_NULL=m | 399 | CONFIG_CRYPTO_NULL=m |
302 | CONFIG_CRYPTO_CRYPTD=m | 400 | CONFIG_CRYPTO_CRYPTD=m |
303 | CONFIG_CRYPTO_TEST=m | 401 | CONFIG_CRYPTO_TEST=m |
@@ -307,19 +405,16 @@ CONFIG_CRYPTO_CTS=m | |||
307 | CONFIG_CRYPTO_LRW=m | 405 | CONFIG_CRYPTO_LRW=m |
308 | CONFIG_CRYPTO_PCBC=m | 406 | CONFIG_CRYPTO_PCBC=m |
309 | CONFIG_CRYPTO_XTS=m | 407 | CONFIG_CRYPTO_XTS=m |
310 | CONFIG_CRYPTO_HMAC=y | ||
311 | CONFIG_CRYPTO_XCBC=m | 408 | CONFIG_CRYPTO_XCBC=m |
312 | CONFIG_CRYPTO_MD4=m | 409 | CONFIG_CRYPTO_VMAC=m |
313 | CONFIG_CRYPTO_MICHAEL_MIC=m | 410 | CONFIG_CRYPTO_MICHAEL_MIC=m |
314 | CONFIG_CRYPTO_RMD128=m | 411 | CONFIG_CRYPTO_RMD128=m |
315 | CONFIG_CRYPTO_RMD160=m | 412 | CONFIG_CRYPTO_RMD160=m |
316 | CONFIG_CRYPTO_RMD256=m | 413 | CONFIG_CRYPTO_RMD256=m |
317 | CONFIG_CRYPTO_RMD320=m | 414 | CONFIG_CRYPTO_RMD320=m |
318 | CONFIG_CRYPTO_SHA256=m | ||
319 | CONFIG_CRYPTO_SHA512=m | 415 | CONFIG_CRYPTO_SHA512=m |
320 | CONFIG_CRYPTO_TGR192=m | 416 | CONFIG_CRYPTO_TGR192=m |
321 | CONFIG_CRYPTO_WP512=m | 417 | CONFIG_CRYPTO_WP512=m |
322 | CONFIG_CRYPTO_AES=m | ||
323 | CONFIG_CRYPTO_ANUBIS=m | 418 | CONFIG_CRYPTO_ANUBIS=m |
324 | CONFIG_CRYPTO_BLOWFISH=m | 419 | CONFIG_CRYPTO_BLOWFISH=m |
325 | CONFIG_CRYPTO_CAMELLIA=m | 420 | CONFIG_CRYPTO_CAMELLIA=m |
@@ -335,6 +430,14 @@ CONFIG_CRYPTO_TWOFISH=m | |||
335 | CONFIG_CRYPTO_ZLIB=m | 430 | CONFIG_CRYPTO_ZLIB=m |
336 | CONFIG_CRYPTO_LZO=m | 431 | CONFIG_CRYPTO_LZO=m |
337 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 432 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
433 | CONFIG_CRYPTO_USER_API_HASH=m | ||
434 | CONFIG_CRYPTO_USER_API_SKCIPHER=m | ||
338 | # CONFIG_CRYPTO_HW is not set | 435 | # CONFIG_CRYPTO_HW is not set |
339 | CONFIG_CRC16=m | ||
340 | CONFIG_CRC_T10DIF=y | 436 | CONFIG_CRC_T10DIF=y |
437 | CONFIG_XZ_DEC_X86=y | ||
438 | CONFIG_XZ_DEC_POWERPC=y | ||
439 | CONFIG_XZ_DEC_IA64=y | ||
440 | CONFIG_XZ_DEC_ARM=y | ||
441 | CONFIG_XZ_DEC_ARMTHUMB=y | ||
442 | CONFIG_XZ_DEC_SPARC=y | ||
443 | CONFIG_XZ_DEC_TEST=m | ||
diff --git a/arch/m68k/configs/mvme16x_defconfig b/arch/m68k/configs/mvme16x_defconfig index 7c9402b2097f..e5e8262bbacd 100644 --- a/arch/m68k/configs/mvme16x_defconfig +++ b/arch/m68k/configs/mvme16x_defconfig | |||
@@ -1,53 +1,74 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | ||
2 | CONFIG_LOCALVERSION="-mvme16x" | 1 | CONFIG_LOCALVERSION="-mvme16x" |
3 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
4 | CONFIG_POSIX_MQUEUE=y | 3 | CONFIG_POSIX_MQUEUE=y |
4 | CONFIG_FHANDLE=y | ||
5 | CONFIG_BSD_PROCESS_ACCT=y | 5 | CONFIG_BSD_PROCESS_ACCT=y |
6 | CONFIG_LOG_BUF_SHIFT=14 | 6 | CONFIG_BSD_PROCESS_ACCT_V3=y |
7 | CONFIG_RELAY=y | 7 | CONFIG_LOG_BUF_SHIFT=16 |
8 | # CONFIG_UTS_NS is not set | ||
9 | # CONFIG_IPC_NS is not set | ||
10 | # CONFIG_PID_NS is not set | ||
11 | # CONFIG_NET_NS is not set | ||
8 | CONFIG_BLK_DEV_INITRD=y | 12 | CONFIG_BLK_DEV_INITRD=y |
9 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
10 | CONFIG_SLAB=y | 13 | CONFIG_SLAB=y |
11 | CONFIG_MODULES=y | 14 | CONFIG_MODULES=y |
12 | CONFIG_MODULE_UNLOAD=y | 15 | CONFIG_MODULE_UNLOAD=y |
13 | CONFIG_VME=y | 16 | CONFIG_PARTITION_ADVANCED=y |
14 | CONFIG_MVME16x=y | 17 | CONFIG_AMIGA_PARTITION=y |
18 | CONFIG_ATARI_PARTITION=y | ||
19 | CONFIG_MAC_PARTITION=y | ||
20 | CONFIG_BSD_DISKLABEL=y | ||
21 | CONFIG_MINIX_SUBPARTITION=y | ||
22 | CONFIG_SOLARIS_X86_PARTITION=y | ||
23 | CONFIG_UNIXWARE_DISKLABEL=y | ||
24 | CONFIG_SUN_PARTITION=y | ||
25 | # CONFIG_EFI_PARTITION is not set | ||
26 | CONFIG_IOSCHED_DEADLINE=m | ||
15 | CONFIG_M68040=y | 27 | CONFIG_M68040=y |
16 | CONFIG_M68060=y | 28 | CONFIG_M68060=y |
29 | CONFIG_VME=y | ||
30 | CONFIG_MVME16x=y | ||
31 | # CONFIG_COMPACTION is not set | ||
32 | CONFIG_CLEANCACHE=y | ||
33 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
17 | CONFIG_BINFMT_AOUT=m | 34 | CONFIG_BINFMT_AOUT=m |
18 | CONFIG_BINFMT_MISC=m | 35 | CONFIG_BINFMT_MISC=m |
19 | CONFIG_PROC_HARDWARE=y | ||
20 | CONFIG_NET=y | 36 | CONFIG_NET=y |
21 | CONFIG_PACKET=y | 37 | CONFIG_PACKET=y |
38 | CONFIG_PACKET_DIAG=m | ||
22 | CONFIG_UNIX=y | 39 | CONFIG_UNIX=y |
40 | CONFIG_UNIX_DIAG=m | ||
41 | CONFIG_XFRM_MIGRATE=y | ||
23 | CONFIG_NET_KEY=y | 42 | CONFIG_NET_KEY=y |
24 | CONFIG_NET_KEY_MIGRATE=y | ||
25 | CONFIG_INET=y | 43 | CONFIG_INET=y |
26 | CONFIG_IP_PNP=y | 44 | CONFIG_IP_PNP=y |
27 | CONFIG_IP_PNP_DHCP=y | 45 | CONFIG_IP_PNP_DHCP=y |
28 | CONFIG_IP_PNP_BOOTP=y | 46 | CONFIG_IP_PNP_BOOTP=y |
29 | CONFIG_IP_PNP_RARP=y | 47 | CONFIG_IP_PNP_RARP=y |
30 | CONFIG_NET_IPIP=m | 48 | CONFIG_NET_IPIP=m |
49 | CONFIG_NET_IPGRE_DEMUX=m | ||
31 | CONFIG_NET_IPGRE=m | 50 | CONFIG_NET_IPGRE=m |
32 | CONFIG_SYN_COOKIES=y | 51 | CONFIG_SYN_COOKIES=y |
52 | CONFIG_NET_IPVTI=m | ||
33 | CONFIG_INET_AH=m | 53 | CONFIG_INET_AH=m |
34 | CONFIG_INET_ESP=m | 54 | CONFIG_INET_ESP=m |
35 | CONFIG_INET_IPCOMP=m | 55 | CONFIG_INET_IPCOMP=m |
36 | CONFIG_INET_XFRM_MODE_TRANSPORT=m | 56 | CONFIG_INET_XFRM_MODE_TRANSPORT=m |
37 | CONFIG_INET_XFRM_MODE_TUNNEL=m | 57 | CONFIG_INET_XFRM_MODE_TUNNEL=m |
38 | CONFIG_INET_XFRM_MODE_BEET=m | 58 | CONFIG_INET_XFRM_MODE_BEET=m |
59 | # CONFIG_INET_LRO is not set | ||
39 | CONFIG_INET_DIAG=m | 60 | CONFIG_INET_DIAG=m |
61 | CONFIG_INET_UDP_DIAG=m | ||
40 | CONFIG_IPV6_PRIVACY=y | 62 | CONFIG_IPV6_PRIVACY=y |
41 | CONFIG_IPV6_ROUTER_PREF=y | 63 | CONFIG_IPV6_ROUTER_PREF=y |
42 | CONFIG_IPV6_ROUTE_INFO=y | ||
43 | CONFIG_INET6_AH=m | 64 | CONFIG_INET6_AH=m |
44 | CONFIG_INET6_ESP=m | 65 | CONFIG_INET6_ESP=m |
45 | CONFIG_INET6_IPCOMP=m | 66 | CONFIG_INET6_IPCOMP=m |
46 | CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m | 67 | CONFIG_IPV6_GRE=m |
47 | CONFIG_IPV6_TUNNEL=m | ||
48 | CONFIG_NETFILTER=y | 68 | CONFIG_NETFILTER=y |
49 | CONFIG_NETFILTER_NETLINK_QUEUE=m | ||
50 | CONFIG_NF_CONNTRACK=m | 69 | CONFIG_NF_CONNTRACK=m |
70 | CONFIG_NF_CONNTRACK_ZONES=y | ||
71 | # CONFIG_NF_CONNTRACK_PROCFS is not set | ||
51 | # CONFIG_NF_CT_PROTO_DCCP is not set | 72 | # CONFIG_NF_CT_PROTO_DCCP is not set |
52 | CONFIG_NF_CT_PROTO_UDPLITE=m | 73 | CONFIG_NF_CT_PROTO_UDPLITE=m |
53 | CONFIG_NF_CONNTRACK_AMANDA=m | 74 | CONFIG_NF_CONNTRACK_AMANDA=m |
@@ -55,25 +76,37 @@ CONFIG_NF_CONNTRACK_FTP=m | |||
55 | CONFIG_NF_CONNTRACK_H323=m | 76 | CONFIG_NF_CONNTRACK_H323=m |
56 | CONFIG_NF_CONNTRACK_IRC=m | 77 | CONFIG_NF_CONNTRACK_IRC=m |
57 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m | 78 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m |
79 | CONFIG_NF_CONNTRACK_SNMP=m | ||
58 | CONFIG_NF_CONNTRACK_PPTP=m | 80 | CONFIG_NF_CONNTRACK_PPTP=m |
59 | CONFIG_NF_CONNTRACK_SANE=m | 81 | CONFIG_NF_CONNTRACK_SANE=m |
60 | CONFIG_NF_CONNTRACK_SIP=m | 82 | CONFIG_NF_CONNTRACK_SIP=m |
61 | CONFIG_NF_CONNTRACK_TFTP=m | 83 | CONFIG_NF_CONNTRACK_TFTP=m |
84 | CONFIG_NETFILTER_XT_SET=m | ||
85 | CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m | ||
62 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 86 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
63 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 87 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
64 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | 88 | CONFIG_NETFILTER_XT_TARGET_DSCP=m |
89 | CONFIG_NETFILTER_XT_TARGET_HMARK=m | ||
90 | CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m | ||
91 | CONFIG_NETFILTER_XT_TARGET_LOG=m | ||
65 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 92 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
66 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 93 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
67 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | 94 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m |
95 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | ||
96 | CONFIG_NETFILTER_XT_TARGET_TEE=m | ||
68 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | 97 | CONFIG_NETFILTER_XT_TARGET_TRACE=m |
69 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m | 98 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m |
70 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m | 99 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m |
100 | CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m | ||
101 | CONFIG_NETFILTER_XT_MATCH_BPF=m | ||
71 | CONFIG_NETFILTER_XT_MATCH_CLUSTER=m | 102 | CONFIG_NETFILTER_XT_MATCH_CLUSTER=m |
72 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m | 103 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m |
73 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m | 104 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m |
105 | CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m | ||
74 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m | 106 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m |
75 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m | 107 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m |
76 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | 108 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m |
109 | CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m | ||
77 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | 110 | CONFIG_NETFILTER_XT_MATCH_DSCP=m |
78 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 111 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
79 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | 112 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m |
@@ -84,6 +117,8 @@ CONFIG_NETFILTER_XT_MATCH_LIMIT=m | |||
84 | CONFIG_NETFILTER_XT_MATCH_MAC=m | 117 | CONFIG_NETFILTER_XT_MATCH_MAC=m |
85 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 118 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
86 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | 119 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m |
120 | CONFIG_NETFILTER_XT_MATCH_NFACCT=m | ||
121 | CONFIG_NETFILTER_XT_MATCH_OSF=m | ||
87 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | 122 | CONFIG_NETFILTER_XT_MATCH_OWNER=m |
88 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 123 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
89 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 124 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
@@ -97,22 +132,31 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m | |||
97 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 132 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
98 | CONFIG_NETFILTER_XT_MATCH_TIME=m | 133 | CONFIG_NETFILTER_XT_MATCH_TIME=m |
99 | CONFIG_NETFILTER_XT_MATCH_U32=m | 134 | CONFIG_NETFILTER_XT_MATCH_U32=m |
135 | CONFIG_IP_SET=m | ||
136 | CONFIG_IP_SET_BITMAP_IP=m | ||
137 | CONFIG_IP_SET_BITMAP_IPMAC=m | ||
138 | CONFIG_IP_SET_BITMAP_PORT=m | ||
139 | CONFIG_IP_SET_HASH_IP=m | ||
140 | CONFIG_IP_SET_HASH_IPPORT=m | ||
141 | CONFIG_IP_SET_HASH_IPPORTIP=m | ||
142 | CONFIG_IP_SET_HASH_IPPORTNET=m | ||
143 | CONFIG_IP_SET_HASH_NET=m | ||
144 | CONFIG_IP_SET_HASH_NETPORT=m | ||
145 | CONFIG_IP_SET_HASH_NETIFACE=m | ||
146 | CONFIG_IP_SET_LIST_SET=m | ||
100 | CONFIG_NF_CONNTRACK_IPV4=m | 147 | CONFIG_NF_CONNTRACK_IPV4=m |
101 | CONFIG_IP_NF_QUEUE=m | ||
102 | CONFIG_IP_NF_IPTABLES=m | 148 | CONFIG_IP_NF_IPTABLES=m |
103 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
104 | CONFIG_IP_NF_MATCH_AH=m | 149 | CONFIG_IP_NF_MATCH_AH=m |
105 | CONFIG_IP_NF_MATCH_ECN=m | 150 | CONFIG_IP_NF_MATCH_ECN=m |
151 | CONFIG_IP_NF_MATCH_RPFILTER=m | ||
106 | CONFIG_IP_NF_MATCH_TTL=m | 152 | CONFIG_IP_NF_MATCH_TTL=m |
107 | CONFIG_IP_NF_FILTER=m | 153 | CONFIG_IP_NF_FILTER=m |
108 | CONFIG_IP_NF_TARGET_REJECT=m | 154 | CONFIG_IP_NF_TARGET_REJECT=m |
109 | CONFIG_IP_NF_TARGET_LOG=m | ||
110 | CONFIG_IP_NF_TARGET_ULOG=m | 155 | CONFIG_IP_NF_TARGET_ULOG=m |
111 | CONFIG_NF_NAT=m | 156 | CONFIG_NF_NAT_IPV4=m |
112 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 157 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
113 | CONFIG_IP_NF_TARGET_NETMAP=m | 158 | CONFIG_IP_NF_TARGET_NETMAP=m |
114 | CONFIG_IP_NF_TARGET_REDIRECT=m | 159 | CONFIG_IP_NF_TARGET_REDIRECT=m |
115 | CONFIG_NF_NAT_SNMP_BASIC=m | ||
116 | CONFIG_IP_NF_MANGLE=m | 160 | CONFIG_IP_NF_MANGLE=m |
117 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | 161 | CONFIG_IP_NF_TARGET_CLUSTERIP=m |
118 | CONFIG_IP_NF_TARGET_ECN=m | 162 | CONFIG_IP_NF_TARGET_ECN=m |
@@ -122,7 +166,6 @@ CONFIG_IP_NF_ARPTABLES=m | |||
122 | CONFIG_IP_NF_ARPFILTER=m | 166 | CONFIG_IP_NF_ARPFILTER=m |
123 | CONFIG_IP_NF_ARP_MANGLE=m | 167 | CONFIG_IP_NF_ARP_MANGLE=m |
124 | CONFIG_NF_CONNTRACK_IPV6=m | 168 | CONFIG_NF_CONNTRACK_IPV6=m |
125 | CONFIG_IP6_NF_QUEUE=m | ||
126 | CONFIG_IP6_NF_IPTABLES=m | 169 | CONFIG_IP6_NF_IPTABLES=m |
127 | CONFIG_IP6_NF_MATCH_AH=m | 170 | CONFIG_IP6_NF_MATCH_AH=m |
128 | CONFIG_IP6_NF_MATCH_EUI64=m | 171 | CONFIG_IP6_NF_MATCH_EUI64=m |
@@ -131,21 +174,34 @@ CONFIG_IP6_NF_MATCH_OPTS=m | |||
131 | CONFIG_IP6_NF_MATCH_HL=m | 174 | CONFIG_IP6_NF_MATCH_HL=m |
132 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 175 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
133 | CONFIG_IP6_NF_MATCH_MH=m | 176 | CONFIG_IP6_NF_MATCH_MH=m |
177 | CONFIG_IP6_NF_MATCH_RPFILTER=m | ||
134 | CONFIG_IP6_NF_MATCH_RT=m | 178 | CONFIG_IP6_NF_MATCH_RT=m |
135 | CONFIG_IP6_NF_TARGET_HL=m | 179 | CONFIG_IP6_NF_TARGET_HL=m |
136 | CONFIG_IP6_NF_TARGET_LOG=m | ||
137 | CONFIG_IP6_NF_FILTER=m | 180 | CONFIG_IP6_NF_FILTER=m |
138 | CONFIG_IP6_NF_TARGET_REJECT=m | 181 | CONFIG_IP6_NF_TARGET_REJECT=m |
139 | CONFIG_IP6_NF_MANGLE=m | 182 | CONFIG_IP6_NF_MANGLE=m |
140 | CONFIG_IP6_NF_RAW=m | 183 | CONFIG_IP6_NF_RAW=m |
184 | CONFIG_NF_NAT_IPV6=m | ||
185 | CONFIG_IP6_NF_TARGET_MASQUERADE=m | ||
186 | CONFIG_IP6_NF_TARGET_NPT=m | ||
141 | CONFIG_IP_DCCP=m | 187 | CONFIG_IP_DCCP=m |
142 | # CONFIG_IP_DCCP_CCID3 is not set | 188 | # CONFIG_IP_DCCP_CCID3 is not set |
189 | CONFIG_SCTP_COOKIE_HMAC_SHA1=y | ||
190 | CONFIG_RDS=m | ||
191 | CONFIG_RDS_TCP=m | ||
192 | CONFIG_L2TP=m | ||
143 | CONFIG_ATALK=m | 193 | CONFIG_ATALK=m |
194 | CONFIG_BATMAN_ADV=m | ||
195 | CONFIG_BATMAN_ADV_DAT=y | ||
196 | # CONFIG_WIRELESS is not set | ||
144 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 197 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
198 | CONFIG_DEVTMPFS=y | ||
145 | # CONFIG_FIRMWARE_IN_KERNEL is not set | 199 | # CONFIG_FIRMWARE_IN_KERNEL is not set |
200 | # CONFIG_FW_LOADER_USER_HELPER is not set | ||
146 | CONFIG_CONNECTOR=m | 201 | CONFIG_CONNECTOR=m |
147 | CONFIG_BLK_DEV_LOOP=y | 202 | CONFIG_BLK_DEV_LOOP=y |
148 | CONFIG_BLK_DEV_CRYPTOLOOP=m | 203 | CONFIG_BLK_DEV_CRYPTOLOOP=m |
204 | CONFIG_BLK_DEV_DRBD=m | ||
149 | CONFIG_BLK_DEV_NBD=m | 205 | CONFIG_BLK_DEV_NBD=m |
150 | CONFIG_BLK_DEV_RAM=y | 206 | CONFIG_BLK_DEV_RAM=y |
151 | CONFIG_CDROM_PKTCDVD=m | 207 | CONFIG_CDROM_PKTCDVD=m |
@@ -160,103 +216,131 @@ CONFIG_BLK_DEV_SR=y | |||
160 | CONFIG_BLK_DEV_SR_VENDOR=y | 216 | CONFIG_BLK_DEV_SR_VENDOR=y |
161 | CONFIG_CHR_DEV_SG=m | 217 | CONFIG_CHR_DEV_SG=m |
162 | CONFIG_SCSI_CONSTANTS=y | 218 | CONFIG_SCSI_CONSTANTS=y |
163 | CONFIG_SCSI_SAS_LIBSAS=m | 219 | CONFIG_SCSI_SAS_ATTRS=m |
164 | # CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set | ||
165 | CONFIG_SCSI_SRP_ATTRS=m | ||
166 | CONFIG_SCSI_SRP_TGT_ATTRS=y | ||
167 | CONFIG_ISCSI_TCP=m | 220 | CONFIG_ISCSI_TCP=m |
221 | CONFIG_ISCSI_BOOT_SYSFS=m | ||
168 | CONFIG_MVME16x_SCSI=y | 222 | CONFIG_MVME16x_SCSI=y |
169 | CONFIG_MD=y | 223 | CONFIG_MD=y |
170 | CONFIG_BLK_DEV_MD=m | ||
171 | CONFIG_MD_LINEAR=m | 224 | CONFIG_MD_LINEAR=m |
172 | CONFIG_MD_RAID0=m | 225 | CONFIG_MD_RAID0=m |
173 | CONFIG_MD_RAID1=m | ||
174 | CONFIG_MD_RAID456=m | ||
175 | CONFIG_BLK_DEV_DM=m | 226 | CONFIG_BLK_DEV_DM=m |
176 | CONFIG_DM_CRYPT=m | 227 | CONFIG_DM_CRYPT=m |
177 | CONFIG_DM_SNAPSHOT=m | 228 | CONFIG_DM_SNAPSHOT=m |
229 | CONFIG_DM_THIN_PROVISIONING=m | ||
230 | CONFIG_DM_CACHE=m | ||
178 | CONFIG_DM_MIRROR=m | 231 | CONFIG_DM_MIRROR=m |
232 | CONFIG_DM_RAID=m | ||
179 | CONFIG_DM_ZERO=m | 233 | CONFIG_DM_ZERO=m |
180 | CONFIG_DM_MULTIPATH=m | 234 | CONFIG_DM_MULTIPATH=m |
181 | CONFIG_DM_UEVENT=y | 235 | CONFIG_DM_UEVENT=y |
236 | CONFIG_TARGET_CORE=m | ||
237 | CONFIG_TCM_IBLOCK=m | ||
238 | CONFIG_TCM_FILEIO=m | ||
239 | CONFIG_TCM_PSCSI=m | ||
182 | CONFIG_NETDEVICES=y | 240 | CONFIG_NETDEVICES=y |
183 | CONFIG_DUMMY=m | 241 | CONFIG_DUMMY=m |
184 | CONFIG_MACVLAN=m | ||
185 | CONFIG_EQUALIZER=m | 242 | CONFIG_EQUALIZER=m |
243 | CONFIG_NET_TEAM=m | ||
244 | CONFIG_NET_TEAM_MODE_BROADCAST=m | ||
245 | CONFIG_NET_TEAM_MODE_ROUNDROBIN=m | ||
246 | CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m | ||
247 | CONFIG_NET_TEAM_MODE_LOADBALANCE=m | ||
248 | CONFIG_VXLAN=m | ||
249 | CONFIG_NETCONSOLE=m | ||
250 | CONFIG_NETCONSOLE_DYNAMIC=y | ||
186 | CONFIG_VETH=m | 251 | CONFIG_VETH=m |
187 | CONFIG_NET_ETHERNET=y | 252 | # CONFIG_NET_CADENCE is not set |
253 | # CONFIG_NET_VENDOR_BROADCOM is not set | ||
188 | CONFIG_MVME16x_NET=y | 254 | CONFIG_MVME16x_NET=y |
189 | # CONFIG_NETDEV_1000 is not set | 255 | # CONFIG_NET_VENDOR_MARVELL is not set |
190 | # CONFIG_NETDEV_10000 is not set | 256 | # CONFIG_NET_VENDOR_MICREL is not set |
257 | # CONFIG_NET_VENDOR_NATSEMI is not set | ||
258 | # CONFIG_NET_VENDOR_SEEQ is not set | ||
259 | # CONFIG_NET_VENDOR_STMICRO is not set | ||
260 | # CONFIG_NET_VENDOR_WIZNET is not set | ||
191 | CONFIG_PPP=m | 261 | CONFIG_PPP=m |
192 | CONFIG_PPP_FILTER=y | ||
193 | CONFIG_PPP_ASYNC=m | ||
194 | CONFIG_PPP_SYNC_TTY=m | ||
195 | CONFIG_PPP_DEFLATE=m | ||
196 | CONFIG_PPP_BSDCOMP=m | 262 | CONFIG_PPP_BSDCOMP=m |
263 | CONFIG_PPP_DEFLATE=m | ||
264 | CONFIG_PPP_FILTER=y | ||
197 | CONFIG_PPP_MPPE=m | 265 | CONFIG_PPP_MPPE=m |
198 | CONFIG_PPPOE=m | 266 | CONFIG_PPPOE=m |
267 | CONFIG_PPTP=m | ||
268 | CONFIG_PPPOL2TP=m | ||
269 | CONFIG_PPP_ASYNC=m | ||
270 | CONFIG_PPP_SYNC_TTY=m | ||
199 | CONFIG_SLIP=m | 271 | CONFIG_SLIP=m |
200 | CONFIG_SLIP_COMPRESSED=y | 272 | CONFIG_SLIP_COMPRESSED=y |
201 | CONFIG_SLIP_SMART=y | 273 | CONFIG_SLIP_SMART=y |
202 | CONFIG_SLIP_MODE_SLIP6=y | 274 | CONFIG_SLIP_MODE_SLIP6=y |
203 | CONFIG_NETCONSOLE=m | 275 | # CONFIG_WLAN is not set |
204 | CONFIG_NETCONSOLE_DYNAMIC=y | 276 | CONFIG_INPUT_EVDEV=m |
205 | CONFIG_INPUT_FF_MEMLESS=m | ||
206 | # CONFIG_KEYBOARD_ATKBD is not set | 277 | # CONFIG_KEYBOARD_ATKBD is not set |
207 | CONFIG_MOUSE_PS2=m | 278 | # CONFIG_MOUSE_PS2 is not set |
208 | CONFIG_MOUSE_SERIAL=m | 279 | # CONFIG_SERIO is not set |
209 | CONFIG_SERIO=m | ||
210 | # CONFIG_SERIO_SERPORT is not set | ||
211 | CONFIG_VT_HW_CONSOLE_BINDING=y | 280 | CONFIG_VT_HW_CONSOLE_BINDING=y |
281 | # CONFIG_LEGACY_PTYS is not set | ||
212 | # CONFIG_DEVKMEM is not set | 282 | # CONFIG_DEVKMEM is not set |
213 | # CONFIG_HW_RANDOM is not set | 283 | # CONFIG_HW_RANDOM is not set |
214 | CONFIG_GEN_RTC=m | 284 | CONFIG_NTP_PPS=y |
215 | CONFIG_GEN_RTC_X=y | 285 | CONFIG_PPS_CLIENT_LDISC=m |
286 | CONFIG_PTP_1588_CLOCK=m | ||
216 | # CONFIG_HWMON is not set | 287 | # CONFIG_HWMON is not set |
217 | CONFIG_HID=m | 288 | CONFIG_HID=m |
218 | CONFIG_HIDRAW=y | 289 | CONFIG_HIDRAW=y |
290 | CONFIG_UHID=m | ||
291 | # CONFIG_HID_GENERIC is not set | ||
219 | # CONFIG_USB_SUPPORT is not set | 292 | # CONFIG_USB_SUPPORT is not set |
293 | CONFIG_RTC_CLASS=y | ||
294 | CONFIG_RTC_DRV_GENERIC=m | ||
295 | # CONFIG_IOMMU_SUPPORT is not set | ||
296 | CONFIG_PROC_HARDWARE=y | ||
220 | CONFIG_EXT2_FS=y | 297 | CONFIG_EXT2_FS=y |
221 | CONFIG_EXT3_FS=y | 298 | CONFIG_EXT3_FS=y |
222 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | 299 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set |
223 | # CONFIG_EXT3_FS_XATTR is not set | 300 | # CONFIG_EXT3_FS_XATTR is not set |
301 | CONFIG_EXT4_FS=y | ||
224 | CONFIG_REISERFS_FS=m | 302 | CONFIG_REISERFS_FS=m |
225 | CONFIG_JFS_FS=m | 303 | CONFIG_JFS_FS=m |
226 | CONFIG_XFS_FS=m | 304 | CONFIG_XFS_FS=m |
227 | CONFIG_OCFS2_FS=m | 305 | CONFIG_OCFS2_FS=m |
228 | # CONFIG_OCFS2_FS_STATS is not set | ||
229 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 306 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
307 | CONFIG_FANOTIFY=y | ||
230 | CONFIG_QUOTA_NETLINK_INTERFACE=y | 308 | CONFIG_QUOTA_NETLINK_INTERFACE=y |
231 | # CONFIG_PRINT_QUOTA_WARNING is not set | 309 | # CONFIG_PRINT_QUOTA_WARNING is not set |
232 | CONFIG_AUTOFS_FS=m | ||
233 | CONFIG_AUTOFS4_FS=m | 310 | CONFIG_AUTOFS4_FS=m |
234 | CONFIG_FUSE_FS=m | 311 | CONFIG_FUSE_FS=m |
312 | CONFIG_CUSE=m | ||
235 | CONFIG_ISO9660_FS=y | 313 | CONFIG_ISO9660_FS=y |
236 | CONFIG_JOLIET=y | 314 | CONFIG_JOLIET=y |
237 | CONFIG_ZISOFS=y | 315 | CONFIG_ZISOFS=y |
238 | CONFIG_UDF_FS=m | 316 | CONFIG_UDF_FS=m |
239 | CONFIG_MSDOS_FS=y | 317 | CONFIG_MSDOS_FS=m |
240 | CONFIG_VFAT_FS=m | 318 | CONFIG_VFAT_FS=m |
241 | CONFIG_PROC_KCORE=y | 319 | CONFIG_PROC_KCORE=y |
242 | CONFIG_TMPFS=y | 320 | CONFIG_TMPFS=y |
243 | CONFIG_AFFS_FS=m | 321 | CONFIG_AFFS_FS=m |
322 | CONFIG_ECRYPT_FS=m | ||
323 | CONFIG_ECRYPT_FS_MESSAGING=y | ||
244 | CONFIG_HFS_FS=m | 324 | CONFIG_HFS_FS=m |
245 | CONFIG_HFSPLUS_FS=m | 325 | CONFIG_HFSPLUS_FS=m |
246 | CONFIG_CRAMFS=m | 326 | CONFIG_CRAMFS=m |
247 | CONFIG_SQUASHFS=m | 327 | CONFIG_SQUASHFS=m |
248 | CONFIG_MINIX_FS=y | 328 | CONFIG_SQUASHFS_LZO=y |
329 | CONFIG_MINIX_FS=m | ||
330 | CONFIG_OMFS_FS=m | ||
249 | CONFIG_HPFS_FS=m | 331 | CONFIG_HPFS_FS=m |
332 | CONFIG_QNX4FS_FS=m | ||
333 | CONFIG_QNX6FS_FS=m | ||
250 | CONFIG_SYSV_FS=m | 334 | CONFIG_SYSV_FS=m |
251 | CONFIG_UFS_FS=m | 335 | CONFIG_UFS_FS=m |
252 | CONFIG_NFS_FS=y | 336 | CONFIG_NFS_FS=y |
253 | CONFIG_NFS_V3=y | ||
254 | CONFIG_NFS_V4=y | 337 | CONFIG_NFS_V4=y |
338 | CONFIG_NFS_SWAP=y | ||
255 | CONFIG_ROOT_NFS=y | 339 | CONFIG_ROOT_NFS=y |
256 | CONFIG_NFSD=m | 340 | CONFIG_NFSD=m |
257 | CONFIG_NFSD_V3=y | 341 | CONFIG_NFSD_V3=y |
258 | CONFIG_SMB_FS=m | 342 | CONFIG_CIFS=m |
259 | CONFIG_SMB_NLS_DEFAULT=y | 343 | # CONFIG_CIFS_DEBUG is not set |
260 | CONFIG_CODA_FS=m | 344 | CONFIG_CODA_FS=m |
261 | CONFIG_NLS_CODEPAGE_437=y | 345 | CONFIG_NLS_CODEPAGE_437=y |
262 | CONFIG_NLS_CODEPAGE_737=m | 346 | CONFIG_NLS_CODEPAGE_737=m |
@@ -295,10 +379,23 @@ CONFIG_NLS_ISO8859_14=m | |||
295 | CONFIG_NLS_ISO8859_15=m | 379 | CONFIG_NLS_ISO8859_15=m |
296 | CONFIG_NLS_KOI8_R=m | 380 | CONFIG_NLS_KOI8_R=m |
297 | CONFIG_NLS_KOI8_U=m | 381 | CONFIG_NLS_KOI8_U=m |
382 | CONFIG_NLS_MAC_ROMAN=m | ||
383 | CONFIG_NLS_MAC_CELTIC=m | ||
384 | CONFIG_NLS_MAC_CENTEURO=m | ||
385 | CONFIG_NLS_MAC_CROATIAN=m | ||
386 | CONFIG_NLS_MAC_CYRILLIC=m | ||
387 | CONFIG_NLS_MAC_GAELIC=m | ||
388 | CONFIG_NLS_MAC_GREEK=m | ||
389 | CONFIG_NLS_MAC_ICELAND=m | ||
390 | CONFIG_NLS_MAC_INUIT=m | ||
391 | CONFIG_NLS_MAC_ROMANIAN=m | ||
392 | CONFIG_NLS_MAC_TURKISH=m | ||
298 | CONFIG_DLM=m | 393 | CONFIG_DLM=m |
299 | CONFIG_MAGIC_SYSRQ=y | 394 | CONFIG_MAGIC_SYSRQ=y |
300 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 395 | CONFIG_ASYNC_RAID6_TEST=m |
301 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 396 | CONFIG_ENCRYPTED_KEYS=m |
397 | CONFIG_CRYPTO_MANAGER=y | ||
398 | CONFIG_CRYPTO_USER=m | ||
302 | CONFIG_CRYPTO_NULL=m | 399 | CONFIG_CRYPTO_NULL=m |
303 | CONFIG_CRYPTO_CRYPTD=m | 400 | CONFIG_CRYPTO_CRYPTD=m |
304 | CONFIG_CRYPTO_TEST=m | 401 | CONFIG_CRYPTO_TEST=m |
@@ -308,19 +405,16 @@ CONFIG_CRYPTO_CTS=m | |||
308 | CONFIG_CRYPTO_LRW=m | 405 | CONFIG_CRYPTO_LRW=m |
309 | CONFIG_CRYPTO_PCBC=m | 406 | CONFIG_CRYPTO_PCBC=m |
310 | CONFIG_CRYPTO_XTS=m | 407 | CONFIG_CRYPTO_XTS=m |
311 | CONFIG_CRYPTO_HMAC=y | ||
312 | CONFIG_CRYPTO_XCBC=m | 408 | CONFIG_CRYPTO_XCBC=m |
313 | CONFIG_CRYPTO_MD4=m | 409 | CONFIG_CRYPTO_VMAC=m |
314 | CONFIG_CRYPTO_MICHAEL_MIC=m | 410 | CONFIG_CRYPTO_MICHAEL_MIC=m |
315 | CONFIG_CRYPTO_RMD128=m | 411 | CONFIG_CRYPTO_RMD128=m |
316 | CONFIG_CRYPTO_RMD160=m | 412 | CONFIG_CRYPTO_RMD160=m |
317 | CONFIG_CRYPTO_RMD256=m | 413 | CONFIG_CRYPTO_RMD256=m |
318 | CONFIG_CRYPTO_RMD320=m | 414 | CONFIG_CRYPTO_RMD320=m |
319 | CONFIG_CRYPTO_SHA256=m | ||
320 | CONFIG_CRYPTO_SHA512=m | 415 | CONFIG_CRYPTO_SHA512=m |
321 | CONFIG_CRYPTO_TGR192=m | 416 | CONFIG_CRYPTO_TGR192=m |
322 | CONFIG_CRYPTO_WP512=m | 417 | CONFIG_CRYPTO_WP512=m |
323 | CONFIG_CRYPTO_AES=m | ||
324 | CONFIG_CRYPTO_ANUBIS=m | 418 | CONFIG_CRYPTO_ANUBIS=m |
325 | CONFIG_CRYPTO_BLOWFISH=m | 419 | CONFIG_CRYPTO_BLOWFISH=m |
326 | CONFIG_CRYPTO_CAMELLIA=m | 420 | CONFIG_CRYPTO_CAMELLIA=m |
@@ -336,6 +430,14 @@ CONFIG_CRYPTO_TWOFISH=m | |||
336 | CONFIG_CRYPTO_ZLIB=m | 430 | CONFIG_CRYPTO_ZLIB=m |
337 | CONFIG_CRYPTO_LZO=m | 431 | CONFIG_CRYPTO_LZO=m |
338 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 432 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
433 | CONFIG_CRYPTO_USER_API_HASH=m | ||
434 | CONFIG_CRYPTO_USER_API_SKCIPHER=m | ||
339 | # CONFIG_CRYPTO_HW is not set | 435 | # CONFIG_CRYPTO_HW is not set |
340 | CONFIG_CRC16=m | ||
341 | CONFIG_CRC_T10DIF=y | 436 | CONFIG_CRC_T10DIF=y |
437 | CONFIG_XZ_DEC_X86=y | ||
438 | CONFIG_XZ_DEC_POWERPC=y | ||
439 | CONFIG_XZ_DEC_IA64=y | ||
440 | CONFIG_XZ_DEC_ARM=y | ||
441 | CONFIG_XZ_DEC_ARMTHUMB=y | ||
442 | CONFIG_XZ_DEC_SPARC=y | ||
443 | CONFIG_XZ_DEC_TEST=m | ||
diff --git a/arch/m68k/configs/q40_defconfig b/arch/m68k/configs/q40_defconfig index 19d23db690a4..8982370e8b42 100644 --- a/arch/m68k/configs/q40_defconfig +++ b/arch/m68k/configs/q40_defconfig | |||
@@ -1,49 +1,74 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | ||
2 | CONFIG_LOCALVERSION="-q40" | 1 | CONFIG_LOCALVERSION="-q40" |
3 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
4 | CONFIG_POSIX_MQUEUE=y | 3 | CONFIG_POSIX_MQUEUE=y |
4 | CONFIG_FHANDLE=y | ||
5 | CONFIG_BSD_PROCESS_ACCT=y | 5 | CONFIG_BSD_PROCESS_ACCT=y |
6 | CONFIG_LOG_BUF_SHIFT=14 | 6 | CONFIG_BSD_PROCESS_ACCT_V3=y |
7 | CONFIG_RELAY=y | 7 | CONFIG_LOG_BUF_SHIFT=16 |
8 | # CONFIG_UTS_NS is not set | ||
9 | # CONFIG_IPC_NS is not set | ||
10 | # CONFIG_PID_NS is not set | ||
11 | # CONFIG_NET_NS is not set | ||
8 | CONFIG_BLK_DEV_INITRD=y | 12 | CONFIG_BLK_DEV_INITRD=y |
9 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
10 | CONFIG_SLAB=y | 13 | CONFIG_SLAB=y |
11 | CONFIG_MODULES=y | 14 | CONFIG_MODULES=y |
12 | CONFIG_MODULE_UNLOAD=y | 15 | CONFIG_MODULE_UNLOAD=y |
13 | CONFIG_Q40=y | 16 | CONFIG_PARTITION_ADVANCED=y |
17 | CONFIG_AMIGA_PARTITION=y | ||
18 | CONFIG_ATARI_PARTITION=y | ||
19 | CONFIG_MAC_PARTITION=y | ||
20 | CONFIG_BSD_DISKLABEL=y | ||
21 | CONFIG_MINIX_SUBPARTITION=y | ||
22 | CONFIG_SOLARIS_X86_PARTITION=y | ||
23 | CONFIG_UNIXWARE_DISKLABEL=y | ||
24 | CONFIG_SUN_PARTITION=y | ||
25 | # CONFIG_EFI_PARTITION is not set | ||
26 | CONFIG_SYSV68_PARTITION=y | ||
27 | CONFIG_IOSCHED_DEADLINE=m | ||
14 | CONFIG_M68040=y | 28 | CONFIG_M68040=y |
15 | CONFIG_M68060=y | 29 | CONFIG_M68060=y |
30 | CONFIG_Q40=y | ||
31 | # CONFIG_COMPACTION is not set | ||
32 | CONFIG_CLEANCACHE=y | ||
33 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
16 | CONFIG_BINFMT_AOUT=m | 34 | CONFIG_BINFMT_AOUT=m |
17 | CONFIG_BINFMT_MISC=m | 35 | CONFIG_BINFMT_MISC=m |
18 | CONFIG_HEARTBEAT=y | ||
19 | CONFIG_PROC_HARDWARE=y | ||
20 | CONFIG_NET=y | 36 | CONFIG_NET=y |
21 | CONFIG_PACKET=y | 37 | CONFIG_PACKET=y |
38 | CONFIG_PACKET_DIAG=m | ||
22 | CONFIG_UNIX=y | 39 | CONFIG_UNIX=y |
40 | CONFIG_UNIX_DIAG=m | ||
41 | CONFIG_XFRM_MIGRATE=y | ||
23 | CONFIG_NET_KEY=y | 42 | CONFIG_NET_KEY=y |
24 | CONFIG_NET_KEY_MIGRATE=y | ||
25 | CONFIG_INET=y | 43 | CONFIG_INET=y |
44 | CONFIG_IP_PNP=y | ||
45 | CONFIG_IP_PNP_DHCP=y | ||
46 | CONFIG_IP_PNP_BOOTP=y | ||
47 | CONFIG_IP_PNP_RARP=y | ||
26 | CONFIG_NET_IPIP=m | 48 | CONFIG_NET_IPIP=m |
49 | CONFIG_NET_IPGRE_DEMUX=m | ||
27 | CONFIG_NET_IPGRE=m | 50 | CONFIG_NET_IPGRE=m |
28 | CONFIG_SYN_COOKIES=y | 51 | CONFIG_SYN_COOKIES=y |
52 | CONFIG_NET_IPVTI=m | ||
29 | CONFIG_INET_AH=m | 53 | CONFIG_INET_AH=m |
30 | CONFIG_INET_ESP=m | 54 | CONFIG_INET_ESP=m |
31 | CONFIG_INET_IPCOMP=m | 55 | CONFIG_INET_IPCOMP=m |
32 | CONFIG_INET_XFRM_MODE_TRANSPORT=m | 56 | CONFIG_INET_XFRM_MODE_TRANSPORT=m |
33 | CONFIG_INET_XFRM_MODE_TUNNEL=m | 57 | CONFIG_INET_XFRM_MODE_TUNNEL=m |
34 | CONFIG_INET_XFRM_MODE_BEET=m | 58 | CONFIG_INET_XFRM_MODE_BEET=m |
59 | # CONFIG_INET_LRO is not set | ||
35 | CONFIG_INET_DIAG=m | 60 | CONFIG_INET_DIAG=m |
61 | CONFIG_INET_UDP_DIAG=m | ||
36 | CONFIG_IPV6_PRIVACY=y | 62 | CONFIG_IPV6_PRIVACY=y |
37 | CONFIG_IPV6_ROUTER_PREF=y | 63 | CONFIG_IPV6_ROUTER_PREF=y |
38 | CONFIG_IPV6_ROUTE_INFO=y | ||
39 | CONFIG_INET6_AH=m | 64 | CONFIG_INET6_AH=m |
40 | CONFIG_INET6_ESP=m | 65 | CONFIG_INET6_ESP=m |
41 | CONFIG_INET6_IPCOMP=m | 66 | CONFIG_INET6_IPCOMP=m |
42 | CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m | 67 | CONFIG_IPV6_GRE=m |
43 | CONFIG_IPV6_TUNNEL=m | ||
44 | CONFIG_NETFILTER=y | 68 | CONFIG_NETFILTER=y |
45 | CONFIG_NETFILTER_NETLINK_QUEUE=m | ||
46 | CONFIG_NF_CONNTRACK=m | 69 | CONFIG_NF_CONNTRACK=m |
70 | CONFIG_NF_CONNTRACK_ZONES=y | ||
71 | # CONFIG_NF_CONNTRACK_PROCFS is not set | ||
47 | # CONFIG_NF_CT_PROTO_DCCP is not set | 72 | # CONFIG_NF_CT_PROTO_DCCP is not set |
48 | CONFIG_NF_CT_PROTO_UDPLITE=m | 73 | CONFIG_NF_CT_PROTO_UDPLITE=m |
49 | CONFIG_NF_CONNTRACK_AMANDA=m | 74 | CONFIG_NF_CONNTRACK_AMANDA=m |
@@ -51,25 +76,37 @@ CONFIG_NF_CONNTRACK_FTP=m | |||
51 | CONFIG_NF_CONNTRACK_H323=m | 76 | CONFIG_NF_CONNTRACK_H323=m |
52 | CONFIG_NF_CONNTRACK_IRC=m | 77 | CONFIG_NF_CONNTRACK_IRC=m |
53 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m | 78 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m |
79 | CONFIG_NF_CONNTRACK_SNMP=m | ||
54 | CONFIG_NF_CONNTRACK_PPTP=m | 80 | CONFIG_NF_CONNTRACK_PPTP=m |
55 | CONFIG_NF_CONNTRACK_SANE=m | 81 | CONFIG_NF_CONNTRACK_SANE=m |
56 | CONFIG_NF_CONNTRACK_SIP=m | 82 | CONFIG_NF_CONNTRACK_SIP=m |
57 | CONFIG_NF_CONNTRACK_TFTP=m | 83 | CONFIG_NF_CONNTRACK_TFTP=m |
84 | CONFIG_NETFILTER_XT_SET=m | ||
85 | CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m | ||
58 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 86 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
59 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 87 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
60 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | 88 | CONFIG_NETFILTER_XT_TARGET_DSCP=m |
89 | CONFIG_NETFILTER_XT_TARGET_HMARK=m | ||
90 | CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m | ||
91 | CONFIG_NETFILTER_XT_TARGET_LOG=m | ||
61 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 92 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
62 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 93 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
63 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | 94 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m |
95 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | ||
96 | CONFIG_NETFILTER_XT_TARGET_TEE=m | ||
64 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | 97 | CONFIG_NETFILTER_XT_TARGET_TRACE=m |
65 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m | 98 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m |
66 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m | 99 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m |
100 | CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m | ||
101 | CONFIG_NETFILTER_XT_MATCH_BPF=m | ||
67 | CONFIG_NETFILTER_XT_MATCH_CLUSTER=m | 102 | CONFIG_NETFILTER_XT_MATCH_CLUSTER=m |
68 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m | 103 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m |
69 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m | 104 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m |
105 | CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m | ||
70 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m | 106 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m |
71 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m | 107 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m |
72 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | 108 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m |
109 | CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m | ||
73 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | 110 | CONFIG_NETFILTER_XT_MATCH_DSCP=m |
74 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 111 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
75 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | 112 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m |
@@ -80,6 +117,8 @@ CONFIG_NETFILTER_XT_MATCH_LIMIT=m | |||
80 | CONFIG_NETFILTER_XT_MATCH_MAC=m | 117 | CONFIG_NETFILTER_XT_MATCH_MAC=m |
81 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 118 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
82 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | 119 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m |
120 | CONFIG_NETFILTER_XT_MATCH_NFACCT=m | ||
121 | CONFIG_NETFILTER_XT_MATCH_OSF=m | ||
83 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | 122 | CONFIG_NETFILTER_XT_MATCH_OWNER=m |
84 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 123 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
85 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 124 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
@@ -93,22 +132,31 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m | |||
93 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 132 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
94 | CONFIG_NETFILTER_XT_MATCH_TIME=m | 133 | CONFIG_NETFILTER_XT_MATCH_TIME=m |
95 | CONFIG_NETFILTER_XT_MATCH_U32=m | 134 | CONFIG_NETFILTER_XT_MATCH_U32=m |
135 | CONFIG_IP_SET=m | ||
136 | CONFIG_IP_SET_BITMAP_IP=m | ||
137 | CONFIG_IP_SET_BITMAP_IPMAC=m | ||
138 | CONFIG_IP_SET_BITMAP_PORT=m | ||
139 | CONFIG_IP_SET_HASH_IP=m | ||
140 | CONFIG_IP_SET_HASH_IPPORT=m | ||
141 | CONFIG_IP_SET_HASH_IPPORTIP=m | ||
142 | CONFIG_IP_SET_HASH_IPPORTNET=m | ||
143 | CONFIG_IP_SET_HASH_NET=m | ||
144 | CONFIG_IP_SET_HASH_NETPORT=m | ||
145 | CONFIG_IP_SET_HASH_NETIFACE=m | ||
146 | CONFIG_IP_SET_LIST_SET=m | ||
96 | CONFIG_NF_CONNTRACK_IPV4=m | 147 | CONFIG_NF_CONNTRACK_IPV4=m |
97 | CONFIG_IP_NF_QUEUE=m | ||
98 | CONFIG_IP_NF_IPTABLES=m | 148 | CONFIG_IP_NF_IPTABLES=m |
99 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
100 | CONFIG_IP_NF_MATCH_AH=m | 149 | CONFIG_IP_NF_MATCH_AH=m |
101 | CONFIG_IP_NF_MATCH_ECN=m | 150 | CONFIG_IP_NF_MATCH_ECN=m |
151 | CONFIG_IP_NF_MATCH_RPFILTER=m | ||
102 | CONFIG_IP_NF_MATCH_TTL=m | 152 | CONFIG_IP_NF_MATCH_TTL=m |
103 | CONFIG_IP_NF_FILTER=m | 153 | CONFIG_IP_NF_FILTER=m |
104 | CONFIG_IP_NF_TARGET_REJECT=m | 154 | CONFIG_IP_NF_TARGET_REJECT=m |
105 | CONFIG_IP_NF_TARGET_LOG=m | ||
106 | CONFIG_IP_NF_TARGET_ULOG=m | 155 | CONFIG_IP_NF_TARGET_ULOG=m |
107 | CONFIG_NF_NAT=m | 156 | CONFIG_NF_NAT_IPV4=m |
108 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 157 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
109 | CONFIG_IP_NF_TARGET_NETMAP=m | 158 | CONFIG_IP_NF_TARGET_NETMAP=m |
110 | CONFIG_IP_NF_TARGET_REDIRECT=m | 159 | CONFIG_IP_NF_TARGET_REDIRECT=m |
111 | CONFIG_NF_NAT_SNMP_BASIC=m | ||
112 | CONFIG_IP_NF_MANGLE=m | 160 | CONFIG_IP_NF_MANGLE=m |
113 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | 161 | CONFIG_IP_NF_TARGET_CLUSTERIP=m |
114 | CONFIG_IP_NF_TARGET_ECN=m | 162 | CONFIG_IP_NF_TARGET_ECN=m |
@@ -118,7 +166,6 @@ CONFIG_IP_NF_ARPTABLES=m | |||
118 | CONFIG_IP_NF_ARPFILTER=m | 166 | CONFIG_IP_NF_ARPFILTER=m |
119 | CONFIG_IP_NF_ARP_MANGLE=m | 167 | CONFIG_IP_NF_ARP_MANGLE=m |
120 | CONFIG_NF_CONNTRACK_IPV6=m | 168 | CONFIG_NF_CONNTRACK_IPV6=m |
121 | CONFIG_IP6_NF_QUEUE=m | ||
122 | CONFIG_IP6_NF_IPTABLES=m | 169 | CONFIG_IP6_NF_IPTABLES=m |
123 | CONFIG_IP6_NF_MATCH_AH=m | 170 | CONFIG_IP6_NF_MATCH_AH=m |
124 | CONFIG_IP6_NF_MATCH_EUI64=m | 171 | CONFIG_IP6_NF_MATCH_EUI64=m |
@@ -127,26 +174,40 @@ CONFIG_IP6_NF_MATCH_OPTS=m | |||
127 | CONFIG_IP6_NF_MATCH_HL=m | 174 | CONFIG_IP6_NF_MATCH_HL=m |
128 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 175 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
129 | CONFIG_IP6_NF_MATCH_MH=m | 176 | CONFIG_IP6_NF_MATCH_MH=m |
177 | CONFIG_IP6_NF_MATCH_RPFILTER=m | ||
130 | CONFIG_IP6_NF_MATCH_RT=m | 178 | CONFIG_IP6_NF_MATCH_RT=m |
131 | CONFIG_IP6_NF_TARGET_HL=m | 179 | CONFIG_IP6_NF_TARGET_HL=m |
132 | CONFIG_IP6_NF_TARGET_LOG=m | ||
133 | CONFIG_IP6_NF_FILTER=m | 180 | CONFIG_IP6_NF_FILTER=m |
134 | CONFIG_IP6_NF_TARGET_REJECT=m | 181 | CONFIG_IP6_NF_TARGET_REJECT=m |
135 | CONFIG_IP6_NF_MANGLE=m | 182 | CONFIG_IP6_NF_MANGLE=m |
136 | CONFIG_IP6_NF_RAW=m | 183 | CONFIG_IP6_NF_RAW=m |
184 | CONFIG_NF_NAT_IPV6=m | ||
185 | CONFIG_IP6_NF_TARGET_MASQUERADE=m | ||
186 | CONFIG_IP6_NF_TARGET_NPT=m | ||
137 | CONFIG_IP_DCCP=m | 187 | CONFIG_IP_DCCP=m |
138 | # CONFIG_IP_DCCP_CCID3 is not set | 188 | # CONFIG_IP_DCCP_CCID3 is not set |
189 | CONFIG_SCTP_COOKIE_HMAC_SHA1=y | ||
190 | CONFIG_RDS=m | ||
191 | CONFIG_RDS_TCP=m | ||
192 | CONFIG_L2TP=m | ||
139 | CONFIG_ATALK=m | 193 | CONFIG_ATALK=m |
194 | CONFIG_BATMAN_ADV=m | ||
195 | CONFIG_BATMAN_ADV_DAT=y | ||
196 | # CONFIG_WIRELESS is not set | ||
140 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 197 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
198 | CONFIG_DEVTMPFS=y | ||
141 | # CONFIG_FIRMWARE_IN_KERNEL is not set | 199 | # CONFIG_FIRMWARE_IN_KERNEL is not set |
200 | # CONFIG_FW_LOADER_USER_HELPER is not set | ||
142 | CONFIG_CONNECTOR=m | 201 | CONFIG_CONNECTOR=m |
143 | CONFIG_BLK_DEV_LOOP=y | 202 | CONFIG_BLK_DEV_LOOP=y |
144 | CONFIG_BLK_DEV_CRYPTOLOOP=m | 203 | CONFIG_BLK_DEV_CRYPTOLOOP=m |
204 | CONFIG_BLK_DEV_DRBD=m | ||
145 | CONFIG_BLK_DEV_NBD=m | 205 | CONFIG_BLK_DEV_NBD=m |
146 | CONFIG_BLK_DEV_RAM=y | 206 | CONFIG_BLK_DEV_RAM=y |
147 | CONFIG_CDROM_PKTCDVD=m | 207 | CONFIG_CDROM_PKTCDVD=m |
148 | CONFIG_ATA_OVER_ETH=m | 208 | CONFIG_ATA_OVER_ETH=m |
149 | CONFIG_IDE=y | 209 | CONFIG_IDE=y |
210 | CONFIG_IDE_GD_ATAPI=y | ||
150 | CONFIG_BLK_DEV_IDECD=y | 211 | CONFIG_BLK_DEV_IDECD=y |
151 | CONFIG_BLK_DEV_Q40IDE=y | 212 | CONFIG_BLK_DEV_Q40IDE=y |
152 | CONFIG_RAID_ATTRS=m | 213 | CONFIG_RAID_ATTRS=m |
@@ -159,61 +220,82 @@ CONFIG_BLK_DEV_SR=y | |||
159 | CONFIG_BLK_DEV_SR_VENDOR=y | 220 | CONFIG_BLK_DEV_SR_VENDOR=y |
160 | CONFIG_CHR_DEV_SG=m | 221 | CONFIG_CHR_DEV_SG=m |
161 | CONFIG_SCSI_CONSTANTS=y | 222 | CONFIG_SCSI_CONSTANTS=y |
162 | CONFIG_SCSI_SAS_LIBSAS=m | 223 | CONFIG_SCSI_SAS_ATTRS=m |
163 | # CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set | ||
164 | CONFIG_SCSI_SRP_ATTRS=m | ||
165 | CONFIG_SCSI_SRP_TGT_ATTRS=y | ||
166 | CONFIG_ISCSI_TCP=m | 224 | CONFIG_ISCSI_TCP=m |
225 | CONFIG_ISCSI_BOOT_SYSFS=m | ||
167 | CONFIG_MD=y | 226 | CONFIG_MD=y |
168 | CONFIG_BLK_DEV_MD=m | ||
169 | CONFIG_MD_LINEAR=m | 227 | CONFIG_MD_LINEAR=m |
170 | CONFIG_MD_RAID0=m | 228 | CONFIG_MD_RAID0=m |
171 | CONFIG_MD_RAID1=m | ||
172 | CONFIG_MD_RAID456=m | ||
173 | CONFIG_BLK_DEV_DM=m | 229 | CONFIG_BLK_DEV_DM=m |
174 | CONFIG_DM_CRYPT=m | 230 | CONFIG_DM_CRYPT=m |
175 | CONFIG_DM_SNAPSHOT=m | 231 | CONFIG_DM_SNAPSHOT=m |
232 | CONFIG_DM_THIN_PROVISIONING=m | ||
233 | CONFIG_DM_CACHE=m | ||
176 | CONFIG_DM_MIRROR=m | 234 | CONFIG_DM_MIRROR=m |
235 | CONFIG_DM_RAID=m | ||
177 | CONFIG_DM_ZERO=m | 236 | CONFIG_DM_ZERO=m |
178 | CONFIG_DM_MULTIPATH=m | 237 | CONFIG_DM_MULTIPATH=m |
179 | CONFIG_DM_UEVENT=y | 238 | CONFIG_DM_UEVENT=y |
239 | CONFIG_TARGET_CORE=m | ||
240 | CONFIG_TCM_IBLOCK=m | ||
241 | CONFIG_TCM_FILEIO=m | ||
242 | CONFIG_TCM_PSCSI=m | ||
180 | CONFIG_NETDEVICES=y | 243 | CONFIG_NETDEVICES=y |
181 | CONFIG_DUMMY=m | 244 | CONFIG_DUMMY=m |
182 | CONFIG_MACVLAN=m | ||
183 | CONFIG_EQUALIZER=m | 245 | CONFIG_EQUALIZER=m |
246 | CONFIG_NET_TEAM=m | ||
247 | CONFIG_NET_TEAM_MODE_BROADCAST=m | ||
248 | CONFIG_NET_TEAM_MODE_ROUNDROBIN=m | ||
249 | CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m | ||
250 | CONFIG_NET_TEAM_MODE_LOADBALANCE=m | ||
251 | CONFIG_VXLAN=m | ||
252 | CONFIG_NETCONSOLE=m | ||
253 | CONFIG_NETCONSOLE_DYNAMIC=y | ||
184 | CONFIG_VETH=m | 254 | CONFIG_VETH=m |
185 | CONFIG_NET_ETHERNET=y | 255 | # CONFIG_NET_VENDOR_3COM is not set |
256 | # CONFIG_NET_VENDOR_AMD is not set | ||
257 | # CONFIG_NET_CADENCE is not set | ||
258 | # CONFIG_NET_VENDOR_BROADCOM is not set | ||
259 | # CONFIG_NET_VENDOR_CIRRUS is not set | ||
260 | # CONFIG_NET_VENDOR_FUJITSU is not set | ||
261 | # CONFIG_NET_VENDOR_HP is not set | ||
262 | # CONFIG_NET_VENDOR_INTEL is not set | ||
263 | # CONFIG_NET_VENDOR_MARVELL is not set | ||
264 | # CONFIG_NET_VENDOR_MICREL is not set | ||
186 | CONFIG_NE2000=m | 265 | CONFIG_NE2000=m |
187 | # CONFIG_NETDEV_1000 is not set | 266 | # CONFIG_NET_VENDOR_SEEQ is not set |
188 | # CONFIG_NETDEV_10000 is not set | 267 | # CONFIG_NET_VENDOR_SMSC is not set |
268 | # CONFIG_NET_VENDOR_STMICRO is not set | ||
269 | # CONFIG_NET_VENDOR_WIZNET is not set | ||
189 | CONFIG_PPP=m | 270 | CONFIG_PPP=m |
190 | CONFIG_PPP_FILTER=y | ||
191 | CONFIG_PPP_ASYNC=m | ||
192 | CONFIG_PPP_SYNC_TTY=m | ||
193 | CONFIG_PPP_DEFLATE=m | ||
194 | CONFIG_PPP_BSDCOMP=m | 271 | CONFIG_PPP_BSDCOMP=m |
272 | CONFIG_PPP_DEFLATE=m | ||
273 | CONFIG_PPP_FILTER=y | ||
195 | CONFIG_PPP_MPPE=m | 274 | CONFIG_PPP_MPPE=m |
196 | CONFIG_PPPOE=m | 275 | CONFIG_PPPOE=m |
276 | CONFIG_PPTP=m | ||
277 | CONFIG_PPPOL2TP=m | ||
278 | CONFIG_PPP_ASYNC=m | ||
279 | CONFIG_PPP_SYNC_TTY=m | ||
197 | CONFIG_SLIP=m | 280 | CONFIG_SLIP=m |
198 | CONFIG_SLIP_COMPRESSED=y | 281 | CONFIG_SLIP_COMPRESSED=y |
199 | CONFIG_SLIP_SMART=y | 282 | CONFIG_SLIP_SMART=y |
200 | CONFIG_SLIP_MODE_SLIP6=y | 283 | CONFIG_SLIP_MODE_SLIP6=y |
201 | CONFIG_NETCONSOLE=m | 284 | # CONFIG_WLAN is not set |
202 | CONFIG_NETCONSOLE_DYNAMIC=y | 285 | CONFIG_INPUT_EVDEV=m |
203 | CONFIG_INPUT_FF_MEMLESS=m | ||
204 | # CONFIG_KEYBOARD_ATKBD is not set | 286 | # CONFIG_KEYBOARD_ATKBD is not set |
205 | CONFIG_MOUSE_PS2=m | 287 | # CONFIG_MOUSE_PS2 is not set |
206 | CONFIG_MOUSE_SERIAL=m | 288 | CONFIG_MOUSE_SERIAL=m |
207 | CONFIG_INPUT_MISC=y | 289 | CONFIG_INPUT_MISC=y |
208 | CONFIG_INPUT_M68K_BEEP=m | 290 | CONFIG_INPUT_M68K_BEEP=m |
209 | CONFIG_SERIO=m | 291 | CONFIG_SERIO_Q40KBD=y |
210 | # CONFIG_SERIO_SERPORT is not set | ||
211 | CONFIG_SERIO_Q40KBD=m | ||
212 | CONFIG_VT_HW_CONSOLE_BINDING=y | 292 | CONFIG_VT_HW_CONSOLE_BINDING=y |
293 | # CONFIG_LEGACY_PTYS is not set | ||
213 | # CONFIG_DEVKMEM is not set | 294 | # CONFIG_DEVKMEM is not set |
214 | # CONFIG_HW_RANDOM is not set | 295 | # CONFIG_HW_RANDOM is not set |
215 | CONFIG_GEN_RTC=m | 296 | CONFIG_NTP_PPS=y |
216 | CONFIG_GEN_RTC_X=y | 297 | CONFIG_PPS_CLIENT_LDISC=m |
298 | CONFIG_PTP_1588_CLOCK=m | ||
217 | # CONFIG_HWMON is not set | 299 | # CONFIG_HWMON is not set |
218 | CONFIG_FB=y | 300 | CONFIG_FB=y |
219 | CONFIG_FRAMEBUFFER_CONSOLE=y | 301 | CONFIG_FRAMEBUFFER_CONSOLE=y |
@@ -222,46 +304,61 @@ CONFIG_SOUND=m | |||
222 | CONFIG_DMASOUND_Q40=m | 304 | CONFIG_DMASOUND_Q40=m |
223 | CONFIG_HID=m | 305 | CONFIG_HID=m |
224 | CONFIG_HIDRAW=y | 306 | CONFIG_HIDRAW=y |
307 | CONFIG_UHID=m | ||
308 | # CONFIG_HID_GENERIC is not set | ||
225 | # CONFIG_USB_SUPPORT is not set | 309 | # CONFIG_USB_SUPPORT is not set |
310 | CONFIG_RTC_CLASS=y | ||
311 | CONFIG_RTC_DRV_GENERIC=m | ||
312 | # CONFIG_IOMMU_SUPPORT is not set | ||
313 | CONFIG_HEARTBEAT=y | ||
314 | CONFIG_PROC_HARDWARE=y | ||
226 | CONFIG_EXT2_FS=y | 315 | CONFIG_EXT2_FS=y |
227 | CONFIG_EXT3_FS=y | 316 | CONFIG_EXT3_FS=y |
228 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | 317 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set |
229 | # CONFIG_EXT3_FS_XATTR is not set | 318 | # CONFIG_EXT3_FS_XATTR is not set |
319 | CONFIG_EXT4_FS=y | ||
230 | CONFIG_REISERFS_FS=m | 320 | CONFIG_REISERFS_FS=m |
231 | CONFIG_JFS_FS=m | 321 | CONFIG_JFS_FS=m |
232 | CONFIG_XFS_FS=m | 322 | CONFIG_XFS_FS=m |
233 | CONFIG_OCFS2_FS=m | 323 | CONFIG_OCFS2_FS=m |
234 | # CONFIG_OCFS2_FS_STATS is not set | ||
235 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 324 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
325 | CONFIG_FANOTIFY=y | ||
236 | CONFIG_QUOTA_NETLINK_INTERFACE=y | 326 | CONFIG_QUOTA_NETLINK_INTERFACE=y |
237 | # CONFIG_PRINT_QUOTA_WARNING is not set | 327 | # CONFIG_PRINT_QUOTA_WARNING is not set |
238 | CONFIG_AUTOFS_FS=m | ||
239 | CONFIG_AUTOFS4_FS=m | 328 | CONFIG_AUTOFS4_FS=m |
240 | CONFIG_FUSE_FS=m | 329 | CONFIG_FUSE_FS=m |
330 | CONFIG_CUSE=m | ||
241 | CONFIG_ISO9660_FS=y | 331 | CONFIG_ISO9660_FS=y |
242 | CONFIG_JOLIET=y | 332 | CONFIG_JOLIET=y |
243 | CONFIG_ZISOFS=y | 333 | CONFIG_ZISOFS=y |
244 | CONFIG_UDF_FS=m | 334 | CONFIG_UDF_FS=m |
245 | CONFIG_MSDOS_FS=y | 335 | CONFIG_MSDOS_FS=m |
246 | CONFIG_VFAT_FS=m | 336 | CONFIG_VFAT_FS=m |
247 | CONFIG_PROC_KCORE=y | 337 | CONFIG_PROC_KCORE=y |
248 | CONFIG_TMPFS=y | 338 | CONFIG_TMPFS=y |
249 | CONFIG_AFFS_FS=m | 339 | CONFIG_AFFS_FS=m |
340 | CONFIG_ECRYPT_FS=m | ||
341 | CONFIG_ECRYPT_FS_MESSAGING=y | ||
250 | CONFIG_HFS_FS=m | 342 | CONFIG_HFS_FS=m |
251 | CONFIG_HFSPLUS_FS=m | 343 | CONFIG_HFSPLUS_FS=m |
252 | CONFIG_CRAMFS=m | 344 | CONFIG_CRAMFS=m |
253 | CONFIG_SQUASHFS=m | 345 | CONFIG_SQUASHFS=m |
254 | CONFIG_MINIX_FS=y | 346 | CONFIG_SQUASHFS_LZO=y |
347 | CONFIG_MINIX_FS=m | ||
348 | CONFIG_OMFS_FS=m | ||
255 | CONFIG_HPFS_FS=m | 349 | CONFIG_HPFS_FS=m |
350 | CONFIG_QNX4FS_FS=m | ||
351 | CONFIG_QNX6FS_FS=m | ||
256 | CONFIG_SYSV_FS=m | 352 | CONFIG_SYSV_FS=m |
257 | CONFIG_UFS_FS=m | 353 | CONFIG_UFS_FS=m |
258 | CONFIG_NFS_FS=y | 354 | CONFIG_NFS_FS=y |
259 | CONFIG_NFS_V3=y | ||
260 | CONFIG_NFS_V4=y | 355 | CONFIG_NFS_V4=y |
356 | CONFIG_NFS_SWAP=y | ||
357 | CONFIG_ROOT_NFS=y | ||
261 | CONFIG_NFSD=m | 358 | CONFIG_NFSD=m |
262 | CONFIG_NFSD_V3=y | 359 | CONFIG_NFSD_V3=y |
263 | CONFIG_SMB_FS=m | 360 | CONFIG_CIFS=m |
264 | CONFIG_SMB_NLS_DEFAULT=y | 361 | # CONFIG_CIFS_DEBUG is not set |
265 | CONFIG_CODA_FS=m | 362 | CONFIG_CODA_FS=m |
266 | CONFIG_NLS_CODEPAGE_437=y | 363 | CONFIG_NLS_CODEPAGE_437=y |
267 | CONFIG_NLS_CODEPAGE_737=m | 364 | CONFIG_NLS_CODEPAGE_737=m |
@@ -300,10 +397,23 @@ CONFIG_NLS_ISO8859_14=m | |||
300 | CONFIG_NLS_ISO8859_15=m | 397 | CONFIG_NLS_ISO8859_15=m |
301 | CONFIG_NLS_KOI8_R=m | 398 | CONFIG_NLS_KOI8_R=m |
302 | CONFIG_NLS_KOI8_U=m | 399 | CONFIG_NLS_KOI8_U=m |
400 | CONFIG_NLS_MAC_ROMAN=m | ||
401 | CONFIG_NLS_MAC_CELTIC=m | ||
402 | CONFIG_NLS_MAC_CENTEURO=m | ||
403 | CONFIG_NLS_MAC_CROATIAN=m | ||
404 | CONFIG_NLS_MAC_CYRILLIC=m | ||
405 | CONFIG_NLS_MAC_GAELIC=m | ||
406 | CONFIG_NLS_MAC_GREEK=m | ||
407 | CONFIG_NLS_MAC_ICELAND=m | ||
408 | CONFIG_NLS_MAC_INUIT=m | ||
409 | CONFIG_NLS_MAC_ROMANIAN=m | ||
410 | CONFIG_NLS_MAC_TURKISH=m | ||
303 | CONFIG_DLM=m | 411 | CONFIG_DLM=m |
304 | CONFIG_MAGIC_SYSRQ=y | 412 | CONFIG_MAGIC_SYSRQ=y |
305 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 413 | CONFIG_ASYNC_RAID6_TEST=m |
306 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 414 | CONFIG_ENCRYPTED_KEYS=m |
415 | CONFIG_CRYPTO_MANAGER=y | ||
416 | CONFIG_CRYPTO_USER=m | ||
307 | CONFIG_CRYPTO_NULL=m | 417 | CONFIG_CRYPTO_NULL=m |
308 | CONFIG_CRYPTO_CRYPTD=m | 418 | CONFIG_CRYPTO_CRYPTD=m |
309 | CONFIG_CRYPTO_TEST=m | 419 | CONFIG_CRYPTO_TEST=m |
@@ -313,19 +423,16 @@ CONFIG_CRYPTO_CTS=m | |||
313 | CONFIG_CRYPTO_LRW=m | 423 | CONFIG_CRYPTO_LRW=m |
314 | CONFIG_CRYPTO_PCBC=m | 424 | CONFIG_CRYPTO_PCBC=m |
315 | CONFIG_CRYPTO_XTS=m | 425 | CONFIG_CRYPTO_XTS=m |
316 | CONFIG_CRYPTO_HMAC=y | ||
317 | CONFIG_CRYPTO_XCBC=m | 426 | CONFIG_CRYPTO_XCBC=m |
318 | CONFIG_CRYPTO_MD4=m | 427 | CONFIG_CRYPTO_VMAC=m |
319 | CONFIG_CRYPTO_MICHAEL_MIC=m | 428 | CONFIG_CRYPTO_MICHAEL_MIC=m |
320 | CONFIG_CRYPTO_RMD128=m | 429 | CONFIG_CRYPTO_RMD128=m |
321 | CONFIG_CRYPTO_RMD160=m | 430 | CONFIG_CRYPTO_RMD160=m |
322 | CONFIG_CRYPTO_RMD256=m | 431 | CONFIG_CRYPTO_RMD256=m |
323 | CONFIG_CRYPTO_RMD320=m | 432 | CONFIG_CRYPTO_RMD320=m |
324 | CONFIG_CRYPTO_SHA256=m | ||
325 | CONFIG_CRYPTO_SHA512=m | 433 | CONFIG_CRYPTO_SHA512=m |
326 | CONFIG_CRYPTO_TGR192=m | 434 | CONFIG_CRYPTO_TGR192=m |
327 | CONFIG_CRYPTO_WP512=m | 435 | CONFIG_CRYPTO_WP512=m |
328 | CONFIG_CRYPTO_AES=m | ||
329 | CONFIG_CRYPTO_ANUBIS=m | 436 | CONFIG_CRYPTO_ANUBIS=m |
330 | CONFIG_CRYPTO_BLOWFISH=m | 437 | CONFIG_CRYPTO_BLOWFISH=m |
331 | CONFIG_CRYPTO_CAMELLIA=m | 438 | CONFIG_CRYPTO_CAMELLIA=m |
@@ -341,6 +448,14 @@ CONFIG_CRYPTO_TWOFISH=m | |||
341 | CONFIG_CRYPTO_ZLIB=m | 448 | CONFIG_CRYPTO_ZLIB=m |
342 | CONFIG_CRYPTO_LZO=m | 449 | CONFIG_CRYPTO_LZO=m |
343 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 450 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
451 | CONFIG_CRYPTO_USER_API_HASH=m | ||
452 | CONFIG_CRYPTO_USER_API_SKCIPHER=m | ||
344 | # CONFIG_CRYPTO_HW is not set | 453 | # CONFIG_CRYPTO_HW is not set |
345 | CONFIG_CRC16=m | ||
346 | CONFIG_CRC_T10DIF=y | 454 | CONFIG_CRC_T10DIF=y |
455 | CONFIG_XZ_DEC_X86=y | ||
456 | CONFIG_XZ_DEC_POWERPC=y | ||
457 | CONFIG_XZ_DEC_IA64=y | ||
458 | CONFIG_XZ_DEC_ARM=y | ||
459 | CONFIG_XZ_DEC_ARMTHUMB=y | ||
460 | CONFIG_XZ_DEC_SPARC=y | ||
461 | CONFIG_XZ_DEC_TEST=m | ||
diff --git a/arch/m68k/configs/sun3_defconfig b/arch/m68k/configs/sun3_defconfig index ca6c0b4cab77..54674d61e001 100644 --- a/arch/m68k/configs/sun3_defconfig +++ b/arch/m68k/configs/sun3_defconfig | |||
@@ -1,50 +1,71 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | ||
2 | CONFIG_LOCALVERSION="-sun3" | 1 | CONFIG_LOCALVERSION="-sun3" |
3 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
4 | CONFIG_POSIX_MQUEUE=y | 3 | CONFIG_POSIX_MQUEUE=y |
4 | CONFIG_FHANDLE=y | ||
5 | CONFIG_BSD_PROCESS_ACCT=y | 5 | CONFIG_BSD_PROCESS_ACCT=y |
6 | CONFIG_LOG_BUF_SHIFT=14 | 6 | CONFIG_BSD_PROCESS_ACCT_V3=y |
7 | CONFIG_RELAY=y | 7 | CONFIG_LOG_BUF_SHIFT=16 |
8 | # CONFIG_UTS_NS is not set | ||
9 | # CONFIG_IPC_NS is not set | ||
10 | # CONFIG_PID_NS is not set | ||
11 | # CONFIG_NET_NS is not set | ||
8 | CONFIG_BLK_DEV_INITRD=y | 12 | CONFIG_BLK_DEV_INITRD=y |
9 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
10 | CONFIG_SLAB=y | 13 | CONFIG_SLAB=y |
11 | CONFIG_MODULES=y | 14 | CONFIG_MODULES=y |
12 | CONFIG_MODULE_UNLOAD=y | 15 | CONFIG_MODULE_UNLOAD=y |
16 | CONFIG_PARTITION_ADVANCED=y | ||
17 | CONFIG_AMIGA_PARTITION=y | ||
18 | CONFIG_ATARI_PARTITION=y | ||
19 | CONFIG_MAC_PARTITION=y | ||
20 | CONFIG_BSD_DISKLABEL=y | ||
21 | CONFIG_MINIX_SUBPARTITION=y | ||
22 | CONFIG_SOLARIS_X86_PARTITION=y | ||
23 | CONFIG_UNIXWARE_DISKLABEL=y | ||
24 | # CONFIG_EFI_PARTITION is not set | ||
25 | CONFIG_SYSV68_PARTITION=y | ||
26 | CONFIG_IOSCHED_DEADLINE=m | ||
13 | CONFIG_SUN3=y | 27 | CONFIG_SUN3=y |
28 | # CONFIG_COMPACTION is not set | ||
29 | CONFIG_CLEANCACHE=y | ||
30 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
14 | CONFIG_BINFMT_AOUT=m | 31 | CONFIG_BINFMT_AOUT=m |
15 | CONFIG_BINFMT_MISC=m | 32 | CONFIG_BINFMT_MISC=m |
16 | CONFIG_PROC_HARDWARE=y | ||
17 | CONFIG_NET=y | 33 | CONFIG_NET=y |
18 | CONFIG_PACKET=y | 34 | CONFIG_PACKET=y |
35 | CONFIG_PACKET_DIAG=m | ||
19 | CONFIG_UNIX=y | 36 | CONFIG_UNIX=y |
37 | CONFIG_UNIX_DIAG=m | ||
38 | CONFIG_XFRM_MIGRATE=y | ||
20 | CONFIG_NET_KEY=y | 39 | CONFIG_NET_KEY=y |
21 | CONFIG_NET_KEY_MIGRATE=y | ||
22 | CONFIG_INET=y | 40 | CONFIG_INET=y |
23 | CONFIG_IP_PNP=y | 41 | CONFIG_IP_PNP=y |
24 | CONFIG_IP_PNP_DHCP=y | 42 | CONFIG_IP_PNP_DHCP=y |
25 | CONFIG_IP_PNP_BOOTP=y | 43 | CONFIG_IP_PNP_BOOTP=y |
26 | CONFIG_IP_PNP_RARP=y | 44 | CONFIG_IP_PNP_RARP=y |
27 | CONFIG_NET_IPIP=m | 45 | CONFIG_NET_IPIP=m |
46 | CONFIG_NET_IPGRE_DEMUX=m | ||
28 | CONFIG_NET_IPGRE=m | 47 | CONFIG_NET_IPGRE=m |
29 | CONFIG_SYN_COOKIES=y | 48 | CONFIG_SYN_COOKIES=y |
49 | CONFIG_NET_IPVTI=m | ||
30 | CONFIG_INET_AH=m | 50 | CONFIG_INET_AH=m |
31 | CONFIG_INET_ESP=m | 51 | CONFIG_INET_ESP=m |
32 | CONFIG_INET_IPCOMP=m | 52 | CONFIG_INET_IPCOMP=m |
33 | CONFIG_INET_XFRM_MODE_TRANSPORT=m | 53 | CONFIG_INET_XFRM_MODE_TRANSPORT=m |
34 | CONFIG_INET_XFRM_MODE_TUNNEL=m | 54 | CONFIG_INET_XFRM_MODE_TUNNEL=m |
35 | CONFIG_INET_XFRM_MODE_BEET=m | 55 | CONFIG_INET_XFRM_MODE_BEET=m |
56 | # CONFIG_INET_LRO is not set | ||
36 | CONFIG_INET_DIAG=m | 57 | CONFIG_INET_DIAG=m |
58 | CONFIG_INET_UDP_DIAG=m | ||
37 | CONFIG_IPV6_PRIVACY=y | 59 | CONFIG_IPV6_PRIVACY=y |
38 | CONFIG_IPV6_ROUTER_PREF=y | 60 | CONFIG_IPV6_ROUTER_PREF=y |
39 | CONFIG_IPV6_ROUTE_INFO=y | ||
40 | CONFIG_INET6_AH=m | 61 | CONFIG_INET6_AH=m |
41 | CONFIG_INET6_ESP=m | 62 | CONFIG_INET6_ESP=m |
42 | CONFIG_INET6_IPCOMP=m | 63 | CONFIG_INET6_IPCOMP=m |
43 | CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m | 64 | CONFIG_IPV6_GRE=m |
44 | CONFIG_IPV6_TUNNEL=m | ||
45 | CONFIG_NETFILTER=y | 65 | CONFIG_NETFILTER=y |
46 | CONFIG_NETFILTER_NETLINK_QUEUE=m | ||
47 | CONFIG_NF_CONNTRACK=m | 66 | CONFIG_NF_CONNTRACK=m |
67 | CONFIG_NF_CONNTRACK_ZONES=y | ||
68 | # CONFIG_NF_CONNTRACK_PROCFS is not set | ||
48 | # CONFIG_NF_CT_PROTO_DCCP is not set | 69 | # CONFIG_NF_CT_PROTO_DCCP is not set |
49 | CONFIG_NF_CT_PROTO_UDPLITE=m | 70 | CONFIG_NF_CT_PROTO_UDPLITE=m |
50 | CONFIG_NF_CONNTRACK_AMANDA=m | 71 | CONFIG_NF_CONNTRACK_AMANDA=m |
@@ -52,25 +73,37 @@ CONFIG_NF_CONNTRACK_FTP=m | |||
52 | CONFIG_NF_CONNTRACK_H323=m | 73 | CONFIG_NF_CONNTRACK_H323=m |
53 | CONFIG_NF_CONNTRACK_IRC=m | 74 | CONFIG_NF_CONNTRACK_IRC=m |
54 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m | 75 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m |
76 | CONFIG_NF_CONNTRACK_SNMP=m | ||
55 | CONFIG_NF_CONNTRACK_PPTP=m | 77 | CONFIG_NF_CONNTRACK_PPTP=m |
56 | CONFIG_NF_CONNTRACK_SANE=m | 78 | CONFIG_NF_CONNTRACK_SANE=m |
57 | CONFIG_NF_CONNTRACK_SIP=m | 79 | CONFIG_NF_CONNTRACK_SIP=m |
58 | CONFIG_NF_CONNTRACK_TFTP=m | 80 | CONFIG_NF_CONNTRACK_TFTP=m |
81 | CONFIG_NETFILTER_XT_SET=m | ||
82 | CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m | ||
59 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 83 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
60 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 84 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
61 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | 85 | CONFIG_NETFILTER_XT_TARGET_DSCP=m |
86 | CONFIG_NETFILTER_XT_TARGET_HMARK=m | ||
87 | CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m | ||
88 | CONFIG_NETFILTER_XT_TARGET_LOG=m | ||
62 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 89 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
63 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 90 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
64 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | 91 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m |
92 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | ||
93 | CONFIG_NETFILTER_XT_TARGET_TEE=m | ||
65 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | 94 | CONFIG_NETFILTER_XT_TARGET_TRACE=m |
66 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m | 95 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m |
67 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m | 96 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m |
97 | CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m | ||
98 | CONFIG_NETFILTER_XT_MATCH_BPF=m | ||
68 | CONFIG_NETFILTER_XT_MATCH_CLUSTER=m | 99 | CONFIG_NETFILTER_XT_MATCH_CLUSTER=m |
69 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m | 100 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m |
70 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m | 101 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m |
102 | CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m | ||
71 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m | 103 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m |
72 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m | 104 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m |
73 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | 105 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m |
106 | CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m | ||
74 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | 107 | CONFIG_NETFILTER_XT_MATCH_DSCP=m |
75 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 108 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
76 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | 109 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m |
@@ -81,6 +114,8 @@ CONFIG_NETFILTER_XT_MATCH_LIMIT=m | |||
81 | CONFIG_NETFILTER_XT_MATCH_MAC=m | 114 | CONFIG_NETFILTER_XT_MATCH_MAC=m |
82 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 115 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
83 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | 116 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m |
117 | CONFIG_NETFILTER_XT_MATCH_NFACCT=m | ||
118 | CONFIG_NETFILTER_XT_MATCH_OSF=m | ||
84 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | 119 | CONFIG_NETFILTER_XT_MATCH_OWNER=m |
85 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 120 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
86 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 121 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
@@ -94,22 +129,31 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m | |||
94 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 129 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
95 | CONFIG_NETFILTER_XT_MATCH_TIME=m | 130 | CONFIG_NETFILTER_XT_MATCH_TIME=m |
96 | CONFIG_NETFILTER_XT_MATCH_U32=m | 131 | CONFIG_NETFILTER_XT_MATCH_U32=m |
132 | CONFIG_IP_SET=m | ||
133 | CONFIG_IP_SET_BITMAP_IP=m | ||
134 | CONFIG_IP_SET_BITMAP_IPMAC=m | ||
135 | CONFIG_IP_SET_BITMAP_PORT=m | ||
136 | CONFIG_IP_SET_HASH_IP=m | ||
137 | CONFIG_IP_SET_HASH_IPPORT=m | ||
138 | CONFIG_IP_SET_HASH_IPPORTIP=m | ||
139 | CONFIG_IP_SET_HASH_IPPORTNET=m | ||
140 | CONFIG_IP_SET_HASH_NET=m | ||
141 | CONFIG_IP_SET_HASH_NETPORT=m | ||
142 | CONFIG_IP_SET_HASH_NETIFACE=m | ||
143 | CONFIG_IP_SET_LIST_SET=m | ||
97 | CONFIG_NF_CONNTRACK_IPV4=m | 144 | CONFIG_NF_CONNTRACK_IPV4=m |
98 | CONFIG_IP_NF_QUEUE=m | ||
99 | CONFIG_IP_NF_IPTABLES=m | 145 | CONFIG_IP_NF_IPTABLES=m |
100 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
101 | CONFIG_IP_NF_MATCH_AH=m | 146 | CONFIG_IP_NF_MATCH_AH=m |
102 | CONFIG_IP_NF_MATCH_ECN=m | 147 | CONFIG_IP_NF_MATCH_ECN=m |
148 | CONFIG_IP_NF_MATCH_RPFILTER=m | ||
103 | CONFIG_IP_NF_MATCH_TTL=m | 149 | CONFIG_IP_NF_MATCH_TTL=m |
104 | CONFIG_IP_NF_FILTER=m | 150 | CONFIG_IP_NF_FILTER=m |
105 | CONFIG_IP_NF_TARGET_REJECT=m | 151 | CONFIG_IP_NF_TARGET_REJECT=m |
106 | CONFIG_IP_NF_TARGET_LOG=m | ||
107 | CONFIG_IP_NF_TARGET_ULOG=m | 152 | CONFIG_IP_NF_TARGET_ULOG=m |
108 | CONFIG_NF_NAT=m | 153 | CONFIG_NF_NAT_IPV4=m |
109 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 154 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
110 | CONFIG_IP_NF_TARGET_NETMAP=m | 155 | CONFIG_IP_NF_TARGET_NETMAP=m |
111 | CONFIG_IP_NF_TARGET_REDIRECT=m | 156 | CONFIG_IP_NF_TARGET_REDIRECT=m |
112 | CONFIG_NF_NAT_SNMP_BASIC=m | ||
113 | CONFIG_IP_NF_MANGLE=m | 157 | CONFIG_IP_NF_MANGLE=m |
114 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | 158 | CONFIG_IP_NF_TARGET_CLUSTERIP=m |
115 | CONFIG_IP_NF_TARGET_ECN=m | 159 | CONFIG_IP_NF_TARGET_ECN=m |
@@ -119,7 +163,6 @@ CONFIG_IP_NF_ARPTABLES=m | |||
119 | CONFIG_IP_NF_ARPFILTER=m | 163 | CONFIG_IP_NF_ARPFILTER=m |
120 | CONFIG_IP_NF_ARP_MANGLE=m | 164 | CONFIG_IP_NF_ARP_MANGLE=m |
121 | CONFIG_NF_CONNTRACK_IPV6=m | 165 | CONFIG_NF_CONNTRACK_IPV6=m |
122 | CONFIG_IP6_NF_QUEUE=m | ||
123 | CONFIG_IP6_NF_IPTABLES=m | 166 | CONFIG_IP6_NF_IPTABLES=m |
124 | CONFIG_IP6_NF_MATCH_AH=m | 167 | CONFIG_IP6_NF_MATCH_AH=m |
125 | CONFIG_IP6_NF_MATCH_EUI64=m | 168 | CONFIG_IP6_NF_MATCH_EUI64=m |
@@ -128,21 +171,34 @@ CONFIG_IP6_NF_MATCH_OPTS=m | |||
128 | CONFIG_IP6_NF_MATCH_HL=m | 171 | CONFIG_IP6_NF_MATCH_HL=m |
129 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 172 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
130 | CONFIG_IP6_NF_MATCH_MH=m | 173 | CONFIG_IP6_NF_MATCH_MH=m |
174 | CONFIG_IP6_NF_MATCH_RPFILTER=m | ||
131 | CONFIG_IP6_NF_MATCH_RT=m | 175 | CONFIG_IP6_NF_MATCH_RT=m |
132 | CONFIG_IP6_NF_TARGET_HL=m | 176 | CONFIG_IP6_NF_TARGET_HL=m |
133 | CONFIG_IP6_NF_TARGET_LOG=m | ||
134 | CONFIG_IP6_NF_FILTER=m | 177 | CONFIG_IP6_NF_FILTER=m |
135 | CONFIG_IP6_NF_TARGET_REJECT=m | 178 | CONFIG_IP6_NF_TARGET_REJECT=m |
136 | CONFIG_IP6_NF_MANGLE=m | 179 | CONFIG_IP6_NF_MANGLE=m |
137 | CONFIG_IP6_NF_RAW=m | 180 | CONFIG_IP6_NF_RAW=m |
181 | CONFIG_NF_NAT_IPV6=m | ||
182 | CONFIG_IP6_NF_TARGET_MASQUERADE=m | ||
183 | CONFIG_IP6_NF_TARGET_NPT=m | ||
138 | CONFIG_IP_DCCP=m | 184 | CONFIG_IP_DCCP=m |
139 | # CONFIG_IP_DCCP_CCID3 is not set | 185 | # CONFIG_IP_DCCP_CCID3 is not set |
186 | CONFIG_SCTP_COOKIE_HMAC_SHA1=y | ||
187 | CONFIG_RDS=m | ||
188 | CONFIG_RDS_TCP=m | ||
189 | CONFIG_L2TP=m | ||
140 | CONFIG_ATALK=m | 190 | CONFIG_ATALK=m |
191 | CONFIG_BATMAN_ADV=m | ||
192 | CONFIG_BATMAN_ADV_DAT=y | ||
193 | # CONFIG_WIRELESS is not set | ||
141 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 194 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
195 | CONFIG_DEVTMPFS=y | ||
142 | # CONFIG_FIRMWARE_IN_KERNEL is not set | 196 | # CONFIG_FIRMWARE_IN_KERNEL is not set |
197 | # CONFIG_FW_LOADER_USER_HELPER is not set | ||
143 | CONFIG_CONNECTOR=m | 198 | CONFIG_CONNECTOR=m |
144 | CONFIG_BLK_DEV_LOOP=y | 199 | CONFIG_BLK_DEV_LOOP=y |
145 | CONFIG_BLK_DEV_CRYPTOLOOP=m | 200 | CONFIG_BLK_DEV_CRYPTOLOOP=m |
201 | CONFIG_BLK_DEV_DRBD=m | ||
146 | CONFIG_BLK_DEV_NBD=m | 202 | CONFIG_BLK_DEV_NBD=m |
147 | CONFIG_BLK_DEV_RAM=y | 203 | CONFIG_BLK_DEV_RAM=y |
148 | CONFIG_CDROM_PKTCDVD=m | 204 | CONFIG_CDROM_PKTCDVD=m |
@@ -157,107 +213,136 @@ CONFIG_BLK_DEV_SR=y | |||
157 | CONFIG_BLK_DEV_SR_VENDOR=y | 213 | CONFIG_BLK_DEV_SR_VENDOR=y |
158 | CONFIG_CHR_DEV_SG=m | 214 | CONFIG_CHR_DEV_SG=m |
159 | CONFIG_SCSI_CONSTANTS=y | 215 | CONFIG_SCSI_CONSTANTS=y |
160 | CONFIG_SCSI_SAS_LIBSAS=m | 216 | CONFIG_SCSI_SAS_ATTRS=m |
161 | # CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set | ||
162 | CONFIG_SCSI_SRP_ATTRS=m | ||
163 | CONFIG_SCSI_SRP_TGT_ATTRS=y | ||
164 | CONFIG_ISCSI_TCP=m | 217 | CONFIG_ISCSI_TCP=m |
218 | CONFIG_ISCSI_BOOT_SYSFS=m | ||
165 | CONFIG_SUN3_SCSI=y | 219 | CONFIG_SUN3_SCSI=y |
166 | CONFIG_MD=y | 220 | CONFIG_MD=y |
167 | CONFIG_BLK_DEV_MD=m | ||
168 | CONFIG_MD_LINEAR=m | 221 | CONFIG_MD_LINEAR=m |
169 | CONFIG_MD_RAID0=m | 222 | CONFIG_MD_RAID0=m |
170 | CONFIG_MD_RAID1=m | ||
171 | CONFIG_MD_RAID456=m | ||
172 | CONFIG_BLK_DEV_DM=m | 223 | CONFIG_BLK_DEV_DM=m |
173 | CONFIG_DM_CRYPT=m | 224 | CONFIG_DM_CRYPT=m |
174 | CONFIG_DM_SNAPSHOT=m | 225 | CONFIG_DM_SNAPSHOT=m |
226 | CONFIG_DM_THIN_PROVISIONING=m | ||
227 | CONFIG_DM_CACHE=m | ||
175 | CONFIG_DM_MIRROR=m | 228 | CONFIG_DM_MIRROR=m |
229 | CONFIG_DM_RAID=m | ||
176 | CONFIG_DM_ZERO=m | 230 | CONFIG_DM_ZERO=m |
177 | CONFIG_DM_MULTIPATH=m | 231 | CONFIG_DM_MULTIPATH=m |
178 | CONFIG_DM_UEVENT=y | 232 | CONFIG_DM_UEVENT=y |
233 | CONFIG_TARGET_CORE=m | ||
234 | CONFIG_TCM_IBLOCK=m | ||
235 | CONFIG_TCM_FILEIO=m | ||
236 | CONFIG_TCM_PSCSI=m | ||
179 | CONFIG_NETDEVICES=y | 237 | CONFIG_NETDEVICES=y |
180 | CONFIG_DUMMY=m | 238 | CONFIG_DUMMY=m |
181 | CONFIG_MACVLAN=m | ||
182 | CONFIG_EQUALIZER=m | 239 | CONFIG_EQUALIZER=m |
240 | CONFIG_NET_TEAM=m | ||
241 | CONFIG_NET_TEAM_MODE_BROADCAST=m | ||
242 | CONFIG_NET_TEAM_MODE_ROUNDROBIN=m | ||
243 | CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m | ||
244 | CONFIG_NET_TEAM_MODE_LOADBALANCE=m | ||
245 | CONFIG_VXLAN=m | ||
246 | CONFIG_NETCONSOLE=m | ||
247 | CONFIG_NETCONSOLE_DYNAMIC=y | ||
183 | CONFIG_VETH=m | 248 | CONFIG_VETH=m |
184 | CONFIG_NET_ETHERNET=y | ||
185 | CONFIG_SUN3LANCE=y | 249 | CONFIG_SUN3LANCE=y |
250 | # CONFIG_NET_CADENCE is not set | ||
186 | CONFIG_SUN3_82586=y | 251 | CONFIG_SUN3_82586=y |
187 | # CONFIG_NETDEV_1000 is not set | 252 | # CONFIG_NET_VENDOR_MARVELL is not set |
188 | # CONFIG_NETDEV_10000 is not set | 253 | # CONFIG_NET_VENDOR_MICREL is not set |
254 | # CONFIG_NET_VENDOR_NATSEMI is not set | ||
255 | # CONFIG_NET_VENDOR_SEEQ is not set | ||
256 | # CONFIG_NET_VENDOR_STMICRO is not set | ||
257 | # CONFIG_NET_VENDOR_SUN is not set | ||
258 | # CONFIG_NET_VENDOR_WIZNET is not set | ||
189 | CONFIG_PPP=m | 259 | CONFIG_PPP=m |
190 | CONFIG_PPP_FILTER=y | ||
191 | CONFIG_PPP_ASYNC=m | ||
192 | CONFIG_PPP_SYNC_TTY=m | ||
193 | CONFIG_PPP_DEFLATE=m | ||
194 | CONFIG_PPP_BSDCOMP=m | 260 | CONFIG_PPP_BSDCOMP=m |
261 | CONFIG_PPP_DEFLATE=m | ||
262 | CONFIG_PPP_FILTER=y | ||
195 | CONFIG_PPP_MPPE=m | 263 | CONFIG_PPP_MPPE=m |
196 | CONFIG_PPPOE=m | 264 | CONFIG_PPPOE=m |
265 | CONFIG_PPTP=m | ||
266 | CONFIG_PPPOL2TP=m | ||
267 | CONFIG_PPP_ASYNC=m | ||
268 | CONFIG_PPP_SYNC_TTY=m | ||
197 | CONFIG_SLIP=m | 269 | CONFIG_SLIP=m |
198 | CONFIG_SLIP_COMPRESSED=y | 270 | CONFIG_SLIP_COMPRESSED=y |
199 | CONFIG_SLIP_SMART=y | 271 | CONFIG_SLIP_SMART=y |
200 | CONFIG_SLIP_MODE_SLIP6=y | 272 | CONFIG_SLIP_MODE_SLIP6=y |
201 | CONFIG_NETCONSOLE=m | 273 | # CONFIG_WLAN is not set |
202 | CONFIG_NETCONSOLE_DYNAMIC=y | 274 | CONFIG_INPUT_EVDEV=m |
203 | CONFIG_INPUT_FF_MEMLESS=m | ||
204 | # CONFIG_KEYBOARD_ATKBD is not set | 275 | # CONFIG_KEYBOARD_ATKBD is not set |
205 | CONFIG_KEYBOARD_SUNKBD=y | 276 | CONFIG_KEYBOARD_SUNKBD=y |
206 | CONFIG_MOUSE_PS2=m | 277 | # CONFIG_MOUSE_PS2 is not set |
207 | CONFIG_MOUSE_SERIAL=m | 278 | CONFIG_MOUSE_SERIAL=m |
208 | # CONFIG_SERIO_SERPORT is not set | ||
209 | CONFIG_VT_HW_CONSOLE_BINDING=y | 279 | CONFIG_VT_HW_CONSOLE_BINDING=y |
280 | # CONFIG_LEGACY_PTYS is not set | ||
210 | # CONFIG_DEVKMEM is not set | 281 | # CONFIG_DEVKMEM is not set |
211 | # CONFIG_HW_RANDOM is not set | 282 | # CONFIG_HW_RANDOM is not set |
212 | CONFIG_GEN_RTC=m | 283 | CONFIG_NTP_PPS=y |
213 | CONFIG_GEN_RTC_X=y | 284 | CONFIG_PPS_CLIENT_LDISC=m |
285 | CONFIG_PTP_1588_CLOCK=m | ||
214 | # CONFIG_HWMON is not set | 286 | # CONFIG_HWMON is not set |
215 | CONFIG_FB=y | 287 | CONFIG_FB=y |
216 | CONFIG_FRAMEBUFFER_CONSOLE=y | 288 | CONFIG_FRAMEBUFFER_CONSOLE=y |
217 | CONFIG_LOGO=y | 289 | CONFIG_LOGO=y |
218 | CONFIG_HID=m | 290 | CONFIG_HID=m |
219 | CONFIG_HIDRAW=y | 291 | CONFIG_HIDRAW=y |
292 | CONFIG_UHID=m | ||
293 | # CONFIG_HID_GENERIC is not set | ||
220 | # CONFIG_USB_SUPPORT is not set | 294 | # CONFIG_USB_SUPPORT is not set |
295 | CONFIG_RTC_CLASS=y | ||
296 | CONFIG_RTC_DRV_GENERIC=m | ||
297 | # CONFIG_IOMMU_SUPPORT is not set | ||
298 | CONFIG_PROC_HARDWARE=y | ||
221 | CONFIG_EXT2_FS=y | 299 | CONFIG_EXT2_FS=y |
222 | CONFIG_EXT3_FS=y | 300 | CONFIG_EXT3_FS=y |
223 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | 301 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set |
224 | # CONFIG_EXT3_FS_XATTR is not set | 302 | # CONFIG_EXT3_FS_XATTR is not set |
303 | CONFIG_EXT4_FS=y | ||
225 | CONFIG_REISERFS_FS=m | 304 | CONFIG_REISERFS_FS=m |
226 | CONFIG_JFS_FS=m | 305 | CONFIG_JFS_FS=m |
227 | CONFIG_XFS_FS=m | 306 | CONFIG_XFS_FS=m |
228 | CONFIG_OCFS2_FS=m | 307 | CONFIG_OCFS2_FS=m |
229 | # CONFIG_OCFS2_FS_STATS is not set | ||
230 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 308 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
309 | CONFIG_FANOTIFY=y | ||
231 | CONFIG_QUOTA_NETLINK_INTERFACE=y | 310 | CONFIG_QUOTA_NETLINK_INTERFACE=y |
232 | # CONFIG_PRINT_QUOTA_WARNING is not set | 311 | # CONFIG_PRINT_QUOTA_WARNING is not set |
233 | CONFIG_AUTOFS_FS=m | ||
234 | CONFIG_AUTOFS4_FS=m | 312 | CONFIG_AUTOFS4_FS=m |
235 | CONFIG_FUSE_FS=m | 313 | CONFIG_FUSE_FS=m |
314 | CONFIG_CUSE=m | ||
236 | CONFIG_ISO9660_FS=y | 315 | CONFIG_ISO9660_FS=y |
237 | CONFIG_JOLIET=y | 316 | CONFIG_JOLIET=y |
238 | CONFIG_ZISOFS=y | 317 | CONFIG_ZISOFS=y |
239 | CONFIG_UDF_FS=m | 318 | CONFIG_UDF_FS=m |
240 | CONFIG_MSDOS_FS=y | 319 | CONFIG_MSDOS_FS=m |
241 | CONFIG_VFAT_FS=m | 320 | CONFIG_VFAT_FS=m |
242 | CONFIG_PROC_KCORE=y | 321 | CONFIG_PROC_KCORE=y |
243 | CONFIG_TMPFS=y | 322 | CONFIG_TMPFS=y |
244 | CONFIG_AFFS_FS=m | 323 | CONFIG_AFFS_FS=m |
324 | CONFIG_ECRYPT_FS=m | ||
325 | CONFIG_ECRYPT_FS_MESSAGING=y | ||
245 | CONFIG_HFS_FS=m | 326 | CONFIG_HFS_FS=m |
246 | CONFIG_HFSPLUS_FS=m | 327 | CONFIG_HFSPLUS_FS=m |
247 | CONFIG_CRAMFS=m | 328 | CONFIG_CRAMFS=m |
248 | CONFIG_SQUASHFS=m | 329 | CONFIG_SQUASHFS=m |
249 | CONFIG_MINIX_FS=y | 330 | CONFIG_SQUASHFS_LZO=y |
331 | CONFIG_MINIX_FS=m | ||
332 | CONFIG_OMFS_FS=m | ||
250 | CONFIG_HPFS_FS=m | 333 | CONFIG_HPFS_FS=m |
334 | CONFIG_QNX4FS_FS=m | ||
335 | CONFIG_QNX6FS_FS=m | ||
251 | CONFIG_SYSV_FS=m | 336 | CONFIG_SYSV_FS=m |
252 | CONFIG_UFS_FS=m | 337 | CONFIG_UFS_FS=m |
253 | CONFIG_NFS_FS=y | 338 | CONFIG_NFS_FS=y |
254 | CONFIG_NFS_V3=y | ||
255 | CONFIG_NFS_V4=y | 339 | CONFIG_NFS_V4=y |
340 | CONFIG_NFS_SWAP=y | ||
256 | CONFIG_ROOT_NFS=y | 341 | CONFIG_ROOT_NFS=y |
257 | CONFIG_NFSD=m | 342 | CONFIG_NFSD=m |
258 | CONFIG_NFSD_V3=y | 343 | CONFIG_NFSD_V3=y |
259 | CONFIG_SMB_FS=m | 344 | CONFIG_CIFS=m |
260 | CONFIG_SMB_NLS_DEFAULT=y | 345 | # CONFIG_CIFS_DEBUG is not set |
261 | CONFIG_CODA_FS=m | 346 | CONFIG_CODA_FS=m |
262 | CONFIG_NLS_CODEPAGE_437=y | 347 | CONFIG_NLS_CODEPAGE_437=y |
263 | CONFIG_NLS_CODEPAGE_737=m | 348 | CONFIG_NLS_CODEPAGE_737=m |
@@ -296,10 +381,23 @@ CONFIG_NLS_ISO8859_14=m | |||
296 | CONFIG_NLS_ISO8859_15=m | 381 | CONFIG_NLS_ISO8859_15=m |
297 | CONFIG_NLS_KOI8_R=m | 382 | CONFIG_NLS_KOI8_R=m |
298 | CONFIG_NLS_KOI8_U=m | 383 | CONFIG_NLS_KOI8_U=m |
384 | CONFIG_NLS_MAC_ROMAN=m | ||
385 | CONFIG_NLS_MAC_CELTIC=m | ||
386 | CONFIG_NLS_MAC_CENTEURO=m | ||
387 | CONFIG_NLS_MAC_CROATIAN=m | ||
388 | CONFIG_NLS_MAC_CYRILLIC=m | ||
389 | CONFIG_NLS_MAC_GAELIC=m | ||
390 | CONFIG_NLS_MAC_GREEK=m | ||
391 | CONFIG_NLS_MAC_ICELAND=m | ||
392 | CONFIG_NLS_MAC_INUIT=m | ||
393 | CONFIG_NLS_MAC_ROMANIAN=m | ||
394 | CONFIG_NLS_MAC_TURKISH=m | ||
299 | CONFIG_DLM=m | 395 | CONFIG_DLM=m |
300 | CONFIG_MAGIC_SYSRQ=y | 396 | CONFIG_MAGIC_SYSRQ=y |
301 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 397 | CONFIG_ASYNC_RAID6_TEST=m |
302 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 398 | CONFIG_ENCRYPTED_KEYS=m |
399 | CONFIG_CRYPTO_MANAGER=y | ||
400 | CONFIG_CRYPTO_USER=m | ||
303 | CONFIG_CRYPTO_NULL=m | 401 | CONFIG_CRYPTO_NULL=m |
304 | CONFIG_CRYPTO_CRYPTD=m | 402 | CONFIG_CRYPTO_CRYPTD=m |
305 | CONFIG_CRYPTO_TEST=m | 403 | CONFIG_CRYPTO_TEST=m |
@@ -309,19 +407,16 @@ CONFIG_CRYPTO_CTS=m | |||
309 | CONFIG_CRYPTO_LRW=m | 407 | CONFIG_CRYPTO_LRW=m |
310 | CONFIG_CRYPTO_PCBC=m | 408 | CONFIG_CRYPTO_PCBC=m |
311 | CONFIG_CRYPTO_XTS=m | 409 | CONFIG_CRYPTO_XTS=m |
312 | CONFIG_CRYPTO_HMAC=y | ||
313 | CONFIG_CRYPTO_XCBC=m | 410 | CONFIG_CRYPTO_XCBC=m |
314 | CONFIG_CRYPTO_MD4=m | 411 | CONFIG_CRYPTO_VMAC=m |
315 | CONFIG_CRYPTO_MICHAEL_MIC=m | 412 | CONFIG_CRYPTO_MICHAEL_MIC=m |
316 | CONFIG_CRYPTO_RMD128=m | 413 | CONFIG_CRYPTO_RMD128=m |
317 | CONFIG_CRYPTO_RMD160=m | 414 | CONFIG_CRYPTO_RMD160=m |
318 | CONFIG_CRYPTO_RMD256=m | 415 | CONFIG_CRYPTO_RMD256=m |
319 | CONFIG_CRYPTO_RMD320=m | 416 | CONFIG_CRYPTO_RMD320=m |
320 | CONFIG_CRYPTO_SHA256=m | ||
321 | CONFIG_CRYPTO_SHA512=m | 417 | CONFIG_CRYPTO_SHA512=m |
322 | CONFIG_CRYPTO_TGR192=m | 418 | CONFIG_CRYPTO_TGR192=m |
323 | CONFIG_CRYPTO_WP512=m | 419 | CONFIG_CRYPTO_WP512=m |
324 | CONFIG_CRYPTO_AES=m | ||
325 | CONFIG_CRYPTO_ANUBIS=m | 420 | CONFIG_CRYPTO_ANUBIS=m |
326 | CONFIG_CRYPTO_BLOWFISH=m | 421 | CONFIG_CRYPTO_BLOWFISH=m |
327 | CONFIG_CRYPTO_CAMELLIA=m | 422 | CONFIG_CRYPTO_CAMELLIA=m |
@@ -337,6 +432,14 @@ CONFIG_CRYPTO_TWOFISH=m | |||
337 | CONFIG_CRYPTO_ZLIB=m | 432 | CONFIG_CRYPTO_ZLIB=m |
338 | CONFIG_CRYPTO_LZO=m | 433 | CONFIG_CRYPTO_LZO=m |
339 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 434 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
435 | CONFIG_CRYPTO_USER_API_HASH=m | ||
436 | CONFIG_CRYPTO_USER_API_SKCIPHER=m | ||
340 | # CONFIG_CRYPTO_HW is not set | 437 | # CONFIG_CRYPTO_HW is not set |
341 | CONFIG_CRC16=m | ||
342 | CONFIG_CRC_T10DIF=y | 438 | CONFIG_CRC_T10DIF=y |
439 | CONFIG_XZ_DEC_X86=y | ||
440 | CONFIG_XZ_DEC_POWERPC=y | ||
441 | CONFIG_XZ_DEC_IA64=y | ||
442 | CONFIG_XZ_DEC_ARM=y | ||
443 | CONFIG_XZ_DEC_ARMTHUMB=y | ||
444 | CONFIG_XZ_DEC_SPARC=y | ||
445 | CONFIG_XZ_DEC_TEST=m | ||
diff --git a/arch/m68k/configs/sun3x_defconfig b/arch/m68k/configs/sun3x_defconfig index c80941c7759e..832d9539f441 100644 --- a/arch/m68k/configs/sun3x_defconfig +++ b/arch/m68k/configs/sun3x_defconfig | |||
@@ -1,50 +1,71 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | ||
2 | CONFIG_LOCALVERSION="-sun3x" | 1 | CONFIG_LOCALVERSION="-sun3x" |
3 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
4 | CONFIG_POSIX_MQUEUE=y | 3 | CONFIG_POSIX_MQUEUE=y |
4 | CONFIG_FHANDLE=y | ||
5 | CONFIG_BSD_PROCESS_ACCT=y | 5 | CONFIG_BSD_PROCESS_ACCT=y |
6 | CONFIG_LOG_BUF_SHIFT=14 | 6 | CONFIG_BSD_PROCESS_ACCT_V3=y |
7 | CONFIG_RELAY=y | 7 | CONFIG_LOG_BUF_SHIFT=16 |
8 | # CONFIG_UTS_NS is not set | ||
9 | # CONFIG_IPC_NS is not set | ||
10 | # CONFIG_PID_NS is not set | ||
11 | # CONFIG_NET_NS is not set | ||
8 | CONFIG_BLK_DEV_INITRD=y | 12 | CONFIG_BLK_DEV_INITRD=y |
9 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
10 | CONFIG_SLAB=y | 13 | CONFIG_SLAB=y |
11 | CONFIG_MODULES=y | 14 | CONFIG_MODULES=y |
12 | CONFIG_MODULE_UNLOAD=y | 15 | CONFIG_MODULE_UNLOAD=y |
16 | CONFIG_PARTITION_ADVANCED=y | ||
17 | CONFIG_AMIGA_PARTITION=y | ||
18 | CONFIG_ATARI_PARTITION=y | ||
19 | CONFIG_MAC_PARTITION=y | ||
20 | CONFIG_BSD_DISKLABEL=y | ||
21 | CONFIG_MINIX_SUBPARTITION=y | ||
22 | CONFIG_SOLARIS_X86_PARTITION=y | ||
23 | CONFIG_UNIXWARE_DISKLABEL=y | ||
24 | # CONFIG_EFI_PARTITION is not set | ||
25 | CONFIG_SYSV68_PARTITION=y | ||
26 | CONFIG_IOSCHED_DEADLINE=m | ||
13 | CONFIG_SUN3X=y | 27 | CONFIG_SUN3X=y |
28 | # CONFIG_COMPACTION is not set | ||
29 | CONFIG_CLEANCACHE=y | ||
30 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
14 | CONFIG_BINFMT_AOUT=m | 31 | CONFIG_BINFMT_AOUT=m |
15 | CONFIG_BINFMT_MISC=m | 32 | CONFIG_BINFMT_MISC=m |
16 | CONFIG_PROC_HARDWARE=y | ||
17 | CONFIG_NET=y | 33 | CONFIG_NET=y |
18 | CONFIG_PACKET=y | 34 | CONFIG_PACKET=y |
35 | CONFIG_PACKET_DIAG=m | ||
19 | CONFIG_UNIX=y | 36 | CONFIG_UNIX=y |
37 | CONFIG_UNIX_DIAG=m | ||
38 | CONFIG_XFRM_MIGRATE=y | ||
20 | CONFIG_NET_KEY=y | 39 | CONFIG_NET_KEY=y |
21 | CONFIG_NET_KEY_MIGRATE=y | ||
22 | CONFIG_INET=y | 40 | CONFIG_INET=y |
23 | CONFIG_IP_PNP=y | 41 | CONFIG_IP_PNP=y |
24 | CONFIG_IP_PNP_DHCP=y | 42 | CONFIG_IP_PNP_DHCP=y |
25 | CONFIG_IP_PNP_BOOTP=y | 43 | CONFIG_IP_PNP_BOOTP=y |
26 | CONFIG_IP_PNP_RARP=y | 44 | CONFIG_IP_PNP_RARP=y |
27 | CONFIG_NET_IPIP=m | 45 | CONFIG_NET_IPIP=m |
46 | CONFIG_NET_IPGRE_DEMUX=m | ||
28 | CONFIG_NET_IPGRE=m | 47 | CONFIG_NET_IPGRE=m |
29 | CONFIG_SYN_COOKIES=y | 48 | CONFIG_SYN_COOKIES=y |
49 | CONFIG_NET_IPVTI=m | ||
30 | CONFIG_INET_AH=m | 50 | CONFIG_INET_AH=m |
31 | CONFIG_INET_ESP=m | 51 | CONFIG_INET_ESP=m |
32 | CONFIG_INET_IPCOMP=m | 52 | CONFIG_INET_IPCOMP=m |
33 | CONFIG_INET_XFRM_MODE_TRANSPORT=m | 53 | CONFIG_INET_XFRM_MODE_TRANSPORT=m |
34 | CONFIG_INET_XFRM_MODE_TUNNEL=m | 54 | CONFIG_INET_XFRM_MODE_TUNNEL=m |
35 | CONFIG_INET_XFRM_MODE_BEET=m | 55 | CONFIG_INET_XFRM_MODE_BEET=m |
56 | # CONFIG_INET_LRO is not set | ||
36 | CONFIG_INET_DIAG=m | 57 | CONFIG_INET_DIAG=m |
58 | CONFIG_INET_UDP_DIAG=m | ||
37 | CONFIG_IPV6_PRIVACY=y | 59 | CONFIG_IPV6_PRIVACY=y |
38 | CONFIG_IPV6_ROUTER_PREF=y | 60 | CONFIG_IPV6_ROUTER_PREF=y |
39 | CONFIG_IPV6_ROUTE_INFO=y | ||
40 | CONFIG_INET6_AH=m | 61 | CONFIG_INET6_AH=m |
41 | CONFIG_INET6_ESP=m | 62 | CONFIG_INET6_ESP=m |
42 | CONFIG_INET6_IPCOMP=m | 63 | CONFIG_INET6_IPCOMP=m |
43 | CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m | 64 | CONFIG_IPV6_GRE=m |
44 | CONFIG_IPV6_TUNNEL=m | ||
45 | CONFIG_NETFILTER=y | 65 | CONFIG_NETFILTER=y |
46 | CONFIG_NETFILTER_NETLINK_QUEUE=m | ||
47 | CONFIG_NF_CONNTRACK=m | 66 | CONFIG_NF_CONNTRACK=m |
67 | CONFIG_NF_CONNTRACK_ZONES=y | ||
68 | # CONFIG_NF_CONNTRACK_PROCFS is not set | ||
48 | # CONFIG_NF_CT_PROTO_DCCP is not set | 69 | # CONFIG_NF_CT_PROTO_DCCP is not set |
49 | CONFIG_NF_CT_PROTO_UDPLITE=m | 70 | CONFIG_NF_CT_PROTO_UDPLITE=m |
50 | CONFIG_NF_CONNTRACK_AMANDA=m | 71 | CONFIG_NF_CONNTRACK_AMANDA=m |
@@ -52,25 +73,37 @@ CONFIG_NF_CONNTRACK_FTP=m | |||
52 | CONFIG_NF_CONNTRACK_H323=m | 73 | CONFIG_NF_CONNTRACK_H323=m |
53 | CONFIG_NF_CONNTRACK_IRC=m | 74 | CONFIG_NF_CONNTRACK_IRC=m |
54 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m | 75 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m |
76 | CONFIG_NF_CONNTRACK_SNMP=m | ||
55 | CONFIG_NF_CONNTRACK_PPTP=m | 77 | CONFIG_NF_CONNTRACK_PPTP=m |
56 | CONFIG_NF_CONNTRACK_SANE=m | 78 | CONFIG_NF_CONNTRACK_SANE=m |
57 | CONFIG_NF_CONNTRACK_SIP=m | 79 | CONFIG_NF_CONNTRACK_SIP=m |
58 | CONFIG_NF_CONNTRACK_TFTP=m | 80 | CONFIG_NF_CONNTRACK_TFTP=m |
81 | CONFIG_NETFILTER_XT_SET=m | ||
82 | CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m | ||
59 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 83 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
60 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 84 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
61 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | 85 | CONFIG_NETFILTER_XT_TARGET_DSCP=m |
86 | CONFIG_NETFILTER_XT_TARGET_HMARK=m | ||
87 | CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m | ||
88 | CONFIG_NETFILTER_XT_TARGET_LOG=m | ||
62 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 89 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
63 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 90 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
64 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | 91 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m |
92 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | ||
93 | CONFIG_NETFILTER_XT_TARGET_TEE=m | ||
65 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | 94 | CONFIG_NETFILTER_XT_TARGET_TRACE=m |
66 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m | 95 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m |
67 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m | 96 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m |
97 | CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m | ||
98 | CONFIG_NETFILTER_XT_MATCH_BPF=m | ||
68 | CONFIG_NETFILTER_XT_MATCH_CLUSTER=m | 99 | CONFIG_NETFILTER_XT_MATCH_CLUSTER=m |
69 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m | 100 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m |
70 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m | 101 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m |
102 | CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m | ||
71 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m | 103 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m |
72 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m | 104 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m |
73 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | 105 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m |
106 | CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m | ||
74 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | 107 | CONFIG_NETFILTER_XT_MATCH_DSCP=m |
75 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 108 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
76 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | 109 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m |
@@ -81,6 +114,8 @@ CONFIG_NETFILTER_XT_MATCH_LIMIT=m | |||
81 | CONFIG_NETFILTER_XT_MATCH_MAC=m | 114 | CONFIG_NETFILTER_XT_MATCH_MAC=m |
82 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 115 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
83 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | 116 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m |
117 | CONFIG_NETFILTER_XT_MATCH_NFACCT=m | ||
118 | CONFIG_NETFILTER_XT_MATCH_OSF=m | ||
84 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | 119 | CONFIG_NETFILTER_XT_MATCH_OWNER=m |
85 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 120 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
86 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 121 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
@@ -94,22 +129,31 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m | |||
94 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 129 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
95 | CONFIG_NETFILTER_XT_MATCH_TIME=m | 130 | CONFIG_NETFILTER_XT_MATCH_TIME=m |
96 | CONFIG_NETFILTER_XT_MATCH_U32=m | 131 | CONFIG_NETFILTER_XT_MATCH_U32=m |
132 | CONFIG_IP_SET=m | ||
133 | CONFIG_IP_SET_BITMAP_IP=m | ||
134 | CONFIG_IP_SET_BITMAP_IPMAC=m | ||
135 | CONFIG_IP_SET_BITMAP_PORT=m | ||
136 | CONFIG_IP_SET_HASH_IP=m | ||
137 | CONFIG_IP_SET_HASH_IPPORT=m | ||
138 | CONFIG_IP_SET_HASH_IPPORTIP=m | ||
139 | CONFIG_IP_SET_HASH_IPPORTNET=m | ||
140 | CONFIG_IP_SET_HASH_NET=m | ||
141 | CONFIG_IP_SET_HASH_NETPORT=m | ||
142 | CONFIG_IP_SET_HASH_NETIFACE=m | ||
143 | CONFIG_IP_SET_LIST_SET=m | ||
97 | CONFIG_NF_CONNTRACK_IPV4=m | 144 | CONFIG_NF_CONNTRACK_IPV4=m |
98 | CONFIG_IP_NF_QUEUE=m | ||
99 | CONFIG_IP_NF_IPTABLES=m | 145 | CONFIG_IP_NF_IPTABLES=m |
100 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
101 | CONFIG_IP_NF_MATCH_AH=m | 146 | CONFIG_IP_NF_MATCH_AH=m |
102 | CONFIG_IP_NF_MATCH_ECN=m | 147 | CONFIG_IP_NF_MATCH_ECN=m |
148 | CONFIG_IP_NF_MATCH_RPFILTER=m | ||
103 | CONFIG_IP_NF_MATCH_TTL=m | 149 | CONFIG_IP_NF_MATCH_TTL=m |
104 | CONFIG_IP_NF_FILTER=m | 150 | CONFIG_IP_NF_FILTER=m |
105 | CONFIG_IP_NF_TARGET_REJECT=m | 151 | CONFIG_IP_NF_TARGET_REJECT=m |
106 | CONFIG_IP_NF_TARGET_LOG=m | ||
107 | CONFIG_IP_NF_TARGET_ULOG=m | 152 | CONFIG_IP_NF_TARGET_ULOG=m |
108 | CONFIG_NF_NAT=m | 153 | CONFIG_NF_NAT_IPV4=m |
109 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 154 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
110 | CONFIG_IP_NF_TARGET_NETMAP=m | 155 | CONFIG_IP_NF_TARGET_NETMAP=m |
111 | CONFIG_IP_NF_TARGET_REDIRECT=m | 156 | CONFIG_IP_NF_TARGET_REDIRECT=m |
112 | CONFIG_NF_NAT_SNMP_BASIC=m | ||
113 | CONFIG_IP_NF_MANGLE=m | 157 | CONFIG_IP_NF_MANGLE=m |
114 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | 158 | CONFIG_IP_NF_TARGET_CLUSTERIP=m |
115 | CONFIG_IP_NF_TARGET_ECN=m | 159 | CONFIG_IP_NF_TARGET_ECN=m |
@@ -119,7 +163,6 @@ CONFIG_IP_NF_ARPTABLES=m | |||
119 | CONFIG_IP_NF_ARPFILTER=m | 163 | CONFIG_IP_NF_ARPFILTER=m |
120 | CONFIG_IP_NF_ARP_MANGLE=m | 164 | CONFIG_IP_NF_ARP_MANGLE=m |
121 | CONFIG_NF_CONNTRACK_IPV6=m | 165 | CONFIG_NF_CONNTRACK_IPV6=m |
122 | CONFIG_IP6_NF_QUEUE=m | ||
123 | CONFIG_IP6_NF_IPTABLES=m | 166 | CONFIG_IP6_NF_IPTABLES=m |
124 | CONFIG_IP6_NF_MATCH_AH=m | 167 | CONFIG_IP6_NF_MATCH_AH=m |
125 | CONFIG_IP6_NF_MATCH_EUI64=m | 168 | CONFIG_IP6_NF_MATCH_EUI64=m |
@@ -128,21 +171,34 @@ CONFIG_IP6_NF_MATCH_OPTS=m | |||
128 | CONFIG_IP6_NF_MATCH_HL=m | 171 | CONFIG_IP6_NF_MATCH_HL=m |
129 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 172 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
130 | CONFIG_IP6_NF_MATCH_MH=m | 173 | CONFIG_IP6_NF_MATCH_MH=m |
174 | CONFIG_IP6_NF_MATCH_RPFILTER=m | ||
131 | CONFIG_IP6_NF_MATCH_RT=m | 175 | CONFIG_IP6_NF_MATCH_RT=m |
132 | CONFIG_IP6_NF_TARGET_HL=m | 176 | CONFIG_IP6_NF_TARGET_HL=m |
133 | CONFIG_IP6_NF_TARGET_LOG=m | ||
134 | CONFIG_IP6_NF_FILTER=m | 177 | CONFIG_IP6_NF_FILTER=m |
135 | CONFIG_IP6_NF_TARGET_REJECT=m | 178 | CONFIG_IP6_NF_TARGET_REJECT=m |
136 | CONFIG_IP6_NF_MANGLE=m | 179 | CONFIG_IP6_NF_MANGLE=m |
137 | CONFIG_IP6_NF_RAW=m | 180 | CONFIG_IP6_NF_RAW=m |
181 | CONFIG_NF_NAT_IPV6=m | ||
182 | CONFIG_IP6_NF_TARGET_MASQUERADE=m | ||
183 | CONFIG_IP6_NF_TARGET_NPT=m | ||
138 | CONFIG_IP_DCCP=m | 184 | CONFIG_IP_DCCP=m |
139 | # CONFIG_IP_DCCP_CCID3 is not set | 185 | # CONFIG_IP_DCCP_CCID3 is not set |
186 | CONFIG_SCTP_COOKIE_HMAC_SHA1=y | ||
187 | CONFIG_RDS=m | ||
188 | CONFIG_RDS_TCP=m | ||
189 | CONFIG_L2TP=m | ||
140 | CONFIG_ATALK=m | 190 | CONFIG_ATALK=m |
191 | CONFIG_BATMAN_ADV=m | ||
192 | CONFIG_BATMAN_ADV_DAT=y | ||
193 | # CONFIG_WIRELESS is not set | ||
141 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 194 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
195 | CONFIG_DEVTMPFS=y | ||
142 | # CONFIG_FIRMWARE_IN_KERNEL is not set | 196 | # CONFIG_FIRMWARE_IN_KERNEL is not set |
197 | # CONFIG_FW_LOADER_USER_HELPER is not set | ||
143 | CONFIG_CONNECTOR=m | 198 | CONFIG_CONNECTOR=m |
144 | CONFIG_BLK_DEV_LOOP=y | 199 | CONFIG_BLK_DEV_LOOP=y |
145 | CONFIG_BLK_DEV_CRYPTOLOOP=m | 200 | CONFIG_BLK_DEV_CRYPTOLOOP=m |
201 | CONFIG_BLK_DEV_DRBD=m | ||
146 | CONFIG_BLK_DEV_NBD=m | 202 | CONFIG_BLK_DEV_NBD=m |
147 | CONFIG_BLK_DEV_RAM=y | 203 | CONFIG_BLK_DEV_RAM=y |
148 | CONFIG_CDROM_PKTCDVD=m | 204 | CONFIG_CDROM_PKTCDVD=m |
@@ -157,106 +213,136 @@ CONFIG_BLK_DEV_SR=y | |||
157 | CONFIG_BLK_DEV_SR_VENDOR=y | 213 | CONFIG_BLK_DEV_SR_VENDOR=y |
158 | CONFIG_CHR_DEV_SG=m | 214 | CONFIG_CHR_DEV_SG=m |
159 | CONFIG_SCSI_CONSTANTS=y | 215 | CONFIG_SCSI_CONSTANTS=y |
160 | CONFIG_SCSI_SAS_LIBSAS=m | 216 | CONFIG_SCSI_SAS_ATTRS=m |
161 | # CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set | ||
162 | CONFIG_SCSI_SRP_ATTRS=m | ||
163 | CONFIG_SCSI_SRP_TGT_ATTRS=y | ||
164 | CONFIG_ISCSI_TCP=m | 217 | CONFIG_ISCSI_TCP=m |
218 | CONFIG_ISCSI_BOOT_SYSFS=m | ||
165 | CONFIG_SUN3X_ESP=y | 219 | CONFIG_SUN3X_ESP=y |
166 | CONFIG_MD=y | 220 | CONFIG_MD=y |
167 | CONFIG_BLK_DEV_MD=m | ||
168 | CONFIG_MD_LINEAR=m | 221 | CONFIG_MD_LINEAR=m |
169 | CONFIG_MD_RAID0=m | 222 | CONFIG_MD_RAID0=m |
170 | CONFIG_MD_RAID1=m | ||
171 | CONFIG_MD_RAID456=m | ||
172 | CONFIG_BLK_DEV_DM=m | 223 | CONFIG_BLK_DEV_DM=m |
173 | CONFIG_DM_CRYPT=m | 224 | CONFIG_DM_CRYPT=m |
174 | CONFIG_DM_SNAPSHOT=m | 225 | CONFIG_DM_SNAPSHOT=m |
226 | CONFIG_DM_THIN_PROVISIONING=m | ||
227 | CONFIG_DM_CACHE=m | ||
175 | CONFIG_DM_MIRROR=m | 228 | CONFIG_DM_MIRROR=m |
229 | CONFIG_DM_RAID=m | ||
176 | CONFIG_DM_ZERO=m | 230 | CONFIG_DM_ZERO=m |
177 | CONFIG_DM_MULTIPATH=m | 231 | CONFIG_DM_MULTIPATH=m |
178 | CONFIG_DM_UEVENT=y | 232 | CONFIG_DM_UEVENT=y |
233 | CONFIG_TARGET_CORE=m | ||
234 | CONFIG_TCM_IBLOCK=m | ||
235 | CONFIG_TCM_FILEIO=m | ||
236 | CONFIG_TCM_PSCSI=m | ||
179 | CONFIG_NETDEVICES=y | 237 | CONFIG_NETDEVICES=y |
180 | CONFIG_DUMMY=m | 238 | CONFIG_DUMMY=m |
181 | CONFIG_MACVLAN=m | ||
182 | CONFIG_EQUALIZER=m | 239 | CONFIG_EQUALIZER=m |
240 | CONFIG_NET_TEAM=m | ||
241 | CONFIG_NET_TEAM_MODE_BROADCAST=m | ||
242 | CONFIG_NET_TEAM_MODE_ROUNDROBIN=m | ||
243 | CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m | ||
244 | CONFIG_NET_TEAM_MODE_LOADBALANCE=m | ||
245 | CONFIG_VXLAN=m | ||
246 | CONFIG_NETCONSOLE=m | ||
247 | CONFIG_NETCONSOLE_DYNAMIC=y | ||
183 | CONFIG_VETH=m | 248 | CONFIG_VETH=m |
184 | CONFIG_NET_ETHERNET=y | ||
185 | CONFIG_SUN3LANCE=y | 249 | CONFIG_SUN3LANCE=y |
186 | # CONFIG_NETDEV_1000 is not set | 250 | # CONFIG_NET_CADENCE is not set |
187 | # CONFIG_NETDEV_10000 is not set | 251 | # CONFIG_NET_VENDOR_BROADCOM is not set |
252 | # CONFIG_NET_VENDOR_INTEL is not set | ||
253 | # CONFIG_NET_VENDOR_MARVELL is not set | ||
254 | # CONFIG_NET_VENDOR_MICREL is not set | ||
255 | # CONFIG_NET_VENDOR_NATSEMI is not set | ||
256 | # CONFIG_NET_VENDOR_SEEQ is not set | ||
257 | # CONFIG_NET_VENDOR_STMICRO is not set | ||
258 | # CONFIG_NET_VENDOR_WIZNET is not set | ||
188 | CONFIG_PPP=m | 259 | CONFIG_PPP=m |
189 | CONFIG_PPP_FILTER=y | ||
190 | CONFIG_PPP_ASYNC=m | ||
191 | CONFIG_PPP_SYNC_TTY=m | ||
192 | CONFIG_PPP_DEFLATE=m | ||
193 | CONFIG_PPP_BSDCOMP=m | 260 | CONFIG_PPP_BSDCOMP=m |
261 | CONFIG_PPP_DEFLATE=m | ||
262 | CONFIG_PPP_FILTER=y | ||
194 | CONFIG_PPP_MPPE=m | 263 | CONFIG_PPP_MPPE=m |
195 | CONFIG_PPPOE=m | 264 | CONFIG_PPPOE=m |
265 | CONFIG_PPTP=m | ||
266 | CONFIG_PPPOL2TP=m | ||
267 | CONFIG_PPP_ASYNC=m | ||
268 | CONFIG_PPP_SYNC_TTY=m | ||
196 | CONFIG_SLIP=m | 269 | CONFIG_SLIP=m |
197 | CONFIG_SLIP_COMPRESSED=y | 270 | CONFIG_SLIP_COMPRESSED=y |
198 | CONFIG_SLIP_SMART=y | 271 | CONFIG_SLIP_SMART=y |
199 | CONFIG_SLIP_MODE_SLIP6=y | 272 | CONFIG_SLIP_MODE_SLIP6=y |
200 | CONFIG_NETCONSOLE=m | 273 | # CONFIG_WLAN is not set |
201 | CONFIG_NETCONSOLE_DYNAMIC=y | 274 | CONFIG_INPUT_EVDEV=m |
202 | CONFIG_INPUT_FF_MEMLESS=m | ||
203 | # CONFIG_KEYBOARD_ATKBD is not set | 275 | # CONFIG_KEYBOARD_ATKBD is not set |
204 | CONFIG_KEYBOARD_SUNKBD=y | 276 | CONFIG_KEYBOARD_SUNKBD=y |
205 | CONFIG_MOUSE_PS2=m | 277 | # CONFIG_MOUSE_PS2 is not set |
206 | CONFIG_MOUSE_SERIAL=m | 278 | CONFIG_MOUSE_SERIAL=m |
207 | # CONFIG_SERIO_SERPORT is not set | ||
208 | CONFIG_VT_HW_CONSOLE_BINDING=y | 279 | CONFIG_VT_HW_CONSOLE_BINDING=y |
280 | # CONFIG_LEGACY_PTYS is not set | ||
209 | # CONFIG_DEVKMEM is not set | 281 | # CONFIG_DEVKMEM is not set |
210 | # CONFIG_HW_RANDOM is not set | 282 | # CONFIG_HW_RANDOM is not set |
211 | CONFIG_GEN_RTC=m | 283 | CONFIG_NTP_PPS=y |
212 | CONFIG_GEN_RTC_X=y | 284 | CONFIG_PPS_CLIENT_LDISC=m |
285 | CONFIG_PTP_1588_CLOCK=m | ||
213 | # CONFIG_HWMON is not set | 286 | # CONFIG_HWMON is not set |
214 | CONFIG_FB=y | 287 | CONFIG_FB=y |
215 | CONFIG_FRAMEBUFFER_CONSOLE=y | 288 | CONFIG_FRAMEBUFFER_CONSOLE=y |
216 | CONFIG_LOGO=y | 289 | CONFIG_LOGO=y |
217 | CONFIG_HID=m | 290 | CONFIG_HID=m |
218 | CONFIG_HIDRAW=y | 291 | CONFIG_HIDRAW=y |
292 | CONFIG_UHID=m | ||
293 | # CONFIG_HID_GENERIC is not set | ||
219 | # CONFIG_USB_SUPPORT is not set | 294 | # CONFIG_USB_SUPPORT is not set |
295 | CONFIG_RTC_CLASS=y | ||
296 | CONFIG_RTC_DRV_GENERIC=m | ||
297 | # CONFIG_IOMMU_SUPPORT is not set | ||
298 | CONFIG_PROC_HARDWARE=y | ||
220 | CONFIG_EXT2_FS=y | 299 | CONFIG_EXT2_FS=y |
221 | CONFIG_EXT3_FS=y | 300 | CONFIG_EXT3_FS=y |
222 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | 301 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set |
223 | # CONFIG_EXT3_FS_XATTR is not set | 302 | # CONFIG_EXT3_FS_XATTR is not set |
303 | CONFIG_EXT4_FS=y | ||
224 | CONFIG_REISERFS_FS=m | 304 | CONFIG_REISERFS_FS=m |
225 | CONFIG_JFS_FS=m | 305 | CONFIG_JFS_FS=m |
226 | CONFIG_XFS_FS=m | 306 | CONFIG_XFS_FS=m |
227 | CONFIG_OCFS2_FS=m | 307 | CONFIG_OCFS2_FS=m |
228 | # CONFIG_OCFS2_FS_STATS is not set | ||
229 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 308 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
309 | CONFIG_FANOTIFY=y | ||
230 | CONFIG_QUOTA_NETLINK_INTERFACE=y | 310 | CONFIG_QUOTA_NETLINK_INTERFACE=y |
231 | # CONFIG_PRINT_QUOTA_WARNING is not set | 311 | # CONFIG_PRINT_QUOTA_WARNING is not set |
232 | CONFIG_AUTOFS_FS=m | ||
233 | CONFIG_AUTOFS4_FS=m | 312 | CONFIG_AUTOFS4_FS=m |
234 | CONFIG_FUSE_FS=m | 313 | CONFIG_FUSE_FS=m |
314 | CONFIG_CUSE=m | ||
235 | CONFIG_ISO9660_FS=y | 315 | CONFIG_ISO9660_FS=y |
236 | CONFIG_JOLIET=y | 316 | CONFIG_JOLIET=y |
237 | CONFIG_ZISOFS=y | 317 | CONFIG_ZISOFS=y |
238 | CONFIG_UDF_FS=m | 318 | CONFIG_UDF_FS=m |
239 | CONFIG_MSDOS_FS=y | 319 | CONFIG_MSDOS_FS=m |
240 | CONFIG_VFAT_FS=m | 320 | CONFIG_VFAT_FS=m |
241 | CONFIG_PROC_KCORE=y | 321 | CONFIG_PROC_KCORE=y |
242 | CONFIG_TMPFS=y | 322 | CONFIG_TMPFS=y |
243 | CONFIG_AFFS_FS=m | 323 | CONFIG_AFFS_FS=m |
324 | CONFIG_ECRYPT_FS=m | ||
325 | CONFIG_ECRYPT_FS_MESSAGING=y | ||
244 | CONFIG_HFS_FS=m | 326 | CONFIG_HFS_FS=m |
245 | CONFIG_HFSPLUS_FS=m | 327 | CONFIG_HFSPLUS_FS=m |
246 | CONFIG_CRAMFS=m | 328 | CONFIG_CRAMFS=m |
247 | CONFIG_SQUASHFS=m | 329 | CONFIG_SQUASHFS=m |
248 | CONFIG_MINIX_FS=y | 330 | CONFIG_SQUASHFS_LZO=y |
331 | CONFIG_MINIX_FS=m | ||
332 | CONFIG_OMFS_FS=m | ||
249 | CONFIG_HPFS_FS=m | 333 | CONFIG_HPFS_FS=m |
334 | CONFIG_QNX4FS_FS=m | ||
335 | CONFIG_QNX6FS_FS=m | ||
250 | CONFIG_SYSV_FS=m | 336 | CONFIG_SYSV_FS=m |
251 | CONFIG_UFS_FS=m | 337 | CONFIG_UFS_FS=m |
252 | CONFIG_NFS_FS=y | 338 | CONFIG_NFS_FS=y |
253 | CONFIG_NFS_V3=y | ||
254 | CONFIG_NFS_V4=y | 339 | CONFIG_NFS_V4=y |
340 | CONFIG_NFS_SWAP=y | ||
255 | CONFIG_ROOT_NFS=y | 341 | CONFIG_ROOT_NFS=y |
256 | CONFIG_NFSD=m | 342 | CONFIG_NFSD=m |
257 | CONFIG_NFSD_V3=y | 343 | CONFIG_NFSD_V3=y |
258 | CONFIG_SMB_FS=m | 344 | CONFIG_CIFS=m |
259 | CONFIG_SMB_NLS_DEFAULT=y | 345 | # CONFIG_CIFS_DEBUG is not set |
260 | CONFIG_CODA_FS=m | 346 | CONFIG_CODA_FS=m |
261 | CONFIG_NLS_CODEPAGE_437=y | 347 | CONFIG_NLS_CODEPAGE_437=y |
262 | CONFIG_NLS_CODEPAGE_737=m | 348 | CONFIG_NLS_CODEPAGE_737=m |
@@ -295,10 +381,23 @@ CONFIG_NLS_ISO8859_14=m | |||
295 | CONFIG_NLS_ISO8859_15=m | 381 | CONFIG_NLS_ISO8859_15=m |
296 | CONFIG_NLS_KOI8_R=m | 382 | CONFIG_NLS_KOI8_R=m |
297 | CONFIG_NLS_KOI8_U=m | 383 | CONFIG_NLS_KOI8_U=m |
384 | CONFIG_NLS_MAC_ROMAN=m | ||
385 | CONFIG_NLS_MAC_CELTIC=m | ||
386 | CONFIG_NLS_MAC_CENTEURO=m | ||
387 | CONFIG_NLS_MAC_CROATIAN=m | ||
388 | CONFIG_NLS_MAC_CYRILLIC=m | ||
389 | CONFIG_NLS_MAC_GAELIC=m | ||
390 | CONFIG_NLS_MAC_GREEK=m | ||
391 | CONFIG_NLS_MAC_ICELAND=m | ||
392 | CONFIG_NLS_MAC_INUIT=m | ||
393 | CONFIG_NLS_MAC_ROMANIAN=m | ||
394 | CONFIG_NLS_MAC_TURKISH=m | ||
298 | CONFIG_DLM=m | 395 | CONFIG_DLM=m |
299 | CONFIG_MAGIC_SYSRQ=y | 396 | CONFIG_MAGIC_SYSRQ=y |
300 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 397 | CONFIG_ASYNC_RAID6_TEST=m |
301 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 398 | CONFIG_ENCRYPTED_KEYS=m |
399 | CONFIG_CRYPTO_MANAGER=y | ||
400 | CONFIG_CRYPTO_USER=m | ||
302 | CONFIG_CRYPTO_NULL=m | 401 | CONFIG_CRYPTO_NULL=m |
303 | CONFIG_CRYPTO_CRYPTD=m | 402 | CONFIG_CRYPTO_CRYPTD=m |
304 | CONFIG_CRYPTO_TEST=m | 403 | CONFIG_CRYPTO_TEST=m |
@@ -308,19 +407,16 @@ CONFIG_CRYPTO_CTS=m | |||
308 | CONFIG_CRYPTO_LRW=m | 407 | CONFIG_CRYPTO_LRW=m |
309 | CONFIG_CRYPTO_PCBC=m | 408 | CONFIG_CRYPTO_PCBC=m |
310 | CONFIG_CRYPTO_XTS=m | 409 | CONFIG_CRYPTO_XTS=m |
311 | CONFIG_CRYPTO_HMAC=y | ||
312 | CONFIG_CRYPTO_XCBC=m | 410 | CONFIG_CRYPTO_XCBC=m |
313 | CONFIG_CRYPTO_MD4=m | 411 | CONFIG_CRYPTO_VMAC=m |
314 | CONFIG_CRYPTO_MICHAEL_MIC=m | 412 | CONFIG_CRYPTO_MICHAEL_MIC=m |
315 | CONFIG_CRYPTO_RMD128=m | 413 | CONFIG_CRYPTO_RMD128=m |
316 | CONFIG_CRYPTO_RMD160=m | 414 | CONFIG_CRYPTO_RMD160=m |
317 | CONFIG_CRYPTO_RMD256=m | 415 | CONFIG_CRYPTO_RMD256=m |
318 | CONFIG_CRYPTO_RMD320=m | 416 | CONFIG_CRYPTO_RMD320=m |
319 | CONFIG_CRYPTO_SHA256=m | ||
320 | CONFIG_CRYPTO_SHA512=m | 417 | CONFIG_CRYPTO_SHA512=m |
321 | CONFIG_CRYPTO_TGR192=m | 418 | CONFIG_CRYPTO_TGR192=m |
322 | CONFIG_CRYPTO_WP512=m | 419 | CONFIG_CRYPTO_WP512=m |
323 | CONFIG_CRYPTO_AES=m | ||
324 | CONFIG_CRYPTO_ANUBIS=m | 420 | CONFIG_CRYPTO_ANUBIS=m |
325 | CONFIG_CRYPTO_BLOWFISH=m | 421 | CONFIG_CRYPTO_BLOWFISH=m |
326 | CONFIG_CRYPTO_CAMELLIA=m | 422 | CONFIG_CRYPTO_CAMELLIA=m |
@@ -336,6 +432,14 @@ CONFIG_CRYPTO_TWOFISH=m | |||
336 | CONFIG_CRYPTO_ZLIB=m | 432 | CONFIG_CRYPTO_ZLIB=m |
337 | CONFIG_CRYPTO_LZO=m | 433 | CONFIG_CRYPTO_LZO=m |
338 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 434 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
435 | CONFIG_CRYPTO_USER_API_HASH=m | ||
436 | CONFIG_CRYPTO_USER_API_SKCIPHER=m | ||
339 | # CONFIG_CRYPTO_HW is not set | 437 | # CONFIG_CRYPTO_HW is not set |
340 | CONFIG_CRC16=m | ||
341 | CONFIG_CRC_T10DIF=y | 438 | CONFIG_CRC_T10DIF=y |
439 | CONFIG_XZ_DEC_X86=y | ||
440 | CONFIG_XZ_DEC_POWERPC=y | ||
441 | CONFIG_XZ_DEC_IA64=y | ||
442 | CONFIG_XZ_DEC_ARM=y | ||
443 | CONFIG_XZ_DEC_ARMTHUMB=y | ||
444 | CONFIG_XZ_DEC_SPARC=y | ||
445 | CONFIG_XZ_DEC_TEST=m | ||
diff --git a/arch/m68k/include/asm/Kbuild b/arch/m68k/include/asm/Kbuild index c7933e41f10d..09d77a862da3 100644 --- a/arch/m68k/include/asm/Kbuild +++ b/arch/m68k/include/asm/Kbuild | |||
@@ -6,7 +6,6 @@ generic-y += device.h | |||
6 | generic-y += emergency-restart.h | 6 | generic-y += emergency-restart.h |
7 | generic-y += errno.h | 7 | generic-y += errno.h |
8 | generic-y += exec.h | 8 | generic-y += exec.h |
9 | generic-y += futex.h | ||
10 | generic-y += hw_irq.h | 9 | generic-y += hw_irq.h |
11 | generic-y += ioctl.h | 10 | generic-y += ioctl.h |
12 | generic-y += ipcbuf.h | 11 | generic-y += ipcbuf.h |
diff --git a/arch/m68k/include/asm/futex.h b/arch/m68k/include/asm/futex.h new file mode 100644 index 000000000000..bc868af10c96 --- /dev/null +++ b/arch/m68k/include/asm/futex.h | |||
@@ -0,0 +1,94 @@ | |||
1 | #ifndef _ASM_M68K_FUTEX_H | ||
2 | #define _ASM_M68K_FUTEX_H | ||
3 | |||
4 | #ifdef __KERNEL__ | ||
5 | #if !defined(CONFIG_MMU) | ||
6 | #include <asm-generic/futex.h> | ||
7 | #else /* CONFIG_MMU */ | ||
8 | |||
9 | #include <linux/futex.h> | ||
10 | #include <linux/uaccess.h> | ||
11 | #include <asm/errno.h> | ||
12 | |||
13 | static inline int | ||
14 | futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, | ||
15 | u32 oldval, u32 newval) | ||
16 | { | ||
17 | u32 val; | ||
18 | |||
19 | if (unlikely(get_user(val, uaddr) != 0)) | ||
20 | return -EFAULT; | ||
21 | |||
22 | if (val == oldval && unlikely(put_user(newval, uaddr) != 0)) | ||
23 | return -EFAULT; | ||
24 | |||
25 | *uval = val; | ||
26 | |||
27 | return 0; | ||
28 | } | ||
29 | |||
30 | static inline int | ||
31 | futex_atomic_op_inuser(int encoded_op, u32 __user *uaddr) | ||
32 | { | ||
33 | int op = (encoded_op >> 28) & 7; | ||
34 | int cmp = (encoded_op >> 24) & 15; | ||
35 | int oparg = (encoded_op << 8) >> 20; | ||
36 | int cmparg = (encoded_op << 20) >> 20; | ||
37 | int oldval, ret; | ||
38 | u32 tmp; | ||
39 | |||
40 | if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28)) | ||
41 | oparg = 1 << oparg; | ||
42 | |||
43 | pagefault_disable(); /* implies preempt_disable() */ | ||
44 | |||
45 | ret = -EFAULT; | ||
46 | if (unlikely(get_user(oldval, uaddr) != 0)) | ||
47 | goto out_pagefault_enable; | ||
48 | |||
49 | ret = 0; | ||
50 | tmp = oldval; | ||
51 | |||
52 | switch (op) { | ||
53 | case FUTEX_OP_SET: | ||
54 | tmp = oparg; | ||
55 | break; | ||
56 | case FUTEX_OP_ADD: | ||
57 | tmp += oparg; | ||
58 | break; | ||
59 | case FUTEX_OP_OR: | ||
60 | tmp |= oparg; | ||
61 | break; | ||
62 | case FUTEX_OP_ANDN: | ||
63 | tmp &= ~oparg; | ||
64 | break; | ||
65 | case FUTEX_OP_XOR: | ||
66 | tmp ^= oparg; | ||
67 | break; | ||
68 | default: | ||
69 | ret = -ENOSYS; | ||
70 | } | ||
71 | |||
72 | if (ret == 0 && unlikely(put_user(tmp, uaddr) != 0)) | ||
73 | ret = -EFAULT; | ||
74 | |||
75 | out_pagefault_enable: | ||
76 | pagefault_enable(); /* subsumes preempt_enable() */ | ||
77 | |||
78 | if (ret == 0) { | ||
79 | switch (cmp) { | ||
80 | case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break; | ||
81 | case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break; | ||
82 | case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break; | ||
83 | case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break; | ||
84 | case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break; | ||
85 | case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break; | ||
86 | default: ret = -ENOSYS; | ||
87 | } | ||
88 | } | ||
89 | return ret; | ||
90 | } | ||
91 | |||
92 | #endif /* CONFIG_MMU */ | ||
93 | #endif /* __KERNEL__ */ | ||
94 | #endif /* _ASM_M68K_FUTEX_H */ | ||
diff --git a/arch/m68k/kernel/head.S b/arch/m68k/kernel/head.S index d197e7ff62c5..ac85f16534af 100644 --- a/arch/m68k/kernel/head.S +++ b/arch/m68k/kernel/head.S | |||
@@ -2752,11 +2752,9 @@ func_return get_new_page | |||
2752 | #ifdef CONFIG_MAC | 2752 | #ifdef CONFIG_MAC |
2753 | 2753 | ||
2754 | L(scc_initable_mac): | 2754 | L(scc_initable_mac): |
2755 | .byte 9,12 /* Reset */ | ||
2756 | .byte 4,0x44 /* x16, 1 stopbit, no parity */ | 2755 | .byte 4,0x44 /* x16, 1 stopbit, no parity */ |
2757 | .byte 3,0xc0 /* receiver: 8 bpc */ | 2756 | .byte 3,0xc0 /* receiver: 8 bpc */ |
2758 | .byte 5,0xe2 /* transmitter: 8 bpc, assert dtr/rts */ | 2757 | .byte 5,0xe2 /* transmitter: 8 bpc, assert dtr/rts */ |
2759 | .byte 9,0 /* no interrupts */ | ||
2760 | .byte 10,0 /* NRZ */ | 2758 | .byte 10,0 /* NRZ */ |
2761 | .byte 11,0x50 /* use baud rate generator */ | 2759 | .byte 11,0x50 /* use baud rate generator */ |
2762 | .byte 12,1,13,0 /* 38400 baud */ | 2760 | .byte 12,1,13,0 /* 38400 baud */ |
@@ -2899,6 +2897,7 @@ func_start serial_init,%d0/%d1/%a0/%a1 | |||
2899 | is_not_mac(L(serial_init_not_mac)) | 2897 | is_not_mac(L(serial_init_not_mac)) |
2900 | 2898 | ||
2901 | #ifdef SERIAL_DEBUG | 2899 | #ifdef SERIAL_DEBUG |
2900 | |||
2902 | /* You may define either or both of these. */ | 2901 | /* You may define either or both of these. */ |
2903 | #define MAC_USE_SCC_A /* Modem port */ | 2902 | #define MAC_USE_SCC_A /* Modem port */ |
2904 | #define MAC_USE_SCC_B /* Printer port */ | 2903 | #define MAC_USE_SCC_B /* Printer port */ |
@@ -2908,9 +2907,21 @@ func_start serial_init,%d0/%d1/%a0/%a1 | |||
2908 | #define mac_scc_cha_b_data_offset 0x4 | 2907 | #define mac_scc_cha_b_data_offset 0x4 |
2909 | #define mac_scc_cha_a_data_offset 0x6 | 2908 | #define mac_scc_cha_a_data_offset 0x6 |
2910 | 2909 | ||
2910 | #if defined(MAC_USE_SCC_A) || defined(MAC_USE_SCC_B) | ||
2911 | movel %pc@(L(mac_sccbase)),%a0 | ||
2912 | /* Reset SCC device */ | ||
2913 | moveb #9,%a0@(mac_scc_cha_a_ctrl_offset) | ||
2914 | moveb #0xc0,%a0@(mac_scc_cha_a_ctrl_offset) | ||
2915 | /* Wait for 5 PCLK cycles, which is about 68 CPU cycles */ | ||
2916 | /* 5 / 3.6864 MHz = approx. 1.36 us = 68 / 50 MHz */ | ||
2917 | movel #35,%d0 | ||
2918 | 5: | ||
2919 | subq #1,%d0 | ||
2920 | jne 5b | ||
2921 | #endif | ||
2922 | |||
2911 | #ifdef MAC_USE_SCC_A | 2923 | #ifdef MAC_USE_SCC_A |
2912 | /* Initialize channel A */ | 2924 | /* Initialize channel A */ |
2913 | movel %pc@(L(mac_sccbase)),%a0 | ||
2914 | lea %pc@(L(scc_initable_mac)),%a1 | 2925 | lea %pc@(L(scc_initable_mac)),%a1 |
2915 | 5: moveb %a1@+,%d0 | 2926 | 5: moveb %a1@+,%d0 |
2916 | jmi 6f | 2927 | jmi 6f |
@@ -2922,9 +2933,6 @@ func_start serial_init,%d0/%d1/%a0/%a1 | |||
2922 | 2933 | ||
2923 | #ifdef MAC_USE_SCC_B | 2934 | #ifdef MAC_USE_SCC_B |
2924 | /* Initialize channel B */ | 2935 | /* Initialize channel B */ |
2925 | #ifndef MAC_USE_SCC_A /* Load mac_sccbase only if needed */ | ||
2926 | movel %pc@(L(mac_sccbase)),%a0 | ||
2927 | #endif /* MAC_USE_SCC_A */ | ||
2928 | lea %pc@(L(scc_initable_mac)),%a1 | 2936 | lea %pc@(L(scc_initable_mac)),%a1 |
2929 | 7: moveb %a1@+,%d0 | 2937 | 7: moveb %a1@+,%d0 |
2930 | jmi 8f | 2938 | jmi 8f |
@@ -2933,6 +2941,7 @@ func_start serial_init,%d0/%d1/%a0/%a1 | |||
2933 | jra 7b | 2941 | jra 7b |
2934 | 8: | 2942 | 8: |
2935 | #endif /* MAC_USE_SCC_B */ | 2943 | #endif /* MAC_USE_SCC_B */ |
2944 | |||
2936 | #endif /* SERIAL_DEBUG */ | 2945 | #endif /* SERIAL_DEBUG */ |
2937 | 2946 | ||
2938 | jra L(serial_init_done) | 2947 | jra L(serial_init_done) |
@@ -3006,17 +3015,17 @@ func_start serial_putc,%d0/%d1/%a0/%a1 | |||
3006 | 3015 | ||
3007 | #ifdef SERIAL_DEBUG | 3016 | #ifdef SERIAL_DEBUG |
3008 | 3017 | ||
3009 | #ifdef MAC_USE_SCC_A | 3018 | #if defined(MAC_USE_SCC_A) || defined(MAC_USE_SCC_B) |
3010 | movel %pc@(L(mac_sccbase)),%a1 | 3019 | movel %pc@(L(mac_sccbase)),%a1 |
3020 | #endif | ||
3021 | |||
3022 | #ifdef MAC_USE_SCC_A | ||
3011 | 3: btst #2,%a1@(mac_scc_cha_a_ctrl_offset) | 3023 | 3: btst #2,%a1@(mac_scc_cha_a_ctrl_offset) |
3012 | jeq 3b | 3024 | jeq 3b |
3013 | moveb %d0,%a1@(mac_scc_cha_a_data_offset) | 3025 | moveb %d0,%a1@(mac_scc_cha_a_data_offset) |
3014 | #endif /* MAC_USE_SCC_A */ | 3026 | #endif /* MAC_USE_SCC_A */ |
3015 | 3027 | ||
3016 | #ifdef MAC_USE_SCC_B | 3028 | #ifdef MAC_USE_SCC_B |
3017 | #ifndef MAC_USE_SCC_A /* Load mac_sccbase only if needed */ | ||
3018 | movel %pc@(L(mac_sccbase)),%a1 | ||
3019 | #endif /* MAC_USE_SCC_A */ | ||
3020 | 4: btst #2,%a1@(mac_scc_cha_b_ctrl_offset) | 3029 | 4: btst #2,%a1@(mac_scc_cha_b_ctrl_offset) |
3021 | jeq 4b | 3030 | jeq 4b |
3022 | moveb %d0,%a1@(mac_scc_cha_b_data_offset) | 3031 | moveb %d0,%a1@(mac_scc_cha_b_data_offset) |
diff --git a/arch/microblaze/include/asm/cacheflush.h b/arch/microblaze/include/asm/cacheflush.h index 0f553bc009a0..ffea82a16d2c 100644 --- a/arch/microblaze/include/asm/cacheflush.h +++ b/arch/microblaze/include/asm/cacheflush.h | |||
@@ -102,21 +102,23 @@ do { \ | |||
102 | 102 | ||
103 | #define flush_cache_range(vma, start, len) do { } while (0) | 103 | #define flush_cache_range(vma, start, len) do { } while (0) |
104 | 104 | ||
105 | #define copy_to_user_page(vma, page, vaddr, dst, src, len) \ | 105 | static inline void copy_to_user_page(struct vm_area_struct *vma, |
106 | do { \ | 106 | struct page *page, unsigned long vaddr, |
107 | u32 addr = virt_to_phys(dst); \ | 107 | void *dst, void *src, int len) |
108 | memcpy((dst), (src), (len)); \ | 108 | { |
109 | if (vma->vm_flags & VM_EXEC) { \ | 109 | u32 addr = virt_to_phys(dst); |
110 | invalidate_icache_range((unsigned) (addr), \ | 110 | memcpy(dst, src, len); |
111 | (unsigned) (addr) + PAGE_SIZE); \ | 111 | if (vma->vm_flags & VM_EXEC) { |
112 | flush_dcache_range((unsigned) (addr), \ | 112 | invalidate_icache_range(addr, addr + PAGE_SIZE); |
113 | (unsigned) (addr) + PAGE_SIZE); \ | 113 | flush_dcache_range(addr, addr + PAGE_SIZE); |
114 | } \ | 114 | } |
115 | } while (0) | 115 | } |
116 | 116 | ||
117 | #define copy_from_user_page(vma, page, vaddr, dst, src, len) \ | 117 | static inline void copy_from_user_page(struct vm_area_struct *vma, |
118 | do { \ | 118 | struct page *page, unsigned long vaddr, |
119 | memcpy((dst), (src), (len)); \ | 119 | void *dst, void *src, int len) |
120 | } while (0) | 120 | { |
121 | memcpy(dst, src, len); | ||
122 | } | ||
121 | 123 | ||
122 | #endif /* _ASM_MICROBLAZE_CACHEFLUSH_H */ | 124 | #endif /* _ASM_MICROBLAZE_CACHEFLUSH_H */ |
diff --git a/arch/microblaze/include/asm/futex.h b/arch/microblaze/include/asm/futex.h index ff8cde159d9a..01848f056f43 100644 --- a/arch/microblaze/include/asm/futex.h +++ b/arch/microblaze/include/asm/futex.h | |||
@@ -105,7 +105,7 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, | |||
105 | 105 | ||
106 | __asm__ __volatile__ ("1: lwx %1, %3, r0; \ | 106 | __asm__ __volatile__ ("1: lwx %1, %3, r0; \ |
107 | cmp %2, %1, %4; \ | 107 | cmp %2, %1, %4; \ |
108 | beqi %2, 3f; \ | 108 | bnei %2, 3f; \ |
109 | 2: swx %5, %3, r0; \ | 109 | 2: swx %5, %3, r0; \ |
110 | addic %2, r0, 0; \ | 110 | addic %2, r0, 0; \ |
111 | bnei %2, 1b; \ | 111 | bnei %2, 1b; \ |
diff --git a/arch/microblaze/include/asm/io.h b/arch/microblaze/include/asm/io.h index 8cb8a8566ede..2565cb94f32f 100644 --- a/arch/microblaze/include/asm/io.h +++ b/arch/microblaze/include/asm/io.h | |||
@@ -123,11 +123,11 @@ static inline void writel(unsigned int v, volatile void __iomem *addr) | |||
123 | * inb_p/inw_p/... | 123 | * inb_p/inw_p/... |
124 | * The macros don't do byte-swapping. | 124 | * The macros don't do byte-swapping. |
125 | */ | 125 | */ |
126 | #define inb(port) readb((u8 *)((port))) | 126 | #define inb(port) readb((u8 *)((unsigned long)(port))) |
127 | #define outb(val, port) writeb((val), (u8 *)((unsigned long)(port))) | 127 | #define outb(val, port) writeb((val), (u8 *)((unsigned long)(port))) |
128 | #define inw(port) readw((u16 *)((port))) | 128 | #define inw(port) readw((u16 *)((unsigned long)(port))) |
129 | #define outw(val, port) writew((val), (u16 *)((unsigned long)(port))) | 129 | #define outw(val, port) writew((val), (u16 *)((unsigned long)(port))) |
130 | #define inl(port) readl((u32 *)((port))) | 130 | #define inl(port) readl((u32 *)((unsigned long)(port))) |
131 | #define outl(val, port) writel((val), (u32 *)((unsigned long)(port))) | 131 | #define outl(val, port) writel((val), (u32 *)((unsigned long)(port))) |
132 | 132 | ||
133 | #define inb_p(port) inb((port)) | 133 | #define inb_p(port) inb((port)) |
diff --git a/arch/microblaze/include/asm/uaccess.h b/arch/microblaze/include/asm/uaccess.h index efe59d881789..04e49553bdf9 100644 --- a/arch/microblaze/include/asm/uaccess.h +++ b/arch/microblaze/include/asm/uaccess.h | |||
@@ -99,13 +99,13 @@ static inline int access_ok(int type, const void __user *addr, | |||
99 | if ((get_fs().seg < ((unsigned long)addr)) || | 99 | if ((get_fs().seg < ((unsigned long)addr)) || |
100 | (get_fs().seg < ((unsigned long)addr + size - 1))) { | 100 | (get_fs().seg < ((unsigned long)addr + size - 1))) { |
101 | pr_debug("ACCESS fail: %s at 0x%08x (size 0x%x), seg 0x%08x\n", | 101 | pr_debug("ACCESS fail: %s at 0x%08x (size 0x%x), seg 0x%08x\n", |
102 | type ? "WRITE" : "READ ", (u32)addr, (u32)size, | 102 | type ? "WRITE" : "READ ", (__force u32)addr, (u32)size, |
103 | (u32)get_fs().seg); | 103 | (u32)get_fs().seg); |
104 | return 0; | 104 | return 0; |
105 | } | 105 | } |
106 | ok: | 106 | ok: |
107 | pr_debug("ACCESS OK: %s at 0x%08x (size 0x%x), seg 0x%08x\n", | 107 | pr_debug("ACCESS OK: %s at 0x%08x (size 0x%x), seg 0x%08x\n", |
108 | type ? "WRITE" : "READ ", (u32)addr, (u32)size, | 108 | type ? "WRITE" : "READ ", (__force u32)addr, (u32)size, |
109 | (u32)get_fs().seg); | 109 | (u32)get_fs().seg); |
110 | return 1; | 110 | return 1; |
111 | } | 111 | } |
diff --git a/arch/microblaze/kernel/cpu/cache.c b/arch/microblaze/kernel/cpu/cache.c index 4254514b4c8c..a6e44410672d 100644 --- a/arch/microblaze/kernel/cpu/cache.c +++ b/arch/microblaze/kernel/cpu/cache.c | |||
@@ -140,7 +140,7 @@ do { \ | |||
140 | /* It is used only first parameter for OP - for wic, wdc */ | 140 | /* It is used only first parameter for OP - for wic, wdc */ |
141 | #define CACHE_RANGE_LOOP_1(start, end, line_length, op) \ | 141 | #define CACHE_RANGE_LOOP_1(start, end, line_length, op) \ |
142 | do { \ | 142 | do { \ |
143 | int volatile temp; \ | 143 | int volatile temp = 0; \ |
144 | int align = ~(line_length - 1); \ | 144 | int align = ~(line_length - 1); \ |
145 | end = ((end & align) == end) ? end - line_length : end & align; \ | 145 | end = ((end & align) == end) ? end - line_length : end & align; \ |
146 | WARN_ON(end - start < 0); \ | 146 | WARN_ON(end - start < 0); \ |
diff --git a/arch/mips/include/asm/kvm_host.h b/arch/mips/include/asm/kvm_host.h index 143875c6c95a..4d6fa0bf1305 100644 --- a/arch/mips/include/asm/kvm_host.h +++ b/arch/mips/include/asm/kvm_host.h | |||
@@ -496,10 +496,6 @@ struct kvm_mips_callbacks { | |||
496 | uint32_t cause); | 496 | uint32_t cause); |
497 | int (*irq_clear) (struct kvm_vcpu *vcpu, unsigned int priority, | 497 | int (*irq_clear) (struct kvm_vcpu *vcpu, unsigned int priority, |
498 | uint32_t cause); | 498 | uint32_t cause); |
499 | int (*vcpu_ioctl_get_regs) (struct kvm_vcpu *vcpu, | ||
500 | struct kvm_regs *regs); | ||
501 | int (*vcpu_ioctl_set_regs) (struct kvm_vcpu *vcpu, | ||
502 | struct kvm_regs *regs); | ||
503 | }; | 499 | }; |
504 | extern struct kvm_mips_callbacks *kvm_mips_callbacks; | 500 | extern struct kvm_mips_callbacks *kvm_mips_callbacks; |
505 | int kvm_mips_emulation_init(struct kvm_mips_callbacks **install_callbacks); | 501 | int kvm_mips_emulation_init(struct kvm_mips_callbacks **install_callbacks); |
diff --git a/arch/mips/include/uapi/asm/kvm.h b/arch/mips/include/uapi/asm/kvm.h index 85789eacbf18..3f424f5217da 100644 --- a/arch/mips/include/uapi/asm/kvm.h +++ b/arch/mips/include/uapi/asm/kvm.h | |||
@@ -1,55 +1,138 @@ | |||
1 | /* | 1 | /* |
2 | * This file is subject to the terms and conditions of the GNU General Public | 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 | 3 | * License. See the file "COPYING" in the main directory of this archive |
4 | * for more details. | 4 | * for more details. |
5 | * | 5 | * |
6 | * Copyright (C) 2012 MIPS Technologies, Inc. All rights reserved. | 6 | * Copyright (C) 2012 MIPS Technologies, Inc. All rights reserved. |
7 | * Authors: Sanjay Lal <sanjayl@kymasys.com> | 7 | * Copyright (C) 2013 Cavium, Inc. |
8 | */ | 8 | * Authors: Sanjay Lal <sanjayl@kymasys.com> |
9 | */ | ||
9 | 10 | ||
10 | #ifndef __LINUX_KVM_MIPS_H | 11 | #ifndef __LINUX_KVM_MIPS_H |
11 | #define __LINUX_KVM_MIPS_H | 12 | #define __LINUX_KVM_MIPS_H |
12 | 13 | ||
13 | #include <linux/types.h> | 14 | #include <linux/types.h> |
14 | 15 | ||
15 | #define __KVM_MIPS | 16 | /* |
16 | 17 | * KVM MIPS specific structures and definitions. | |
17 | #define N_MIPS_COPROC_REGS 32 | 18 | * |
18 | #define N_MIPS_COPROC_SEL 8 | 19 | * Some parts derived from the x86 version of this file. |
20 | */ | ||
19 | 21 | ||
20 | /* for KVM_GET_REGS and KVM_SET_REGS */ | 22 | /* |
23 | * for KVM_GET_REGS and KVM_SET_REGS | ||
24 | * | ||
25 | * If Config[AT] is zero (32-bit CPU), the register contents are | ||
26 | * stored in the lower 32-bits of the struct kvm_regs fields and sign | ||
27 | * extended to 64-bits. | ||
28 | */ | ||
21 | struct kvm_regs { | 29 | struct kvm_regs { |
22 | __u32 gprs[32]; | 30 | /* out (KVM_GET_REGS) / in (KVM_SET_REGS) */ |
23 | __u32 hi; | 31 | __u64 gpr[32]; |
24 | __u32 lo; | 32 | __u64 hi; |
25 | __u32 pc; | 33 | __u64 lo; |
26 | 34 | __u64 pc; | |
27 | __u32 cp0reg[N_MIPS_COPROC_REGS][N_MIPS_COPROC_SEL]; | ||
28 | }; | ||
29 | |||
30 | /* for KVM_GET_SREGS and KVM_SET_SREGS */ | ||
31 | struct kvm_sregs { | ||
32 | }; | 35 | }; |
33 | 36 | ||
34 | /* for KVM_GET_FPU and KVM_SET_FPU */ | 37 | /* |
38 | * for KVM_GET_FPU and KVM_SET_FPU | ||
39 | * | ||
40 | * If Status[FR] is zero (32-bit FPU), the upper 32-bits of the FPRs | ||
41 | * are zero filled. | ||
42 | */ | ||
35 | struct kvm_fpu { | 43 | struct kvm_fpu { |
44 | __u64 fpr[32]; | ||
45 | __u32 fir; | ||
46 | __u32 fccr; | ||
47 | __u32 fexr; | ||
48 | __u32 fenr; | ||
49 | __u32 fcsr; | ||
50 | __u32 pad; | ||
36 | }; | 51 | }; |
37 | 52 | ||
53 | |||
54 | /* | ||
55 | * For MIPS, we use KVM_SET_ONE_REG and KVM_GET_ONE_REG to access CP0 | ||
56 | * registers. The id field is broken down as follows: | ||
57 | * | ||
58 | * bits[2..0] - Register 'sel' index. | ||
59 | * bits[7..3] - Register 'rd' index. | ||
60 | * bits[15..8] - Must be zero. | ||
61 | * bits[63..16] - 1 -> CP0 registers. | ||
62 | * | ||
63 | * Other sets registers may be added in the future. Each set would | ||
64 | * have its own identifier in bits[63..16]. | ||
65 | * | ||
66 | * The addr field of struct kvm_one_reg must point to an aligned | ||
67 | * 64-bit wide location. For registers that are narrower than | ||
68 | * 64-bits, the value is stored in the low order bits of the location, | ||
69 | * and sign extended to 64-bits. | ||
70 | * | ||
71 | * The registers defined in struct kvm_regs are also accessible, the | ||
72 | * id values for these are below. | ||
73 | */ | ||
74 | |||
75 | #define KVM_REG_MIPS_R0 0 | ||
76 | #define KVM_REG_MIPS_R1 1 | ||
77 | #define KVM_REG_MIPS_R2 2 | ||
78 | #define KVM_REG_MIPS_R3 3 | ||
79 | #define KVM_REG_MIPS_R4 4 | ||
80 | #define KVM_REG_MIPS_R5 5 | ||
81 | #define KVM_REG_MIPS_R6 6 | ||
82 | #define KVM_REG_MIPS_R7 7 | ||
83 | #define KVM_REG_MIPS_R8 8 | ||
84 | #define KVM_REG_MIPS_R9 9 | ||
85 | #define KVM_REG_MIPS_R10 10 | ||
86 | #define KVM_REG_MIPS_R11 11 | ||
87 | #define KVM_REG_MIPS_R12 12 | ||
88 | #define KVM_REG_MIPS_R13 13 | ||
89 | #define KVM_REG_MIPS_R14 14 | ||
90 | #define KVM_REG_MIPS_R15 15 | ||
91 | #define KVM_REG_MIPS_R16 16 | ||
92 | #define KVM_REG_MIPS_R17 17 | ||
93 | #define KVM_REG_MIPS_R18 18 | ||
94 | #define KVM_REG_MIPS_R19 19 | ||
95 | #define KVM_REG_MIPS_R20 20 | ||
96 | #define KVM_REG_MIPS_R21 21 | ||
97 | #define KVM_REG_MIPS_R22 22 | ||
98 | #define KVM_REG_MIPS_R23 23 | ||
99 | #define KVM_REG_MIPS_R24 24 | ||
100 | #define KVM_REG_MIPS_R25 25 | ||
101 | #define KVM_REG_MIPS_R26 26 | ||
102 | #define KVM_REG_MIPS_R27 27 | ||
103 | #define KVM_REG_MIPS_R28 28 | ||
104 | #define KVM_REG_MIPS_R29 29 | ||
105 | #define KVM_REG_MIPS_R30 30 | ||
106 | #define KVM_REG_MIPS_R31 31 | ||
107 | |||
108 | #define KVM_REG_MIPS_HI 32 | ||
109 | #define KVM_REG_MIPS_LO 33 | ||
110 | #define KVM_REG_MIPS_PC 34 | ||
111 | |||
112 | /* | ||
113 | * KVM MIPS specific structures and definitions | ||
114 | * | ||
115 | */ | ||
38 | struct kvm_debug_exit_arch { | 116 | struct kvm_debug_exit_arch { |
117 | __u64 epc; | ||
39 | }; | 118 | }; |
40 | 119 | ||
41 | /* for KVM_SET_GUEST_DEBUG */ | 120 | /* for KVM_SET_GUEST_DEBUG */ |
42 | struct kvm_guest_debug_arch { | 121 | struct kvm_guest_debug_arch { |
43 | }; | 122 | }; |
44 | 123 | ||
124 | /* definition of registers in kvm_run */ | ||
125 | struct kvm_sync_regs { | ||
126 | }; | ||
127 | |||
128 | /* dummy definition */ | ||
129 | struct kvm_sregs { | ||
130 | }; | ||
131 | |||
45 | struct kvm_mips_interrupt { | 132 | struct kvm_mips_interrupt { |
46 | /* in */ | 133 | /* in */ |
47 | __u32 cpu; | 134 | __u32 cpu; |
48 | __u32 irq; | 135 | __u32 irq; |
49 | }; | 136 | }; |
50 | 137 | ||
51 | /* definition of registers in kvm_run */ | ||
52 | struct kvm_sync_regs { | ||
53 | }; | ||
54 | |||
55 | #endif /* __LINUX_KVM_MIPS_H */ | 138 | #endif /* __LINUX_KVM_MIPS_H */ |
diff --git a/arch/mips/kvm/kvm_mips.c b/arch/mips/kvm/kvm_mips.c index e0dad0289797..d934b017f479 100644 --- a/arch/mips/kvm/kvm_mips.c +++ b/arch/mips/kvm/kvm_mips.c | |||
@@ -195,7 +195,7 @@ void kvm_arch_destroy_vm(struct kvm *kvm) | |||
195 | long | 195 | long |
196 | kvm_arch_dev_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg) | 196 | kvm_arch_dev_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg) |
197 | { | 197 | { |
198 | return -EINVAL; | 198 | return -ENOIOCTLCMD; |
199 | } | 199 | } |
200 | 200 | ||
201 | void kvm_arch_free_memslot(struct kvm_memory_slot *free, | 201 | void kvm_arch_free_memslot(struct kvm_memory_slot *free, |
@@ -401,7 +401,7 @@ int | |||
401 | kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu, | 401 | kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu, |
402 | struct kvm_guest_debug *dbg) | 402 | struct kvm_guest_debug *dbg) |
403 | { | 403 | { |
404 | return -EINVAL; | 404 | return -ENOIOCTLCMD; |
405 | } | 405 | } |
406 | 406 | ||
407 | int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run) | 407 | int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run) |
@@ -475,14 +475,223 @@ int | |||
475 | kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu, | 475 | kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu, |
476 | struct kvm_mp_state *mp_state) | 476 | struct kvm_mp_state *mp_state) |
477 | { | 477 | { |
478 | return -EINVAL; | 478 | return -ENOIOCTLCMD; |
479 | } | 479 | } |
480 | 480 | ||
481 | int | 481 | int |
482 | kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, | 482 | kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, |
483 | struct kvm_mp_state *mp_state) | 483 | struct kvm_mp_state *mp_state) |
484 | { | 484 | { |
485 | return -EINVAL; | 485 | return -ENOIOCTLCMD; |
486 | } | ||
487 | |||
488 | #define KVM_REG_MIPS_CP0_INDEX (0x10000 + 8 * 0 + 0) | ||
489 | #define KVM_REG_MIPS_CP0_ENTRYLO0 (0x10000 + 8 * 2 + 0) | ||
490 | #define KVM_REG_MIPS_CP0_ENTRYLO1 (0x10000 + 8 * 3 + 0) | ||
491 | #define KVM_REG_MIPS_CP0_CONTEXT (0x10000 + 8 * 4 + 0) | ||
492 | #define KVM_REG_MIPS_CP0_USERLOCAL (0x10000 + 8 * 4 + 2) | ||
493 | #define KVM_REG_MIPS_CP0_PAGEMASK (0x10000 + 8 * 5 + 0) | ||
494 | #define KVM_REG_MIPS_CP0_PAGEGRAIN (0x10000 + 8 * 5 + 1) | ||
495 | #define KVM_REG_MIPS_CP0_WIRED (0x10000 + 8 * 6 + 0) | ||
496 | #define KVM_REG_MIPS_CP0_HWRENA (0x10000 + 8 * 7 + 0) | ||
497 | #define KVM_REG_MIPS_CP0_BADVADDR (0x10000 + 8 * 8 + 0) | ||
498 | #define KVM_REG_MIPS_CP0_COUNT (0x10000 + 8 * 9 + 0) | ||
499 | #define KVM_REG_MIPS_CP0_ENTRYHI (0x10000 + 8 * 10 + 0) | ||
500 | #define KVM_REG_MIPS_CP0_COMPARE (0x10000 + 8 * 11 + 0) | ||
501 | #define KVM_REG_MIPS_CP0_STATUS (0x10000 + 8 * 12 + 0) | ||
502 | #define KVM_REG_MIPS_CP0_CAUSE (0x10000 + 8 * 13 + 0) | ||
503 | #define KVM_REG_MIPS_CP0_EBASE (0x10000 + 8 * 15 + 1) | ||
504 | #define KVM_REG_MIPS_CP0_CONFIG (0x10000 + 8 * 16 + 0) | ||
505 | #define KVM_REG_MIPS_CP0_CONFIG1 (0x10000 + 8 * 16 + 1) | ||
506 | #define KVM_REG_MIPS_CP0_CONFIG2 (0x10000 + 8 * 16 + 2) | ||
507 | #define KVM_REG_MIPS_CP0_CONFIG3 (0x10000 + 8 * 16 + 3) | ||
508 | #define KVM_REG_MIPS_CP0_CONFIG7 (0x10000 + 8 * 16 + 7) | ||
509 | #define KVM_REG_MIPS_CP0_XCONTEXT (0x10000 + 8 * 20 + 0) | ||
510 | #define KVM_REG_MIPS_CP0_ERROREPC (0x10000 + 8 * 30 + 0) | ||
511 | |||
512 | static u64 kvm_mips_get_one_regs[] = { | ||
513 | KVM_REG_MIPS_R0, | ||
514 | KVM_REG_MIPS_R1, | ||
515 | KVM_REG_MIPS_R2, | ||
516 | KVM_REG_MIPS_R3, | ||
517 | KVM_REG_MIPS_R4, | ||
518 | KVM_REG_MIPS_R5, | ||
519 | KVM_REG_MIPS_R6, | ||
520 | KVM_REG_MIPS_R7, | ||
521 | KVM_REG_MIPS_R8, | ||
522 | KVM_REG_MIPS_R9, | ||
523 | KVM_REG_MIPS_R10, | ||
524 | KVM_REG_MIPS_R11, | ||
525 | KVM_REG_MIPS_R12, | ||
526 | KVM_REG_MIPS_R13, | ||
527 | KVM_REG_MIPS_R14, | ||
528 | KVM_REG_MIPS_R15, | ||
529 | KVM_REG_MIPS_R16, | ||
530 | KVM_REG_MIPS_R17, | ||
531 | KVM_REG_MIPS_R18, | ||
532 | KVM_REG_MIPS_R19, | ||
533 | KVM_REG_MIPS_R20, | ||
534 | KVM_REG_MIPS_R21, | ||
535 | KVM_REG_MIPS_R22, | ||
536 | KVM_REG_MIPS_R23, | ||
537 | KVM_REG_MIPS_R24, | ||
538 | KVM_REG_MIPS_R25, | ||
539 | KVM_REG_MIPS_R26, | ||
540 | KVM_REG_MIPS_R27, | ||
541 | KVM_REG_MIPS_R28, | ||
542 | KVM_REG_MIPS_R29, | ||
543 | KVM_REG_MIPS_R30, | ||
544 | KVM_REG_MIPS_R31, | ||
545 | |||
546 | KVM_REG_MIPS_HI, | ||
547 | KVM_REG_MIPS_LO, | ||
548 | KVM_REG_MIPS_PC, | ||
549 | |||
550 | KVM_REG_MIPS_CP0_INDEX, | ||
551 | KVM_REG_MIPS_CP0_CONTEXT, | ||
552 | KVM_REG_MIPS_CP0_PAGEMASK, | ||
553 | KVM_REG_MIPS_CP0_WIRED, | ||
554 | KVM_REG_MIPS_CP0_BADVADDR, | ||
555 | KVM_REG_MIPS_CP0_ENTRYHI, | ||
556 | KVM_REG_MIPS_CP0_STATUS, | ||
557 | KVM_REG_MIPS_CP0_CAUSE, | ||
558 | /* EPC set via kvm_regs, et al. */ | ||
559 | KVM_REG_MIPS_CP0_CONFIG, | ||
560 | KVM_REG_MIPS_CP0_CONFIG1, | ||
561 | KVM_REG_MIPS_CP0_CONFIG2, | ||
562 | KVM_REG_MIPS_CP0_CONFIG3, | ||
563 | KVM_REG_MIPS_CP0_CONFIG7, | ||
564 | KVM_REG_MIPS_CP0_ERROREPC | ||
565 | }; | ||
566 | |||
567 | static int kvm_mips_get_reg(struct kvm_vcpu *vcpu, | ||
568 | const struct kvm_one_reg *reg) | ||
569 | { | ||
570 | u64 __user *uaddr = (u64 __user *)(long)reg->addr; | ||
571 | |||
572 | struct mips_coproc *cop0 = vcpu->arch.cop0; | ||
573 | s64 v; | ||
574 | |||
575 | switch (reg->id) { | ||
576 | case KVM_REG_MIPS_R0 ... KVM_REG_MIPS_R31: | ||
577 | v = (long)vcpu->arch.gprs[reg->id - KVM_REG_MIPS_R0]; | ||
578 | break; | ||
579 | case KVM_REG_MIPS_HI: | ||
580 | v = (long)vcpu->arch.hi; | ||
581 | break; | ||
582 | case KVM_REG_MIPS_LO: | ||
583 | v = (long)vcpu->arch.lo; | ||
584 | break; | ||
585 | case KVM_REG_MIPS_PC: | ||
586 | v = (long)vcpu->arch.pc; | ||
587 | break; | ||
588 | |||
589 | case KVM_REG_MIPS_CP0_INDEX: | ||
590 | v = (long)kvm_read_c0_guest_index(cop0); | ||
591 | break; | ||
592 | case KVM_REG_MIPS_CP0_CONTEXT: | ||
593 | v = (long)kvm_read_c0_guest_context(cop0); | ||
594 | break; | ||
595 | case KVM_REG_MIPS_CP0_PAGEMASK: | ||
596 | v = (long)kvm_read_c0_guest_pagemask(cop0); | ||
597 | break; | ||
598 | case KVM_REG_MIPS_CP0_WIRED: | ||
599 | v = (long)kvm_read_c0_guest_wired(cop0); | ||
600 | break; | ||
601 | case KVM_REG_MIPS_CP0_BADVADDR: | ||
602 | v = (long)kvm_read_c0_guest_badvaddr(cop0); | ||
603 | break; | ||
604 | case KVM_REG_MIPS_CP0_ENTRYHI: | ||
605 | v = (long)kvm_read_c0_guest_entryhi(cop0); | ||
606 | break; | ||
607 | case KVM_REG_MIPS_CP0_STATUS: | ||
608 | v = (long)kvm_read_c0_guest_status(cop0); | ||
609 | break; | ||
610 | case KVM_REG_MIPS_CP0_CAUSE: | ||
611 | v = (long)kvm_read_c0_guest_cause(cop0); | ||
612 | break; | ||
613 | case KVM_REG_MIPS_CP0_ERROREPC: | ||
614 | v = (long)kvm_read_c0_guest_errorepc(cop0); | ||
615 | break; | ||
616 | case KVM_REG_MIPS_CP0_CONFIG: | ||
617 | v = (long)kvm_read_c0_guest_config(cop0); | ||
618 | break; | ||
619 | case KVM_REG_MIPS_CP0_CONFIG1: | ||
620 | v = (long)kvm_read_c0_guest_config1(cop0); | ||
621 | break; | ||
622 | case KVM_REG_MIPS_CP0_CONFIG2: | ||
623 | v = (long)kvm_read_c0_guest_config2(cop0); | ||
624 | break; | ||
625 | case KVM_REG_MIPS_CP0_CONFIG3: | ||
626 | v = (long)kvm_read_c0_guest_config3(cop0); | ||
627 | break; | ||
628 | case KVM_REG_MIPS_CP0_CONFIG7: | ||
629 | v = (long)kvm_read_c0_guest_config7(cop0); | ||
630 | break; | ||
631 | default: | ||
632 | return -EINVAL; | ||
633 | } | ||
634 | return put_user(v, uaddr); | ||
635 | } | ||
636 | |||
637 | static int kvm_mips_set_reg(struct kvm_vcpu *vcpu, | ||
638 | const struct kvm_one_reg *reg) | ||
639 | { | ||
640 | u64 __user *uaddr = (u64 __user *)(long)reg->addr; | ||
641 | struct mips_coproc *cop0 = vcpu->arch.cop0; | ||
642 | u64 v; | ||
643 | |||
644 | if (get_user(v, uaddr) != 0) | ||
645 | return -EFAULT; | ||
646 | |||
647 | switch (reg->id) { | ||
648 | case KVM_REG_MIPS_R0: | ||
649 | /* Silently ignore requests to set $0 */ | ||
650 | break; | ||
651 | case KVM_REG_MIPS_R1 ... KVM_REG_MIPS_R31: | ||
652 | vcpu->arch.gprs[reg->id - KVM_REG_MIPS_R0] = v; | ||
653 | break; | ||
654 | case KVM_REG_MIPS_HI: | ||
655 | vcpu->arch.hi = v; | ||
656 | break; | ||
657 | case KVM_REG_MIPS_LO: | ||
658 | vcpu->arch.lo = v; | ||
659 | break; | ||
660 | case KVM_REG_MIPS_PC: | ||
661 | vcpu->arch.pc = v; | ||
662 | break; | ||
663 | |||
664 | case KVM_REG_MIPS_CP0_INDEX: | ||
665 | kvm_write_c0_guest_index(cop0, v); | ||
666 | break; | ||
667 | case KVM_REG_MIPS_CP0_CONTEXT: | ||
668 | kvm_write_c0_guest_context(cop0, v); | ||
669 | break; | ||
670 | case KVM_REG_MIPS_CP0_PAGEMASK: | ||
671 | kvm_write_c0_guest_pagemask(cop0, v); | ||
672 | break; | ||
673 | case KVM_REG_MIPS_CP0_WIRED: | ||
674 | kvm_write_c0_guest_wired(cop0, v); | ||
675 | break; | ||
676 | case KVM_REG_MIPS_CP0_BADVADDR: | ||
677 | kvm_write_c0_guest_badvaddr(cop0, v); | ||
678 | break; | ||
679 | case KVM_REG_MIPS_CP0_ENTRYHI: | ||
680 | kvm_write_c0_guest_entryhi(cop0, v); | ||
681 | break; | ||
682 | case KVM_REG_MIPS_CP0_STATUS: | ||
683 | kvm_write_c0_guest_status(cop0, v); | ||
684 | break; | ||
685 | case KVM_REG_MIPS_CP0_CAUSE: | ||
686 | kvm_write_c0_guest_cause(cop0, v); | ||
687 | break; | ||
688 | case KVM_REG_MIPS_CP0_ERROREPC: | ||
689 | kvm_write_c0_guest_errorepc(cop0, v); | ||
690 | break; | ||
691 | default: | ||
692 | return -EINVAL; | ||
693 | } | ||
694 | return 0; | ||
486 | } | 695 | } |
487 | 696 | ||
488 | long | 697 | long |
@@ -491,9 +700,38 @@ kvm_arch_vcpu_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg) | |||
491 | struct kvm_vcpu *vcpu = filp->private_data; | 700 | struct kvm_vcpu *vcpu = filp->private_data; |
492 | void __user *argp = (void __user *)arg; | 701 | void __user *argp = (void __user *)arg; |
493 | long r; | 702 | long r; |
494 | int intr; | ||
495 | 703 | ||
496 | switch (ioctl) { | 704 | switch (ioctl) { |
705 | case KVM_SET_ONE_REG: | ||
706 | case KVM_GET_ONE_REG: { | ||
707 | struct kvm_one_reg reg; | ||
708 | if (copy_from_user(®, argp, sizeof(reg))) | ||
709 | return -EFAULT; | ||
710 | if (ioctl == KVM_SET_ONE_REG) | ||
711 | return kvm_mips_set_reg(vcpu, ®); | ||
712 | else | ||
713 | return kvm_mips_get_reg(vcpu, ®); | ||
714 | } | ||
715 | case KVM_GET_REG_LIST: { | ||
716 | struct kvm_reg_list __user *user_list = argp; | ||
717 | u64 __user *reg_dest; | ||
718 | struct kvm_reg_list reg_list; | ||
719 | unsigned n; | ||
720 | |||
721 | if (copy_from_user(®_list, user_list, sizeof(reg_list))) | ||
722 | return -EFAULT; | ||
723 | n = reg_list.n; | ||
724 | reg_list.n = ARRAY_SIZE(kvm_mips_get_one_regs); | ||
725 | if (copy_to_user(user_list, ®_list, sizeof(reg_list))) | ||
726 | return -EFAULT; | ||
727 | if (n < reg_list.n) | ||
728 | return -E2BIG; | ||
729 | reg_dest = user_list->reg; | ||
730 | if (copy_to_user(reg_dest, kvm_mips_get_one_regs, | ||
731 | sizeof(kvm_mips_get_one_regs))) | ||
732 | return -EFAULT; | ||
733 | return 0; | ||
734 | } | ||
497 | case KVM_NMI: | 735 | case KVM_NMI: |
498 | /* Treat the NMI as a CPU reset */ | 736 | /* Treat the NMI as a CPU reset */ |
499 | r = kvm_mips_reset_vcpu(vcpu); | 737 | r = kvm_mips_reset_vcpu(vcpu); |
@@ -505,8 +743,6 @@ kvm_arch_vcpu_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg) | |||
505 | if (copy_from_user(&irq, argp, sizeof(irq))) | 743 | if (copy_from_user(&irq, argp, sizeof(irq))) |
506 | goto out; | 744 | goto out; |
507 | 745 | ||
508 | intr = (int)irq.irq; | ||
509 | |||
510 | kvm_debug("[%d] %s: irq: %d\n", vcpu->vcpu_id, __func__, | 746 | kvm_debug("[%d] %s: irq: %d\n", vcpu->vcpu_id, __func__, |
511 | irq.irq); | 747 | irq.irq); |
512 | 748 | ||
@@ -514,7 +750,7 @@ kvm_arch_vcpu_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg) | |||
514 | break; | 750 | break; |
515 | } | 751 | } |
516 | default: | 752 | default: |
517 | r = -EINVAL; | 753 | r = -ENOIOCTLCMD; |
518 | } | 754 | } |
519 | 755 | ||
520 | out: | 756 | out: |
@@ -565,7 +801,7 @@ long kvm_arch_vm_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg) | |||
565 | 801 | ||
566 | switch (ioctl) { | 802 | switch (ioctl) { |
567 | default: | 803 | default: |
568 | r = -EINVAL; | 804 | r = -ENOIOCTLCMD; |
569 | } | 805 | } |
570 | 806 | ||
571 | return r; | 807 | return r; |
@@ -593,13 +829,13 @@ void kvm_arch_exit(void) | |||
593 | int | 829 | int |
594 | kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs) | 830 | kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs) |
595 | { | 831 | { |
596 | return -ENOTSUPP; | 832 | return -ENOIOCTLCMD; |
597 | } | 833 | } |
598 | 834 | ||
599 | int | 835 | int |
600 | kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs) | 836 | kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs) |
601 | { | 837 | { |
602 | return -ENOTSUPP; | 838 | return -ENOIOCTLCMD; |
603 | } | 839 | } |
604 | 840 | ||
605 | int kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu) | 841 | int kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu) |
@@ -609,12 +845,12 @@ int kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu) | |||
609 | 845 | ||
610 | int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu) | 846 | int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu) |
611 | { | 847 | { |
612 | return -ENOTSUPP; | 848 | return -ENOIOCTLCMD; |
613 | } | 849 | } |
614 | 850 | ||
615 | int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu) | 851 | int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu) |
616 | { | 852 | { |
617 | return -ENOTSUPP; | 853 | return -ENOIOCTLCMD; |
618 | } | 854 | } |
619 | 855 | ||
620 | int kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf) | 856 | int kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf) |
@@ -627,6 +863,9 @@ int kvm_dev_ioctl_check_extension(long ext) | |||
627 | int r; | 863 | int r; |
628 | 864 | ||
629 | switch (ext) { | 865 | switch (ext) { |
866 | case KVM_CAP_ONE_REG: | ||
867 | r = 1; | ||
868 | break; | ||
630 | case KVM_CAP_COALESCED_MMIO: | 869 | case KVM_CAP_COALESCED_MMIO: |
631 | r = KVM_COALESCED_MMIO_PAGE_OFFSET; | 870 | r = KVM_COALESCED_MMIO_PAGE_OFFSET; |
632 | break; | 871 | break; |
@@ -635,7 +874,6 @@ int kvm_dev_ioctl_check_extension(long ext) | |||
635 | break; | 874 | break; |
636 | } | 875 | } |
637 | return r; | 876 | return r; |
638 | |||
639 | } | 877 | } |
640 | 878 | ||
641 | int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu) | 879 | int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu) |
@@ -677,28 +915,28 @@ int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) | |||
677 | { | 915 | { |
678 | int i; | 916 | int i; |
679 | 917 | ||
680 | for (i = 0; i < 32; i++) | 918 | for (i = 1; i < ARRAY_SIZE(vcpu->arch.gprs); i++) |
681 | vcpu->arch.gprs[i] = regs->gprs[i]; | 919 | vcpu->arch.gprs[i] = regs->gpr[i]; |
682 | 920 | vcpu->arch.gprs[0] = 0; /* zero is special, and cannot be set. */ | |
683 | vcpu->arch.hi = regs->hi; | 921 | vcpu->arch.hi = regs->hi; |
684 | vcpu->arch.lo = regs->lo; | 922 | vcpu->arch.lo = regs->lo; |
685 | vcpu->arch.pc = regs->pc; | 923 | vcpu->arch.pc = regs->pc; |
686 | 924 | ||
687 | return kvm_mips_callbacks->vcpu_ioctl_set_regs(vcpu, regs); | 925 | return 0; |
688 | } | 926 | } |
689 | 927 | ||
690 | int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) | 928 | int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) |
691 | { | 929 | { |
692 | int i; | 930 | int i; |
693 | 931 | ||
694 | for (i = 0; i < 32; i++) | 932 | for (i = 0; i < ARRAY_SIZE(vcpu->arch.gprs); i++) |
695 | regs->gprs[i] = vcpu->arch.gprs[i]; | 933 | regs->gpr[i] = vcpu->arch.gprs[i]; |
696 | 934 | ||
697 | regs->hi = vcpu->arch.hi; | 935 | regs->hi = vcpu->arch.hi; |
698 | regs->lo = vcpu->arch.lo; | 936 | regs->lo = vcpu->arch.lo; |
699 | regs->pc = vcpu->arch.pc; | 937 | regs->pc = vcpu->arch.pc; |
700 | 938 | ||
701 | return kvm_mips_callbacks->vcpu_ioctl_get_regs(vcpu, regs); | 939 | return 0; |
702 | } | 940 | } |
703 | 941 | ||
704 | void kvm_mips_comparecount_func(unsigned long data) | 942 | void kvm_mips_comparecount_func(unsigned long data) |
diff --git a/arch/mips/kvm/kvm_trap_emul.c b/arch/mips/kvm/kvm_trap_emul.c index 466aeef044bd..30d725321db1 100644 --- a/arch/mips/kvm/kvm_trap_emul.c +++ b/arch/mips/kvm/kvm_trap_emul.c | |||
@@ -345,54 +345,6 @@ static int kvm_trap_emul_handle_break(struct kvm_vcpu *vcpu) | |||
345 | return ret; | 345 | return ret; |
346 | } | 346 | } |
347 | 347 | ||
348 | static int | ||
349 | kvm_trap_emul_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) | ||
350 | { | ||
351 | struct mips_coproc *cop0 = vcpu->arch.cop0; | ||
352 | |||
353 | kvm_write_c0_guest_index(cop0, regs->cp0reg[MIPS_CP0_TLB_INDEX][0]); | ||
354 | kvm_write_c0_guest_context(cop0, regs->cp0reg[MIPS_CP0_TLB_CONTEXT][0]); | ||
355 | kvm_write_c0_guest_badvaddr(cop0, regs->cp0reg[MIPS_CP0_BAD_VADDR][0]); | ||
356 | kvm_write_c0_guest_entryhi(cop0, regs->cp0reg[MIPS_CP0_TLB_HI][0]); | ||
357 | kvm_write_c0_guest_epc(cop0, regs->cp0reg[MIPS_CP0_EXC_PC][0]); | ||
358 | |||
359 | kvm_write_c0_guest_status(cop0, regs->cp0reg[MIPS_CP0_STATUS][0]); | ||
360 | kvm_write_c0_guest_cause(cop0, regs->cp0reg[MIPS_CP0_CAUSE][0]); | ||
361 | kvm_write_c0_guest_pagemask(cop0, | ||
362 | regs->cp0reg[MIPS_CP0_TLB_PG_MASK][0]); | ||
363 | kvm_write_c0_guest_wired(cop0, regs->cp0reg[MIPS_CP0_TLB_WIRED][0]); | ||
364 | kvm_write_c0_guest_errorepc(cop0, regs->cp0reg[MIPS_CP0_ERROR_PC][0]); | ||
365 | |||
366 | return 0; | ||
367 | } | ||
368 | |||
369 | static int | ||
370 | kvm_trap_emul_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) | ||
371 | { | ||
372 | struct mips_coproc *cop0 = vcpu->arch.cop0; | ||
373 | |||
374 | regs->cp0reg[MIPS_CP0_TLB_INDEX][0] = kvm_read_c0_guest_index(cop0); | ||
375 | regs->cp0reg[MIPS_CP0_TLB_CONTEXT][0] = kvm_read_c0_guest_context(cop0); | ||
376 | regs->cp0reg[MIPS_CP0_BAD_VADDR][0] = kvm_read_c0_guest_badvaddr(cop0); | ||
377 | regs->cp0reg[MIPS_CP0_TLB_HI][0] = kvm_read_c0_guest_entryhi(cop0); | ||
378 | regs->cp0reg[MIPS_CP0_EXC_PC][0] = kvm_read_c0_guest_epc(cop0); | ||
379 | |||
380 | regs->cp0reg[MIPS_CP0_STATUS][0] = kvm_read_c0_guest_status(cop0); | ||
381 | regs->cp0reg[MIPS_CP0_CAUSE][0] = kvm_read_c0_guest_cause(cop0); | ||
382 | regs->cp0reg[MIPS_CP0_TLB_PG_MASK][0] = | ||
383 | kvm_read_c0_guest_pagemask(cop0); | ||
384 | regs->cp0reg[MIPS_CP0_TLB_WIRED][0] = kvm_read_c0_guest_wired(cop0); | ||
385 | regs->cp0reg[MIPS_CP0_ERROR_PC][0] = kvm_read_c0_guest_errorepc(cop0); | ||
386 | |||
387 | regs->cp0reg[MIPS_CP0_CONFIG][0] = kvm_read_c0_guest_config(cop0); | ||
388 | regs->cp0reg[MIPS_CP0_CONFIG][1] = kvm_read_c0_guest_config1(cop0); | ||
389 | regs->cp0reg[MIPS_CP0_CONFIG][2] = kvm_read_c0_guest_config2(cop0); | ||
390 | regs->cp0reg[MIPS_CP0_CONFIG][3] = kvm_read_c0_guest_config3(cop0); | ||
391 | regs->cp0reg[MIPS_CP0_CONFIG][7] = kvm_read_c0_guest_config7(cop0); | ||
392 | |||
393 | return 0; | ||
394 | } | ||
395 | |||
396 | static int kvm_trap_emul_vm_init(struct kvm *kvm) | 348 | static int kvm_trap_emul_vm_init(struct kvm *kvm) |
397 | { | 349 | { |
398 | return 0; | 350 | return 0; |
@@ -471,8 +423,6 @@ static struct kvm_mips_callbacks kvm_trap_emul_callbacks = { | |||
471 | .dequeue_io_int = kvm_mips_dequeue_io_int_cb, | 423 | .dequeue_io_int = kvm_mips_dequeue_io_int_cb, |
472 | .irq_deliver = kvm_mips_irq_deliver_cb, | 424 | .irq_deliver = kvm_mips_irq_deliver_cb, |
473 | .irq_clear = kvm_mips_irq_clear_cb, | 425 | .irq_clear = kvm_mips_irq_clear_cb, |
474 | .vcpu_ioctl_get_regs = kvm_trap_emul_ioctl_get_regs, | ||
475 | .vcpu_ioctl_set_regs = kvm_trap_emul_ioctl_set_regs, | ||
476 | }; | 426 | }; |
477 | 427 | ||
478 | int kvm_mips_emulation_init(struct kvm_mips_callbacks **install_callbacks) | 428 | int kvm_mips_emulation_init(struct kvm_mips_callbacks **install_callbacks) |
diff --git a/arch/mn10300/include/asm/pci.h b/arch/mn10300/include/asm/pci.h index 8137c25c4e15..6f31cc0f1a87 100644 --- a/arch/mn10300/include/asm/pci.h +++ b/arch/mn10300/include/asm/pci.h | |||
@@ -103,4 +103,6 @@ static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel) | |||
103 | return channel ? 15 : 14; | 103 | return channel ? 15 : 14; |
104 | } | 104 | } |
105 | 105 | ||
106 | #include <asm-generic/pci_iomap.h> | ||
107 | |||
106 | #endif /* _ASM_PCI_H */ | 108 | #endif /* _ASM_PCI_H */ |
diff --git a/arch/mn10300/kernel/entry.S b/arch/mn10300/kernel/entry.S index 68fcab8f8f6f..222152a3f751 100644 --- a/arch/mn10300/kernel/entry.S +++ b/arch/mn10300/kernel/entry.S | |||
@@ -60,6 +60,7 @@ ENTRY(ret_from_kernel_thread) | |||
60 | mov (REG_D0,fp),d0 | 60 | mov (REG_D0,fp),d0 |
61 | mov (REG_A0,fp),a0 | 61 | mov (REG_A0,fp),a0 |
62 | calls (a0) | 62 | calls (a0) |
63 | GET_THREAD_INFO a2 # A2 must be set on return from sys_exit() | ||
63 | clr d0 | 64 | clr d0 |
64 | mov d0,(REG_D0,fp) | 65 | mov d0,(REG_D0,fp) |
65 | jmp syscall_exit | 66 | jmp syscall_exit |
@@ -107,10 +108,10 @@ syscall_exit_work: | |||
107 | and EPSW_nSL,d0 | 108 | and EPSW_nSL,d0 |
108 | beq resume_kernel # returning to supervisor mode | 109 | beq resume_kernel # returning to supervisor mode |
109 | 110 | ||
110 | btst _TIF_SYSCALL_TRACE,d2 | ||
111 | beq work_pending | ||
112 | LOCAL_IRQ_ENABLE # could let syscall_trace_exit() call | 111 | LOCAL_IRQ_ENABLE # could let syscall_trace_exit() call |
113 | # schedule() instead | 112 | # schedule() instead |
113 | btst _TIF_SYSCALL_TRACE,d2 | ||
114 | beq work_pending | ||
114 | mov fp,d0 | 115 | mov fp,d0 |
115 | call syscall_trace_exit[],0 # do_syscall_trace(regs) | 116 | call syscall_trace_exit[],0 # do_syscall_trace(regs) |
116 | jmp resume_userspace | 117 | jmp resume_userspace |
@@ -123,6 +124,7 @@ work_pending: | |||
123 | work_resched: | 124 | work_resched: |
124 | call schedule[],0 | 125 | call schedule[],0 |
125 | 126 | ||
127 | resume_userspace: | ||
126 | # make sure we don't miss an interrupt setting need_resched or | 128 | # make sure we don't miss an interrupt setting need_resched or |
127 | # sigpending between sampling and the rti | 129 | # sigpending between sampling and the rti |
128 | LOCAL_IRQ_DISABLE | 130 | LOCAL_IRQ_DISABLE |
@@ -131,6 +133,8 @@ work_resched: | |||
131 | mov (TI_flags,a2),d2 | 133 | mov (TI_flags,a2),d2 |
132 | btst _TIF_WORK_MASK,d2 | 134 | btst _TIF_WORK_MASK,d2 |
133 | beq restore_all | 135 | beq restore_all |
136 | |||
137 | LOCAL_IRQ_ENABLE | ||
134 | btst _TIF_NEED_RESCHED,d2 | 138 | btst _TIF_NEED_RESCHED,d2 |
135 | bne work_resched | 139 | bne work_resched |
136 | 140 | ||
@@ -169,17 +173,6 @@ ret_from_intr: | |||
169 | and EPSW_nSL,d0 | 173 | and EPSW_nSL,d0 |
170 | beq resume_kernel # returning to supervisor mode | 174 | beq resume_kernel # returning to supervisor mode |
171 | 175 | ||
172 | ENTRY(resume_userspace) | ||
173 | # make sure we don't miss an interrupt setting need_resched or | ||
174 | # sigpending between sampling and the rti | ||
175 | LOCAL_IRQ_DISABLE | ||
176 | |||
177 | # is there any work to be done on int/exception return? | ||
178 | mov (TI_flags,a2),d2 | ||
179 | btst _TIF_WORK_MASK,d2 | ||
180 | bne work_pending | ||
181 | jmp restore_all | ||
182 | |||
183 | #ifdef CONFIG_PREEMPT | 176 | #ifdef CONFIG_PREEMPT |
184 | ENTRY(resume_kernel) | 177 | ENTRY(resume_kernel) |
185 | LOCAL_IRQ_DISABLE | 178 | LOCAL_IRQ_DISABLE |
diff --git a/arch/mn10300/unit-asb2305/pci.c b/arch/mn10300/unit-asb2305/pci.c index 1adcf024bb9a..e37fac0461f3 100644 --- a/arch/mn10300/unit-asb2305/pci.c +++ b/arch/mn10300/unit-asb2305/pci.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/delay.h> | 19 | #include <linux/delay.h> |
20 | #include <linux/irq.h> | 20 | #include <linux/irq.h> |
21 | #include <asm/io.h> | 21 | #include <asm/io.h> |
22 | #include <asm/irq.h> | ||
22 | #include "pci-asb2305.h" | 23 | #include "pci-asb2305.h" |
23 | 24 | ||
24 | unsigned int pci_probe = 1; | 25 | unsigned int pci_probe = 1; |
diff --git a/arch/parisc/Makefile b/arch/parisc/Makefile index 197690068f88..96ec3982be8d 100644 --- a/arch/parisc/Makefile +++ b/arch/parisc/Makefile | |||
@@ -66,7 +66,7 @@ KBUILD_CFLAGS_KERNEL += -mlong-calls | |||
66 | endif | 66 | endif |
67 | 67 | ||
68 | # select which processor to optimise for | 68 | # select which processor to optimise for |
69 | cflags-$(CONFIG_PA7100) += -march=1.1 -mschedule=7100 | 69 | cflags-$(CONFIG_PA7000) += -march=1.1 -mschedule=7100 |
70 | cflags-$(CONFIG_PA7200) += -march=1.1 -mschedule=7200 | 70 | cflags-$(CONFIG_PA7200) += -march=1.1 -mschedule=7200 |
71 | cflags-$(CONFIG_PA7100LC) += -march=1.1 -mschedule=7100LC | 71 | cflags-$(CONFIG_PA7100LC) += -march=1.1 -mschedule=7100LC |
72 | cflags-$(CONFIG_PA7300LC) += -march=1.1 -mschedule=7300 | 72 | cflags-$(CONFIG_PA7300LC) += -march=1.1 -mschedule=7300 |
diff --git a/arch/parisc/include/asm/assembly.h b/arch/parisc/include/asm/assembly.h index 89fb40005e3f..0da848232344 100644 --- a/arch/parisc/include/asm/assembly.h +++ b/arch/parisc/include/asm/assembly.h | |||
@@ -438,7 +438,6 @@ | |||
438 | SAVE_SP (%sr4, PT_SR4 (\regs)) | 438 | SAVE_SP (%sr4, PT_SR4 (\regs)) |
439 | SAVE_SP (%sr5, PT_SR5 (\regs)) | 439 | SAVE_SP (%sr5, PT_SR5 (\regs)) |
440 | SAVE_SP (%sr6, PT_SR6 (\regs)) | 440 | SAVE_SP (%sr6, PT_SR6 (\regs)) |
441 | SAVE_SP (%sr7, PT_SR7 (\regs)) | ||
442 | 441 | ||
443 | SAVE_CR (%cr17, PT_IASQ0(\regs)) | 442 | SAVE_CR (%cr17, PT_IASQ0(\regs)) |
444 | mtctl %r0, %cr17 | 443 | mtctl %r0, %cr17 |
diff --git a/arch/parisc/include/asm/hardirq.h b/arch/parisc/include/asm/hardirq.h index c19f7138ba48..241c34518465 100644 --- a/arch/parisc/include/asm/hardirq.h +++ b/arch/parisc/include/asm/hardirq.h | |||
@@ -17,17 +17,14 @@ | |||
17 | 17 | ||
18 | typedef struct { | 18 | typedef struct { |
19 | unsigned int __softirq_pending; | 19 | unsigned int __softirq_pending; |
20 | #ifdef CONFIG_DEBUG_STACKOVERFLOW | ||
21 | unsigned int kernel_stack_usage; | 20 | unsigned int kernel_stack_usage; |
22 | #ifdef CONFIG_IRQSTACKS | ||
23 | unsigned int irq_stack_usage; | 21 | unsigned int irq_stack_usage; |
24 | unsigned int irq_stack_counter; | ||
25 | #endif | ||
26 | #endif | ||
27 | #ifdef CONFIG_SMP | 22 | #ifdef CONFIG_SMP |
28 | unsigned int irq_resched_count; | 23 | unsigned int irq_resched_count; |
29 | unsigned int irq_call_count; | 24 | unsigned int irq_call_count; |
30 | #endif | 25 | #endif |
26 | unsigned int irq_unaligned_count; | ||
27 | unsigned int irq_fpassist_count; | ||
31 | unsigned int irq_tlb_count; | 28 | unsigned int irq_tlb_count; |
32 | } ____cacheline_aligned irq_cpustat_t; | 29 | } ____cacheline_aligned irq_cpustat_t; |
33 | 30 | ||
diff --git a/arch/parisc/include/asm/mmzone.h b/arch/parisc/include/asm/mmzone.h index 0e625ab9aaec..cc50d33b7b88 100644 --- a/arch/parisc/include/asm/mmzone.h +++ b/arch/parisc/include/asm/mmzone.h | |||
@@ -39,17 +39,14 @@ extern unsigned char pfnnid_map[PFNNID_MAP_MAX]; | |||
39 | static inline int pfn_to_nid(unsigned long pfn) | 39 | static inline int pfn_to_nid(unsigned long pfn) |
40 | { | 40 | { |
41 | unsigned int i; | 41 | unsigned int i; |
42 | unsigned char r; | ||
43 | 42 | ||
44 | if (unlikely(pfn_is_io(pfn))) | 43 | if (unlikely(pfn_is_io(pfn))) |
45 | return 0; | 44 | return 0; |
46 | 45 | ||
47 | i = pfn >> PFNNID_SHIFT; | 46 | i = pfn >> PFNNID_SHIFT; |
48 | BUG_ON(i >= ARRAY_SIZE(pfnnid_map)); | 47 | BUG_ON(i >= ARRAY_SIZE(pfnnid_map)); |
49 | r = pfnnid_map[i]; | ||
50 | BUG_ON(r == 0xff); | ||
51 | 48 | ||
52 | return (int)r; | 49 | return (int)pfnnid_map[i]; |
53 | } | 50 | } |
54 | 51 | ||
55 | static inline int pfn_valid(int pfn) | 52 | static inline int pfn_valid(int pfn) |
diff --git a/arch/parisc/include/asm/processor.h b/arch/parisc/include/asm/processor.h index cfbc43929cf6..cc2290a3cace 100644 --- a/arch/parisc/include/asm/processor.h +++ b/arch/parisc/include/asm/processor.h | |||
@@ -17,7 +17,6 @@ | |||
17 | #include <asm/ptrace.h> | 17 | #include <asm/ptrace.h> |
18 | #include <asm/types.h> | 18 | #include <asm/types.h> |
19 | #include <asm/percpu.h> | 19 | #include <asm/percpu.h> |
20 | |||
21 | #endif /* __ASSEMBLY__ */ | 20 | #endif /* __ASSEMBLY__ */ |
22 | 21 | ||
23 | /* | 22 | /* |
@@ -59,26 +58,6 @@ | |||
59 | #ifndef __ASSEMBLY__ | 58 | #ifndef __ASSEMBLY__ |
60 | 59 | ||
61 | /* | 60 | /* |
62 | * IRQ STACK - used for irq handler | ||
63 | */ | ||
64 | #ifdef __KERNEL__ | ||
65 | |||
66 | #include <linux/spinlock_types.h> | ||
67 | |||
68 | #define IRQ_STACK_SIZE (4096 << 2) /* 16k irq stack size */ | ||
69 | |||
70 | union irq_stack_union { | ||
71 | unsigned long stack[IRQ_STACK_SIZE/sizeof(unsigned long)]; | ||
72 | raw_spinlock_t lock; | ||
73 | }; | ||
74 | |||
75 | DECLARE_PER_CPU(union irq_stack_union, irq_stack_union); | ||
76 | |||
77 | void call_on_stack(unsigned long p1, void *func, unsigned long new_stack); | ||
78 | |||
79 | #endif /* __KERNEL__ */ | ||
80 | |||
81 | /* | ||
82 | * Data detected about CPUs at boot time which is the same for all CPU's. | 61 | * Data detected about CPUs at boot time which is the same for all CPU's. |
83 | * HP boxes are SMP - ie identical processors. | 62 | * HP boxes are SMP - ie identical processors. |
84 | * | 63 | * |
diff --git a/arch/parisc/kernel/drivers.c b/arch/parisc/kernel/drivers.c index 5709c5e59be8..14285caec71a 100644 --- a/arch/parisc/kernel/drivers.c +++ b/arch/parisc/kernel/drivers.c | |||
@@ -394,7 +394,7 @@ EXPORT_SYMBOL(print_pci_hwpath); | |||
394 | static void setup_bus_id(struct parisc_device *padev) | 394 | static void setup_bus_id(struct parisc_device *padev) |
395 | { | 395 | { |
396 | struct hardware_path path; | 396 | struct hardware_path path; |
397 | char name[20]; | 397 | char name[28]; |
398 | char *output = name; | 398 | char *output = name; |
399 | int i; | 399 | int i; |
400 | 400 | ||
diff --git a/arch/parisc/kernel/entry.S b/arch/parisc/kernel/entry.S index ae27cb6ce19a..e8f07dd28401 100644 --- a/arch/parisc/kernel/entry.S +++ b/arch/parisc/kernel/entry.S | |||
@@ -65,15 +65,11 @@ | |||
65 | rsm PSW_SM_I, %r0 /* barrier for "Relied upon Translation */ | 65 | rsm PSW_SM_I, %r0 /* barrier for "Relied upon Translation */ |
66 | mtsp %r0, %sr4 | 66 | mtsp %r0, %sr4 |
67 | mtsp %r0, %sr5 | 67 | mtsp %r0, %sr5 |
68 | mfsp %sr7, %r1 | 68 | mtsp %r0, %sr6 |
69 | or,= %r0,%r1,%r0 /* Only save sr7 in sr3 if sr7 != 0 */ | ||
70 | mtsp %r1, %sr3 | ||
71 | tovirt_r1 %r29 | 69 | tovirt_r1 %r29 |
72 | load32 KERNEL_PSW, %r1 | 70 | load32 KERNEL_PSW, %r1 |
73 | 71 | ||
74 | rsm PSW_SM_QUIET,%r0 /* second "heavy weight" ctl op */ | 72 | rsm PSW_SM_QUIET,%r0 /* second "heavy weight" ctl op */ |
75 | mtsp %r0, %sr6 | ||
76 | mtsp %r0, %sr7 | ||
77 | mtctl %r0, %cr17 /* Clear IIASQ tail */ | 73 | mtctl %r0, %cr17 /* Clear IIASQ tail */ |
78 | mtctl %r0, %cr17 /* Clear IIASQ head */ | 74 | mtctl %r0, %cr17 /* Clear IIASQ head */ |
79 | mtctl %r1, %ipsw | 75 | mtctl %r1, %ipsw |
@@ -119,17 +115,20 @@ | |||
119 | 115 | ||
120 | /* we save the registers in the task struct */ | 116 | /* we save the registers in the task struct */ |
121 | 117 | ||
118 | copy %r30, %r17 | ||
122 | mfctl %cr30, %r1 | 119 | mfctl %cr30, %r1 |
120 | ldo THREAD_SZ_ALGN(%r1), %r30 | ||
121 | mtsp %r0,%sr7 | ||
122 | mtsp %r16,%sr3 | ||
123 | tophys %r1,%r9 | 123 | tophys %r1,%r9 |
124 | LDREG TI_TASK(%r9), %r1 /* thread_info -> task_struct */ | 124 | LDREG TI_TASK(%r9), %r1 /* thread_info -> task_struct */ |
125 | tophys %r1,%r9 | 125 | tophys %r1,%r9 |
126 | ldo TASK_REGS(%r9),%r9 | 126 | ldo TASK_REGS(%r9),%r9 |
127 | STREG %r30, PT_GR30(%r9) | 127 | STREG %r17,PT_GR30(%r9) |
128 | STREG %r29,PT_GR29(%r9) | 128 | STREG %r29,PT_GR29(%r9) |
129 | STREG %r26,PT_GR26(%r9) | 129 | STREG %r26,PT_GR26(%r9) |
130 | STREG %r16,PT_SR7(%r9) | ||
130 | copy %r9,%r29 | 131 | copy %r9,%r29 |
131 | mfctl %cr30, %r1 | ||
132 | ldo THREAD_SZ_ALGN(%r1), %r30 | ||
133 | .endm | 132 | .endm |
134 | 133 | ||
135 | .macro get_stack_use_r30 | 134 | .macro get_stack_use_r30 |
@@ -137,10 +136,12 @@ | |||
137 | /* we put a struct pt_regs on the stack and save the registers there */ | 136 | /* we put a struct pt_regs on the stack and save the registers there */ |
138 | 137 | ||
139 | tophys %r30,%r9 | 138 | tophys %r30,%r9 |
140 | STREG %r30,PT_GR30(%r9) | 139 | copy %r30,%r1 |
141 | ldo PT_SZ_ALGN(%r30),%r30 | 140 | ldo PT_SZ_ALGN(%r30),%r30 |
141 | STREG %r1,PT_GR30(%r9) | ||
142 | STREG %r29,PT_GR29(%r9) | 142 | STREG %r29,PT_GR29(%r9) |
143 | STREG %r26,PT_GR26(%r9) | 143 | STREG %r26,PT_GR26(%r9) |
144 | STREG %r16,PT_SR7(%r9) | ||
144 | copy %r9,%r29 | 145 | copy %r9,%r29 |
145 | .endm | 146 | .endm |
146 | 147 | ||
diff --git a/arch/parisc/kernel/hardware.c b/arch/parisc/kernel/hardware.c index f7752f6af29e..9e2d2e408529 100644 --- a/arch/parisc/kernel/hardware.c +++ b/arch/parisc/kernel/hardware.c | |||
@@ -222,6 +222,7 @@ static struct hp_hardware hp_hardware_list[] = { | |||
222 | {HPHW_NPROC,0x5DD,0x4,0x81,"Duet W2"}, | 222 | {HPHW_NPROC,0x5DD,0x4,0x81,"Duet W2"}, |
223 | {HPHW_NPROC,0x5DE,0x4,0x81,"Piccolo W+"}, | 223 | {HPHW_NPROC,0x5DE,0x4,0x81,"Piccolo W+"}, |
224 | {HPHW_NPROC,0x5DF,0x4,0x81,"Cantata W2"}, | 224 | {HPHW_NPROC,0x5DF,0x4,0x81,"Cantata W2"}, |
225 | {HPHW_NPROC,0x5DF,0x0,0x00,"Marcato W+? (rp5470)"}, | ||
225 | {HPHW_NPROC,0x5E0,0x4,0x91,"Cantata DC- W2"}, | 226 | {HPHW_NPROC,0x5E0,0x4,0x91,"Cantata DC- W2"}, |
226 | {HPHW_NPROC,0x5E1,0x4,0x91,"Crescendo DC- W2"}, | 227 | {HPHW_NPROC,0x5E1,0x4,0x91,"Crescendo DC- W2"}, |
227 | {HPHW_NPROC,0x5E2,0x4,0x91,"Crescendo 650 W2"}, | 228 | {HPHW_NPROC,0x5E2,0x4,0x91,"Crescendo 650 W2"}, |
diff --git a/arch/parisc/kernel/irq.c b/arch/parisc/kernel/irq.c index 55237a70e197..2e6443b1e922 100644 --- a/arch/parisc/kernel/irq.c +++ b/arch/parisc/kernel/irq.c | |||
@@ -27,11 +27,11 @@ | |||
27 | #include <linux/interrupt.h> | 27 | #include <linux/interrupt.h> |
28 | #include <linux/kernel_stat.h> | 28 | #include <linux/kernel_stat.h> |
29 | #include <linux/seq_file.h> | 29 | #include <linux/seq_file.h> |
30 | #include <linux/spinlock.h> | ||
31 | #include <linux/types.h> | 30 | #include <linux/types.h> |
32 | #include <asm/io.h> | 31 | #include <asm/io.h> |
33 | 32 | ||
34 | #include <asm/smp.h> | 33 | #include <asm/smp.h> |
34 | #include <asm/ldcw.h> | ||
35 | 35 | ||
36 | #undef PARISC_IRQ_CR16_COUNTS | 36 | #undef PARISC_IRQ_CR16_COUNTS |
37 | 37 | ||
@@ -172,10 +172,6 @@ int arch_show_interrupts(struct seq_file *p, int prec) | |||
172 | for_each_online_cpu(j) | 172 | for_each_online_cpu(j) |
173 | seq_printf(p, "%10u ", irq_stats(j)->irq_stack_usage); | 173 | seq_printf(p, "%10u ", irq_stats(j)->irq_stack_usage); |
174 | seq_puts(p, " Interrupt stack usage\n"); | 174 | seq_puts(p, " Interrupt stack usage\n"); |
175 | seq_printf(p, "%*s: ", prec, "ISC"); | ||
176 | for_each_online_cpu(j) | ||
177 | seq_printf(p, "%10u ", irq_stats(j)->irq_stack_counter); | ||
178 | seq_puts(p, " Interrupt stack usage counter\n"); | ||
179 | # endif | 175 | # endif |
180 | #endif | 176 | #endif |
181 | #ifdef CONFIG_SMP | 177 | #ifdef CONFIG_SMP |
@@ -188,6 +184,14 @@ int arch_show_interrupts(struct seq_file *p, int prec) | |||
188 | seq_printf(p, "%10u ", irq_stats(j)->irq_call_count); | 184 | seq_printf(p, "%10u ", irq_stats(j)->irq_call_count); |
189 | seq_puts(p, " Function call interrupts\n"); | 185 | seq_puts(p, " Function call interrupts\n"); |
190 | #endif | 186 | #endif |
187 | seq_printf(p, "%*s: ", prec, "UAH"); | ||
188 | for_each_online_cpu(j) | ||
189 | seq_printf(p, "%10u ", irq_stats(j)->irq_unaligned_count); | ||
190 | seq_puts(p, " Unaligned access handler traps\n"); | ||
191 | seq_printf(p, "%*s: ", prec, "FPA"); | ||
192 | for_each_online_cpu(j) | ||
193 | seq_printf(p, "%10u ", irq_stats(j)->irq_fpassist_count); | ||
194 | seq_puts(p, " Floating point assist traps\n"); | ||
191 | seq_printf(p, "%*s: ", prec, "TLB"); | 195 | seq_printf(p, "%*s: ", prec, "TLB"); |
192 | for_each_online_cpu(j) | 196 | for_each_online_cpu(j) |
193 | seq_printf(p, "%10u ", irq_stats(j)->irq_tlb_count); | 197 | seq_printf(p, "%10u ", irq_stats(j)->irq_tlb_count); |
@@ -376,6 +380,24 @@ static inline int eirr_to_irq(unsigned long eirr) | |||
376 | return (BITS_PER_LONG - bit) + TIMER_IRQ; | 380 | return (BITS_PER_LONG - bit) + TIMER_IRQ; |
377 | } | 381 | } |
378 | 382 | ||
383 | #ifdef CONFIG_IRQSTACKS | ||
384 | /* | ||
385 | * IRQ STACK - used for irq handler | ||
386 | */ | ||
387 | #define IRQ_STACK_SIZE (4096 << 2) /* 16k irq stack size */ | ||
388 | |||
389 | union irq_stack_union { | ||
390 | unsigned long stack[IRQ_STACK_SIZE/sizeof(unsigned long)]; | ||
391 | volatile unsigned int slock[4]; | ||
392 | volatile unsigned int lock[1]; | ||
393 | }; | ||
394 | |||
395 | DEFINE_PER_CPU(union irq_stack_union, irq_stack_union) = { | ||
396 | .slock = { 1,1,1,1 }, | ||
397 | }; | ||
398 | #endif | ||
399 | |||
400 | |||
379 | int sysctl_panic_on_stackoverflow = 1; | 401 | int sysctl_panic_on_stackoverflow = 1; |
380 | 402 | ||
381 | static inline void stack_overflow_check(struct pt_regs *regs) | 403 | static inline void stack_overflow_check(struct pt_regs *regs) |
@@ -442,27 +464,26 @@ panic_check: | |||
442 | } | 464 | } |
443 | 465 | ||
444 | #ifdef CONFIG_IRQSTACKS | 466 | #ifdef CONFIG_IRQSTACKS |
445 | DEFINE_PER_CPU(union irq_stack_union, irq_stack_union) = { | 467 | /* in entry.S: */ |
446 | .lock = __RAW_SPIN_LOCK_UNLOCKED((irq_stack_union).lock) | 468 | void call_on_stack(unsigned long p1, void *func, unsigned long new_stack); |
447 | }; | ||
448 | 469 | ||
449 | static void execute_on_irq_stack(void *func, unsigned long param1) | 470 | static void execute_on_irq_stack(void *func, unsigned long param1) |
450 | { | 471 | { |
451 | union irq_stack_union *union_ptr; | 472 | union irq_stack_union *union_ptr; |
452 | unsigned long irq_stack; | 473 | unsigned long irq_stack; |
453 | raw_spinlock_t *irq_stack_in_use; | 474 | volatile unsigned int *irq_stack_in_use; |
454 | 475 | ||
455 | union_ptr = &per_cpu(irq_stack_union, smp_processor_id()); | 476 | union_ptr = &per_cpu(irq_stack_union, smp_processor_id()); |
456 | irq_stack = (unsigned long) &union_ptr->stack; | 477 | irq_stack = (unsigned long) &union_ptr->stack; |
457 | irq_stack = ALIGN(irq_stack + sizeof(irq_stack_union.lock), | 478 | irq_stack = ALIGN(irq_stack + sizeof(irq_stack_union.slock), |
458 | 64); /* align for stack frame usage */ | 479 | 64); /* align for stack frame usage */ |
459 | 480 | ||
460 | /* We may be called recursive. If we are already using the irq stack, | 481 | /* We may be called recursive. If we are already using the irq stack, |
461 | * just continue to use it. Use spinlocks to serialize | 482 | * just continue to use it. Use spinlocks to serialize |
462 | * the irq stack usage. | 483 | * the irq stack usage. |
463 | */ | 484 | */ |
464 | irq_stack_in_use = &union_ptr->lock; | 485 | irq_stack_in_use = (volatile unsigned int *)__ldcw_align(union_ptr); |
465 | if (!raw_spin_trylock(irq_stack_in_use)) { | 486 | if (!__ldcw(irq_stack_in_use)) { |
466 | void (*direct_call)(unsigned long p1) = func; | 487 | void (*direct_call)(unsigned long p1) = func; |
467 | 488 | ||
468 | /* We are using the IRQ stack already. | 489 | /* We are using the IRQ stack already. |
@@ -474,10 +495,8 @@ static void execute_on_irq_stack(void *func, unsigned long param1) | |||
474 | /* This is where we switch to the IRQ stack. */ | 495 | /* This is where we switch to the IRQ stack. */ |
475 | call_on_stack(param1, func, irq_stack); | 496 | call_on_stack(param1, func, irq_stack); |
476 | 497 | ||
477 | __inc_irq_stat(irq_stack_counter); | ||
478 | |||
479 | /* free up irq stack usage. */ | 498 | /* free up irq stack usage. */ |
480 | do_raw_spin_unlock(irq_stack_in_use); | 499 | *irq_stack_in_use = 1; |
481 | } | 500 | } |
482 | 501 | ||
483 | asmlinkage void do_softirq(void) | 502 | asmlinkage void do_softirq(void) |
diff --git a/arch/parisc/kernel/pacache.S b/arch/parisc/kernel/pacache.S index 5e1de6072be5..36d7f402e48e 100644 --- a/arch/parisc/kernel/pacache.S +++ b/arch/parisc/kernel/pacache.S | |||
@@ -605,14 +605,14 @@ ENTRY(copy_user_page_asm) | |||
605 | convert_phys_for_tlb_insert20 %r26 /* convert phys addr to tlb insert format */ | 605 | convert_phys_for_tlb_insert20 %r26 /* convert phys addr to tlb insert format */ |
606 | convert_phys_for_tlb_insert20 %r23 /* convert phys addr to tlb insert format */ | 606 | convert_phys_for_tlb_insert20 %r23 /* convert phys addr to tlb insert format */ |
607 | depd %r24,63,22, %r28 /* Form aliased virtual address 'to' */ | 607 | depd %r24,63,22, %r28 /* Form aliased virtual address 'to' */ |
608 | depdi 0, 63,PAGE_SHIFT, %r28 /* Clear any offset bits */ | 608 | depdi 0, 63,PAGE_SHIFT, %r28 /* Clear any offset bits */ |
609 | copy %r28, %r29 | 609 | copy %r28, %r29 |
610 | depdi 1, 41,1, %r29 /* Form aliased virtual address 'from' */ | 610 | depdi 1, 41,1, %r29 /* Form aliased virtual address 'from' */ |
611 | #else | 611 | #else |
612 | extrw,u %r26, 24,25, %r26 /* convert phys addr to tlb insert format */ | 612 | extrw,u %r26, 24,25, %r26 /* convert phys addr to tlb insert format */ |
613 | extrw,u %r23, 24,25, %r23 /* convert phys addr to tlb insert format */ | 613 | extrw,u %r23, 24,25, %r23 /* convert phys addr to tlb insert format */ |
614 | depw %r24, 31,22, %r28 /* Form aliased virtual address 'to' */ | 614 | depw %r24, 31,22, %r28 /* Form aliased virtual address 'to' */ |
615 | depwi 0, 31,12, %r28 /* Clear any offset bits */ | 615 | depwi 0, 31,PAGE_SHIFT, %r28 /* Clear any offset bits */ |
616 | copy %r28, %r29 | 616 | copy %r28, %r29 |
617 | depwi 1, 9,1, %r29 /* Form aliased virtual address 'from' */ | 617 | depwi 1, 9,1, %r29 /* Form aliased virtual address 'from' */ |
618 | #endif | 618 | #endif |
@@ -762,7 +762,7 @@ ENTRY(clear_user_page_asm) | |||
762 | #else | 762 | #else |
763 | extrw,u %r26, 24,25, %r26 /* convert phys addr to tlb insert format */ | 763 | extrw,u %r26, 24,25, %r26 /* convert phys addr to tlb insert format */ |
764 | depw %r25, 31,22, %r28 /* Form aliased virtual address 'to' */ | 764 | depw %r25, 31,22, %r28 /* Form aliased virtual address 'to' */ |
765 | depwi 0, 31,12, %r28 /* Clear any offset bits */ | 765 | depwi 0, 31,PAGE_SHIFT, %r28 /* Clear any offset bits */ |
766 | #endif | 766 | #endif |
767 | 767 | ||
768 | /* Purge any old translation */ | 768 | /* Purge any old translation */ |
@@ -846,7 +846,7 @@ ENTRY(flush_dcache_page_asm) | |||
846 | #else | 846 | #else |
847 | extrw,u %r26, 24,25, %r26 /* convert phys addr to tlb insert format */ | 847 | extrw,u %r26, 24,25, %r26 /* convert phys addr to tlb insert format */ |
848 | depw %r25, 31,22, %r28 /* Form aliased virtual address 'to' */ | 848 | depw %r25, 31,22, %r28 /* Form aliased virtual address 'to' */ |
849 | depwi 0, 31,12, %r28 /* Clear any offset bits */ | 849 | depwi 0, 31,PAGE_SHIFT, %r28 /* Clear any offset bits */ |
850 | #endif | 850 | #endif |
851 | 851 | ||
852 | /* Purge any old translation */ | 852 | /* Purge any old translation */ |
@@ -918,11 +918,11 @@ ENTRY(flush_icache_page_asm) | |||
918 | #endif | 918 | #endif |
919 | convert_phys_for_tlb_insert20 %r26 /* convert phys addr to tlb insert format */ | 919 | convert_phys_for_tlb_insert20 %r26 /* convert phys addr to tlb insert format */ |
920 | depd %r25, 63,22, %r28 /* Form aliased virtual address 'to' */ | 920 | depd %r25, 63,22, %r28 /* Form aliased virtual address 'to' */ |
921 | depdi 0, 63,PAGE_SHIFT, %r28 /* Clear any offset bits */ | 921 | depdi 0, 63,PAGE_SHIFT, %r28 /* Clear any offset bits */ |
922 | #else | 922 | #else |
923 | extrw,u %r26, 24,25, %r26 /* convert phys addr to tlb insert format */ | 923 | extrw,u %r26, 24,25, %r26 /* convert phys addr to tlb insert format */ |
924 | depw %r25, 31,22, %r28 /* Form aliased virtual address 'to' */ | 924 | depw %r25, 31,22, %r28 /* Form aliased virtual address 'to' */ |
925 | depwi 0, 31,12, %r28 /* Clear any offset bits */ | 925 | depwi 0, 31,PAGE_SHIFT, %r28 /* Clear any offset bits */ |
926 | #endif | 926 | #endif |
927 | 927 | ||
928 | /* Purge any old translation */ | 928 | /* Purge any old translation */ |
diff --git a/arch/parisc/kernel/setup.c b/arch/parisc/kernel/setup.c index 76b63e726a53..1e95b2000ce8 100644 --- a/arch/parisc/kernel/setup.c +++ b/arch/parisc/kernel/setup.c | |||
@@ -69,7 +69,8 @@ void __init setup_cmdline(char **cmdline_p) | |||
69 | /* called from hpux boot loader */ | 69 | /* called from hpux boot loader */ |
70 | boot_command_line[0] = '\0'; | 70 | boot_command_line[0] = '\0'; |
71 | } else { | 71 | } else { |
72 | strcpy(boot_command_line, (char *)__va(boot_args[1])); | 72 | strlcpy(boot_command_line, (char *)__va(boot_args[1]), |
73 | COMMAND_LINE_SIZE); | ||
73 | 74 | ||
74 | #ifdef CONFIG_BLK_DEV_INITRD | 75 | #ifdef CONFIG_BLK_DEV_INITRD |
75 | if (boot_args[2] != 0) /* did palo pass us a ramdisk? */ | 76 | if (boot_args[2] != 0) /* did palo pass us a ramdisk? */ |
diff --git a/arch/parisc/kernel/traps.c b/arch/parisc/kernel/traps.c index fe41a98043bb..04e47c6a4562 100644 --- a/arch/parisc/kernel/traps.c +++ b/arch/parisc/kernel/traps.c | |||
@@ -646,6 +646,7 @@ void notrace handle_interruption(int code, struct pt_regs *regs) | |||
646 | case 14: | 646 | case 14: |
647 | /* Assist Exception Trap, i.e. floating point exception. */ | 647 | /* Assist Exception Trap, i.e. floating point exception. */ |
648 | die_if_kernel("Floating point exception", regs, 0); /* quiet */ | 648 | die_if_kernel("Floating point exception", regs, 0); /* quiet */ |
649 | __inc_irq_stat(irq_fpassist_count); | ||
649 | handle_fpe(regs); | 650 | handle_fpe(regs); |
650 | return; | 651 | return; |
651 | 652 | ||
diff --git a/arch/parisc/kernel/unaligned.c b/arch/parisc/kernel/unaligned.c index 234e3682cf09..d7c0acb35ec2 100644 --- a/arch/parisc/kernel/unaligned.c +++ b/arch/parisc/kernel/unaligned.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <linux/signal.h> | 27 | #include <linux/signal.h> |
28 | #include <linux/ratelimit.h> | 28 | #include <linux/ratelimit.h> |
29 | #include <asm/uaccess.h> | 29 | #include <asm/uaccess.h> |
30 | #include <asm/hardirq.h> | ||
30 | 31 | ||
31 | /* #define DEBUG_UNALIGNED 1 */ | 32 | /* #define DEBUG_UNALIGNED 1 */ |
32 | 33 | ||
@@ -454,6 +455,8 @@ void handle_unaligned(struct pt_regs *regs) | |||
454 | struct siginfo si; | 455 | struct siginfo si; |
455 | register int flop=0; /* true if this is a flop */ | 456 | register int flop=0; /* true if this is a flop */ |
456 | 457 | ||
458 | __inc_irq_stat(irq_unaligned_count); | ||
459 | |||
457 | /* log a message with pacing */ | 460 | /* log a message with pacing */ |
458 | if (user_mode(regs)) { | 461 | if (user_mode(regs)) { |
459 | if (current->thread.flags & PARISC_UAC_SIGBUS) { | 462 | if (current->thread.flags & PARISC_UAC_SIGBUS) { |
diff --git a/arch/powerpc/include/asm/hvcall.h b/arch/powerpc/include/asm/hvcall.h index cf4df8e2139a..0c7f2bfcf134 100644 --- a/arch/powerpc/include/asm/hvcall.h +++ b/arch/powerpc/include/asm/hvcall.h | |||
@@ -264,6 +264,7 @@ | |||
264 | #define H_GET_MPP 0x2D4 | 264 | #define H_GET_MPP 0x2D4 |
265 | #define H_HOME_NODE_ASSOCIATIVITY 0x2EC | 265 | #define H_HOME_NODE_ASSOCIATIVITY 0x2EC |
266 | #define H_BEST_ENERGY 0x2F4 | 266 | #define H_BEST_ENERGY 0x2F4 |
267 | #define H_XIRR_X 0x2FC | ||
267 | #define H_RANDOM 0x300 | 268 | #define H_RANDOM 0x300 |
268 | #define H_COP 0x304 | 269 | #define H_COP 0x304 |
269 | #define H_GET_MPP_X 0x314 | 270 | #define H_GET_MPP_X 0x314 |
diff --git a/arch/powerpc/include/asm/ppc_asm.h b/arch/powerpc/include/asm/ppc_asm.h index cea8496091ff..2f1b6c5f8174 100644 --- a/arch/powerpc/include/asm/ppc_asm.h +++ b/arch/powerpc/include/asm/ppc_asm.h | |||
@@ -523,6 +523,17 @@ END_FTR_SECTION_NESTED(CPU_FTR_HAS_PPR,CPU_FTR_HAS_PPR,946) | |||
523 | #define PPC440EP_ERR42 | 523 | #define PPC440EP_ERR42 |
524 | #endif | 524 | #endif |
525 | 525 | ||
526 | /* The following stops all load and store data streams associated with stream | ||
527 | * ID (ie. streams created explicitly). The embedded and server mnemonics for | ||
528 | * dcbt are different so we use machine "power4" here explicitly. | ||
529 | */ | ||
530 | #define DCBT_STOP_ALL_STREAM_IDS(scratch) \ | ||
531 | .machine push ; \ | ||
532 | .machine "power4" ; \ | ||
533 | lis scratch,0x60000000@h; \ | ||
534 | dcbt r0,scratch,0b01010; \ | ||
535 | .machine pop | ||
536 | |||
526 | /* | 537 | /* |
527 | * toreal/fromreal/tophys/tovirt macros. 32-bit BookE makes them | 538 | * toreal/fromreal/tophys/tovirt macros. 32-bit BookE makes them |
528 | * keep the address intact to be compatible with code shared with | 539 | * keep the address intact to be compatible with code shared with |
diff --git a/arch/powerpc/include/asm/processor.h b/arch/powerpc/include/asm/processor.h index 594db6bc093c..14a658363698 100644 --- a/arch/powerpc/include/asm/processor.h +++ b/arch/powerpc/include/asm/processor.h | |||
@@ -409,21 +409,16 @@ static inline void prefetchw(const void *x) | |||
409 | #endif | 409 | #endif |
410 | 410 | ||
411 | #ifdef CONFIG_PPC64 | 411 | #ifdef CONFIG_PPC64 |
412 | static inline unsigned long get_clean_sp(struct pt_regs *regs, int is_32) | 412 | static inline unsigned long get_clean_sp(unsigned long sp, int is_32) |
413 | { | 413 | { |
414 | unsigned long sp; | ||
415 | |||
416 | if (is_32) | 414 | if (is_32) |
417 | sp = regs->gpr[1] & 0x0ffffffffUL; | 415 | return sp & 0x0ffffffffUL; |
418 | else | ||
419 | sp = regs->gpr[1]; | ||
420 | |||
421 | return sp; | 416 | return sp; |
422 | } | 417 | } |
423 | #else | 418 | #else |
424 | static inline unsigned long get_clean_sp(struct pt_regs *regs, int is_32) | 419 | static inline unsigned long get_clean_sp(unsigned long sp, int is_32) |
425 | { | 420 | { |
426 | return regs->gpr[1]; | 421 | return sp; |
427 | } | 422 | } |
428 | #endif | 423 | #endif |
429 | 424 | ||
diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h index a6136515c7f2..4a9e408644fe 100644 --- a/arch/powerpc/include/asm/reg.h +++ b/arch/powerpc/include/asm/reg.h | |||
@@ -111,17 +111,6 @@ | |||
111 | #define MSR_TM_TRANSACTIONAL(x) (((x) & MSR_TS_MASK) == MSR_TS_T) | 111 | #define MSR_TM_TRANSACTIONAL(x) (((x) & MSR_TS_MASK) == MSR_TS_T) |
112 | #define MSR_TM_SUSPENDED(x) (((x) & MSR_TS_MASK) == MSR_TS_S) | 112 | #define MSR_TM_SUSPENDED(x) (((x) & MSR_TS_MASK) == MSR_TS_S) |
113 | 113 | ||
114 | /* Reason codes describing kernel causes for transaction aborts. By | ||
115 | convention, bit0 is copied to TEXASR[56] (IBM bit 7) which is set if | ||
116 | the failure is persistent. | ||
117 | */ | ||
118 | #define TM_CAUSE_RESCHED 0xfe | ||
119 | #define TM_CAUSE_TLBI 0xfc | ||
120 | #define TM_CAUSE_FAC_UNAV 0xfa | ||
121 | #define TM_CAUSE_SYSCALL 0xf9 /* Persistent */ | ||
122 | #define TM_CAUSE_MISC 0xf6 | ||
123 | #define TM_CAUSE_SIGNAL 0xf4 | ||
124 | |||
125 | #if defined(CONFIG_PPC_BOOK3S_64) | 114 | #if defined(CONFIG_PPC_BOOK3S_64) |
126 | #define MSR_64BIT MSR_SF | 115 | #define MSR_64BIT MSR_SF |
127 | 116 | ||
diff --git a/arch/powerpc/include/asm/signal.h b/arch/powerpc/include/asm/signal.h index fbe66c463891..9322c28aebd2 100644 --- a/arch/powerpc/include/asm/signal.h +++ b/arch/powerpc/include/asm/signal.h | |||
@@ -3,5 +3,8 @@ | |||
3 | 3 | ||
4 | #define __ARCH_HAS_SA_RESTORER | 4 | #define __ARCH_HAS_SA_RESTORER |
5 | #include <uapi/asm/signal.h> | 5 | #include <uapi/asm/signal.h> |
6 | #include <uapi/asm/ptrace.h> | ||
7 | |||
8 | extern unsigned long get_tm_stackpointer(struct pt_regs *regs); | ||
6 | 9 | ||
7 | #endif /* _ASM_POWERPC_SIGNAL_H */ | 10 | #endif /* _ASM_POWERPC_SIGNAL_H */ |
diff --git a/arch/powerpc/include/asm/tm.h b/arch/powerpc/include/asm/tm.h index 4b4449abf3f8..9dfbc34bdbf5 100644 --- a/arch/powerpc/include/asm/tm.h +++ b/arch/powerpc/include/asm/tm.h | |||
@@ -5,6 +5,8 @@ | |||
5 | * Copyright 2012 Matt Evans & Michael Neuling, IBM Corporation. | 5 | * Copyright 2012 Matt Evans & Michael Neuling, IBM Corporation. |
6 | */ | 6 | */ |
7 | 7 | ||
8 | #include <uapi/asm/tm.h> | ||
9 | |||
8 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM | 10 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM |
9 | extern void do_load_up_transact_fpu(struct thread_struct *thread); | 11 | extern void do_load_up_transact_fpu(struct thread_struct *thread); |
10 | extern void do_load_up_transact_altivec(struct thread_struct *thread); | 12 | extern void do_load_up_transact_altivec(struct thread_struct *thread); |
diff --git a/arch/powerpc/include/uapi/asm/Kbuild b/arch/powerpc/include/uapi/asm/Kbuild index f7bca6370745..5182c8622b54 100644 --- a/arch/powerpc/include/uapi/asm/Kbuild +++ b/arch/powerpc/include/uapi/asm/Kbuild | |||
@@ -40,6 +40,7 @@ header-y += statfs.h | |||
40 | header-y += swab.h | 40 | header-y += swab.h |
41 | header-y += termbits.h | 41 | header-y += termbits.h |
42 | header-y += termios.h | 42 | header-y += termios.h |
43 | header-y += tm.h | ||
43 | header-y += types.h | 44 | header-y += types.h |
44 | header-y += ucontext.h | 45 | header-y += ucontext.h |
45 | header-y += unistd.h | 46 | header-y += unistd.h |
diff --git a/arch/powerpc/include/uapi/asm/tm.h b/arch/powerpc/include/uapi/asm/tm.h new file mode 100644 index 000000000000..85059a00f560 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/tm.h | |||
@@ -0,0 +1,18 @@ | |||
1 | #ifndef _ASM_POWERPC_TM_H | ||
2 | #define _ASM_POWERPC_TM_H | ||
3 | |||
4 | /* Reason codes describing kernel causes for transaction aborts. By | ||
5 | * convention, bit0 is copied to TEXASR[56] (IBM bit 7) which is set if | ||
6 | * the failure is persistent. PAPR saves 0xff-0xe0 for the hypervisor. | ||
7 | */ | ||
8 | #define TM_CAUSE_PERSISTENT 0x01 | ||
9 | #define TM_CAUSE_RESCHED 0xde | ||
10 | #define TM_CAUSE_TLBI 0xdc | ||
11 | #define TM_CAUSE_FAC_UNAV 0xda | ||
12 | #define TM_CAUSE_SYSCALL 0xd8 /* future use */ | ||
13 | #define TM_CAUSE_MISC 0xd6 /* future use */ | ||
14 | #define TM_CAUSE_SIGNAL 0xd4 | ||
15 | #define TM_CAUSE_ALIGNMENT 0xd2 | ||
16 | #define TM_CAUSE_EMULATE 0xd0 | ||
17 | |||
18 | #endif | ||
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c index c60bbec25c1f..1f0937d7d4b5 100644 --- a/arch/powerpc/kernel/cputable.c +++ b/arch/powerpc/kernel/cputable.c | |||
@@ -453,7 +453,7 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
453 | .icache_bsize = 128, | 453 | .icache_bsize = 128, |
454 | .dcache_bsize = 128, | 454 | .dcache_bsize = 128, |
455 | .oprofile_type = PPC_OPROFILE_POWER4, | 455 | .oprofile_type = PPC_OPROFILE_POWER4, |
456 | .oprofile_cpu_type = "ppc64/ibm-compat-v1", | 456 | .oprofile_cpu_type = 0, |
457 | .cpu_setup = __setup_cpu_power8, | 457 | .cpu_setup = __setup_cpu_power8, |
458 | .cpu_restore = __restore_cpu_power8, | 458 | .cpu_restore = __restore_cpu_power8, |
459 | .platform = "power8", | 459 | .platform = "power8", |
@@ -482,7 +482,7 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
482 | .cpu_name = "POWER7+ (raw)", | 482 | .cpu_name = "POWER7+ (raw)", |
483 | .cpu_features = CPU_FTRS_POWER7, | 483 | .cpu_features = CPU_FTRS_POWER7, |
484 | .cpu_user_features = COMMON_USER_POWER7, | 484 | .cpu_user_features = COMMON_USER_POWER7, |
485 | .cpu_user_features = COMMON_USER2_POWER7, | 485 | .cpu_user_features2 = COMMON_USER2_POWER7, |
486 | .mmu_features = MMU_FTRS_POWER7, | 486 | .mmu_features = MMU_FTRS_POWER7, |
487 | .icache_bsize = 128, | 487 | .icache_bsize = 128, |
488 | .dcache_bsize = 128, | 488 | .dcache_bsize = 128, |
@@ -506,7 +506,7 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
506 | .dcache_bsize = 128, | 506 | .dcache_bsize = 128, |
507 | .num_pmcs = 6, | 507 | .num_pmcs = 6, |
508 | .pmc_type = PPC_PMC_IBM, | 508 | .pmc_type = PPC_PMC_IBM, |
509 | .oprofile_cpu_type = "ppc64/power8", | 509 | .oprofile_cpu_type = 0, |
510 | .oprofile_type = PPC_OPROFILE_POWER4, | 510 | .oprofile_type = PPC_OPROFILE_POWER4, |
511 | .cpu_setup = __setup_cpu_power8, | 511 | .cpu_setup = __setup_cpu_power8, |
512 | .cpu_restore = __restore_cpu_power8, | 512 | .cpu_restore = __restore_cpu_power8, |
diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S index d22e73e4618b..22b45a4955cd 100644 --- a/arch/powerpc/kernel/entry_32.S +++ b/arch/powerpc/kernel/entry_32.S | |||
@@ -849,7 +849,7 @@ resume_kernel: | |||
849 | /* check current_thread_info, _TIF_EMULATE_STACK_STORE */ | 849 | /* check current_thread_info, _TIF_EMULATE_STACK_STORE */ |
850 | CURRENT_THREAD_INFO(r9, r1) | 850 | CURRENT_THREAD_INFO(r9, r1) |
851 | lwz r8,TI_FLAGS(r9) | 851 | lwz r8,TI_FLAGS(r9) |
852 | andis. r8,r8,_TIF_EMULATE_STACK_STORE@h | 852 | andis. r0,r8,_TIF_EMULATE_STACK_STORE@h |
853 | beq+ 1f | 853 | beq+ 1f |
854 | 854 | ||
855 | addi r8,r1,INT_FRAME_SIZE /* Get the kprobed function entry */ | 855 | addi r8,r1,INT_FRAME_SIZE /* Get the kprobed function entry */ |
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S index 0e9095e47b5b..246b11c4fe7e 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S | |||
@@ -501,6 +501,13 @@ BEGIN_FTR_SECTION | |||
501 | ldarx r6,0,r1 | 501 | ldarx r6,0,r1 |
502 | END_FTR_SECTION_IFSET(CPU_FTR_STCX_CHECKS_ADDRESS) | 502 | END_FTR_SECTION_IFSET(CPU_FTR_STCX_CHECKS_ADDRESS) |
503 | 503 | ||
504 | #ifdef CONFIG_PPC_BOOK3S | ||
505 | /* Cancel all explict user streams as they will have no use after context | ||
506 | * switch and will stop the HW from creating streams itself | ||
507 | */ | ||
508 | DCBT_STOP_ALL_STREAM_IDS(r6) | ||
509 | #endif | ||
510 | |||
504 | addi r6,r4,-THREAD /* Convert THREAD to 'current' */ | 511 | addi r6,r4,-THREAD /* Convert THREAD to 'current' */ |
505 | std r6,PACACURRENT(r13) /* Set new 'current' */ | 512 | std r6,PACACURRENT(r13) /* Set new 'current' */ |
506 | 513 | ||
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c index e9acf50dd5b2..7f2273cc3c7d 100644 --- a/arch/powerpc/kernel/pci-common.c +++ b/arch/powerpc/kernel/pci-common.c | |||
@@ -657,15 +657,6 @@ void pci_resource_to_user(const struct pci_dev *dev, int bar, | |||
657 | * ranges. However, some machines (thanks Apple !) tend to split their | 657 | * ranges. However, some machines (thanks Apple !) tend to split their |
658 | * space into lots of small contiguous ranges. So we have to coalesce. | 658 | * space into lots of small contiguous ranges. So we have to coalesce. |
659 | * | 659 | * |
660 | * - We can only cope with all memory ranges having the same offset | ||
661 | * between CPU addresses and PCI addresses. Unfortunately, some bridges | ||
662 | * are setup for a large 1:1 mapping along with a small "window" which | ||
663 | * maps PCI address 0 to some arbitrary high address of the CPU space in | ||
664 | * order to give access to the ISA memory hole. | ||
665 | * The way out of here that I've chosen for now is to always set the | ||
666 | * offset based on the first resource found, then override it if we | ||
667 | * have a different offset and the previous was set by an ISA hole. | ||
668 | * | ||
669 | * - Some busses have IO space not starting at 0, which causes trouble with | 660 | * - Some busses have IO space not starting at 0, which causes trouble with |
670 | * the way we do our IO resource renumbering. The code somewhat deals with | 661 | * the way we do our IO resource renumbering. The code somewhat deals with |
671 | * it for 64 bits but I would expect problems on 32 bits. | 662 | * it for 64 bits but I would expect problems on 32 bits. |
@@ -680,10 +671,9 @@ void pci_process_bridge_OF_ranges(struct pci_controller *hose, | |||
680 | int rlen; | 671 | int rlen; |
681 | int pna = of_n_addr_cells(dev); | 672 | int pna = of_n_addr_cells(dev); |
682 | int np = pna + 5; | 673 | int np = pna + 5; |
683 | int memno = 0, isa_hole = -1; | 674 | int memno = 0; |
684 | u32 pci_space; | 675 | u32 pci_space; |
685 | unsigned long long pci_addr, cpu_addr, pci_next, cpu_next, size; | 676 | unsigned long long pci_addr, cpu_addr, pci_next, cpu_next, size; |
686 | unsigned long long isa_mb = 0; | ||
687 | struct resource *res; | 677 | struct resource *res; |
688 | 678 | ||
689 | printk(KERN_INFO "PCI host bridge %s %s ranges:\n", | 679 | printk(KERN_INFO "PCI host bridge %s %s ranges:\n", |
@@ -777,8 +767,6 @@ void pci_process_bridge_OF_ranges(struct pci_controller *hose, | |||
777 | } | 767 | } |
778 | /* Handles ISA memory hole space here */ | 768 | /* Handles ISA memory hole space here */ |
779 | if (pci_addr == 0) { | 769 | if (pci_addr == 0) { |
780 | isa_mb = cpu_addr; | ||
781 | isa_hole = memno; | ||
782 | if (primary || isa_mem_base == 0) | 770 | if (primary || isa_mem_base == 0) |
783 | isa_mem_base = cpu_addr; | 771 | isa_mem_base = cpu_addr; |
784 | hose->isa_mem_phys = cpu_addr; | 772 | hose->isa_mem_phys = cpu_addr; |
diff --git a/arch/powerpc/kernel/signal.c b/arch/powerpc/kernel/signal.c index 577a8aa69c6e..457e97aa2945 100644 --- a/arch/powerpc/kernel/signal.c +++ b/arch/powerpc/kernel/signal.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <asm/uaccess.h> | 18 | #include <asm/uaccess.h> |
19 | #include <asm/unistd.h> | 19 | #include <asm/unistd.h> |
20 | #include <asm/debug.h> | 20 | #include <asm/debug.h> |
21 | #include <asm/tm.h> | ||
21 | 22 | ||
22 | #include "signal.h" | 23 | #include "signal.h" |
23 | 24 | ||
@@ -30,13 +31,13 @@ int show_unhandled_signals = 1; | |||
30 | /* | 31 | /* |
31 | * Allocate space for the signal frame | 32 | * Allocate space for the signal frame |
32 | */ | 33 | */ |
33 | void __user * get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, | 34 | void __user * get_sigframe(struct k_sigaction *ka, unsigned long sp, |
34 | size_t frame_size, int is_32) | 35 | size_t frame_size, int is_32) |
35 | { | 36 | { |
36 | unsigned long oldsp, newsp; | 37 | unsigned long oldsp, newsp; |
37 | 38 | ||
38 | /* Default to using normal stack */ | 39 | /* Default to using normal stack */ |
39 | oldsp = get_clean_sp(regs, is_32); | 40 | oldsp = get_clean_sp(sp, is_32); |
40 | 41 | ||
41 | /* Check for alt stack */ | 42 | /* Check for alt stack */ |
42 | if ((ka->sa.sa_flags & SA_ONSTACK) && | 43 | if ((ka->sa.sa_flags & SA_ONSTACK) && |
@@ -175,3 +176,38 @@ void do_notify_resume(struct pt_regs *regs, unsigned long thread_info_flags) | |||
175 | 176 | ||
176 | user_enter(); | 177 | user_enter(); |
177 | } | 178 | } |
179 | |||
180 | unsigned long get_tm_stackpointer(struct pt_regs *regs) | ||
181 | { | ||
182 | /* When in an active transaction that takes a signal, we need to be | ||
183 | * careful with the stack. It's possible that the stack has moved back | ||
184 | * up after the tbegin. The obvious case here is when the tbegin is | ||
185 | * called inside a function that returns before a tend. In this case, | ||
186 | * the stack is part of the checkpointed transactional memory state. | ||
187 | * If we write over this non transactionally or in suspend, we are in | ||
188 | * trouble because if we get a tm abort, the program counter and stack | ||
189 | * pointer will be back at the tbegin but our in memory stack won't be | ||
190 | * valid anymore. | ||
191 | * | ||
192 | * To avoid this, when taking a signal in an active transaction, we | ||
193 | * need to use the stack pointer from the checkpointed state, rather | ||
194 | * than the speculated state. This ensures that the signal context | ||
195 | * (written tm suspended) will be written below the stack required for | ||
196 | * the rollback. The transaction is aborted becuase of the treclaim, | ||
197 | * so any memory written between the tbegin and the signal will be | ||
198 | * rolled back anyway. | ||
199 | * | ||
200 | * For signals taken in non-TM or suspended mode, we use the | ||
201 | * normal/non-checkpointed stack pointer. | ||
202 | */ | ||
203 | |||
204 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM | ||
205 | if (MSR_TM_ACTIVE(regs->msr)) { | ||
206 | tm_enable(); | ||
207 | tm_reclaim(¤t->thread, regs->msr, TM_CAUSE_SIGNAL); | ||
208 | if (MSR_TM_TRANSACTIONAL(regs->msr)) | ||
209 | return current->thread.ckpt_regs.gpr[1]; | ||
210 | } | ||
211 | #endif | ||
212 | return regs->gpr[1]; | ||
213 | } | ||
diff --git a/arch/powerpc/kernel/signal.h b/arch/powerpc/kernel/signal.h index ec84c901ceab..c69b9aeb9f23 100644 --- a/arch/powerpc/kernel/signal.h +++ b/arch/powerpc/kernel/signal.h | |||
@@ -12,7 +12,7 @@ | |||
12 | 12 | ||
13 | extern void do_notify_resume(struct pt_regs *regs, unsigned long thread_info_flags); | 13 | extern void do_notify_resume(struct pt_regs *regs, unsigned long thread_info_flags); |
14 | 14 | ||
15 | extern void __user * get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, | 15 | extern void __user * get_sigframe(struct k_sigaction *ka, unsigned long sp, |
16 | size_t frame_size, int is_32); | 16 | size_t frame_size, int is_32); |
17 | 17 | ||
18 | extern int handle_signal32(unsigned long sig, struct k_sigaction *ka, | 18 | extern int handle_signal32(unsigned long sig, struct k_sigaction *ka, |
diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c index 95068bf569ad..201385c3a1ae 100644 --- a/arch/powerpc/kernel/signal_32.c +++ b/arch/powerpc/kernel/signal_32.c | |||
@@ -503,12 +503,6 @@ static int save_tm_user_regs(struct pt_regs *regs, | |||
503 | { | 503 | { |
504 | unsigned long msr = regs->msr; | 504 | unsigned long msr = regs->msr; |
505 | 505 | ||
506 | /* tm_reclaim rolls back all reg states, updating thread.ckpt_regs, | ||
507 | * thread.transact_fpr[], thread.transact_vr[], etc. | ||
508 | */ | ||
509 | tm_enable(); | ||
510 | tm_reclaim(¤t->thread, msr, TM_CAUSE_SIGNAL); | ||
511 | |||
512 | /* Make sure floating point registers are stored in regs */ | 506 | /* Make sure floating point registers are stored in regs */ |
513 | flush_fp_to_thread(current); | 507 | flush_fp_to_thread(current); |
514 | 508 | ||
@@ -965,7 +959,7 @@ int handle_rt_signal32(unsigned long sig, struct k_sigaction *ka, | |||
965 | 959 | ||
966 | /* Set up Signal Frame */ | 960 | /* Set up Signal Frame */ |
967 | /* Put a Real Time Context onto stack */ | 961 | /* Put a Real Time Context onto stack */ |
968 | rt_sf = get_sigframe(ka, regs, sizeof(*rt_sf), 1); | 962 | rt_sf = get_sigframe(ka, get_tm_stackpointer(regs), sizeof(*rt_sf), 1); |
969 | addr = rt_sf; | 963 | addr = rt_sf; |
970 | if (unlikely(rt_sf == NULL)) | 964 | if (unlikely(rt_sf == NULL)) |
971 | goto badframe; | 965 | goto badframe; |
@@ -1403,7 +1397,7 @@ int handle_signal32(unsigned long sig, struct k_sigaction *ka, | |||
1403 | unsigned long tramp; | 1397 | unsigned long tramp; |
1404 | 1398 | ||
1405 | /* Set up Signal Frame */ | 1399 | /* Set up Signal Frame */ |
1406 | frame = get_sigframe(ka, regs, sizeof(*frame), 1); | 1400 | frame = get_sigframe(ka, get_tm_stackpointer(regs), sizeof(*frame), 1); |
1407 | if (unlikely(frame == NULL)) | 1401 | if (unlikely(frame == NULL)) |
1408 | goto badframe; | 1402 | goto badframe; |
1409 | sc = (struct sigcontext __user *) &frame->sctx; | 1403 | sc = (struct sigcontext __user *) &frame->sctx; |
diff --git a/arch/powerpc/kernel/signal_64.c b/arch/powerpc/kernel/signal_64.c index c1794286098c..345947367ec0 100644 --- a/arch/powerpc/kernel/signal_64.c +++ b/arch/powerpc/kernel/signal_64.c | |||
@@ -154,11 +154,12 @@ static long setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs, | |||
154 | * As above, but Transactional Memory is in use, so deliver sigcontexts | 154 | * As above, but Transactional Memory is in use, so deliver sigcontexts |
155 | * containing checkpointed and transactional register states. | 155 | * containing checkpointed and transactional register states. |
156 | * | 156 | * |
157 | * To do this, we treclaim to gather both sets of registers and set up the | 157 | * To do this, we treclaim (done before entering here) to gather both sets of |
158 | * 'normal' sigcontext registers with rolled-back register values such that a | 158 | * registers and set up the 'normal' sigcontext registers with rolled-back |
159 | * simple signal handler sees a correct checkpointed register state. | 159 | * register values such that a simple signal handler sees a correct |
160 | * If interested, a TM-aware sighandler can examine the transactional registers | 160 | * checkpointed register state. If interested, a TM-aware sighandler can |
161 | * in the 2nd sigcontext to determine the real origin of the signal. | 161 | * examine the transactional registers in the 2nd sigcontext to determine the |
162 | * real origin of the signal. | ||
162 | */ | 163 | */ |
163 | static long setup_tm_sigcontexts(struct sigcontext __user *sc, | 164 | static long setup_tm_sigcontexts(struct sigcontext __user *sc, |
164 | struct sigcontext __user *tm_sc, | 165 | struct sigcontext __user *tm_sc, |
@@ -184,16 +185,6 @@ static long setup_tm_sigcontexts(struct sigcontext __user *sc, | |||
184 | 185 | ||
185 | BUG_ON(!MSR_TM_ACTIVE(regs->msr)); | 186 | BUG_ON(!MSR_TM_ACTIVE(regs->msr)); |
186 | 187 | ||
187 | /* tm_reclaim rolls back all reg states, saving checkpointed (older) | ||
188 | * GPRs to thread.ckpt_regs and (if used) FPRs to (newer) | ||
189 | * thread.transact_fp and/or VRs to (newer) thread.transact_vr. | ||
190 | * THEN we save out FP/VRs, if necessary, to the checkpointed (older) | ||
191 | * thread.fr[]/vr[]s. The transactional (newer) GPRs are on the | ||
192 | * stack, in *regs. | ||
193 | */ | ||
194 | tm_enable(); | ||
195 | tm_reclaim(¤t->thread, msr, TM_CAUSE_SIGNAL); | ||
196 | |||
197 | flush_fp_to_thread(current); | 188 | flush_fp_to_thread(current); |
198 | 189 | ||
199 | #ifdef CONFIG_ALTIVEC | 190 | #ifdef CONFIG_ALTIVEC |
@@ -711,7 +702,7 @@ int handle_rt_signal64(int signr, struct k_sigaction *ka, siginfo_t *info, | |||
711 | unsigned long newsp = 0; | 702 | unsigned long newsp = 0; |
712 | long err = 0; | 703 | long err = 0; |
713 | 704 | ||
714 | frame = get_sigframe(ka, regs, sizeof(*frame), 0); | 705 | frame = get_sigframe(ka, get_tm_stackpointer(regs), sizeof(*frame), 0); |
715 | if (unlikely(frame == NULL)) | 706 | if (unlikely(frame == NULL)) |
716 | goto badframe; | 707 | goto badframe; |
717 | 708 | ||
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index a7a648f6b750..f18c79c324ef 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c | |||
@@ -53,6 +53,7 @@ | |||
53 | #ifdef CONFIG_PPC64 | 53 | #ifdef CONFIG_PPC64 |
54 | #include <asm/firmware.h> | 54 | #include <asm/firmware.h> |
55 | #include <asm/processor.h> | 55 | #include <asm/processor.h> |
56 | #include <asm/tm.h> | ||
56 | #endif | 57 | #endif |
57 | #include <asm/kexec.h> | 58 | #include <asm/kexec.h> |
58 | #include <asm/ppc-opcode.h> | 59 | #include <asm/ppc-opcode.h> |
@@ -932,6 +933,28 @@ static int emulate_isel(struct pt_regs *regs, u32 instword) | |||
932 | return 0; | 933 | return 0; |
933 | } | 934 | } |
934 | 935 | ||
936 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM | ||
937 | static inline bool tm_abort_check(struct pt_regs *regs, int cause) | ||
938 | { | ||
939 | /* If we're emulating a load/store in an active transaction, we cannot | ||
940 | * emulate it as the kernel operates in transaction suspended context. | ||
941 | * We need to abort the transaction. This creates a persistent TM | ||
942 | * abort so tell the user what caused it with a new code. | ||
943 | */ | ||
944 | if (MSR_TM_TRANSACTIONAL(regs->msr)) { | ||
945 | tm_enable(); | ||
946 | tm_abort(cause); | ||
947 | return true; | ||
948 | } | ||
949 | return false; | ||
950 | } | ||
951 | #else | ||
952 | static inline bool tm_abort_check(struct pt_regs *regs, int reason) | ||
953 | { | ||
954 | return false; | ||
955 | } | ||
956 | #endif | ||
957 | |||
935 | static int emulate_instruction(struct pt_regs *regs) | 958 | static int emulate_instruction(struct pt_regs *regs) |
936 | { | 959 | { |
937 | u32 instword; | 960 | u32 instword; |
@@ -971,6 +994,9 @@ static int emulate_instruction(struct pt_regs *regs) | |||
971 | 994 | ||
972 | /* Emulate load/store string insn. */ | 995 | /* Emulate load/store string insn. */ |
973 | if ((instword & PPC_INST_STRING_GEN_MASK) == PPC_INST_STRING) { | 996 | if ((instword & PPC_INST_STRING_GEN_MASK) == PPC_INST_STRING) { |
997 | if (tm_abort_check(regs, | ||
998 | TM_CAUSE_EMULATE | TM_CAUSE_PERSISTENT)) | ||
999 | return -EINVAL; | ||
974 | PPC_WARN_EMULATED(string, regs); | 1000 | PPC_WARN_EMULATED(string, regs); |
975 | return emulate_string_inst(regs, instword); | 1001 | return emulate_string_inst(regs, instword); |
976 | } | 1002 | } |
@@ -1148,6 +1174,9 @@ void alignment_exception(struct pt_regs *regs) | |||
1148 | if (!arch_irq_disabled_regs(regs)) | 1174 | if (!arch_irq_disabled_regs(regs)) |
1149 | local_irq_enable(); | 1175 | local_irq_enable(); |
1150 | 1176 | ||
1177 | if (tm_abort_check(regs, TM_CAUSE_ALIGNMENT | TM_CAUSE_PERSISTENT)) | ||
1178 | goto bail; | ||
1179 | |||
1151 | /* we don't implement logging of alignment exceptions */ | 1180 | /* we don't implement logging of alignment exceptions */ |
1152 | if (!(current->thread.align_ctl & PR_UNALIGN_SIGBUS)) | 1181 | if (!(current->thread.align_ctl & PR_UNALIGN_SIGBUS)) |
1153 | fixed = fix_alignment(regs); | 1182 | fixed = fix_alignment(regs); |
diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c index 9de24f8e03c7..550f5928b394 100644 --- a/arch/powerpc/kvm/book3s_hv.c +++ b/arch/powerpc/kvm/book3s_hv.c | |||
@@ -562,6 +562,8 @@ int kvmppc_pseries_do_hcall(struct kvm_vcpu *vcpu) | |||
562 | case H_CPPR: | 562 | case H_CPPR: |
563 | case H_EOI: | 563 | case H_EOI: |
564 | case H_IPI: | 564 | case H_IPI: |
565 | case H_IPOLL: | ||
566 | case H_XIRR_X: | ||
565 | if (kvmppc_xics_enabled(vcpu)) { | 567 | if (kvmppc_xics_enabled(vcpu)) { |
566 | ret = kvmppc_xics_hcall(vcpu, req); | 568 | ret = kvmppc_xics_hcall(vcpu, req); |
567 | break; | 569 | break; |
diff --git a/arch/powerpc/kvm/book3s_pr_papr.c b/arch/powerpc/kvm/book3s_pr_papr.c index b24309c6c2d5..da0e0bc268bd 100644 --- a/arch/powerpc/kvm/book3s_pr_papr.c +++ b/arch/powerpc/kvm/book3s_pr_papr.c | |||
@@ -257,6 +257,8 @@ int kvmppc_h_pr(struct kvm_vcpu *vcpu, unsigned long cmd) | |||
257 | case H_CPPR: | 257 | case H_CPPR: |
258 | case H_EOI: | 258 | case H_EOI: |
259 | case H_IPI: | 259 | case H_IPI: |
260 | case H_IPOLL: | ||
261 | case H_XIRR_X: | ||
260 | if (kvmppc_xics_enabled(vcpu)) | 262 | if (kvmppc_xics_enabled(vcpu)) |
261 | return kvmppc_h_pr_xics_hcall(vcpu, cmd); | 263 | return kvmppc_h_pr_xics_hcall(vcpu, cmd); |
262 | break; | 264 | break; |
diff --git a/arch/powerpc/kvm/book3s_xics.c b/arch/powerpc/kvm/book3s_xics.c index f7a103756618..94c1dd46b83d 100644 --- a/arch/powerpc/kvm/book3s_xics.c +++ b/arch/powerpc/kvm/book3s_xics.c | |||
@@ -650,6 +650,23 @@ static noinline int kvmppc_h_ipi(struct kvm_vcpu *vcpu, unsigned long server, | |||
650 | return H_SUCCESS; | 650 | return H_SUCCESS; |
651 | } | 651 | } |
652 | 652 | ||
653 | static int kvmppc_h_ipoll(struct kvm_vcpu *vcpu, unsigned long server) | ||
654 | { | ||
655 | union kvmppc_icp_state state; | ||
656 | struct kvmppc_icp *icp; | ||
657 | |||
658 | icp = vcpu->arch.icp; | ||
659 | if (icp->server_num != server) { | ||
660 | icp = kvmppc_xics_find_server(vcpu->kvm, server); | ||
661 | if (!icp) | ||
662 | return H_PARAMETER; | ||
663 | } | ||
664 | state = ACCESS_ONCE(icp->state); | ||
665 | kvmppc_set_gpr(vcpu, 4, ((u32)state.cppr << 24) | state.xisr); | ||
666 | kvmppc_set_gpr(vcpu, 5, state.mfrr); | ||
667 | return H_SUCCESS; | ||
668 | } | ||
669 | |||
653 | static noinline void kvmppc_h_cppr(struct kvm_vcpu *vcpu, unsigned long cppr) | 670 | static noinline void kvmppc_h_cppr(struct kvm_vcpu *vcpu, unsigned long cppr) |
654 | { | 671 | { |
655 | union kvmppc_icp_state old_state, new_state; | 672 | union kvmppc_icp_state old_state, new_state; |
@@ -787,6 +804,18 @@ int kvmppc_xics_hcall(struct kvm_vcpu *vcpu, u32 req) | |||
787 | if (!xics || !vcpu->arch.icp) | 804 | if (!xics || !vcpu->arch.icp) |
788 | return H_HARDWARE; | 805 | return H_HARDWARE; |
789 | 806 | ||
807 | /* These requests don't have real-mode implementations at present */ | ||
808 | switch (req) { | ||
809 | case H_XIRR_X: | ||
810 | res = kvmppc_h_xirr(vcpu); | ||
811 | kvmppc_set_gpr(vcpu, 4, res); | ||
812 | kvmppc_set_gpr(vcpu, 5, get_tb()); | ||
813 | return rc; | ||
814 | case H_IPOLL: | ||
815 | rc = kvmppc_h_ipoll(vcpu, kvmppc_get_gpr(vcpu, 4)); | ||
816 | return rc; | ||
817 | } | ||
818 | |||
790 | /* Check for real mode returning too hard */ | 819 | /* Check for real mode returning too hard */ |
791 | if (xics->real_mode) | 820 | if (xics->real_mode) |
792 | return kvmppc_xics_rm_complete(vcpu, req); | 821 | return kvmppc_xics_rm_complete(vcpu, req); |
diff --git a/arch/powerpc/lib/copypage_power7.S b/arch/powerpc/lib/copypage_power7.S index 0ef75bf0695c..395c594722a2 100644 --- a/arch/powerpc/lib/copypage_power7.S +++ b/arch/powerpc/lib/copypage_power7.S | |||
@@ -28,13 +28,14 @@ _GLOBAL(copypage_power7) | |||
28 | * aligned we don't need to clear the bottom 7 bits of either | 28 | * aligned we don't need to clear the bottom 7 bits of either |
29 | * address. | 29 | * address. |
30 | */ | 30 | */ |
31 | ori r9,r3,1 /* stream=1 */ | 31 | ori r9,r3,1 /* stream=1 => to */ |
32 | 32 | ||
33 | #ifdef CONFIG_PPC_64K_PAGES | 33 | #ifdef CONFIG_PPC_64K_PAGES |
34 | lis r7,0x0E01 /* depth=7, units=512 */ | 34 | lis r7,0x0E01 /* depth=7 |
35 | * units/cachelines=512 */ | ||
35 | #else | 36 | #else |
36 | lis r7,0x0E00 /* depth=7 */ | 37 | lis r7,0x0E00 /* depth=7 */ |
37 | ori r7,r7,0x1000 /* units=32 */ | 38 | ori r7,r7,0x1000 /* units/cachelines=32 */ |
38 | #endif | 39 | #endif |
39 | ori r10,r7,1 /* stream=1 */ | 40 | ori r10,r7,1 /* stream=1 */ |
40 | 41 | ||
@@ -43,12 +44,14 @@ _GLOBAL(copypage_power7) | |||
43 | 44 | ||
44 | .machine push | 45 | .machine push |
45 | .machine "power4" | 46 | .machine "power4" |
46 | dcbt r0,r4,0b01000 | 47 | /* setup read stream 0 */ |
47 | dcbt r0,r7,0b01010 | 48 | dcbt r0,r4,0b01000 /* addr from */ |
48 | dcbtst r0,r9,0b01000 | 49 | dcbt r0,r7,0b01010 /* length and depth from */ |
49 | dcbtst r0,r10,0b01010 | 50 | /* setup write stream 1 */ |
51 | dcbtst r0,r9,0b01000 /* addr to */ | ||
52 | dcbtst r0,r10,0b01010 /* length and depth to */ | ||
50 | eieio | 53 | eieio |
51 | dcbt r0,r8,0b01010 /* GO */ | 54 | dcbt r0,r8,0b01010 /* all streams GO */ |
52 | .machine pop | 55 | .machine pop |
53 | 56 | ||
54 | #ifdef CONFIG_ALTIVEC | 57 | #ifdef CONFIG_ALTIVEC |
diff --git a/arch/powerpc/lib/copyuser_power7.S b/arch/powerpc/lib/copyuser_power7.S index 0d24ff15f5f6..d1f11795a7ad 100644 --- a/arch/powerpc/lib/copyuser_power7.S +++ b/arch/powerpc/lib/copyuser_power7.S | |||
@@ -318,12 +318,14 @@ err1; stb r0,0(r3) | |||
318 | 318 | ||
319 | .machine push | 319 | .machine push |
320 | .machine "power4" | 320 | .machine "power4" |
321 | dcbt r0,r6,0b01000 | 321 | /* setup read stream 0 */ |
322 | dcbt r0,r7,0b01010 | 322 | dcbt r0,r6,0b01000 /* addr from */ |
323 | dcbtst r0,r9,0b01000 | 323 | dcbt r0,r7,0b01010 /* length and depth from */ |
324 | dcbtst r0,r10,0b01010 | 324 | /* setup write stream 1 */ |
325 | dcbtst r0,r9,0b01000 /* addr to */ | ||
326 | dcbtst r0,r10,0b01010 /* length and depth to */ | ||
325 | eieio | 327 | eieio |
326 | dcbt r0,r8,0b01010 /* GO */ | 328 | dcbt r0,r8,0b01010 /* all streams GO */ |
327 | .machine pop | 329 | .machine pop |
328 | 330 | ||
329 | beq cr1,.Lunwind_stack_nonvmx_copy | 331 | beq cr1,.Lunwind_stack_nonvmx_copy |
diff --git a/arch/powerpc/mm/hash_native_64.c b/arch/powerpc/mm/hash_native_64.c index 6a2aead5b0e5..4c122c3f1623 100644 --- a/arch/powerpc/mm/hash_native_64.c +++ b/arch/powerpc/mm/hash_native_64.c | |||
@@ -336,11 +336,18 @@ static long native_hpte_updatepp(unsigned long slot, unsigned long newpp, | |||
336 | 336 | ||
337 | hpte_v = hptep->v; | 337 | hpte_v = hptep->v; |
338 | actual_psize = hpte_actual_psize(hptep, psize); | 338 | actual_psize = hpte_actual_psize(hptep, psize); |
339 | /* | ||
340 | * We need to invalidate the TLB always because hpte_remove doesn't do | ||
341 | * a tlb invalidate. If a hash bucket gets full, we "evict" a more/less | ||
342 | * random entry from it. When we do that we don't invalidate the TLB | ||
343 | * (hpte_remove) because we assume the old translation is still | ||
344 | * technically "valid". | ||
345 | */ | ||
339 | if (actual_psize < 0) { | 346 | if (actual_psize < 0) { |
340 | native_unlock_hpte(hptep); | 347 | actual_psize = psize; |
341 | return -1; | 348 | ret = -1; |
349 | goto err_out; | ||
342 | } | 350 | } |
343 | /* Even if we miss, we need to invalidate the TLB */ | ||
344 | if (!HPTE_V_COMPARE(hpte_v, want_v)) { | 351 | if (!HPTE_V_COMPARE(hpte_v, want_v)) { |
345 | DBG_LOW(" -> miss\n"); | 352 | DBG_LOW(" -> miss\n"); |
346 | ret = -1; | 353 | ret = -1; |
@@ -350,6 +357,7 @@ static long native_hpte_updatepp(unsigned long slot, unsigned long newpp, | |||
350 | hptep->r = (hptep->r & ~(HPTE_R_PP | HPTE_R_N)) | | 357 | hptep->r = (hptep->r & ~(HPTE_R_PP | HPTE_R_N)) | |
351 | (newpp & (HPTE_R_PP | HPTE_R_N | HPTE_R_C)); | 358 | (newpp & (HPTE_R_PP | HPTE_R_N | HPTE_R_C)); |
352 | } | 359 | } |
360 | err_out: | ||
353 | native_unlock_hpte(hptep); | 361 | native_unlock_hpte(hptep); |
354 | 362 | ||
355 | /* Ensure it is out of the tlb too. */ | 363 | /* Ensure it is out of the tlb too. */ |
@@ -409,7 +417,7 @@ static void native_hpte_updateboltedpp(unsigned long newpp, unsigned long ea, | |||
409 | hptep = htab_address + slot; | 417 | hptep = htab_address + slot; |
410 | actual_psize = hpte_actual_psize(hptep, psize); | 418 | actual_psize = hpte_actual_psize(hptep, psize); |
411 | if (actual_psize < 0) | 419 | if (actual_psize < 0) |
412 | return; | 420 | actual_psize = psize; |
413 | 421 | ||
414 | /* Update the HPTE */ | 422 | /* Update the HPTE */ |
415 | hptep->r = (hptep->r & ~(HPTE_R_PP | HPTE_R_N)) | | 423 | hptep->r = (hptep->r & ~(HPTE_R_PP | HPTE_R_N)) | |
@@ -437,21 +445,27 @@ static void native_hpte_invalidate(unsigned long slot, unsigned long vpn, | |||
437 | hpte_v = hptep->v; | 445 | hpte_v = hptep->v; |
438 | 446 | ||
439 | actual_psize = hpte_actual_psize(hptep, psize); | 447 | actual_psize = hpte_actual_psize(hptep, psize); |
448 | /* | ||
449 | * We need to invalidate the TLB always because hpte_remove doesn't do | ||
450 | * a tlb invalidate. If a hash bucket gets full, we "evict" a more/less | ||
451 | * random entry from it. When we do that we don't invalidate the TLB | ||
452 | * (hpte_remove) because we assume the old translation is still | ||
453 | * technically "valid". | ||
454 | */ | ||
440 | if (actual_psize < 0) { | 455 | if (actual_psize < 0) { |
456 | actual_psize = psize; | ||
441 | native_unlock_hpte(hptep); | 457 | native_unlock_hpte(hptep); |
442 | local_irq_restore(flags); | 458 | goto err_out; |
443 | return; | ||
444 | } | 459 | } |
445 | /* Even if we miss, we need to invalidate the TLB */ | ||
446 | if (!HPTE_V_COMPARE(hpte_v, want_v)) | 460 | if (!HPTE_V_COMPARE(hpte_v, want_v)) |
447 | native_unlock_hpte(hptep); | 461 | native_unlock_hpte(hptep); |
448 | else | 462 | else |
449 | /* Invalidate the hpte. NOTE: this also unlocks it */ | 463 | /* Invalidate the hpte. NOTE: this also unlocks it */ |
450 | hptep->v = 0; | 464 | hptep->v = 0; |
451 | 465 | ||
466 | err_out: | ||
452 | /* Invalidate the TLB */ | 467 | /* Invalidate the TLB */ |
453 | tlbie(vpn, psize, actual_psize, ssize, local); | 468 | tlbie(vpn, psize, actual_psize, ssize, local); |
454 | |||
455 | local_irq_restore(flags); | 469 | local_irq_restore(flags); |
456 | } | 470 | } |
457 | 471 | ||
diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c index 426180b84978..845c867444e6 100644 --- a/arch/powerpc/perf/core-book3s.c +++ b/arch/powerpc/perf/core-book3s.c | |||
@@ -110,7 +110,7 @@ static inline void power_pmu_bhrb_read(struct cpu_hw_events *cpuhw) {} | |||
110 | 110 | ||
111 | static bool regs_use_siar(struct pt_regs *regs) | 111 | static bool regs_use_siar(struct pt_regs *regs) |
112 | { | 112 | { |
113 | return !!(regs->result & 1); | 113 | return !!regs->result; |
114 | } | 114 | } |
115 | 115 | ||
116 | /* | 116 | /* |
@@ -136,22 +136,30 @@ static inline unsigned long perf_ip_adjust(struct pt_regs *regs) | |||
136 | * If we're not doing instruction sampling, give them the SDAR | 136 | * If we're not doing instruction sampling, give them the SDAR |
137 | * (sampled data address). If we are doing instruction sampling, then | 137 | * (sampled data address). If we are doing instruction sampling, then |
138 | * only give them the SDAR if it corresponds to the instruction | 138 | * only give them the SDAR if it corresponds to the instruction |
139 | * pointed to by SIAR; this is indicated by the [POWER6_]MMCRA_SDSYNC or | 139 | * pointed to by SIAR; this is indicated by the [POWER6_]MMCRA_SDSYNC, the |
140 | * the [POWER7P_]MMCRA_SDAR_VALID bit in MMCRA. | 140 | * [POWER7P_]MMCRA_SDAR_VALID bit in MMCRA, or the SDAR_VALID bit in SIER. |
141 | */ | 141 | */ |
142 | static inline void perf_get_data_addr(struct pt_regs *regs, u64 *addrp) | 142 | static inline void perf_get_data_addr(struct pt_regs *regs, u64 *addrp) |
143 | { | 143 | { |
144 | unsigned long mmcra = regs->dsisr; | 144 | unsigned long mmcra = regs->dsisr; |
145 | unsigned long sdsync; | 145 | bool sdar_valid; |
146 | 146 | ||
147 | if (ppmu->flags & PPMU_SIAR_VALID) | 147 | if (ppmu->flags & PPMU_HAS_SIER) |
148 | sdsync = POWER7P_MMCRA_SDAR_VALID; | 148 | sdar_valid = regs->dar & SIER_SDAR_VALID; |
149 | else if (ppmu->flags & PPMU_ALT_SIPR) | 149 | else { |
150 | sdsync = POWER6_MMCRA_SDSYNC; | 150 | unsigned long sdsync; |
151 | else | 151 | |
152 | sdsync = MMCRA_SDSYNC; | 152 | if (ppmu->flags & PPMU_SIAR_VALID) |
153 | sdsync = POWER7P_MMCRA_SDAR_VALID; | ||
154 | else if (ppmu->flags & PPMU_ALT_SIPR) | ||
155 | sdsync = POWER6_MMCRA_SDSYNC; | ||
156 | else | ||
157 | sdsync = MMCRA_SDSYNC; | ||
158 | |||
159 | sdar_valid = mmcra & sdsync; | ||
160 | } | ||
153 | 161 | ||
154 | if (!(mmcra & MMCRA_SAMPLE_ENABLE) || (mmcra & sdsync)) | 162 | if (!(mmcra & MMCRA_SAMPLE_ENABLE) || sdar_valid) |
155 | *addrp = mfspr(SPRN_SDAR); | 163 | *addrp = mfspr(SPRN_SDAR); |
156 | } | 164 | } |
157 | 165 | ||
@@ -181,11 +189,6 @@ static bool regs_sipr(struct pt_regs *regs) | |||
181 | return !!(regs->dsisr & sipr); | 189 | return !!(regs->dsisr & sipr); |
182 | } | 190 | } |
183 | 191 | ||
184 | static bool regs_no_sipr(struct pt_regs *regs) | ||
185 | { | ||
186 | return !!(regs->result & 2); | ||
187 | } | ||
188 | |||
189 | static inline u32 perf_flags_from_msr(struct pt_regs *regs) | 192 | static inline u32 perf_flags_from_msr(struct pt_regs *regs) |
190 | { | 193 | { |
191 | if (regs->msr & MSR_PR) | 194 | if (regs->msr & MSR_PR) |
@@ -208,7 +211,7 @@ static inline u32 perf_get_misc_flags(struct pt_regs *regs) | |||
208 | * SIAR which should give slightly more reliable | 211 | * SIAR which should give slightly more reliable |
209 | * results | 212 | * results |
210 | */ | 213 | */ |
211 | if (regs_no_sipr(regs)) { | 214 | if (ppmu->flags & PPMU_NO_SIPR) { |
212 | unsigned long siar = mfspr(SPRN_SIAR); | 215 | unsigned long siar = mfspr(SPRN_SIAR); |
213 | if (siar >= PAGE_OFFSET) | 216 | if (siar >= PAGE_OFFSET) |
214 | return PERF_RECORD_MISC_KERNEL; | 217 | return PERF_RECORD_MISC_KERNEL; |
@@ -239,22 +242,9 @@ static inline void perf_read_regs(struct pt_regs *regs) | |||
239 | int use_siar; | 242 | int use_siar; |
240 | 243 | ||
241 | regs->dsisr = mmcra; | 244 | regs->dsisr = mmcra; |
242 | regs->result = 0; | ||
243 | |||
244 | if (ppmu->flags & PPMU_NO_SIPR) | ||
245 | regs->result |= 2; | ||
246 | |||
247 | /* | ||
248 | * On power8 if we're in random sampling mode, the SIER is updated. | ||
249 | * If we're in continuous sampling mode, we don't have SIPR. | ||
250 | */ | ||
251 | if (ppmu->flags & PPMU_HAS_SIER) { | ||
252 | if (marked) | ||
253 | regs->dar = mfspr(SPRN_SIER); | ||
254 | else | ||
255 | regs->result |= 2; | ||
256 | } | ||
257 | 245 | ||
246 | if (ppmu->flags & PPMU_HAS_SIER) | ||
247 | regs->dar = mfspr(SPRN_SIER); | ||
258 | 248 | ||
259 | /* | 249 | /* |
260 | * If this isn't a PMU exception (eg a software event) the SIAR is | 250 | * If this isn't a PMU exception (eg a software event) the SIAR is |
@@ -279,12 +269,12 @@ static inline void perf_read_regs(struct pt_regs *regs) | |||
279 | use_siar = 1; | 269 | use_siar = 1; |
280 | else if ((ppmu->flags & PPMU_NO_CONT_SAMPLING)) | 270 | else if ((ppmu->flags & PPMU_NO_CONT_SAMPLING)) |
281 | use_siar = 0; | 271 | use_siar = 0; |
282 | else if (!regs_no_sipr(regs) && regs_sipr(regs)) | 272 | else if (!(ppmu->flags & PPMU_NO_SIPR) && regs_sipr(regs)) |
283 | use_siar = 0; | 273 | use_siar = 0; |
284 | else | 274 | else |
285 | use_siar = 1; | 275 | use_siar = 1; |
286 | 276 | ||
287 | regs->result |= use_siar; | 277 | regs->result = use_siar; |
288 | } | 278 | } |
289 | 279 | ||
290 | /* | 280 | /* |
@@ -308,8 +298,13 @@ static inline int siar_valid(struct pt_regs *regs) | |||
308 | unsigned long mmcra = regs->dsisr; | 298 | unsigned long mmcra = regs->dsisr; |
309 | int marked = mmcra & MMCRA_SAMPLE_ENABLE; | 299 | int marked = mmcra & MMCRA_SAMPLE_ENABLE; |
310 | 300 | ||
311 | if ((ppmu->flags & PPMU_SIAR_VALID) && marked) | 301 | if (marked) { |
312 | return mmcra & POWER7P_MMCRA_SIAR_VALID; | 302 | if (ppmu->flags & PPMU_HAS_SIER) |
303 | return regs->dar & SIER_SIAR_VALID; | ||
304 | |||
305 | if (ppmu->flags & PPMU_SIAR_VALID) | ||
306 | return mmcra & POWER7P_MMCRA_SIAR_VALID; | ||
307 | } | ||
313 | 308 | ||
314 | return 1; | 309 | return 1; |
315 | } | 310 | } |
diff --git a/arch/powerpc/platforms/pseries/Kconfig b/arch/powerpc/platforms/pseries/Kconfig index 023b288f895b..4459eff7a75a 100644 --- a/arch/powerpc/platforms/pseries/Kconfig +++ b/arch/powerpc/platforms/pseries/Kconfig | |||
@@ -19,6 +19,8 @@ config PPC_PSERIES | |||
19 | select ZLIB_DEFLATE | 19 | select ZLIB_DEFLATE |
20 | select PPC_DOORBELL | 20 | select PPC_DOORBELL |
21 | select HAVE_CONTEXT_TRACKING | 21 | select HAVE_CONTEXT_TRACKING |
22 | select HOTPLUG if SMP | ||
23 | select HOTPLUG_CPU if SMP | ||
22 | default y | 24 | default y |
23 | 25 | ||
24 | config PPC_SPLPAR | 26 | config PPC_SPLPAR |
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c index 0a13ecb270c7..3cc2f9159ab1 100644 --- a/arch/powerpc/sysdev/mpic.c +++ b/arch/powerpc/sysdev/mpic.c | |||
@@ -54,7 +54,7 @@ static DEFINE_RAW_SPINLOCK(mpic_lock); | |||
54 | 54 | ||
55 | #ifdef CONFIG_PPC32 /* XXX for now */ | 55 | #ifdef CONFIG_PPC32 /* XXX for now */ |
56 | #ifdef CONFIG_IRQ_ALL_CPUS | 56 | #ifdef CONFIG_IRQ_ALL_CPUS |
57 | #define distribute_irqs (!(mpic->flags & MPIC_SINGLE_DEST_CPU)) | 57 | #define distribute_irqs (1) |
58 | #else | 58 | #else |
59 | #define distribute_irqs (0) | 59 | #define distribute_irqs (0) |
60 | #endif | 60 | #endif |
@@ -1703,7 +1703,7 @@ void mpic_setup_this_cpu(void) | |||
1703 | * it differently, then we should make sure we also change the default | 1703 | * it differently, then we should make sure we also change the default |
1704 | * values of irq_desc[].affinity in irq.c. | 1704 | * values of irq_desc[].affinity in irq.c. |
1705 | */ | 1705 | */ |
1706 | if (distribute_irqs) { | 1706 | if (distribute_irqs && !(mpic->flags & MPIC_SINGLE_DEST_CPU)) { |
1707 | for (i = 0; i < mpic->num_sources ; i++) | 1707 | for (i = 0; i < mpic->num_sources ; i++) |
1708 | mpic_irq_write(i, MPIC_INFO(IRQ_DESTINATION), | 1708 | mpic_irq_write(i, MPIC_INFO(IRQ_DESTINATION), |
1709 | mpic_irq_read(i, MPIC_INFO(IRQ_DESTINATION)) | msk); | 1709 | mpic_irq_read(i, MPIC_INFO(IRQ_DESTINATION)) | msk); |
diff --git a/arch/s390/appldata/appldata_base.c b/arch/s390/appldata/appldata_base.c index bae0f402bf2a..87a22092b68f 100644 --- a/arch/s390/appldata/appldata_base.c +++ b/arch/s390/appldata/appldata_base.c | |||
@@ -212,7 +212,9 @@ appldata_timer_handler(ctl_table *ctl, int write, | |||
212 | return 0; | 212 | return 0; |
213 | } | 213 | } |
214 | if (!write) { | 214 | if (!write) { |
215 | len = sprintf(buf, appldata_timer_active ? "1\n" : "0\n"); | 215 | strncpy(buf, appldata_timer_active ? "1\n" : "0\n", |
216 | ARRAY_SIZE(buf)); | ||
217 | len = strnlen(buf, ARRAY_SIZE(buf)); | ||
216 | if (len > *lenp) | 218 | if (len > *lenp) |
217 | len = *lenp; | 219 | len = *lenp; |
218 | if (copy_to_user(buffer, buf, len)) | 220 | if (copy_to_user(buffer, buf, len)) |
@@ -317,7 +319,8 @@ appldata_generic_handler(ctl_table *ctl, int write, | |||
317 | return 0; | 319 | return 0; |
318 | } | 320 | } |
319 | if (!write) { | 321 | if (!write) { |
320 | len = sprintf(buf, ops->active ? "1\n" : "0\n"); | 322 | strncpy(buf, ops->active ? "1\n" : "0\n", ARRAY_SIZE(buf)); |
323 | len = strnlen(buf, ARRAY_SIZE(buf)); | ||
321 | if (len > *lenp) | 324 | if (len > *lenp) |
322 | len = *lenp; | 325 | len = *lenp; |
323 | if (copy_to_user(buffer, buf, len)) { | 326 | if (copy_to_user(buffer, buf, len)) { |
diff --git a/arch/s390/include/asm/dma-mapping.h b/arch/s390/include/asm/dma-mapping.h index 9411db653bac..886ac7d4937a 100644 --- a/arch/s390/include/asm/dma-mapping.h +++ b/arch/s390/include/asm/dma-mapping.h | |||
@@ -71,8 +71,8 @@ static inline void dma_free_coherent(struct device *dev, size_t size, | |||
71 | { | 71 | { |
72 | struct dma_map_ops *dma_ops = get_dma_ops(dev); | 72 | struct dma_map_ops *dma_ops = get_dma_ops(dev); |
73 | 73 | ||
74 | dma_ops->free(dev, size, cpu_addr, dma_handle, NULL); | ||
75 | debug_dma_free_coherent(dev, size, cpu_addr, dma_handle); | 74 | debug_dma_free_coherent(dev, size, cpu_addr, dma_handle); |
75 | dma_ops->free(dev, size, cpu_addr, dma_handle, NULL); | ||
76 | } | 76 | } |
77 | 77 | ||
78 | #endif /* _ASM_S390_DMA_MAPPING_H */ | 78 | #endif /* _ASM_S390_DMA_MAPPING_H */ |
diff --git a/arch/s390/include/asm/io.h b/arch/s390/include/asm/io.h index 379d96e2105e..fd9be010f9b2 100644 --- a/arch/s390/include/asm/io.h +++ b/arch/s390/include/asm/io.h | |||
@@ -36,6 +36,7 @@ static inline void * phys_to_virt(unsigned long address) | |||
36 | } | 36 | } |
37 | 37 | ||
38 | void *xlate_dev_mem_ptr(unsigned long phys); | 38 | void *xlate_dev_mem_ptr(unsigned long phys); |
39 | #define xlate_dev_mem_ptr xlate_dev_mem_ptr | ||
39 | void unxlate_dev_mem_ptr(unsigned long phys, void *addr); | 40 | void unxlate_dev_mem_ptr(unsigned long phys, void *addr); |
40 | 41 | ||
41 | /* | 42 | /* |
diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h index 0f0de30e3e3f..ac01463038f1 100644 --- a/arch/s390/include/asm/pgtable.h +++ b/arch/s390/include/asm/pgtable.h | |||
@@ -646,7 +646,7 @@ static inline pgste_t pgste_update_all(pte_t *ptep, pgste_t pgste) | |||
646 | unsigned long address, bits; | 646 | unsigned long address, bits; |
647 | unsigned char skey; | 647 | unsigned char skey; |
648 | 648 | ||
649 | if (!pte_present(*ptep)) | 649 | if (pte_val(*ptep) & _PAGE_INVALID) |
650 | return pgste; | 650 | return pgste; |
651 | address = pte_val(*ptep) & PAGE_MASK; | 651 | address = pte_val(*ptep) & PAGE_MASK; |
652 | skey = page_get_storage_key(address); | 652 | skey = page_get_storage_key(address); |
@@ -680,7 +680,7 @@ static inline pgste_t pgste_update_young(pte_t *ptep, pgste_t pgste) | |||
680 | #ifdef CONFIG_PGSTE | 680 | #ifdef CONFIG_PGSTE |
681 | int young; | 681 | int young; |
682 | 682 | ||
683 | if (!pte_present(*ptep)) | 683 | if (pte_val(*ptep) & _PAGE_INVALID) |
684 | return pgste; | 684 | return pgste; |
685 | /* Get referenced bit from storage key */ | 685 | /* Get referenced bit from storage key */ |
686 | young = page_reset_referenced(pte_val(*ptep) & PAGE_MASK); | 686 | young = page_reset_referenced(pte_val(*ptep) & PAGE_MASK); |
@@ -706,7 +706,7 @@ static inline void pgste_set_key(pte_t *ptep, pgste_t pgste, pte_t entry) | |||
706 | unsigned long address; | 706 | unsigned long address; |
707 | unsigned long okey, nkey; | 707 | unsigned long okey, nkey; |
708 | 708 | ||
709 | if (!pte_present(entry)) | 709 | if (pte_val(entry) & _PAGE_INVALID) |
710 | return; | 710 | return; |
711 | address = pte_val(entry) & PAGE_MASK; | 711 | address = pte_val(entry) & PAGE_MASK; |
712 | okey = nkey = page_get_storage_key(address); | 712 | okey = nkey = page_get_storage_key(address); |
@@ -1098,6 +1098,9 @@ static inline pte_t ptep_modify_prot_start(struct mm_struct *mm, | |||
1098 | pte = *ptep; | 1098 | pte = *ptep; |
1099 | if (!mm_exclusive(mm)) | 1099 | if (!mm_exclusive(mm)) |
1100 | __ptep_ipte(address, ptep); | 1100 | __ptep_ipte(address, ptep); |
1101 | |||
1102 | if (mm_has_pgste(mm)) | ||
1103 | pgste = pgste_update_all(&pte, pgste); | ||
1101 | return pte; | 1104 | return pte; |
1102 | } | 1105 | } |
1103 | 1106 | ||
@@ -1105,9 +1108,13 @@ static inline void ptep_modify_prot_commit(struct mm_struct *mm, | |||
1105 | unsigned long address, | 1108 | unsigned long address, |
1106 | pte_t *ptep, pte_t pte) | 1109 | pte_t *ptep, pte_t pte) |
1107 | { | 1110 | { |
1111 | pgste_t pgste; | ||
1112 | |||
1108 | if (mm_has_pgste(mm)) { | 1113 | if (mm_has_pgste(mm)) { |
1114 | pgste = *(pgste_t *)(ptep + PTRS_PER_PTE); | ||
1115 | pgste_set_key(ptep, pgste, pte); | ||
1109 | pgste_set_pte(ptep, pte); | 1116 | pgste_set_pte(ptep, pte); |
1110 | pgste_set_unlock(ptep, *(pgste_t *)(ptep + PTRS_PER_PTE)); | 1117 | pgste_set_unlock(ptep, pgste); |
1111 | } else | 1118 | } else |
1112 | *ptep = pte; | 1119 | *ptep = pte; |
1113 | } | 1120 | } |
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index 05674b669001..4f977d0d25c2 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c | |||
@@ -428,34 +428,27 @@ void smp_stop_cpu(void) | |||
428 | * This is the main routine where commands issued by other | 428 | * This is the main routine where commands issued by other |
429 | * cpus are handled. | 429 | * cpus are handled. |
430 | */ | 430 | */ |
431 | static void do_ext_call_interrupt(struct ext_code ext_code, | 431 | static void smp_handle_ext_call(void) |
432 | unsigned int param32, unsigned long param64) | ||
433 | { | 432 | { |
434 | unsigned long bits; | 433 | unsigned long bits; |
435 | int cpu; | ||
436 | |||
437 | cpu = smp_processor_id(); | ||
438 | if (ext_code.code == 0x1202) | ||
439 | inc_irq_stat(IRQEXT_EXC); | ||
440 | else | ||
441 | inc_irq_stat(IRQEXT_EMS); | ||
442 | /* | ||
443 | * handle bit signal external calls | ||
444 | */ | ||
445 | bits = xchg(&pcpu_devices[cpu].ec_mask, 0); | ||
446 | 434 | ||
435 | /* handle bit signal external calls */ | ||
436 | bits = xchg(&pcpu_devices[smp_processor_id()].ec_mask, 0); | ||
447 | if (test_bit(ec_stop_cpu, &bits)) | 437 | if (test_bit(ec_stop_cpu, &bits)) |
448 | smp_stop_cpu(); | 438 | smp_stop_cpu(); |
449 | |||
450 | if (test_bit(ec_schedule, &bits)) | 439 | if (test_bit(ec_schedule, &bits)) |
451 | scheduler_ipi(); | 440 | scheduler_ipi(); |
452 | |||
453 | if (test_bit(ec_call_function, &bits)) | 441 | if (test_bit(ec_call_function, &bits)) |
454 | generic_smp_call_function_interrupt(); | 442 | generic_smp_call_function_interrupt(); |
455 | |||
456 | if (test_bit(ec_call_function_single, &bits)) | 443 | if (test_bit(ec_call_function_single, &bits)) |
457 | generic_smp_call_function_single_interrupt(); | 444 | generic_smp_call_function_single_interrupt(); |
445 | } | ||
458 | 446 | ||
447 | static void do_ext_call_interrupt(struct ext_code ext_code, | ||
448 | unsigned int param32, unsigned long param64) | ||
449 | { | ||
450 | inc_irq_stat(ext_code.code == 0x1202 ? IRQEXT_EXC : IRQEXT_EMS); | ||
451 | smp_handle_ext_call(); | ||
459 | } | 452 | } |
460 | 453 | ||
461 | void arch_send_call_function_ipi_mask(const struct cpumask *mask) | 454 | void arch_send_call_function_ipi_mask(const struct cpumask *mask) |
@@ -760,6 +753,8 @@ int __cpu_disable(void) | |||
760 | { | 753 | { |
761 | unsigned long cregs[16]; | 754 | unsigned long cregs[16]; |
762 | 755 | ||
756 | /* Handle possible pending IPIs */ | ||
757 | smp_handle_ext_call(); | ||
763 | set_cpu_online(smp_processor_id(), false); | 758 | set_cpu_online(smp_processor_id(), false); |
764 | /* Disable pseudo page faults on this cpu. */ | 759 | /* Disable pseudo page faults on this cpu. */ |
765 | pfault_fini(); | 760 | pfault_fini(); |
diff --git a/arch/s390/mm/pgtable.c b/arch/s390/mm/pgtable.c index 18dc417aaf79..a938b548f07e 100644 --- a/arch/s390/mm/pgtable.c +++ b/arch/s390/mm/pgtable.c | |||
@@ -492,7 +492,7 @@ static int gmap_connect_pgtable(unsigned long address, unsigned long segment, | |||
492 | mp = (struct gmap_pgtable *) page->index; | 492 | mp = (struct gmap_pgtable *) page->index; |
493 | rmap->gmap = gmap; | 493 | rmap->gmap = gmap; |
494 | rmap->entry = segment_ptr; | 494 | rmap->entry = segment_ptr; |
495 | rmap->vmaddr = address; | 495 | rmap->vmaddr = address & PMD_MASK; |
496 | spin_lock(&mm->page_table_lock); | 496 | spin_lock(&mm->page_table_lock); |
497 | if (*segment_ptr == segment) { | 497 | if (*segment_ptr == segment) { |
498 | list_add(&rmap->list, &mp->mapper); | 498 | list_add(&rmap->list, &mp->mapper); |
diff --git a/arch/score/mm/init.c b/arch/score/mm/init.c index d8f988a37d16..0940682ab38b 100644 --- a/arch/score/mm/init.c +++ b/arch/score/mm/init.c | |||
@@ -41,8 +41,6 @@ | |||
41 | unsigned long empty_zero_page; | 41 | unsigned long empty_zero_page; |
42 | EXPORT_SYMBOL_GPL(empty_zero_page); | 42 | EXPORT_SYMBOL_GPL(empty_zero_page); |
43 | 43 | ||
44 | static struct kcore_list kcore_mem, kcore_vmalloc; | ||
45 | |||
46 | static void setup_zero_page(void) | 44 | static void setup_zero_page(void) |
47 | { | 45 | { |
48 | struct page *page; | 46 | struct page *page; |
diff --git a/arch/x86/crypto/crc32-pclmul_asm.S b/arch/x86/crypto/crc32-pclmul_asm.S index 94c27df8a549..f247304299a2 100644 --- a/arch/x86/crypto/crc32-pclmul_asm.S +++ b/arch/x86/crypto/crc32-pclmul_asm.S | |||
@@ -240,7 +240,7 @@ fold_64: | |||
240 | pand %xmm3, %xmm1 | 240 | pand %xmm3, %xmm1 |
241 | PCLMULQDQ 0x00, CONSTANT, %xmm1 | 241 | PCLMULQDQ 0x00, CONSTANT, %xmm1 |
242 | pxor %xmm2, %xmm1 | 242 | pxor %xmm2, %xmm1 |
243 | pextrd $0x01, %xmm1, %eax | 243 | PEXTRD 0x01, %xmm1, %eax |
244 | 244 | ||
245 | ret | 245 | ret |
246 | ENDPROC(crc32_pclmul_le_16) | 246 | ENDPROC(crc32_pclmul_le_16) |
diff --git a/arch/x86/crypto/sha256-avx-asm.S b/arch/x86/crypto/sha256-avx-asm.S index 56610c4bf31b..642f15687a0a 100644 --- a/arch/x86/crypto/sha256-avx-asm.S +++ b/arch/x86/crypto/sha256-avx-asm.S | |||
@@ -118,7 +118,7 @@ y2 = %r15d | |||
118 | 118 | ||
119 | _INP_END_SIZE = 8 | 119 | _INP_END_SIZE = 8 |
120 | _INP_SIZE = 8 | 120 | _INP_SIZE = 8 |
121 | _XFER_SIZE = 8 | 121 | _XFER_SIZE = 16 |
122 | _XMM_SAVE_SIZE = 0 | 122 | _XMM_SAVE_SIZE = 0 |
123 | 123 | ||
124 | _INP_END = 0 | 124 | _INP_END = 0 |
diff --git a/arch/x86/crypto/sha256-ssse3-asm.S b/arch/x86/crypto/sha256-ssse3-asm.S index 98d3c391da81..f833b74d902b 100644 --- a/arch/x86/crypto/sha256-ssse3-asm.S +++ b/arch/x86/crypto/sha256-ssse3-asm.S | |||
@@ -111,7 +111,7 @@ y2 = %r15d | |||
111 | 111 | ||
112 | _INP_END_SIZE = 8 | 112 | _INP_END_SIZE = 8 |
113 | _INP_SIZE = 8 | 113 | _INP_SIZE = 8 |
114 | _XFER_SIZE = 8 | 114 | _XFER_SIZE = 16 |
115 | _XMM_SAVE_SIZE = 0 | 115 | _XMM_SAVE_SIZE = 0 |
116 | 116 | ||
117 | _INP_END = 0 | 117 | _INP_END = 0 |
diff --git a/arch/x86/include/asm/inst.h b/arch/x86/include/asm/inst.h index 280bf7fb6aba..3e115273ed88 100644 --- a/arch/x86/include/asm/inst.h +++ b/arch/x86/include/asm/inst.h | |||
@@ -9,12 +9,68 @@ | |||
9 | 9 | ||
10 | #define REG_NUM_INVALID 100 | 10 | #define REG_NUM_INVALID 100 |
11 | 11 | ||
12 | #define REG_TYPE_R64 0 | 12 | #define REG_TYPE_R32 0 |
13 | #define REG_TYPE_XMM 1 | 13 | #define REG_TYPE_R64 1 |
14 | #define REG_TYPE_XMM 2 | ||
14 | #define REG_TYPE_INVALID 100 | 15 | #define REG_TYPE_INVALID 100 |
15 | 16 | ||
17 | .macro R32_NUM opd r32 | ||
18 | \opd = REG_NUM_INVALID | ||
19 | .ifc \r32,%eax | ||
20 | \opd = 0 | ||
21 | .endif | ||
22 | .ifc \r32,%ecx | ||
23 | \opd = 1 | ||
24 | .endif | ||
25 | .ifc \r32,%edx | ||
26 | \opd = 2 | ||
27 | .endif | ||
28 | .ifc \r32,%ebx | ||
29 | \opd = 3 | ||
30 | .endif | ||
31 | .ifc \r32,%esp | ||
32 | \opd = 4 | ||
33 | .endif | ||
34 | .ifc \r32,%ebp | ||
35 | \opd = 5 | ||
36 | .endif | ||
37 | .ifc \r32,%esi | ||
38 | \opd = 6 | ||
39 | .endif | ||
40 | .ifc \r32,%edi | ||
41 | \opd = 7 | ||
42 | .endif | ||
43 | #ifdef CONFIG_X86_64 | ||
44 | .ifc \r32,%r8d | ||
45 | \opd = 8 | ||
46 | .endif | ||
47 | .ifc \r32,%r9d | ||
48 | \opd = 9 | ||
49 | .endif | ||
50 | .ifc \r32,%r10d | ||
51 | \opd = 10 | ||
52 | .endif | ||
53 | .ifc \r32,%r11d | ||
54 | \opd = 11 | ||
55 | .endif | ||
56 | .ifc \r32,%r12d | ||
57 | \opd = 12 | ||
58 | .endif | ||
59 | .ifc \r32,%r13d | ||
60 | \opd = 13 | ||
61 | .endif | ||
62 | .ifc \r32,%r14d | ||
63 | \opd = 14 | ||
64 | .endif | ||
65 | .ifc \r32,%r15d | ||
66 | \opd = 15 | ||
67 | .endif | ||
68 | #endif | ||
69 | .endm | ||
70 | |||
16 | .macro R64_NUM opd r64 | 71 | .macro R64_NUM opd r64 |
17 | \opd = REG_NUM_INVALID | 72 | \opd = REG_NUM_INVALID |
73 | #ifdef CONFIG_X86_64 | ||
18 | .ifc \r64,%rax | 74 | .ifc \r64,%rax |
19 | \opd = 0 | 75 | \opd = 0 |
20 | .endif | 76 | .endif |
@@ -63,6 +119,7 @@ | |||
63 | .ifc \r64,%r15 | 119 | .ifc \r64,%r15 |
64 | \opd = 15 | 120 | \opd = 15 |
65 | .endif | 121 | .endif |
122 | #endif | ||
66 | .endm | 123 | .endm |
67 | 124 | ||
68 | .macro XMM_NUM opd xmm | 125 | .macro XMM_NUM opd xmm |
@@ -118,10 +175,13 @@ | |||
118 | .endm | 175 | .endm |
119 | 176 | ||
120 | .macro REG_TYPE type reg | 177 | .macro REG_TYPE type reg |
178 | R32_NUM reg_type_r32 \reg | ||
121 | R64_NUM reg_type_r64 \reg | 179 | R64_NUM reg_type_r64 \reg |
122 | XMM_NUM reg_type_xmm \reg | 180 | XMM_NUM reg_type_xmm \reg |
123 | .if reg_type_r64 <> REG_NUM_INVALID | 181 | .if reg_type_r64 <> REG_NUM_INVALID |
124 | \type = REG_TYPE_R64 | 182 | \type = REG_TYPE_R64 |
183 | .elseif reg_type_r32 <> REG_NUM_INVALID | ||
184 | \type = REG_TYPE_R32 | ||
125 | .elseif reg_type_xmm <> REG_NUM_INVALID | 185 | .elseif reg_type_xmm <> REG_NUM_INVALID |
126 | \type = REG_TYPE_XMM | 186 | \type = REG_TYPE_XMM |
127 | .else | 187 | .else |
@@ -162,6 +222,16 @@ | |||
162 | .byte \imm8 | 222 | .byte \imm8 |
163 | .endm | 223 | .endm |
164 | 224 | ||
225 | .macro PEXTRD imm8 xmm gpr | ||
226 | R32_NUM extrd_opd1 \gpr | ||
227 | XMM_NUM extrd_opd2 \xmm | ||
228 | PFX_OPD_SIZE | ||
229 | PFX_REX extrd_opd1 extrd_opd2 | ||
230 | .byte 0x0f, 0x3a, 0x16 | ||
231 | MODRM 0xc0 extrd_opd1 extrd_opd2 | ||
232 | .byte \imm8 | ||
233 | .endm | ||
234 | |||
165 | .macro AESKEYGENASSIST rcon xmm1 xmm2 | 235 | .macro AESKEYGENASSIST rcon xmm1 xmm2 |
166 | XMM_NUM aeskeygen_opd1 \xmm1 | 236 | XMM_NUM aeskeygen_opd1 \xmm1 |
167 | XMM_NUM aeskeygen_opd2 \xmm2 | 237 | XMM_NUM aeskeygen_opd2 \xmm2 |
diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S index 08f7e8039099..321d65ebaffe 100644 --- a/arch/x86/kernel/head_64.S +++ b/arch/x86/kernel/head_64.S | |||
@@ -115,8 +115,10 @@ startup_64: | |||
115 | movq %rdi, %rax | 115 | movq %rdi, %rax |
116 | shrq $PUD_SHIFT, %rax | 116 | shrq $PUD_SHIFT, %rax |
117 | andl $(PTRS_PER_PUD-1), %eax | 117 | andl $(PTRS_PER_PUD-1), %eax |
118 | movq %rdx, (4096+0)(%rbx,%rax,8) | 118 | movq %rdx, 4096(%rbx,%rax,8) |
119 | movq %rdx, (4096+8)(%rbx,%rax,8) | 119 | incl %eax |
120 | andl $(PTRS_PER_PUD-1), %eax | ||
121 | movq %rdx, 4096(%rbx,%rax,8) | ||
120 | 122 | ||
121 | addq $8192, %rbx | 123 | addq $8192, %rbx |
122 | movq %rdi, %rax | 124 | movq %rdi, %rax |
diff --git a/arch/x86/kernel/i387.c b/arch/x86/kernel/i387.c index 245a71db401a..cb339097b9ea 100644 --- a/arch/x86/kernel/i387.c +++ b/arch/x86/kernel/i387.c | |||
@@ -22,23 +22,19 @@ | |||
22 | /* | 22 | /* |
23 | * Were we in an interrupt that interrupted kernel mode? | 23 | * Were we in an interrupt that interrupted kernel mode? |
24 | * | 24 | * |
25 | * For now, with eagerfpu we will return interrupted kernel FPU | ||
26 | * state as not-idle. TBD: Ideally we can change the return value | ||
27 | * to something like __thread_has_fpu(current). But we need to | ||
28 | * be careful of doing __thread_clear_has_fpu() before saving | ||
29 | * the FPU etc for supporting nested uses etc. For now, take | ||
30 | * the simple route! | ||
31 | * | ||
32 | * On others, we can do a kernel_fpu_begin/end() pair *ONLY* if that | 25 | * On others, we can do a kernel_fpu_begin/end() pair *ONLY* if that |
33 | * pair does nothing at all: the thread must not have fpu (so | 26 | * pair does nothing at all: the thread must not have fpu (so |
34 | * that we don't try to save the FPU state), and TS must | 27 | * that we don't try to save the FPU state), and TS must |
35 | * be set (so that the clts/stts pair does nothing that is | 28 | * be set (so that the clts/stts pair does nothing that is |
36 | * visible in the interrupted kernel thread). | 29 | * visible in the interrupted kernel thread). |
30 | * | ||
31 | * Except for the eagerfpu case when we return 1 unless we've already | ||
32 | * been eager and saved the state in kernel_fpu_begin(). | ||
37 | */ | 33 | */ |
38 | static inline bool interrupted_kernel_fpu_idle(void) | 34 | static inline bool interrupted_kernel_fpu_idle(void) |
39 | { | 35 | { |
40 | if (use_eager_fpu()) | 36 | if (use_eager_fpu()) |
41 | return 0; | 37 | return __thread_has_fpu(current); |
42 | 38 | ||
43 | return !__thread_has_fpu(current) && | 39 | return !__thread_has_fpu(current) && |
44 | (read_cr0() & X86_CR0_TS); | 40 | (read_cr0() & X86_CR0_TS); |
@@ -78,8 +74,8 @@ void __kernel_fpu_begin(void) | |||
78 | struct task_struct *me = current; | 74 | struct task_struct *me = current; |
79 | 75 | ||
80 | if (__thread_has_fpu(me)) { | 76 | if (__thread_has_fpu(me)) { |
81 | __save_init_fpu(me); | ||
82 | __thread_clear_has_fpu(me); | 77 | __thread_clear_has_fpu(me); |
78 | __save_init_fpu(me); | ||
83 | /* We do 'stts()' in __kernel_fpu_end() */ | 79 | /* We do 'stts()' in __kernel_fpu_end() */ |
84 | } else if (!use_eager_fpu()) { | 80 | } else if (!use_eager_fpu()) { |
85 | this_cpu_write(fpu_owner_task, NULL); | 81 | this_cpu_write(fpu_owner_task, NULL); |
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c index 8db0010ed150..5953dcea752d 100644 --- a/arch/x86/kvm/emulate.c +++ b/arch/x86/kvm/emulate.c | |||
@@ -1240,9 +1240,12 @@ static int decode_modrm(struct x86_emulate_ctxt *ctxt, | |||
1240 | ctxt->modrm_seg = VCPU_SREG_DS; | 1240 | ctxt->modrm_seg = VCPU_SREG_DS; |
1241 | 1241 | ||
1242 | if (ctxt->modrm_mod == 3) { | 1242 | if (ctxt->modrm_mod == 3) { |
1243 | int highbyte_regs = ctxt->rex_prefix == 0; | ||
1244 | |||
1243 | op->type = OP_REG; | 1245 | op->type = OP_REG; |
1244 | op->bytes = (ctxt->d & ByteOp) ? 1 : ctxt->op_bytes; | 1246 | op->bytes = (ctxt->d & ByteOp) ? 1 : ctxt->op_bytes; |
1245 | op->addr.reg = decode_register(ctxt, ctxt->modrm_rm, ctxt->d & ByteOp); | 1247 | op->addr.reg = decode_register(ctxt, ctxt->modrm_rm, |
1248 | highbyte_regs && (ctxt->d & ByteOp)); | ||
1246 | if (ctxt->d & Sse) { | 1249 | if (ctxt->d & Sse) { |
1247 | op->type = OP_XMM; | 1250 | op->type = OP_XMM; |
1248 | op->bytes = 16; | 1251 | op->bytes = 16; |
@@ -3997,7 +4000,8 @@ static const struct opcode twobyte_table[256] = { | |||
3997 | DI(ImplicitOps | Priv, invd), DI(ImplicitOps | Priv, wbinvd), N, N, | 4000 | DI(ImplicitOps | Priv, invd), DI(ImplicitOps | Priv, wbinvd), N, N, |
3998 | N, D(ImplicitOps | ModRM), N, N, | 4001 | N, D(ImplicitOps | ModRM), N, N, |
3999 | /* 0x10 - 0x1F */ | 4002 | /* 0x10 - 0x1F */ |
4000 | N, N, N, N, N, N, N, N, D(ImplicitOps | ModRM), N, N, N, N, N, N, N, | 4003 | N, N, N, N, N, N, N, N, |
4004 | D(ImplicitOps | ModRM), N, N, N, N, N, N, D(ImplicitOps | ModRM), | ||
4001 | /* 0x20 - 0x2F */ | 4005 | /* 0x20 - 0x2F */ |
4002 | DIP(ModRM | DstMem | Priv | Op3264, cr_read, check_cr_read), | 4006 | DIP(ModRM | DstMem | Priv | Op3264, cr_read, check_cr_read), |
4003 | DIP(ModRM | DstMem | Priv | Op3264, dr_read, check_dr_read), | 4007 | DIP(ModRM | DstMem | Priv | Op3264, dr_read, check_dr_read), |
@@ -4836,6 +4840,7 @@ twobyte_insn: | |||
4836 | case 0x08: /* invd */ | 4840 | case 0x08: /* invd */ |
4837 | case 0x0d: /* GrpP (prefetch) */ | 4841 | case 0x0d: /* GrpP (prefetch) */ |
4838 | case 0x18: /* Grp16 (prefetch/nop) */ | 4842 | case 0x18: /* Grp16 (prefetch/nop) */ |
4843 | case 0x1f: /* nop */ | ||
4839 | break; | 4844 | break; |
4840 | case 0x20: /* mov cr, reg */ | 4845 | case 0x20: /* mov cr, reg */ |
4841 | ctxt->dst.val = ops->get_cr(ctxt, ctxt->modrm_reg); | 4846 | ctxt->dst.val = ops->get_cr(ctxt, ctxt->modrm_reg); |
diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c index e1adbb4aca75..0eee2c8b64d1 100644 --- a/arch/x86/kvm/lapic.c +++ b/arch/x86/kvm/lapic.c | |||
@@ -1861,11 +1861,14 @@ void kvm_apic_accept_events(struct kvm_vcpu *vcpu) | |||
1861 | { | 1861 | { |
1862 | struct kvm_lapic *apic = vcpu->arch.apic; | 1862 | struct kvm_lapic *apic = vcpu->arch.apic; |
1863 | unsigned int sipi_vector; | 1863 | unsigned int sipi_vector; |
1864 | unsigned long pe; | ||
1864 | 1865 | ||
1865 | if (!kvm_vcpu_has_lapic(vcpu)) | 1866 | if (!kvm_vcpu_has_lapic(vcpu) || !apic->pending_events) |
1866 | return; | 1867 | return; |
1867 | 1868 | ||
1868 | if (test_and_clear_bit(KVM_APIC_INIT, &apic->pending_events)) { | 1869 | pe = xchg(&apic->pending_events, 0); |
1870 | |||
1871 | if (test_bit(KVM_APIC_INIT, &pe)) { | ||
1869 | kvm_lapic_reset(vcpu); | 1872 | kvm_lapic_reset(vcpu); |
1870 | kvm_vcpu_reset(vcpu); | 1873 | kvm_vcpu_reset(vcpu); |
1871 | if (kvm_vcpu_is_bsp(apic->vcpu)) | 1874 | if (kvm_vcpu_is_bsp(apic->vcpu)) |
@@ -1873,7 +1876,7 @@ void kvm_apic_accept_events(struct kvm_vcpu *vcpu) | |||
1873 | else | 1876 | else |
1874 | vcpu->arch.mp_state = KVM_MP_STATE_INIT_RECEIVED; | 1877 | vcpu->arch.mp_state = KVM_MP_STATE_INIT_RECEIVED; |
1875 | } | 1878 | } |
1876 | if (test_and_clear_bit(KVM_APIC_SIPI, &apic->pending_events) && | 1879 | if (test_bit(KVM_APIC_SIPI, &pe) && |
1877 | vcpu->arch.mp_state == KVM_MP_STATE_INIT_RECEIVED) { | 1880 | vcpu->arch.mp_state == KVM_MP_STATE_INIT_RECEIVED) { |
1878 | /* evaluate pending_events before reading the vector */ | 1881 | /* evaluate pending_events before reading the vector */ |
1879 | smp_rmb(); | 1882 | smp_rmb(); |
diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c index 55856b2310d3..82089d8b1954 100644 --- a/arch/x86/platform/efi/efi.c +++ b/arch/x86/platform/efi/efi.c | |||
@@ -206,7 +206,7 @@ static efi_status_t virt_efi_get_next_variable(unsigned long *name_size, | |||
206 | } | 206 | } |
207 | 207 | ||
208 | if (boot_used_size && !finished) { | 208 | if (boot_used_size && !finished) { |
209 | unsigned long size; | 209 | unsigned long size = 0; |
210 | u32 attr; | 210 | u32 attr; |
211 | efi_status_t s; | 211 | efi_status_t s; |
212 | void *tmp; | 212 | void *tmp; |
diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c index 8ff37995d54e..fb44426fe931 100644 --- a/arch/x86/xen/smp.c +++ b/arch/x86/xen/smp.c | |||
@@ -576,24 +576,22 @@ void xen_send_IPI_mask_allbutself(const struct cpumask *mask, | |||
576 | { | 576 | { |
577 | unsigned cpu; | 577 | unsigned cpu; |
578 | unsigned int this_cpu = smp_processor_id(); | 578 | unsigned int this_cpu = smp_processor_id(); |
579 | int xen_vector = xen_map_vector(vector); | ||
579 | 580 | ||
580 | if (!(num_online_cpus() > 1)) | 581 | if (!(num_online_cpus() > 1) || (xen_vector < 0)) |
581 | return; | 582 | return; |
582 | 583 | ||
583 | for_each_cpu_and(cpu, mask, cpu_online_mask) { | 584 | for_each_cpu_and(cpu, mask, cpu_online_mask) { |
584 | if (this_cpu == cpu) | 585 | if (this_cpu == cpu) |
585 | continue; | 586 | continue; |
586 | 587 | ||
587 | xen_smp_send_call_function_single_ipi(cpu); | 588 | xen_send_IPI_one(cpu, xen_vector); |
588 | } | 589 | } |
589 | } | 590 | } |
590 | 591 | ||
591 | void xen_send_IPI_allbutself(int vector) | 592 | void xen_send_IPI_allbutself(int vector) |
592 | { | 593 | { |
593 | int xen_vector = xen_map_vector(vector); | 594 | xen_send_IPI_mask_allbutself(cpu_online_mask, vector); |
594 | |||
595 | if (xen_vector >= 0) | ||
596 | xen_send_IPI_mask_allbutself(cpu_online_mask, xen_vector); | ||
597 | } | 595 | } |
598 | 596 | ||
599 | static irqreturn_t xen_call_function_interrupt(int irq, void *dev_id) | 597 | static irqreturn_t xen_call_function_interrupt(int irq, void *dev_id) |
diff --git a/arch/x86/xen/smp.h b/arch/x86/xen/smp.h index 8981a76d081a..c7c2d89efd76 100644 --- a/arch/x86/xen/smp.h +++ b/arch/x86/xen/smp.h | |||
@@ -5,7 +5,6 @@ extern void xen_send_IPI_mask(const struct cpumask *mask, | |||
5 | extern void xen_send_IPI_mask_allbutself(const struct cpumask *mask, | 5 | extern void xen_send_IPI_mask_allbutself(const struct cpumask *mask, |
6 | int vector); | 6 | int vector); |
7 | extern void xen_send_IPI_allbutself(int vector); | 7 | extern void xen_send_IPI_allbutself(int vector); |
8 | extern void physflat_send_IPI_allbutself(int vector); | ||
9 | extern void xen_send_IPI_all(int vector); | 8 | extern void xen_send_IPI_all(int vector); |
10 | extern void xen_send_IPI_self(int vector); | 9 | extern void xen_send_IPI_self(int vector); |
11 | 10 | ||
diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile index ecb743bf05a5..536562c626a2 100644 --- a/drivers/acpi/Makefile +++ b/drivers/acpi/Makefile | |||
@@ -24,7 +24,7 @@ acpi-y += nvs.o | |||
24 | # Power management related files | 24 | # Power management related files |
25 | acpi-y += wakeup.o | 25 | acpi-y += wakeup.o |
26 | acpi-y += sleep.o | 26 | acpi-y += sleep.o |
27 | acpi-$(CONFIG_PM) += device_pm.o | 27 | acpi-y += device_pm.o |
28 | acpi-$(CONFIG_ACPI_SLEEP) += proc.o | 28 | acpi-$(CONFIG_ACPI_SLEEP) += proc.o |
29 | 29 | ||
30 | 30 | ||
@@ -38,7 +38,6 @@ acpi-y += processor_core.o | |||
38 | acpi-y += ec.o | 38 | acpi-y += ec.o |
39 | acpi-$(CONFIG_ACPI_DOCK) += dock.o | 39 | acpi-$(CONFIG_ACPI_DOCK) += dock.o |
40 | acpi-y += pci_root.o pci_link.o pci_irq.o | 40 | acpi-y += pci_root.o pci_link.o pci_irq.o |
41 | acpi-y += csrt.o | ||
42 | acpi-$(CONFIG_X86_INTEL_LPSS) += acpi_lpss.o | 41 | acpi-$(CONFIG_X86_INTEL_LPSS) += acpi_lpss.o |
43 | acpi-y += acpi_platform.o | 42 | acpi-y += acpi_platform.o |
44 | acpi-y += power.o | 43 | acpi-y += power.o |
diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c index b1c95422ce74..652fd5ce303c 100644 --- a/drivers/acpi/acpi_lpss.c +++ b/drivers/acpi/acpi_lpss.c | |||
@@ -35,11 +35,16 @@ ACPI_MODULE_NAME("acpi_lpss"); | |||
35 | 35 | ||
36 | struct lpss_device_desc { | 36 | struct lpss_device_desc { |
37 | bool clk_required; | 37 | bool clk_required; |
38 | const char *clk_parent; | 38 | const char *clkdev_name; |
39 | bool ltr_required; | 39 | bool ltr_required; |
40 | unsigned int prv_offset; | 40 | unsigned int prv_offset; |
41 | }; | 41 | }; |
42 | 42 | ||
43 | static struct lpss_device_desc lpss_dma_desc = { | ||
44 | .clk_required = true, | ||
45 | .clkdev_name = "hclk", | ||
46 | }; | ||
47 | |||
43 | struct lpss_private_data { | 48 | struct lpss_private_data { |
44 | void __iomem *mmio_base; | 49 | void __iomem *mmio_base; |
45 | resource_size_t mmio_size; | 50 | resource_size_t mmio_size; |
@@ -49,7 +54,6 @@ struct lpss_private_data { | |||
49 | 54 | ||
50 | static struct lpss_device_desc lpt_dev_desc = { | 55 | static struct lpss_device_desc lpt_dev_desc = { |
51 | .clk_required = true, | 56 | .clk_required = true, |
52 | .clk_parent = "lpss_clk", | ||
53 | .prv_offset = 0x800, | 57 | .prv_offset = 0x800, |
54 | .ltr_required = true, | 58 | .ltr_required = true, |
55 | }; | 59 | }; |
@@ -60,6 +64,9 @@ static struct lpss_device_desc lpt_sdio_dev_desc = { | |||
60 | }; | 64 | }; |
61 | 65 | ||
62 | static const struct acpi_device_id acpi_lpss_device_ids[] = { | 66 | static const struct acpi_device_id acpi_lpss_device_ids[] = { |
67 | /* Generic LPSS devices */ | ||
68 | { "INTL9C60", (unsigned long)&lpss_dma_desc }, | ||
69 | |||
63 | /* Lynxpoint LPSS devices */ | 70 | /* Lynxpoint LPSS devices */ |
64 | { "INT33C0", (unsigned long)&lpt_dev_desc }, | 71 | { "INT33C0", (unsigned long)&lpt_dev_desc }, |
65 | { "INT33C1", (unsigned long)&lpt_dev_desc }, | 72 | { "INT33C1", (unsigned long)&lpt_dev_desc }, |
@@ -91,16 +98,27 @@ static int register_device_clock(struct acpi_device *adev, | |||
91 | struct lpss_private_data *pdata) | 98 | struct lpss_private_data *pdata) |
92 | { | 99 | { |
93 | const struct lpss_device_desc *dev_desc = pdata->dev_desc; | 100 | const struct lpss_device_desc *dev_desc = pdata->dev_desc; |
101 | struct lpss_clk_data *clk_data; | ||
94 | 102 | ||
95 | if (!lpss_clk_dev) | 103 | if (!lpss_clk_dev) |
96 | lpt_register_clock_device(); | 104 | lpt_register_clock_device(); |
97 | 105 | ||
98 | if (!dev_desc->clk_parent || !pdata->mmio_base | 106 | clk_data = platform_get_drvdata(lpss_clk_dev); |
107 | if (!clk_data) | ||
108 | return -ENODEV; | ||
109 | |||
110 | if (dev_desc->clkdev_name) { | ||
111 | clk_register_clkdev(clk_data->clk, dev_desc->clkdev_name, | ||
112 | dev_name(&adev->dev)); | ||
113 | return 0; | ||
114 | } | ||
115 | |||
116 | if (!pdata->mmio_base | ||
99 | || pdata->mmio_size < dev_desc->prv_offset + LPSS_CLK_SIZE) | 117 | || pdata->mmio_size < dev_desc->prv_offset + LPSS_CLK_SIZE) |
100 | return -ENODATA; | 118 | return -ENODATA; |
101 | 119 | ||
102 | pdata->clk = clk_register_gate(NULL, dev_name(&adev->dev), | 120 | pdata->clk = clk_register_gate(NULL, dev_name(&adev->dev), |
103 | dev_desc->clk_parent, 0, | 121 | clk_data->name, 0, |
104 | pdata->mmio_base + dev_desc->prv_offset, | 122 | pdata->mmio_base + dev_desc->prv_offset, |
105 | 0, 0, NULL); | 123 | 0, 0, NULL); |
106 | if (IS_ERR(pdata->clk)) | 124 | if (IS_ERR(pdata->clk)) |
diff --git a/drivers/acpi/apei/cper.c b/drivers/acpi/apei/cper.c index fefc2ca7cc3e..33dc6a004802 100644 --- a/drivers/acpi/apei/cper.c +++ b/drivers/acpi/apei/cper.c | |||
@@ -250,10 +250,6 @@ static const char *cper_pcie_port_type_strs[] = { | |||
250 | static void cper_print_pcie(const char *pfx, const struct cper_sec_pcie *pcie, | 250 | static void cper_print_pcie(const char *pfx, const struct cper_sec_pcie *pcie, |
251 | const struct acpi_hest_generic_data *gdata) | 251 | const struct acpi_hest_generic_data *gdata) |
252 | { | 252 | { |
253 | #ifdef CONFIG_ACPI_APEI_PCIEAER | ||
254 | struct pci_dev *dev; | ||
255 | #endif | ||
256 | |||
257 | if (pcie->validation_bits & CPER_PCIE_VALID_PORT_TYPE) | 253 | if (pcie->validation_bits & CPER_PCIE_VALID_PORT_TYPE) |
258 | printk("%s""port_type: %d, %s\n", pfx, pcie->port_type, | 254 | printk("%s""port_type: %d, %s\n", pfx, pcie->port_type, |
259 | pcie->port_type < ARRAY_SIZE(cper_pcie_port_type_strs) ? | 255 | pcie->port_type < ARRAY_SIZE(cper_pcie_port_type_strs) ? |
@@ -285,20 +281,6 @@ static void cper_print_pcie(const char *pfx, const struct cper_sec_pcie *pcie, | |||
285 | printk( | 281 | printk( |
286 | "%s""bridge: secondary_status: 0x%04x, control: 0x%04x\n", | 282 | "%s""bridge: secondary_status: 0x%04x, control: 0x%04x\n", |
287 | pfx, pcie->bridge.secondary_status, pcie->bridge.control); | 283 | pfx, pcie->bridge.secondary_status, pcie->bridge.control); |
288 | #ifdef CONFIG_ACPI_APEI_PCIEAER | ||
289 | dev = pci_get_domain_bus_and_slot(pcie->device_id.segment, | ||
290 | pcie->device_id.bus, pcie->device_id.function); | ||
291 | if (!dev) { | ||
292 | pr_err("PCI AER Cannot get PCI device %04x:%02x:%02x.%d\n", | ||
293 | pcie->device_id.segment, pcie->device_id.bus, | ||
294 | pcie->device_id.slot, pcie->device_id.function); | ||
295 | return; | ||
296 | } | ||
297 | if (pcie->validation_bits & CPER_PCIE_VALID_AER_INFO) | ||
298 | cper_print_aer(pfx, dev, gdata->error_severity, | ||
299 | (struct aer_capability_regs *) pcie->aer_info); | ||
300 | pci_dev_put(dev); | ||
301 | #endif | ||
302 | } | 284 | } |
303 | 285 | ||
304 | static const char *apei_estatus_section_flag_strs[] = { | 286 | static const char *apei_estatus_section_flag_strs[] = { |
diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c index d668a8ae602b..403baf4dffc1 100644 --- a/drivers/acpi/apei/ghes.c +++ b/drivers/acpi/apei/ghes.c | |||
@@ -454,7 +454,9 @@ static void ghes_do_proc(struct ghes *ghes, | |||
454 | aer_severity = cper_severity_to_aer(sev); | 454 | aer_severity = cper_severity_to_aer(sev); |
455 | aer_recover_queue(pcie_err->device_id.segment, | 455 | aer_recover_queue(pcie_err->device_id.segment, |
456 | pcie_err->device_id.bus, | 456 | pcie_err->device_id.bus, |
457 | devfn, aer_severity); | 457 | devfn, aer_severity, |
458 | (struct aer_capability_regs *) | ||
459 | pcie_err->aer_info); | ||
458 | } | 460 | } |
459 | 461 | ||
460 | } | 462 | } |
diff --git a/drivers/acpi/csrt.c b/drivers/acpi/csrt.c deleted file mode 100644 index 5c15a91faf0b..000000000000 --- a/drivers/acpi/csrt.c +++ /dev/null | |||
@@ -1,159 +0,0 @@ | |||
1 | /* | ||
2 | * Support for Core System Resources Table (CSRT) | ||
3 | * | ||
4 | * Copyright (C) 2013, Intel Corporation | ||
5 | * Authors: Mika Westerberg <mika.westerberg@linux.intel.com> | ||
6 | * Andy Shevchenko <andriy.shevchenko@linux.intel.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #define pr_fmt(fmt) "ACPI: CSRT: " fmt | ||
14 | |||
15 | #include <linux/acpi.h> | ||
16 | #include <linux/device.h> | ||
17 | #include <linux/kernel.h> | ||
18 | #include <linux/module.h> | ||
19 | #include <linux/platform_device.h> | ||
20 | #include <linux/sizes.h> | ||
21 | |||
22 | ACPI_MODULE_NAME("CSRT"); | ||
23 | |||
24 | static int __init acpi_csrt_parse_shared_info(struct platform_device *pdev, | ||
25 | const struct acpi_csrt_group *grp) | ||
26 | { | ||
27 | const struct acpi_csrt_shared_info *si; | ||
28 | struct resource res[3]; | ||
29 | size_t nres; | ||
30 | int ret; | ||
31 | |||
32 | memset(res, 0, sizeof(res)); | ||
33 | nres = 0; | ||
34 | |||
35 | si = (const struct acpi_csrt_shared_info *)&grp[1]; | ||
36 | /* | ||
37 | * The peripherals that are listed on CSRT typically support only | ||
38 | * 32-bit addresses so we only use the low part of MMIO base for | ||
39 | * now. | ||
40 | */ | ||
41 | if (!si->mmio_base_high && si->mmio_base_low) { | ||
42 | /* | ||
43 | * There is no size of the memory resource in shared_info | ||
44 | * so we assume that it is 4k here. | ||
45 | */ | ||
46 | res[nres].start = si->mmio_base_low; | ||
47 | res[nres].end = res[0].start + SZ_4K - 1; | ||
48 | res[nres++].flags = IORESOURCE_MEM; | ||
49 | } | ||
50 | |||
51 | if (si->gsi_interrupt) { | ||
52 | int irq = acpi_register_gsi(NULL, si->gsi_interrupt, | ||
53 | si->interrupt_mode, | ||
54 | si->interrupt_polarity); | ||
55 | res[nres].start = irq; | ||
56 | res[nres].end = irq; | ||
57 | res[nres++].flags = IORESOURCE_IRQ; | ||
58 | } | ||
59 | |||
60 | if (si->base_request_line || si->num_handshake_signals) { | ||
61 | /* | ||
62 | * We pass the driver a DMA resource describing the range | ||
63 | * of request lines the device supports. | ||
64 | */ | ||
65 | res[nres].start = si->base_request_line; | ||
66 | res[nres].end = res[nres].start + si->num_handshake_signals - 1; | ||
67 | res[nres++].flags = IORESOURCE_DMA; | ||
68 | } | ||
69 | |||
70 | ret = platform_device_add_resources(pdev, res, nres); | ||
71 | if (ret) { | ||
72 | if (si->gsi_interrupt) | ||
73 | acpi_unregister_gsi(si->gsi_interrupt); | ||
74 | return ret; | ||
75 | } | ||
76 | |||
77 | return 0; | ||
78 | } | ||
79 | |||
80 | static int __init | ||
81 | acpi_csrt_parse_resource_group(const struct acpi_csrt_group *grp) | ||
82 | { | ||
83 | struct platform_device *pdev; | ||
84 | char vendor[5], name[16]; | ||
85 | int ret, i; | ||
86 | |||
87 | vendor[0] = grp->vendor_id; | ||
88 | vendor[1] = grp->vendor_id >> 8; | ||
89 | vendor[2] = grp->vendor_id >> 16; | ||
90 | vendor[3] = grp->vendor_id >> 24; | ||
91 | vendor[4] = '\0'; | ||
92 | |||
93 | if (grp->shared_info_length != sizeof(struct acpi_csrt_shared_info)) | ||
94 | return -ENODEV; | ||
95 | |||
96 | snprintf(name, sizeof(name), "%s%04X", vendor, grp->device_id); | ||
97 | pdev = platform_device_alloc(name, PLATFORM_DEVID_AUTO); | ||
98 | if (!pdev) | ||
99 | return -ENOMEM; | ||
100 | |||
101 | /* Add resources based on the shared info */ | ||
102 | ret = acpi_csrt_parse_shared_info(pdev, grp); | ||
103 | if (ret) | ||
104 | goto fail; | ||
105 | |||
106 | ret = platform_device_add(pdev); | ||
107 | if (ret) | ||
108 | goto fail; | ||
109 | |||
110 | for (i = 0; i < pdev->num_resources; i++) | ||
111 | dev_dbg(&pdev->dev, "%pR\n", &pdev->resource[i]); | ||
112 | |||
113 | return 0; | ||
114 | |||
115 | fail: | ||
116 | platform_device_put(pdev); | ||
117 | return ret; | ||
118 | } | ||
119 | |||
120 | /* | ||
121 | * CSRT or Core System Resources Table is a proprietary ACPI table | ||
122 | * introduced by Microsoft. This table can contain devices that are not in | ||
123 | * the system DSDT table. In particular DMA controllers might be described | ||
124 | * here. | ||
125 | * | ||
126 | * We present these devices as normal platform devices that don't have ACPI | ||
127 | * IDs or handle. The platform device name will be something like | ||
128 | * <VENDOR><DEVID>.<n>.auto for example: INTL9C06.0.auto. | ||
129 | */ | ||
130 | void __init acpi_csrt_init(void) | ||
131 | { | ||
132 | struct acpi_csrt_group *grp, *end; | ||
133 | struct acpi_table_csrt *csrt; | ||
134 | acpi_status status; | ||
135 | int ret; | ||
136 | |||
137 | status = acpi_get_table(ACPI_SIG_CSRT, 0, | ||
138 | (struct acpi_table_header **)&csrt); | ||
139 | if (ACPI_FAILURE(status)) { | ||
140 | if (status != AE_NOT_FOUND) | ||
141 | pr_warn("failed to get the CSRT table\n"); | ||
142 | return; | ||
143 | } | ||
144 | |||
145 | pr_debug("parsing CSRT table for devices\n"); | ||
146 | |||
147 | grp = (struct acpi_csrt_group *)(csrt + 1); | ||
148 | end = (struct acpi_csrt_group *)((void *)csrt + csrt->header.length); | ||
149 | |||
150 | while (grp < end) { | ||
151 | ret = acpi_csrt_parse_resource_group(grp); | ||
152 | if (ret) { | ||
153 | pr_warn("error in parsing resource group: %d\n", ret); | ||
154 | return; | ||
155 | } | ||
156 | |||
157 | grp = (struct acpi_csrt_group *)((void *)grp + grp->length); | ||
158 | } | ||
159 | } | ||
diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c index 96de787e6104..bc493aa3af19 100644 --- a/drivers/acpi/device_pm.c +++ b/drivers/acpi/device_pm.c | |||
@@ -37,68 +37,6 @@ | |||
37 | #define _COMPONENT ACPI_POWER_COMPONENT | 37 | #define _COMPONENT ACPI_POWER_COMPONENT |
38 | ACPI_MODULE_NAME("device_pm"); | 38 | ACPI_MODULE_NAME("device_pm"); |
39 | 39 | ||
40 | static DEFINE_MUTEX(acpi_pm_notifier_lock); | ||
41 | |||
42 | /** | ||
43 | * acpi_add_pm_notifier - Register PM notifier for given ACPI device. | ||
44 | * @adev: ACPI device to add the notifier for. | ||
45 | * @context: Context information to pass to the notifier routine. | ||
46 | * | ||
47 | * NOTE: @adev need not be a run-wake or wakeup device to be a valid source of | ||
48 | * PM wakeup events. For example, wakeup events may be generated for bridges | ||
49 | * if one of the devices below the bridge is signaling wakeup, even if the | ||
50 | * bridge itself doesn't have a wakeup GPE associated with it. | ||
51 | */ | ||
52 | acpi_status acpi_add_pm_notifier(struct acpi_device *adev, | ||
53 | acpi_notify_handler handler, void *context) | ||
54 | { | ||
55 | acpi_status status = AE_ALREADY_EXISTS; | ||
56 | |||
57 | mutex_lock(&acpi_pm_notifier_lock); | ||
58 | |||
59 | if (adev->wakeup.flags.notifier_present) | ||
60 | goto out; | ||
61 | |||
62 | status = acpi_install_notify_handler(adev->handle, | ||
63 | ACPI_SYSTEM_NOTIFY, | ||
64 | handler, context); | ||
65 | if (ACPI_FAILURE(status)) | ||
66 | goto out; | ||
67 | |||
68 | adev->wakeup.flags.notifier_present = true; | ||
69 | |||
70 | out: | ||
71 | mutex_unlock(&acpi_pm_notifier_lock); | ||
72 | return status; | ||
73 | } | ||
74 | |||
75 | /** | ||
76 | * acpi_remove_pm_notifier - Unregister PM notifier from given ACPI device. | ||
77 | * @adev: ACPI device to remove the notifier from. | ||
78 | */ | ||
79 | acpi_status acpi_remove_pm_notifier(struct acpi_device *adev, | ||
80 | acpi_notify_handler handler) | ||
81 | { | ||
82 | acpi_status status = AE_BAD_PARAMETER; | ||
83 | |||
84 | mutex_lock(&acpi_pm_notifier_lock); | ||
85 | |||
86 | if (!adev->wakeup.flags.notifier_present) | ||
87 | goto out; | ||
88 | |||
89 | status = acpi_remove_notify_handler(adev->handle, | ||
90 | ACPI_SYSTEM_NOTIFY, | ||
91 | handler); | ||
92 | if (ACPI_FAILURE(status)) | ||
93 | goto out; | ||
94 | |||
95 | adev->wakeup.flags.notifier_present = false; | ||
96 | |||
97 | out: | ||
98 | mutex_unlock(&acpi_pm_notifier_lock); | ||
99 | return status; | ||
100 | } | ||
101 | |||
102 | /** | 40 | /** |
103 | * acpi_power_state_string - String representation of ACPI device power state. | 41 | * acpi_power_state_string - String representation of ACPI device power state. |
104 | * @state: ACPI device power state to return the string representation of. | 42 | * @state: ACPI device power state to return the string representation of. |
@@ -385,6 +323,69 @@ bool acpi_bus_power_manageable(acpi_handle handle) | |||
385 | } | 323 | } |
386 | EXPORT_SYMBOL(acpi_bus_power_manageable); | 324 | EXPORT_SYMBOL(acpi_bus_power_manageable); |
387 | 325 | ||
326 | #ifdef CONFIG_PM | ||
327 | static DEFINE_MUTEX(acpi_pm_notifier_lock); | ||
328 | |||
329 | /** | ||
330 | * acpi_add_pm_notifier - Register PM notifier for given ACPI device. | ||
331 | * @adev: ACPI device to add the notifier for. | ||
332 | * @context: Context information to pass to the notifier routine. | ||
333 | * | ||
334 | * NOTE: @adev need not be a run-wake or wakeup device to be a valid source of | ||
335 | * PM wakeup events. For example, wakeup events may be generated for bridges | ||
336 | * if one of the devices below the bridge is signaling wakeup, even if the | ||
337 | * bridge itself doesn't have a wakeup GPE associated with it. | ||
338 | */ | ||
339 | acpi_status acpi_add_pm_notifier(struct acpi_device *adev, | ||
340 | acpi_notify_handler handler, void *context) | ||
341 | { | ||
342 | acpi_status status = AE_ALREADY_EXISTS; | ||
343 | |||
344 | mutex_lock(&acpi_pm_notifier_lock); | ||
345 | |||
346 | if (adev->wakeup.flags.notifier_present) | ||
347 | goto out; | ||
348 | |||
349 | status = acpi_install_notify_handler(adev->handle, | ||
350 | ACPI_SYSTEM_NOTIFY, | ||
351 | handler, context); | ||
352 | if (ACPI_FAILURE(status)) | ||
353 | goto out; | ||
354 | |||
355 | adev->wakeup.flags.notifier_present = true; | ||
356 | |||
357 | out: | ||
358 | mutex_unlock(&acpi_pm_notifier_lock); | ||
359 | return status; | ||
360 | } | ||
361 | |||
362 | /** | ||
363 | * acpi_remove_pm_notifier - Unregister PM notifier from given ACPI device. | ||
364 | * @adev: ACPI device to remove the notifier from. | ||
365 | */ | ||
366 | acpi_status acpi_remove_pm_notifier(struct acpi_device *adev, | ||
367 | acpi_notify_handler handler) | ||
368 | { | ||
369 | acpi_status status = AE_BAD_PARAMETER; | ||
370 | |||
371 | mutex_lock(&acpi_pm_notifier_lock); | ||
372 | |||
373 | if (!adev->wakeup.flags.notifier_present) | ||
374 | goto out; | ||
375 | |||
376 | status = acpi_remove_notify_handler(adev->handle, | ||
377 | ACPI_SYSTEM_NOTIFY, | ||
378 | handler); | ||
379 | if (ACPI_FAILURE(status)) | ||
380 | goto out; | ||
381 | |||
382 | adev->wakeup.flags.notifier_present = false; | ||
383 | |||
384 | out: | ||
385 | mutex_unlock(&acpi_pm_notifier_lock); | ||
386 | return status; | ||
387 | } | ||
388 | |||
388 | bool acpi_bus_can_wakeup(acpi_handle handle) | 389 | bool acpi_bus_can_wakeup(acpi_handle handle) |
389 | { | 390 | { |
390 | struct acpi_device *device; | 391 | struct acpi_device *device; |
@@ -1023,3 +1024,4 @@ void acpi_dev_pm_remove_dependent(acpi_handle handle, struct device *depdev) | |||
1023 | mutex_unlock(&adev->physical_node_lock); | 1024 | mutex_unlock(&adev->physical_node_lock); |
1024 | } | 1025 | } |
1025 | EXPORT_SYMBOL_GPL(acpi_dev_pm_remove_dependent); | 1026 | EXPORT_SYMBOL_GPL(acpi_dev_pm_remove_dependent); |
1027 | #endif /* CONFIG_PM */ | ||
diff --git a/drivers/acpi/internal.h b/drivers/acpi/internal.h index 6f1afd9118c8..297cbf456f86 100644 --- a/drivers/acpi/internal.h +++ b/drivers/acpi/internal.h | |||
@@ -35,7 +35,6 @@ void acpi_pci_link_init(void); | |||
35 | void acpi_pci_root_hp_init(void); | 35 | void acpi_pci_root_hp_init(void); |
36 | void acpi_platform_init(void); | 36 | void acpi_platform_init(void); |
37 | int acpi_sysfs_init(void); | 37 | int acpi_sysfs_init(void); |
38 | void acpi_csrt_init(void); | ||
39 | #ifdef CONFIG_ACPI_CONTAINER | 38 | #ifdef CONFIG_ACPI_CONTAINER |
40 | void acpi_container_init(void); | 39 | void acpi_container_init(void); |
41 | #else | 40 | #else |
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c index c1bc608339a6..44225cb15f3a 100644 --- a/drivers/acpi/scan.c +++ b/drivers/acpi/scan.c | |||
@@ -2043,7 +2043,6 @@ int __init acpi_scan_init(void) | |||
2043 | acpi_pci_link_init(); | 2043 | acpi_pci_link_init(); |
2044 | acpi_platform_init(); | 2044 | acpi_platform_init(); |
2045 | acpi_lpss_init(); | 2045 | acpi_lpss_init(); |
2046 | acpi_csrt_init(); | ||
2047 | acpi_container_init(); | 2046 | acpi_container_init(); |
2048 | acpi_memory_hotplug_init(); | 2047 | acpi_memory_hotplug_init(); |
2049 | 2048 | ||
diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c index 66f67626f02e..e6bd910bc6ed 100644 --- a/drivers/acpi/video_detect.c +++ b/drivers/acpi/video_detect.c | |||
@@ -161,6 +161,14 @@ static struct dmi_system_id video_detect_dmi_table[] = { | |||
161 | DMI_MATCH(DMI_PRODUCT_NAME, "UL30VT"), | 161 | DMI_MATCH(DMI_PRODUCT_NAME, "UL30VT"), |
162 | }, | 162 | }, |
163 | }, | 163 | }, |
164 | { | ||
165 | .callback = video_detect_force_vendor, | ||
166 | .ident = "Asus UL30A", | ||
167 | .matches = { | ||
168 | DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer Inc."), | ||
169 | DMI_MATCH(DMI_PRODUCT_NAME, "UL30A"), | ||
170 | }, | ||
171 | }, | ||
164 | { }, | 172 | { }, |
165 | }; | 173 | }; |
166 | 174 | ||
diff --git a/drivers/ata/acard-ahci.c b/drivers/ata/acard-ahci.c index 4e94ba29cb8d..9d0cf019ce59 100644 --- a/drivers/ata/acard-ahci.c +++ b/drivers/ata/acard-ahci.c | |||
@@ -2,7 +2,7 @@ | |||
2 | /* | 2 | /* |
3 | * acard-ahci.c - ACard AHCI SATA support | 3 | * acard-ahci.c - ACard AHCI SATA support |
4 | * | 4 | * |
5 | * Maintained by: Jeff Garzik <jgarzik@pobox.com> | 5 | * Maintained by: Tejun Heo <tj@kernel.org> |
6 | * Please ALWAYS copy linux-ide@vger.kernel.org | 6 | * Please ALWAYS copy linux-ide@vger.kernel.org |
7 | * on emails. | 7 | * on emails. |
8 | * | 8 | * |
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index 251e57d38942..2b50dfdf1cfc 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * ahci.c - AHCI SATA support | 2 | * ahci.c - AHCI SATA support |
3 | * | 3 | * |
4 | * Maintained by: Jeff Garzik <jgarzik@pobox.com> | 4 | * Maintained by: Tejun Heo <tj@kernel.org> |
5 | * Please ALWAYS copy linux-ide@vger.kernel.org | 5 | * Please ALWAYS copy linux-ide@vger.kernel.org |
6 | * on emails. | 6 | * on emails. |
7 | * | 7 | * |
@@ -423,6 +423,8 @@ static const struct pci_device_id ahci_pci_tbl[] = { | |||
423 | .driver_data = board_ahci_yes_fbs }, /* 88se9125 */ | 423 | .driver_data = board_ahci_yes_fbs }, /* 88se9125 */ |
424 | { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x917a), | 424 | { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x917a), |
425 | .driver_data = board_ahci_yes_fbs }, /* 88se9172 */ | 425 | .driver_data = board_ahci_yes_fbs }, /* 88se9172 */ |
426 | { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9172), | ||
427 | .driver_data = board_ahci_yes_fbs }, /* 88se9172 */ | ||
426 | { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9192), | 428 | { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9192), |
427 | .driver_data = board_ahci_yes_fbs }, /* 88se9172 on some Gigabyte */ | 429 | .driver_data = board_ahci_yes_fbs }, /* 88se9172 on some Gigabyte */ |
428 | { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x91a3), | 430 | { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x91a3), |
diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h index b830e6c9fe49..10b14d45cfd2 100644 --- a/drivers/ata/ahci.h +++ b/drivers/ata/ahci.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * ahci.h - Common AHCI SATA definitions and declarations | 2 | * ahci.h - Common AHCI SATA definitions and declarations |
3 | * | 3 | * |
4 | * Maintained by: Jeff Garzik <jgarzik@pobox.com> | 4 | * Maintained by: Tejun Heo <tj@kernel.org> |
5 | * Please ALWAYS copy linux-ide@vger.kernel.org | 5 | * Please ALWAYS copy linux-ide@vger.kernel.org |
6 | * on emails. | 6 | * on emails. |
7 | * | 7 | * |
diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c index 2f48123d74c4..9a8a674e8fac 100644 --- a/drivers/ata/ata_piix.c +++ b/drivers/ata/ata_piix.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * ata_piix.c - Intel PATA/SATA controllers | 2 | * ata_piix.c - Intel PATA/SATA controllers |
3 | * | 3 | * |
4 | * Maintained by: Jeff Garzik <jgarzik@pobox.com> | 4 | * Maintained by: Tejun Heo <tj@kernel.org> |
5 | * Please ALWAYS copy linux-ide@vger.kernel.org | 5 | * Please ALWAYS copy linux-ide@vger.kernel.org |
6 | * on emails. | 6 | * on emails. |
7 | * | 7 | * |
@@ -151,6 +151,7 @@ enum piix_controller_ids { | |||
151 | piix_pata_vmw, /* PIIX4 for VMware, spurious DMA_ERR */ | 151 | piix_pata_vmw, /* PIIX4 for VMware, spurious DMA_ERR */ |
152 | ich8_sata_snb, | 152 | ich8_sata_snb, |
153 | ich8_2port_sata_snb, | 153 | ich8_2port_sata_snb, |
154 | ich8_2port_sata_byt, | ||
154 | }; | 155 | }; |
155 | 156 | ||
156 | struct piix_map_db { | 157 | struct piix_map_db { |
@@ -334,6 +335,9 @@ static const struct pci_device_id piix_pci_tbl[] = { | |||
334 | { 0x8086, 0x8d60, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb }, | 335 | { 0x8086, 0x8d60, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb }, |
335 | /* SATA Controller IDE (Wellsburg) */ | 336 | /* SATA Controller IDE (Wellsburg) */ |
336 | { 0x8086, 0x8d68, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, | 337 | { 0x8086, 0x8d68, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, |
338 | /* SATA Controller IDE (BayTrail) */ | ||
339 | { 0x8086, 0x0F20, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_byt }, | ||
340 | { 0x8086, 0x0F21, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_byt }, | ||
337 | 341 | ||
338 | { } /* terminate list */ | 342 | { } /* terminate list */ |
339 | }; | 343 | }; |
@@ -441,6 +445,7 @@ static const struct piix_map_db *piix_map_db_table[] = { | |||
441 | [tolapai_sata] = &tolapai_map_db, | 445 | [tolapai_sata] = &tolapai_map_db, |
442 | [ich8_sata_snb] = &ich8_map_db, | 446 | [ich8_sata_snb] = &ich8_map_db, |
443 | [ich8_2port_sata_snb] = &ich8_2port_map_db, | 447 | [ich8_2port_sata_snb] = &ich8_2port_map_db, |
448 | [ich8_2port_sata_byt] = &ich8_2port_map_db, | ||
444 | }; | 449 | }; |
445 | 450 | ||
446 | static struct pci_bits piix_enable_bits[] = { | 451 | static struct pci_bits piix_enable_bits[] = { |
@@ -1254,6 +1259,16 @@ static struct ata_port_info piix_port_info[] = { | |||
1254 | .udma_mask = ATA_UDMA6, | 1259 | .udma_mask = ATA_UDMA6, |
1255 | .port_ops = &piix_sata_ops, | 1260 | .port_ops = &piix_sata_ops, |
1256 | }, | 1261 | }, |
1262 | |||
1263 | [ich8_2port_sata_byt] = | ||
1264 | { | ||
1265 | .flags = PIIX_SATA_FLAGS | PIIX_FLAG_SIDPR | PIIX_FLAG_PIO16, | ||
1266 | .pio_mask = ATA_PIO4, | ||
1267 | .mwdma_mask = ATA_MWDMA2, | ||
1268 | .udma_mask = ATA_UDMA6, | ||
1269 | .port_ops = &piix_sata_ops, | ||
1270 | }, | ||
1271 | |||
1257 | }; | 1272 | }; |
1258 | 1273 | ||
1259 | #define AHCI_PCI_BAR 5 | 1274 | #define AHCI_PCI_BAR 5 |
diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c index 34c82167b962..a70ff154f586 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * libahci.c - Common AHCI SATA low-level routines | 2 | * libahci.c - Common AHCI SATA low-level routines |
3 | * | 3 | * |
4 | * Maintained by: Jeff Garzik <jgarzik@pobox.com> | 4 | * Maintained by: Tejun Heo <tj@kernel.org> |
5 | * Please ALWAYS copy linux-ide@vger.kernel.org | 5 | * Please ALWAYS copy linux-ide@vger.kernel.org |
6 | * on emails. | 6 | * on emails. |
7 | * | 7 | * |
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 63c743baf920..f2184276539d 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * libata-core.c - helper library for ATA | 2 | * libata-core.c - helper library for ATA |
3 | * | 3 | * |
4 | * Maintained by: Jeff Garzik <jgarzik@pobox.com> | 4 | * Maintained by: Tejun Heo <tj@kernel.org> |
5 | * Please ALWAYS copy linux-ide@vger.kernel.org | 5 | * Please ALWAYS copy linux-ide@vger.kernel.org |
6 | * on emails. | 6 | * on emails. |
7 | * | 7 | * |
@@ -1602,6 +1602,12 @@ unsigned ata_exec_internal_sg(struct ata_device *dev, | |||
1602 | qc->tf = *tf; | 1602 | qc->tf = *tf; |
1603 | if (cdb) | 1603 | if (cdb) |
1604 | memcpy(qc->cdb, cdb, ATAPI_CDB_LEN); | 1604 | memcpy(qc->cdb, cdb, ATAPI_CDB_LEN); |
1605 | |||
1606 | /* some SATA bridges need us to indicate data xfer direction */ | ||
1607 | if (tf->protocol == ATAPI_PROT_DMA && (dev->flags & ATA_DFLAG_DMADIR) && | ||
1608 | dma_dir == DMA_FROM_DEVICE) | ||
1609 | qc->tf.feature |= ATAPI_DMADIR; | ||
1610 | |||
1605 | qc->flags |= ATA_QCFLAG_RESULT_TF; | 1611 | qc->flags |= ATA_QCFLAG_RESULT_TF; |
1606 | qc->dma_dir = dma_dir; | 1612 | qc->dma_dir = dma_dir; |
1607 | if (dma_dir != DMA_NONE) { | 1613 | if (dma_dir != DMA_NONE) { |
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index f9476fb3ac43..c69fcce505c0 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * libata-eh.c - libata error handling | 2 | * libata-eh.c - libata error handling |
3 | * | 3 | * |
4 | * Maintained by: Jeff Garzik <jgarzik@pobox.com> | 4 | * Maintained by: Tejun Heo <tj@kernel.org> |
5 | * Please ALWAYS copy linux-ide@vger.kernel.org | 5 | * Please ALWAYS copy linux-ide@vger.kernel.org |
6 | * on emails. | 6 | * on emails. |
7 | * | 7 | * |
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index dd310b27b24c..0101af541436 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * libata-scsi.c - helper library for ATA | 2 | * libata-scsi.c - helper library for ATA |
3 | * | 3 | * |
4 | * Maintained by: Jeff Garzik <jgarzik@pobox.com> | 4 | * Maintained by: Tejun Heo <tj@kernel.org> |
5 | * Please ALWAYS copy linux-ide@vger.kernel.org | 5 | * Please ALWAYS copy linux-ide@vger.kernel.org |
6 | * on emails. | 6 | * on emails. |
7 | * | 7 | * |
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c index d8af325a6bda..b603720b877d 100644 --- a/drivers/ata/libata-sff.c +++ b/drivers/ata/libata-sff.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * libata-sff.c - helper library for PCI IDE BMDMA | 2 | * libata-sff.c - helper library for PCI IDE BMDMA |
3 | * | 3 | * |
4 | * Maintained by: Jeff Garzik <jgarzik@pobox.com> | 4 | * Maintained by: Tejun Heo <tj@kernel.org> |
5 | * Please ALWAYS copy linux-ide@vger.kernel.org | 5 | * Please ALWAYS copy linux-ide@vger.kernel.org |
6 | * on emails. | 6 | * on emails. |
7 | * | 7 | * |
diff --git a/drivers/ata/pdc_adma.c b/drivers/ata/pdc_adma.c index 505333340ad5..8ea6e6afd041 100644 --- a/drivers/ata/pdc_adma.c +++ b/drivers/ata/pdc_adma.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * pdc_adma.c - Pacific Digital Corporation ADMA | 2 | * pdc_adma.c - Pacific Digital Corporation ADMA |
3 | * | 3 | * |
4 | * Maintained by: Mark Lord <mlord@pobox.com> | 4 | * Maintained by: Tejun Heo <tj@kernel.org> |
5 | * | 5 | * |
6 | * Copyright 2005 Mark Lord | 6 | * Copyright 2005 Mark Lord |
7 | * | 7 | * |
diff --git a/drivers/ata/sata_promise.c b/drivers/ata/sata_promise.c index fb0dd87f8893..958ba2a420c3 100644 --- a/drivers/ata/sata_promise.c +++ b/drivers/ata/sata_promise.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * sata_promise.c - Promise SATA | 2 | * sata_promise.c - Promise SATA |
3 | * | 3 | * |
4 | * Maintained by: Jeff Garzik <jgarzik@pobox.com> | 4 | * Maintained by: Tejun Heo <tj@kernel.org> |
5 | * Mikael Pettersson <mikpe@it.uu.se> | 5 | * Mikael Pettersson <mikpe@it.uu.se> |
6 | * Please ALWAYS copy linux-ide@vger.kernel.org | 6 | * Please ALWAYS copy linux-ide@vger.kernel.org |
7 | * on emails. | 7 | * on emails. |
diff --git a/drivers/ata/sata_rcar.c b/drivers/ata/sata_rcar.c index 4799868bd733..249c8a289bfd 100644 --- a/drivers/ata/sata_rcar.c +++ b/drivers/ata/sata_rcar.c | |||
@@ -549,6 +549,7 @@ static void sata_rcar_bmdma_start(struct ata_queued_cmd *qc) | |||
549 | 549 | ||
550 | /* start host DMA transaction */ | 550 | /* start host DMA transaction */ |
551 | dmactl = ioread32(priv->base + ATAPI_CONTROL1_REG); | 551 | dmactl = ioread32(priv->base + ATAPI_CONTROL1_REG); |
552 | dmactl &= ~ATAPI_CONTROL1_STOP; | ||
552 | dmactl |= ATAPI_CONTROL1_START; | 553 | dmactl |= ATAPI_CONTROL1_START; |
553 | iowrite32(dmactl, priv->base + ATAPI_CONTROL1_REG); | 554 | iowrite32(dmactl, priv->base + ATAPI_CONTROL1_REG); |
554 | } | 555 | } |
@@ -618,17 +619,16 @@ static struct ata_port_operations sata_rcar_port_ops = { | |||
618 | .bmdma_status = sata_rcar_bmdma_status, | 619 | .bmdma_status = sata_rcar_bmdma_status, |
619 | }; | 620 | }; |
620 | 621 | ||
621 | static int sata_rcar_serr_interrupt(struct ata_port *ap) | 622 | static void sata_rcar_serr_interrupt(struct ata_port *ap) |
622 | { | 623 | { |
623 | struct sata_rcar_priv *priv = ap->host->private_data; | 624 | struct sata_rcar_priv *priv = ap->host->private_data; |
624 | struct ata_eh_info *ehi = &ap->link.eh_info; | 625 | struct ata_eh_info *ehi = &ap->link.eh_info; |
625 | int freeze = 0; | 626 | int freeze = 0; |
626 | int handled = 0; | ||
627 | u32 serror; | 627 | u32 serror; |
628 | 628 | ||
629 | serror = ioread32(priv->base + SCRSERR_REG); | 629 | serror = ioread32(priv->base + SCRSERR_REG); |
630 | if (!serror) | 630 | if (!serror) |
631 | return 0; | 631 | return; |
632 | 632 | ||
633 | DPRINTK("SError @host_intr: 0x%x\n", serror); | 633 | DPRINTK("SError @host_intr: 0x%x\n", serror); |
634 | 634 | ||
@@ -641,7 +641,6 @@ static int sata_rcar_serr_interrupt(struct ata_port *ap) | |||
641 | ata_ehi_push_desc(ehi, "%s", "hotplug"); | 641 | ata_ehi_push_desc(ehi, "%s", "hotplug"); |
642 | 642 | ||
643 | freeze = serror & SERR_COMM_WAKE ? 0 : 1; | 643 | freeze = serror & SERR_COMM_WAKE ? 0 : 1; |
644 | handled = 1; | ||
645 | } | 644 | } |
646 | 645 | ||
647 | /* freeze or abort */ | 646 | /* freeze or abort */ |
@@ -649,11 +648,9 @@ static int sata_rcar_serr_interrupt(struct ata_port *ap) | |||
649 | ata_port_freeze(ap); | 648 | ata_port_freeze(ap); |
650 | else | 649 | else |
651 | ata_port_abort(ap); | 650 | ata_port_abort(ap); |
652 | |||
653 | return handled; | ||
654 | } | 651 | } |
655 | 652 | ||
656 | static int sata_rcar_ata_interrupt(struct ata_port *ap) | 653 | static void sata_rcar_ata_interrupt(struct ata_port *ap) |
657 | { | 654 | { |
658 | struct ata_queued_cmd *qc; | 655 | struct ata_queued_cmd *qc; |
659 | int handled = 0; | 656 | int handled = 0; |
@@ -662,7 +659,9 @@ static int sata_rcar_ata_interrupt(struct ata_port *ap) | |||
662 | if (qc) | 659 | if (qc) |
663 | handled |= ata_bmdma_port_intr(ap, qc); | 660 | handled |= ata_bmdma_port_intr(ap, qc); |
664 | 661 | ||
665 | return handled; | 662 | /* be sure to clear ATA interrupt */ |
663 | if (!handled) | ||
664 | sata_rcar_check_status(ap); | ||
666 | } | 665 | } |
667 | 666 | ||
668 | static irqreturn_t sata_rcar_interrupt(int irq, void *dev_instance) | 667 | static irqreturn_t sata_rcar_interrupt(int irq, void *dev_instance) |
@@ -677,20 +676,21 @@ static irqreturn_t sata_rcar_interrupt(int irq, void *dev_instance) | |||
677 | spin_lock_irqsave(&host->lock, flags); | 676 | spin_lock_irqsave(&host->lock, flags); |
678 | 677 | ||
679 | sataintstat = ioread32(priv->base + SATAINTSTAT_REG); | 678 | sataintstat = ioread32(priv->base + SATAINTSTAT_REG); |
679 | sataintstat &= SATA_RCAR_INT_MASK; | ||
680 | if (!sataintstat) | 680 | if (!sataintstat) |
681 | goto done; | 681 | goto done; |
682 | /* ack */ | 682 | /* ack */ |
683 | iowrite32(sataintstat & ~SATA_RCAR_INT_MASK, | 683 | iowrite32(~sataintstat & 0x7ff, priv->base + SATAINTSTAT_REG); |
684 | priv->base + SATAINTSTAT_REG); | ||
685 | 684 | ||
686 | ap = host->ports[0]; | 685 | ap = host->ports[0]; |
687 | 686 | ||
688 | if (sataintstat & SATAINTSTAT_ATA) | 687 | if (sataintstat & SATAINTSTAT_ATA) |
689 | handled |= sata_rcar_ata_interrupt(ap); | 688 | sata_rcar_ata_interrupt(ap); |
690 | 689 | ||
691 | if (sataintstat & SATAINTSTAT_SERR) | 690 | if (sataintstat & SATAINTSTAT_SERR) |
692 | handled |= sata_rcar_serr_interrupt(ap); | 691 | sata_rcar_serr_interrupt(ap); |
693 | 692 | ||
693 | handled = 1; | ||
694 | done: | 694 | done: |
695 | spin_unlock_irqrestore(&host->lock, flags); | 695 | spin_unlock_irqrestore(&host->lock, flags); |
696 | 696 | ||
diff --git a/drivers/ata/sata_sil.c b/drivers/ata/sata_sil.c index a7b31672c4b7..0ae3ca4bf5c0 100644 --- a/drivers/ata/sata_sil.c +++ b/drivers/ata/sata_sil.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * sata_sil.c - Silicon Image SATA | 2 | * sata_sil.c - Silicon Image SATA |
3 | * | 3 | * |
4 | * Maintained by: Jeff Garzik <jgarzik@pobox.com> | 4 | * Maintained by: Tejun Heo <tj@kernel.org> |
5 | * Please ALWAYS copy linux-ide@vger.kernel.org | 5 | * Please ALWAYS copy linux-ide@vger.kernel.org |
6 | * on emails. | 6 | * on emails. |
7 | * | 7 | * |
diff --git a/drivers/ata/sata_sx4.c b/drivers/ata/sata_sx4.c index 7b7127a58f51..9947010afc0f 100644 --- a/drivers/ata/sata_sx4.c +++ b/drivers/ata/sata_sx4.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * sata_sx4.c - Promise SATA | 2 | * sata_sx4.c - Promise SATA |
3 | * | 3 | * |
4 | * Maintained by: Jeff Garzik <jgarzik@pobox.com> | 4 | * Maintained by: Tejun Heo <tj@kernel.org> |
5 | * Please ALWAYS copy linux-ide@vger.kernel.org | 5 | * Please ALWAYS copy linux-ide@vger.kernel.org |
6 | * on emails. | 6 | * on emails. |
7 | * | 7 | * |
diff --git a/drivers/ata/sata_via.c b/drivers/ata/sata_via.c index 5913ea9d57b2..87f056e54a9d 100644 --- a/drivers/ata/sata_via.c +++ b/drivers/ata/sata_via.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * sata_via.c - VIA Serial ATA controllers | 2 | * sata_via.c - VIA Serial ATA controllers |
3 | * | 3 | * |
4 | * Maintained by: Jeff Garzik <jgarzik@pobox.com> | 4 | * Maintained by: Tejun Heo <tj@kernel.org> |
5 | * Please ALWAYS copy linux-ide@vger.kernel.org | 5 | * Please ALWAYS copy linux-ide@vger.kernel.org |
6 | * on emails. | 6 | * on emails. |
7 | * | 7 | * |
diff --git a/drivers/block/brd.c b/drivers/block/brd.c index f1a29f8e9d33..9bf4371755f2 100644 --- a/drivers/block/brd.c +++ b/drivers/block/brd.c | |||
@@ -117,13 +117,13 @@ static struct page *brd_insert_page(struct brd_device *brd, sector_t sector) | |||
117 | 117 | ||
118 | spin_lock(&brd->brd_lock); | 118 | spin_lock(&brd->brd_lock); |
119 | idx = sector >> PAGE_SECTORS_SHIFT; | 119 | idx = sector >> PAGE_SECTORS_SHIFT; |
120 | page->index = idx; | ||
120 | if (radix_tree_insert(&brd->brd_pages, idx, page)) { | 121 | if (radix_tree_insert(&brd->brd_pages, idx, page)) { |
121 | __free_page(page); | 122 | __free_page(page); |
122 | page = radix_tree_lookup(&brd->brd_pages, idx); | 123 | page = radix_tree_lookup(&brd->brd_pages, idx); |
123 | BUG_ON(!page); | 124 | BUG_ON(!page); |
124 | BUG_ON(page->index != idx); | 125 | BUG_ON(page->index != idx); |
125 | } else | 126 | } |
126 | page->index = idx; | ||
127 | spin_unlock(&brd->brd_lock); | 127 | spin_unlock(&brd->brd_lock); |
128 | 128 | ||
129 | radix_tree_preload_end(); | 129 | radix_tree_preload_end(); |
diff --git a/drivers/block/xsysace.c b/drivers/block/xsysace.c index f8ef15f37c5e..3fd130fdfbc1 100644 --- a/drivers/block/xsysace.c +++ b/drivers/block/xsysace.c | |||
@@ -1160,8 +1160,7 @@ static int ace_probe(struct platform_device *dev) | |||
1160 | dev_dbg(&dev->dev, "ace_probe(%p)\n", dev); | 1160 | dev_dbg(&dev->dev, "ace_probe(%p)\n", dev); |
1161 | 1161 | ||
1162 | /* device id and bus width */ | 1162 | /* device id and bus width */ |
1163 | of_property_read_u32(dev->dev.of_node, "port-number", &id); | 1163 | if (of_property_read_u32(dev->dev.of_node, "port-number", &id)) |
1164 | if (id < 0) | ||
1165 | id = 0; | 1164 | id = 0; |
1166 | if (of_find_property(dev->dev.of_node, "8-bit", NULL)) | 1165 | if (of_find_property(dev->dev.of_node, "8-bit", NULL)) |
1167 | bus_width = ACE_BUS_WIDTH_8; | 1166 | bus_width = ACE_BUS_WIDTH_8; |
diff --git a/drivers/char/random.c b/drivers/char/random.c index cd9a6211dcad..35487e8ded59 100644 --- a/drivers/char/random.c +++ b/drivers/char/random.c | |||
@@ -865,16 +865,24 @@ static size_t account(struct entropy_store *r, size_t nbytes, int min, | |||
865 | if (r->entropy_count / 8 < min + reserved) { | 865 | if (r->entropy_count / 8 < min + reserved) { |
866 | nbytes = 0; | 866 | nbytes = 0; |
867 | } else { | 867 | } else { |
868 | int entropy_count, orig; | ||
869 | retry: | ||
870 | entropy_count = orig = ACCESS_ONCE(r->entropy_count); | ||
868 | /* If limited, never pull more than available */ | 871 | /* If limited, never pull more than available */ |
869 | if (r->limit && nbytes + reserved >= r->entropy_count / 8) | 872 | if (r->limit && nbytes + reserved >= entropy_count / 8) |
870 | nbytes = r->entropy_count/8 - reserved; | 873 | nbytes = entropy_count/8 - reserved; |
871 | 874 | ||
872 | if (r->entropy_count / 8 >= nbytes + reserved) | 875 | if (entropy_count / 8 >= nbytes + reserved) { |
873 | r->entropy_count -= nbytes*8; | 876 | entropy_count -= nbytes*8; |
874 | else | 877 | if (cmpxchg(&r->entropy_count, orig, entropy_count) != orig) |
875 | r->entropy_count = reserved; | 878 | goto retry; |
879 | } else { | ||
880 | entropy_count = reserved; | ||
881 | if (cmpxchg(&r->entropy_count, orig, entropy_count) != orig) | ||
882 | goto retry; | ||
883 | } | ||
876 | 884 | ||
877 | if (r->entropy_count < random_write_wakeup_thresh) | 885 | if (entropy_count < random_write_wakeup_thresh) |
878 | wakeup_write = 1; | 886 | wakeup_write = 1; |
879 | } | 887 | } |
880 | 888 | ||
@@ -957,10 +965,23 @@ static ssize_t extract_entropy(struct entropy_store *r, void *buf, | |||
957 | { | 965 | { |
958 | ssize_t ret = 0, i; | 966 | ssize_t ret = 0, i; |
959 | __u8 tmp[EXTRACT_SIZE]; | 967 | __u8 tmp[EXTRACT_SIZE]; |
968 | unsigned long flags; | ||
960 | 969 | ||
961 | /* if last_data isn't primed, we need EXTRACT_SIZE extra bytes */ | 970 | /* if last_data isn't primed, we need EXTRACT_SIZE extra bytes */ |
962 | if (fips_enabled && !r->last_data_init) | 971 | if (fips_enabled) { |
963 | nbytes += EXTRACT_SIZE; | 972 | spin_lock_irqsave(&r->lock, flags); |
973 | if (!r->last_data_init) { | ||
974 | r->last_data_init = true; | ||
975 | spin_unlock_irqrestore(&r->lock, flags); | ||
976 | trace_extract_entropy(r->name, EXTRACT_SIZE, | ||
977 | r->entropy_count, _RET_IP_); | ||
978 | xfer_secondary_pool(r, EXTRACT_SIZE); | ||
979 | extract_buf(r, tmp); | ||
980 | spin_lock_irqsave(&r->lock, flags); | ||
981 | memcpy(r->last_data, tmp, EXTRACT_SIZE); | ||
982 | } | ||
983 | spin_unlock_irqrestore(&r->lock, flags); | ||
984 | } | ||
964 | 985 | ||
965 | trace_extract_entropy(r->name, nbytes, r->entropy_count, _RET_IP_); | 986 | trace_extract_entropy(r->name, nbytes, r->entropy_count, _RET_IP_); |
966 | xfer_secondary_pool(r, nbytes); | 987 | xfer_secondary_pool(r, nbytes); |
@@ -970,19 +991,6 @@ static ssize_t extract_entropy(struct entropy_store *r, void *buf, | |||
970 | extract_buf(r, tmp); | 991 | extract_buf(r, tmp); |
971 | 992 | ||
972 | if (fips_enabled) { | 993 | if (fips_enabled) { |
973 | unsigned long flags; | ||
974 | |||
975 | |||
976 | /* prime last_data value if need be, per fips 140-2 */ | ||
977 | if (!r->last_data_init) { | ||
978 | spin_lock_irqsave(&r->lock, flags); | ||
979 | memcpy(r->last_data, tmp, EXTRACT_SIZE); | ||
980 | r->last_data_init = true; | ||
981 | nbytes -= EXTRACT_SIZE; | ||
982 | spin_unlock_irqrestore(&r->lock, flags); | ||
983 | extract_buf(r, tmp); | ||
984 | } | ||
985 | |||
986 | spin_lock_irqsave(&r->lock, flags); | 994 | spin_lock_irqsave(&r->lock, flags); |
987 | if (!memcmp(tmp, r->last_data, EXTRACT_SIZE)) | 995 | if (!memcmp(tmp, r->last_data, EXTRACT_SIZE)) |
988 | panic("Hardware RNG duplicated output!\n"); | 996 | panic("Hardware RNG duplicated output!\n"); |
diff --git a/drivers/clk/clk-si5351.c b/drivers/clk/clk-si5351.c index 892728412e9d..24f553673b72 100644 --- a/drivers/clk/clk-si5351.c +++ b/drivers/clk/clk-si5351.c | |||
@@ -932,7 +932,7 @@ static unsigned long si5351_clkout_recalc_rate(struct clk_hw *hw, | |||
932 | unsigned char reg; | 932 | unsigned char reg; |
933 | unsigned char rdiv; | 933 | unsigned char rdiv; |
934 | 934 | ||
935 | if (hwdata->num > 5) | 935 | if (hwdata->num <= 5) |
936 | reg = si5351_msynth_params_address(hwdata->num) + 2; | 936 | reg = si5351_msynth_params_address(hwdata->num) + 2; |
937 | else | 937 | else |
938 | reg = SI5351_CLK6_7_OUTPUT_DIVIDER; | 938 | reg = SI5351_CLK6_7_OUTPUT_DIVIDER; |
@@ -1477,6 +1477,16 @@ static int si5351_i2c_probe(struct i2c_client *client, | |||
1477 | return -EINVAL; | 1477 | return -EINVAL; |
1478 | } | 1478 | } |
1479 | drvdata->onecell.clks[n] = clk; | 1479 | drvdata->onecell.clks[n] = clk; |
1480 | |||
1481 | /* set initial clkout rate */ | ||
1482 | if (pdata->clkout[n].rate != 0) { | ||
1483 | int ret; | ||
1484 | ret = clk_set_rate(clk, pdata->clkout[n].rate); | ||
1485 | if (ret != 0) { | ||
1486 | dev_err(&client->dev, "Cannot set rate : %d\n", | ||
1487 | ret); | ||
1488 | } | ||
1489 | } | ||
1480 | } | 1490 | } |
1481 | 1491 | ||
1482 | ret = of_clk_add_provider(client->dev.of_node, of_clk_src_onecell_get, | 1492 | ret = of_clk_add_provider(client->dev.of_node, of_clk_src_onecell_get, |
diff --git a/drivers/clk/clk-vt8500.c b/drivers/clk/clk-vt8500.c index debf688afa8e..553ac35bcc91 100644 --- a/drivers/clk/clk-vt8500.c +++ b/drivers/clk/clk-vt8500.c | |||
@@ -183,7 +183,7 @@ static int vt8500_dclk_set_rate(struct clk_hw *hw, unsigned long rate, | |||
183 | writel(divisor, cdev->div_reg); | 183 | writel(divisor, cdev->div_reg); |
184 | vt8500_pmc_wait_busy(); | 184 | vt8500_pmc_wait_busy(); |
185 | 185 | ||
186 | spin_lock_irqsave(cdev->lock, flags); | 186 | spin_unlock_irqrestore(cdev->lock, flags); |
187 | 187 | ||
188 | return 0; | 188 | return 0; |
189 | } | 189 | } |
diff --git a/drivers/clk/mxs/clk-imx28.c b/drivers/clk/mxs/clk-imx28.c index d0e5eed146de..4faf0afc44cd 100644 --- a/drivers/clk/mxs/clk-imx28.c +++ b/drivers/clk/mxs/clk-imx28.c | |||
@@ -10,6 +10,7 @@ | |||
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include <linux/clk.h> | 12 | #include <linux/clk.h> |
13 | #include <linux/clk/mxs.h> | ||
13 | #include <linux/clkdev.h> | 14 | #include <linux/clkdev.h> |
14 | #include <linux/err.h> | 15 | #include <linux/err.h> |
15 | #include <linux/init.h> | 16 | #include <linux/init.h> |
diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c index d0940e69d034..3c1f88868f29 100644 --- a/drivers/clk/samsung/clk-exynos4.c +++ b/drivers/clk/samsung/clk-exynos4.c | |||
@@ -791,7 +791,8 @@ struct samsung_gate_clock exynos4210_gate_clks[] __initdata = { | |||
791 | GATE(smmu_pcie, "smmu_pcie", "aclk133", GATE_IP_FSYS, 18, 0, 0), | 791 | GATE(smmu_pcie, "smmu_pcie", "aclk133", GATE_IP_FSYS, 18, 0, 0), |
792 | GATE(modemif, "modemif", "aclk100", GATE_IP_PERIL, 28, 0, 0), | 792 | GATE(modemif, "modemif", "aclk100", GATE_IP_PERIL, 28, 0, 0), |
793 | GATE(chipid, "chipid", "aclk100", E4210_GATE_IP_PERIR, 0, 0, 0), | 793 | GATE(chipid, "chipid", "aclk100", E4210_GATE_IP_PERIR, 0, 0, 0), |
794 | GATE(sysreg, "sysreg", "aclk100", E4210_GATE_IP_PERIR, 0, 0, 0), | 794 | GATE(sysreg, "sysreg", "aclk100", E4210_GATE_IP_PERIR, 0, |
795 | CLK_IGNORE_UNUSED, 0), | ||
795 | GATE(hdmi_cec, "hdmi_cec", "aclk100", E4210_GATE_IP_PERIR, 11, 0, 0), | 796 | GATE(hdmi_cec, "hdmi_cec", "aclk100", E4210_GATE_IP_PERIR, 11, 0, 0), |
796 | GATE(smmu_rotator, "smmu_rotator", "aclk200", | 797 | GATE(smmu_rotator, "smmu_rotator", "aclk200", |
797 | E4210_GATE_IP_IMAGE, 4, 0, 0), | 798 | E4210_GATE_IP_IMAGE, 4, 0, 0), |
@@ -819,7 +820,8 @@ struct samsung_gate_clock exynos4x12_gate_clks[] __initdata = { | |||
819 | GATE(smmu_mdma, "smmu_mdma", "aclk200", E4X12_GATE_IP_IMAGE, 5, 0, 0), | 820 | GATE(smmu_mdma, "smmu_mdma", "aclk200", E4X12_GATE_IP_IMAGE, 5, 0, 0), |
820 | GATE(mipi_hsi, "mipi_hsi", "aclk133", GATE_IP_FSYS, 10, 0, 0), | 821 | GATE(mipi_hsi, "mipi_hsi", "aclk133", GATE_IP_FSYS, 10, 0, 0), |
821 | GATE(chipid, "chipid", "aclk100", E4X12_GATE_IP_PERIR, 0, 0, 0), | 822 | GATE(chipid, "chipid", "aclk100", E4X12_GATE_IP_PERIR, 0, 0, 0), |
822 | GATE(sysreg, "sysreg", "aclk100", E4X12_GATE_IP_PERIR, 1, 0, 0), | 823 | GATE(sysreg, "sysreg", "aclk100", E4X12_GATE_IP_PERIR, 1, |
824 | CLK_IGNORE_UNUSED, 0), | ||
823 | GATE(hdmi_cec, "hdmi_cec", "aclk100", E4X12_GATE_IP_PERIR, 11, 0, 0), | 825 | GATE(hdmi_cec, "hdmi_cec", "aclk100", E4X12_GATE_IP_PERIR, 11, 0, 0), |
824 | GATE(sclk_mdnie0, "sclk_mdnie0", "div_mdnie0", | 826 | GATE(sclk_mdnie0, "sclk_mdnie0", "div_mdnie0", |
825 | SRC_MASK_LCD0, 4, CLK_SET_RATE_PARENT, 0), | 827 | SRC_MASK_LCD0, 4, CLK_SET_RATE_PARENT, 0), |
diff --git a/drivers/clk/tegra/clk-tegra20.c b/drivers/clk/tegra/clk-tegra20.c index 8292a00c3de9..075db0c99edb 100644 --- a/drivers/clk/tegra/clk-tegra20.c +++ b/drivers/clk/tegra/clk-tegra20.c | |||
@@ -872,6 +872,14 @@ static void __init tegra20_periph_clk_init(void) | |||
872 | struct clk *clk; | 872 | struct clk *clk; |
873 | int i; | 873 | int i; |
874 | 874 | ||
875 | /* ac97 */ | ||
876 | clk = tegra_clk_register_periph_gate("ac97", "pll_a_out0", | ||
877 | TEGRA_PERIPH_ON_APB, | ||
878 | clk_base, 0, 3, &periph_l_regs, | ||
879 | periph_clk_enb_refcnt); | ||
880 | clk_register_clkdev(clk, NULL, "tegra20-ac97"); | ||
881 | clks[ac97] = clk; | ||
882 | |||
875 | /* apbdma */ | 883 | /* apbdma */ |
876 | clk = tegra_clk_register_periph_gate("apbdma", "pclk", 0, clk_base, | 884 | clk = tegra_clk_register_periph_gate("apbdma", "pclk", 0, clk_base, |
877 | 0, 34, &periph_h_regs, | 885 | 0, 34, &periph_h_regs, |
@@ -1234,9 +1242,6 @@ static __initdata struct tegra_clk_init_table init_table[] = { | |||
1234 | {uartc, pll_p, 0, 0}, | 1242 | {uartc, pll_p, 0, 0}, |
1235 | {uartd, pll_p, 0, 0}, | 1243 | {uartd, pll_p, 0, 0}, |
1236 | {uarte, pll_p, 0, 0}, | 1244 | {uarte, pll_p, 0, 0}, |
1237 | {usbd, clk_max, 12000000, 0}, | ||
1238 | {usb2, clk_max, 12000000, 0}, | ||
1239 | {usb3, clk_max, 12000000, 0}, | ||
1240 | {pll_a, clk_max, 56448000, 1}, | 1245 | {pll_a, clk_max, 56448000, 1}, |
1241 | {pll_a_out0, clk_max, 11289600, 1}, | 1246 | {pll_a_out0, clk_max, 11289600, 1}, |
1242 | {cdev1, clk_max, 0, 1}, | 1247 | {cdev1, clk_max, 0, 1}, |
diff --git a/drivers/clk/ux500/clk-sysctrl.c b/drivers/clk/ux500/clk-sysctrl.c index bc7e9bde792b..e364c9d4aa60 100644 --- a/drivers/clk/ux500/clk-sysctrl.c +++ b/drivers/clk/ux500/clk-sysctrl.c | |||
@@ -145,7 +145,13 @@ static struct clk *clk_reg_sysctrl(struct device *dev, | |||
145 | return ERR_PTR(-ENOMEM); | 145 | return ERR_PTR(-ENOMEM); |
146 | } | 146 | } |
147 | 147 | ||
148 | for (i = 0; i < num_parents; i++) { | 148 | /* set main clock registers */ |
149 | clk->reg_sel[0] = reg_sel[0]; | ||
150 | clk->reg_bits[0] = reg_bits[0]; | ||
151 | clk->reg_mask[0] = reg_mask[0]; | ||
152 | |||
153 | /* handle clocks with more than one parent */ | ||
154 | for (i = 1; i < num_parents; i++) { | ||
149 | clk->reg_sel[i] = reg_sel[i]; | 155 | clk->reg_sel[i] = reg_sel[i]; |
150 | clk->reg_bits[i] = reg_bits[i]; | 156 | clk->reg_bits[i] = reg_bits[i]; |
151 | clk->reg_mask[i] = reg_mask[i]; | 157 | clk->reg_mask[i] = reg_mask[i]; |
diff --git a/drivers/clk/ux500/u8500_clk.c b/drivers/clk/ux500/u8500_clk.c index 0b4f35a5ffc2..80069c370a47 100644 --- a/drivers/clk/ux500/u8500_clk.c +++ b/drivers/clk/ux500/u8500_clk.c | |||
@@ -325,7 +325,7 @@ void u8500_clk_init(u32 clkrst1_base, u32 clkrst2_base, u32 clkrst3_base, | |||
325 | clk = clk_reg_prcc_pclk("p3_pclk0", "per3clk", clkrst3_base, | 325 | clk = clk_reg_prcc_pclk("p3_pclk0", "per3clk", clkrst3_base, |
326 | BIT(0), 0); | 326 | BIT(0), 0); |
327 | clk_register_clkdev(clk, "fsmc", NULL); | 327 | clk_register_clkdev(clk, "fsmc", NULL); |
328 | clk_register_clkdev(clk, NULL, "smsc911x"); | 328 | clk_register_clkdev(clk, NULL, "smsc911x.0"); |
329 | 329 | ||
330 | clk = clk_reg_prcc_pclk("p3_pclk1", "per3clk", clkrst3_base, | 330 | clk = clk_reg_prcc_pclk("p3_pclk1", "per3clk", clkrst3_base, |
331 | BIT(1), 0); | 331 | BIT(1), 0); |
diff --git a/drivers/clk/x86/clk-lpt.c b/drivers/clk/x86/clk-lpt.c index 5cf4f4686406..4f45eee9e33b 100644 --- a/drivers/clk/x86/clk-lpt.c +++ b/drivers/clk/x86/clk-lpt.c | |||
@@ -15,22 +15,29 @@ | |||
15 | #include <linux/clk-provider.h> | 15 | #include <linux/clk-provider.h> |
16 | #include <linux/err.h> | 16 | #include <linux/err.h> |
17 | #include <linux/module.h> | 17 | #include <linux/module.h> |
18 | #include <linux/platform_data/clk-lpss.h> | ||
18 | #include <linux/platform_device.h> | 19 | #include <linux/platform_device.h> |
19 | 20 | ||
20 | #define PRV_CLOCK_PARAMS 0x800 | 21 | #define PRV_CLOCK_PARAMS 0x800 |
21 | 22 | ||
22 | static int lpt_clk_probe(struct platform_device *pdev) | 23 | static int lpt_clk_probe(struct platform_device *pdev) |
23 | { | 24 | { |
25 | struct lpss_clk_data *drvdata; | ||
24 | struct clk *clk; | 26 | struct clk *clk; |
25 | 27 | ||
28 | drvdata = devm_kzalloc(&pdev->dev, sizeof(*drvdata), GFP_KERNEL); | ||
29 | if (!drvdata) | ||
30 | return -ENOMEM; | ||
31 | |||
26 | /* LPSS free running clock */ | 32 | /* LPSS free running clock */ |
27 | clk = clk_register_fixed_rate(&pdev->dev, "lpss_clk", NULL, CLK_IS_ROOT, | 33 | drvdata->name = "lpss_clk"; |
28 | 100000000); | 34 | clk = clk_register_fixed_rate(&pdev->dev, drvdata->name, NULL, |
35 | CLK_IS_ROOT, 100000000); | ||
29 | if (IS_ERR(clk)) | 36 | if (IS_ERR(clk)) |
30 | return PTR_ERR(clk); | 37 | return PTR_ERR(clk); |
31 | 38 | ||
32 | /* Shared DMA clock */ | 39 | drvdata->clk = clk; |
33 | clk_register_clkdev(clk, "hclk", "INTL9C60.0.auto"); | 40 | platform_set_drvdata(pdev, drvdata); |
34 | return 0; | 41 | return 0; |
35 | } | 42 | } |
36 | 43 | ||
diff --git a/drivers/cpufreq/Kconfig.x86 b/drivers/cpufreq/Kconfig.x86 index 2b8a8c374548..6bd63d63d356 100644 --- a/drivers/cpufreq/Kconfig.x86 +++ b/drivers/cpufreq/Kconfig.x86 | |||
@@ -272,7 +272,7 @@ config X86_LONGHAUL | |||
272 | config X86_E_POWERSAVER | 272 | config X86_E_POWERSAVER |
273 | tristate "VIA C7 Enhanced PowerSaver (DANGEROUS)" | 273 | tristate "VIA C7 Enhanced PowerSaver (DANGEROUS)" |
274 | select CPU_FREQ_TABLE | 274 | select CPU_FREQ_TABLE |
275 | depends on X86_32 | 275 | depends on X86_32 && ACPI_PROCESSOR |
276 | help | 276 | help |
277 | This adds the CPUFreq driver for VIA C7 processors. However, this driver | 277 | This adds the CPUFreq driver for VIA C7 processors. However, this driver |
278 | does not have any safeguards to prevent operating the CPU out of spec | 278 | does not have any safeguards to prevent operating the CPU out of spec |
diff --git a/drivers/cpufreq/arm_big_little_dt.c b/drivers/cpufreq/arm_big_little_dt.c index 173ed059d95f..fd9e3ea6a480 100644 --- a/drivers/cpufreq/arm_big_little_dt.c +++ b/drivers/cpufreq/arm_big_little_dt.c | |||
@@ -19,70 +19,75 @@ | |||
19 | 19 | ||
20 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt | 20 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt |
21 | 21 | ||
22 | #include <linux/cpu.h> | ||
22 | #include <linux/cpufreq.h> | 23 | #include <linux/cpufreq.h> |
23 | #include <linux/device.h> | 24 | #include <linux/device.h> |
24 | #include <linux/export.h> | 25 | #include <linux/export.h> |
25 | #include <linux/module.h> | 26 | #include <linux/module.h> |
26 | #include <linux/of.h> | 27 | #include <linux/of.h> |
27 | #include <linux/opp.h> | 28 | #include <linux/opp.h> |
29 | #include <linux/platform_device.h> | ||
28 | #include <linux/slab.h> | 30 | #include <linux/slab.h> |
29 | #include <linux/types.h> | 31 | #include <linux/types.h> |
30 | #include "arm_big_little.h" | 32 | #include "arm_big_little.h" |
31 | 33 | ||
32 | static int dt_init_opp_table(struct device *cpu_dev) | 34 | /* get cpu node with valid operating-points */ |
35 | static struct device_node *get_cpu_node_with_valid_op(int cpu) | ||
33 | { | 36 | { |
34 | struct device_node *np, *parent; | 37 | struct device_node *np = NULL, *parent; |
35 | int count = 0, ret; | 38 | int count = 0; |
36 | 39 | ||
37 | parent = of_find_node_by_path("/cpus"); | 40 | parent = of_find_node_by_path("/cpus"); |
38 | if (!parent) { | 41 | if (!parent) { |
39 | pr_err("failed to find OF /cpus\n"); | 42 | pr_err("failed to find OF /cpus\n"); |
40 | return -ENOENT; | 43 | return NULL; |
41 | } | 44 | } |
42 | 45 | ||
43 | for_each_child_of_node(parent, np) { | 46 | for_each_child_of_node(parent, np) { |
44 | if (count++ != cpu_dev->id) | 47 | if (count++ != cpu) |
45 | continue; | 48 | continue; |
46 | if (!of_get_property(np, "operating-points", NULL)) { | 49 | if (!of_get_property(np, "operating-points", NULL)) { |
47 | ret = -ENODATA; | 50 | of_node_put(np); |
48 | } else { | 51 | np = NULL; |
49 | cpu_dev->of_node = np; | ||
50 | ret = of_init_opp_table(cpu_dev); | ||
51 | } | 52 | } |
52 | of_node_put(np); | ||
53 | of_node_put(parent); | ||
54 | 53 | ||
55 | return ret; | 54 | break; |
56 | } | 55 | } |
57 | 56 | ||
58 | return -ENODEV; | 57 | of_node_put(parent); |
58 | return np; | ||
59 | } | ||
60 | |||
61 | static int dt_init_opp_table(struct device *cpu_dev) | ||
62 | { | ||
63 | struct device_node *np; | ||
64 | int ret; | ||
65 | |||
66 | np = get_cpu_node_with_valid_op(cpu_dev->id); | ||
67 | if (!np) | ||
68 | return -ENODATA; | ||
69 | |||
70 | cpu_dev->of_node = np; | ||
71 | ret = of_init_opp_table(cpu_dev); | ||
72 | of_node_put(np); | ||
73 | |||
74 | return ret; | ||
59 | } | 75 | } |
60 | 76 | ||
61 | static int dt_get_transition_latency(struct device *cpu_dev) | 77 | static int dt_get_transition_latency(struct device *cpu_dev) |
62 | { | 78 | { |
63 | struct device_node *np, *parent; | 79 | struct device_node *np; |
64 | u32 transition_latency = CPUFREQ_ETERNAL; | 80 | u32 transition_latency = CPUFREQ_ETERNAL; |
65 | int count = 0; | ||
66 | 81 | ||
67 | parent = of_find_node_by_path("/cpus"); | 82 | np = get_cpu_node_with_valid_op(cpu_dev->id); |
68 | if (!parent) { | 83 | if (!np) |
69 | pr_info("Failed to find OF /cpus. Use CPUFREQ_ETERNAL transition latency\n"); | ||
70 | return CPUFREQ_ETERNAL; | 84 | return CPUFREQ_ETERNAL; |
71 | } | ||
72 | |||
73 | for_each_child_of_node(parent, np) { | ||
74 | if (count++ != cpu_dev->id) | ||
75 | continue; | ||
76 | 85 | ||
77 | of_property_read_u32(np, "clock-latency", &transition_latency); | 86 | of_property_read_u32(np, "clock-latency", &transition_latency); |
78 | of_node_put(np); | 87 | of_node_put(np); |
79 | of_node_put(parent); | ||
80 | 88 | ||
81 | return transition_latency; | 89 | pr_debug("%s: clock-latency: %d\n", __func__, transition_latency); |
82 | } | 90 | return transition_latency; |
83 | |||
84 | pr_info("clock-latency isn't found, use CPUFREQ_ETERNAL transition latency\n"); | ||
85 | return CPUFREQ_ETERNAL; | ||
86 | } | 91 | } |
87 | 92 | ||
88 | static struct cpufreq_arm_bL_ops dt_bL_ops = { | 93 | static struct cpufreq_arm_bL_ops dt_bL_ops = { |
@@ -91,17 +96,33 @@ static struct cpufreq_arm_bL_ops dt_bL_ops = { | |||
91 | .init_opp_table = dt_init_opp_table, | 96 | .init_opp_table = dt_init_opp_table, |
92 | }; | 97 | }; |
93 | 98 | ||
94 | static int generic_bL_init(void) | 99 | static int generic_bL_probe(struct platform_device *pdev) |
95 | { | 100 | { |
101 | struct device_node *np; | ||
102 | |||
103 | np = get_cpu_node_with_valid_op(0); | ||
104 | if (!np) | ||
105 | return -ENODEV; | ||
106 | |||
107 | of_node_put(np); | ||
96 | return bL_cpufreq_register(&dt_bL_ops); | 108 | return bL_cpufreq_register(&dt_bL_ops); |
97 | } | 109 | } |
98 | module_init(generic_bL_init); | ||
99 | 110 | ||
100 | static void generic_bL_exit(void) | 111 | static int generic_bL_remove(struct platform_device *pdev) |
101 | { | 112 | { |
102 | return bL_cpufreq_unregister(&dt_bL_ops); | 113 | bL_cpufreq_unregister(&dt_bL_ops); |
114 | return 0; | ||
103 | } | 115 | } |
104 | module_exit(generic_bL_exit); | 116 | |
117 | static struct platform_driver generic_bL_platdrv = { | ||
118 | .driver = { | ||
119 | .name = "arm-bL-cpufreq-dt", | ||
120 | .owner = THIS_MODULE, | ||
121 | }, | ||
122 | .probe = generic_bL_probe, | ||
123 | .remove = generic_bL_remove, | ||
124 | }; | ||
125 | module_platform_driver(generic_bL_platdrv); | ||
105 | 126 | ||
106 | MODULE_AUTHOR("Viresh Kumar <viresh.kumar@linaro.org>"); | 127 | MODULE_AUTHOR("Viresh Kumar <viresh.kumar@linaro.org>"); |
107 | MODULE_DESCRIPTION("Generic ARM big LITTLE cpufreq driver via DT"); | 128 | MODULE_DESCRIPTION("Generic ARM big LITTLE cpufreq driver via DT"); |
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index 4b8c7f297d74..2d53f47d1747 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c | |||
@@ -1729,18 +1729,23 @@ static int __cpufreq_set_policy(struct cpufreq_policy *data, | |||
1729 | /* end old governor */ | 1729 | /* end old governor */ |
1730 | if (data->governor) { | 1730 | if (data->governor) { |
1731 | __cpufreq_governor(data, CPUFREQ_GOV_STOP); | 1731 | __cpufreq_governor(data, CPUFREQ_GOV_STOP); |
1732 | unlock_policy_rwsem_write(policy->cpu); | ||
1732 | __cpufreq_governor(data, | 1733 | __cpufreq_governor(data, |
1733 | CPUFREQ_GOV_POLICY_EXIT); | 1734 | CPUFREQ_GOV_POLICY_EXIT); |
1735 | lock_policy_rwsem_write(policy->cpu); | ||
1734 | } | 1736 | } |
1735 | 1737 | ||
1736 | /* start new governor */ | 1738 | /* start new governor */ |
1737 | data->governor = policy->governor; | 1739 | data->governor = policy->governor; |
1738 | if (!__cpufreq_governor(data, CPUFREQ_GOV_POLICY_INIT)) { | 1740 | if (!__cpufreq_governor(data, CPUFREQ_GOV_POLICY_INIT)) { |
1739 | if (!__cpufreq_governor(data, CPUFREQ_GOV_START)) | 1741 | if (!__cpufreq_governor(data, CPUFREQ_GOV_START)) { |
1740 | failed = 0; | 1742 | failed = 0; |
1741 | else | 1743 | } else { |
1744 | unlock_policy_rwsem_write(policy->cpu); | ||
1742 | __cpufreq_governor(data, | 1745 | __cpufreq_governor(data, |
1743 | CPUFREQ_GOV_POLICY_EXIT); | 1746 | CPUFREQ_GOV_POLICY_EXIT); |
1747 | lock_policy_rwsem_write(policy->cpu); | ||
1748 | } | ||
1744 | } | 1749 | } |
1745 | 1750 | ||
1746 | if (failed) { | 1751 | if (failed) { |
diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c index 9c36ace92a39..07f2840ad805 100644 --- a/drivers/cpufreq/intel_pstate.c +++ b/drivers/cpufreq/intel_pstate.c | |||
@@ -521,6 +521,7 @@ static void intel_pstate_timer_func(unsigned long __data) | |||
521 | static const struct x86_cpu_id intel_pstate_cpu_ids[] = { | 521 | static const struct x86_cpu_id intel_pstate_cpu_ids[] = { |
522 | ICPU(0x2a, default_policy), | 522 | ICPU(0x2a, default_policy), |
523 | ICPU(0x2d, default_policy), | 523 | ICPU(0x2d, default_policy), |
524 | ICPU(0x3a, default_policy), | ||
524 | {} | 525 | {} |
525 | }; | 526 | }; |
526 | MODULE_DEVICE_TABLE(x86cpu, intel_pstate_cpu_ids); | 527 | MODULE_DEVICE_TABLE(x86cpu, intel_pstate_cpu_ids); |
diff --git a/drivers/crypto/caam/caamalg.c b/drivers/crypto/caam/caamalg.c index 765fdf5ce579..bf416a8391a7 100644 --- a/drivers/crypto/caam/caamalg.c +++ b/drivers/crypto/caam/caamalg.c | |||
@@ -1154,7 +1154,7 @@ static struct aead_edesc *aead_edesc_alloc(struct aead_request *req, | |||
1154 | dst_nents = sg_count(req->dst, req->cryptlen, &dst_chained); | 1154 | dst_nents = sg_count(req->dst, req->cryptlen, &dst_chained); |
1155 | 1155 | ||
1156 | sgc = dma_map_sg_chained(jrdev, req->assoc, assoc_nents ? : 1, | 1156 | sgc = dma_map_sg_chained(jrdev, req->assoc, assoc_nents ? : 1, |
1157 | DMA_BIDIRECTIONAL, assoc_chained); | 1157 | DMA_TO_DEVICE, assoc_chained); |
1158 | if (likely(req->src == req->dst)) { | 1158 | if (likely(req->src == req->dst)) { |
1159 | sgc = dma_map_sg_chained(jrdev, req->src, src_nents ? : 1, | 1159 | sgc = dma_map_sg_chained(jrdev, req->src, src_nents ? : 1, |
1160 | DMA_BIDIRECTIONAL, src_chained); | 1160 | DMA_BIDIRECTIONAL, src_chained); |
@@ -1336,7 +1336,7 @@ static struct aead_edesc *aead_giv_edesc_alloc(struct aead_givcrypt_request | |||
1336 | dst_nents = sg_count(req->dst, req->cryptlen, &dst_chained); | 1336 | dst_nents = sg_count(req->dst, req->cryptlen, &dst_chained); |
1337 | 1337 | ||
1338 | sgc = dma_map_sg_chained(jrdev, req->assoc, assoc_nents ? : 1, | 1338 | sgc = dma_map_sg_chained(jrdev, req->assoc, assoc_nents ? : 1, |
1339 | DMA_BIDIRECTIONAL, assoc_chained); | 1339 | DMA_TO_DEVICE, assoc_chained); |
1340 | if (likely(req->src == req->dst)) { | 1340 | if (likely(req->src == req->dst)) { |
1341 | sgc = dma_map_sg_chained(jrdev, req->src, src_nents ? : 1, | 1341 | sgc = dma_map_sg_chained(jrdev, req->src, src_nents ? : 1, |
1342 | DMA_BIDIRECTIONAL, src_chained); | 1342 | DMA_BIDIRECTIONAL, src_chained); |
diff --git a/drivers/dma/acpi-dma.c b/drivers/dma/acpi-dma.c index ba6fc62e9651..5a18f82f732a 100644 --- a/drivers/dma/acpi-dma.c +++ b/drivers/dma/acpi-dma.c | |||
@@ -4,7 +4,8 @@ | |||
4 | * Based on of-dma.c | 4 | * Based on of-dma.c |
5 | * | 5 | * |
6 | * Copyright (C) 2013, Intel Corporation | 6 | * Copyright (C) 2013, Intel Corporation |
7 | * Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com> | 7 | * Authors: Andy Shevchenko <andriy.shevchenko@linux.intel.com> |
8 | * Mika Westerberg <mika.westerberg@linux.intel.com> | ||
8 | * | 9 | * |
9 | * This program is free software; you can redistribute it and/or modify | 10 | * 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 | 11 | * it under the terms of the GNU General Public License version 2 as |
@@ -16,6 +17,7 @@ | |||
16 | #include <linux/list.h> | 17 | #include <linux/list.h> |
17 | #include <linux/mutex.h> | 18 | #include <linux/mutex.h> |
18 | #include <linux/slab.h> | 19 | #include <linux/slab.h> |
20 | #include <linux/ioport.h> | ||
19 | #include <linux/acpi.h> | 21 | #include <linux/acpi.h> |
20 | #include <linux/acpi_dma.h> | 22 | #include <linux/acpi_dma.h> |
21 | 23 | ||
@@ -23,6 +25,117 @@ static LIST_HEAD(acpi_dma_list); | |||
23 | static DEFINE_MUTEX(acpi_dma_lock); | 25 | static DEFINE_MUTEX(acpi_dma_lock); |
24 | 26 | ||
25 | /** | 27 | /** |
28 | * acpi_dma_parse_resource_group - match device and parse resource group | ||
29 | * @grp: CSRT resource group | ||
30 | * @adev: ACPI device to match with | ||
31 | * @adma: struct acpi_dma of the given DMA controller | ||
32 | * | ||
33 | * Returns 1 on success, 0 when no information is available, or appropriate | ||
34 | * errno value on error. | ||
35 | * | ||
36 | * In order to match a device from DSDT table to the corresponding CSRT device | ||
37 | * we use MMIO address and IRQ. | ||
38 | */ | ||
39 | static int acpi_dma_parse_resource_group(const struct acpi_csrt_group *grp, | ||
40 | struct acpi_device *adev, struct acpi_dma *adma) | ||
41 | { | ||
42 | const struct acpi_csrt_shared_info *si; | ||
43 | struct list_head resource_list; | ||
44 | struct resource_list_entry *rentry; | ||
45 | resource_size_t mem = 0, irq = 0; | ||
46 | u32 vendor_id; | ||
47 | int ret; | ||
48 | |||
49 | if (grp->shared_info_length != sizeof(struct acpi_csrt_shared_info)) | ||
50 | return -ENODEV; | ||
51 | |||
52 | INIT_LIST_HEAD(&resource_list); | ||
53 | ret = acpi_dev_get_resources(adev, &resource_list, NULL, NULL); | ||
54 | if (ret <= 0) | ||
55 | return 0; | ||
56 | |||
57 | list_for_each_entry(rentry, &resource_list, node) { | ||
58 | if (resource_type(&rentry->res) == IORESOURCE_MEM) | ||
59 | mem = rentry->res.start; | ||
60 | else if (resource_type(&rentry->res) == IORESOURCE_IRQ) | ||
61 | irq = rentry->res.start; | ||
62 | } | ||
63 | |||
64 | acpi_dev_free_resource_list(&resource_list); | ||
65 | |||
66 | /* Consider initial zero values as resource not found */ | ||
67 | if (mem == 0 && irq == 0) | ||
68 | return 0; | ||
69 | |||
70 | si = (const struct acpi_csrt_shared_info *)&grp[1]; | ||
71 | |||
72 | /* Match device by MMIO and IRQ */ | ||
73 | if (si->mmio_base_low != mem || si->gsi_interrupt != irq) | ||
74 | return 0; | ||
75 | |||
76 | vendor_id = le32_to_cpu(grp->vendor_id); | ||
77 | dev_dbg(&adev->dev, "matches with %.4s%04X (rev %u)\n", | ||
78 | (char *)&vendor_id, grp->device_id, grp->revision); | ||
79 | |||
80 | /* Check if the request line range is available */ | ||
81 | if (si->base_request_line == 0 && si->num_handshake_signals == 0) | ||
82 | return 0; | ||
83 | |||
84 | adma->base_request_line = si->base_request_line; | ||
85 | adma->end_request_line = si->base_request_line + | ||
86 | si->num_handshake_signals - 1; | ||
87 | |||
88 | dev_dbg(&adev->dev, "request line base: 0x%04x end: 0x%04x\n", | ||
89 | adma->base_request_line, adma->end_request_line); | ||
90 | |||
91 | return 1; | ||
92 | } | ||
93 | |||
94 | /** | ||
95 | * acpi_dma_parse_csrt - parse CSRT to exctract additional DMA resources | ||
96 | * @adev: ACPI device to match with | ||
97 | * @adma: struct acpi_dma of the given DMA controller | ||
98 | * | ||
99 | * CSRT or Core System Resources Table is a proprietary ACPI table | ||
100 | * introduced by Microsoft. This table can contain devices that are not in | ||
101 | * the system DSDT table. In particular DMA controllers might be described | ||
102 | * here. | ||
103 | * | ||
104 | * We are using this table to get the request line range of the specific DMA | ||
105 | * controller to be used later. | ||
106 | * | ||
107 | */ | ||
108 | static void acpi_dma_parse_csrt(struct acpi_device *adev, struct acpi_dma *adma) | ||
109 | { | ||
110 | struct acpi_csrt_group *grp, *end; | ||
111 | struct acpi_table_csrt *csrt; | ||
112 | acpi_status status; | ||
113 | int ret; | ||
114 | |||
115 | status = acpi_get_table(ACPI_SIG_CSRT, 0, | ||
116 | (struct acpi_table_header **)&csrt); | ||
117 | if (ACPI_FAILURE(status)) { | ||
118 | if (status != AE_NOT_FOUND) | ||
119 | dev_warn(&adev->dev, "failed to get the CSRT table\n"); | ||
120 | return; | ||
121 | } | ||
122 | |||
123 | grp = (struct acpi_csrt_group *)(csrt + 1); | ||
124 | end = (struct acpi_csrt_group *)((void *)csrt + csrt->header.length); | ||
125 | |||
126 | while (grp < end) { | ||
127 | ret = acpi_dma_parse_resource_group(grp, adev, adma); | ||
128 | if (ret < 0) { | ||
129 | dev_warn(&adev->dev, | ||
130 | "error in parsing resource group\n"); | ||
131 | return; | ||
132 | } | ||
133 | |||
134 | grp = (struct acpi_csrt_group *)((void *)grp + grp->length); | ||
135 | } | ||
136 | } | ||
137 | |||
138 | /** | ||
26 | * acpi_dma_controller_register - Register a DMA controller to ACPI DMA helpers | 139 | * acpi_dma_controller_register - Register a DMA controller to ACPI DMA helpers |
27 | * @dev: struct device of DMA controller | 140 | * @dev: struct device of DMA controller |
28 | * @acpi_dma_xlate: translation function which converts a dma specifier | 141 | * @acpi_dma_xlate: translation function which converts a dma specifier |
@@ -61,6 +174,8 @@ int acpi_dma_controller_register(struct device *dev, | |||
61 | adma->acpi_dma_xlate = acpi_dma_xlate; | 174 | adma->acpi_dma_xlate = acpi_dma_xlate; |
62 | adma->data = data; | 175 | adma->data = data; |
63 | 176 | ||
177 | acpi_dma_parse_csrt(adev, adma); | ||
178 | |||
64 | /* Now queue acpi_dma controller structure in list */ | 179 | /* Now queue acpi_dma controller structure in list */ |
65 | mutex_lock(&acpi_dma_lock); | 180 | mutex_lock(&acpi_dma_lock); |
66 | list_add_tail(&adma->dma_controllers, &acpi_dma_list); | 181 | list_add_tail(&adma->dma_controllers, &acpi_dma_list); |
@@ -149,6 +264,45 @@ void devm_acpi_dma_controller_free(struct device *dev) | |||
149 | } | 264 | } |
150 | EXPORT_SYMBOL_GPL(devm_acpi_dma_controller_free); | 265 | EXPORT_SYMBOL_GPL(devm_acpi_dma_controller_free); |
151 | 266 | ||
267 | /** | ||
268 | * acpi_dma_update_dma_spec - prepare dma specifier to pass to translation function | ||
269 | * @adma: struct acpi_dma of DMA controller | ||
270 | * @dma_spec: dma specifier to update | ||
271 | * | ||
272 | * Returns 0, if no information is avaiable, -1 on mismatch, and 1 otherwise. | ||
273 | * | ||
274 | * Accordingly to ACPI 5.0 Specification Table 6-170 "Fixed DMA Resource | ||
275 | * Descriptor": | ||
276 | * DMA Request Line bits is a platform-relative number uniquely | ||
277 | * identifying the request line assigned. Request line-to-Controller | ||
278 | * mapping is done in a controller-specific OS driver. | ||
279 | * That's why we can safely adjust slave_id when the appropriate controller is | ||
280 | * found. | ||
281 | */ | ||
282 | static int acpi_dma_update_dma_spec(struct acpi_dma *adma, | ||
283 | struct acpi_dma_spec *dma_spec) | ||
284 | { | ||
285 | /* Set link to the DMA controller device */ | ||
286 | dma_spec->dev = adma->dev; | ||
287 | |||
288 | /* Check if the request line range is available */ | ||
289 | if (adma->base_request_line == 0 && adma->end_request_line == 0) | ||
290 | return 0; | ||
291 | |||
292 | /* Check if slave_id falls to the range */ | ||
293 | if (dma_spec->slave_id < adma->base_request_line || | ||
294 | dma_spec->slave_id > adma->end_request_line) | ||
295 | return -1; | ||
296 | |||
297 | /* | ||
298 | * Here we adjust slave_id. It should be a relative number to the base | ||
299 | * request line. | ||
300 | */ | ||
301 | dma_spec->slave_id -= adma->base_request_line; | ||
302 | |||
303 | return 1; | ||
304 | } | ||
305 | |||
152 | struct acpi_dma_parser_data { | 306 | struct acpi_dma_parser_data { |
153 | struct acpi_dma_spec dma_spec; | 307 | struct acpi_dma_spec dma_spec; |
154 | size_t index; | 308 | size_t index; |
@@ -193,6 +347,7 @@ struct dma_chan *acpi_dma_request_slave_chan_by_index(struct device *dev, | |||
193 | struct acpi_device *adev; | 347 | struct acpi_device *adev; |
194 | struct acpi_dma *adma; | 348 | struct acpi_dma *adma; |
195 | struct dma_chan *chan = NULL; | 349 | struct dma_chan *chan = NULL; |
350 | int found; | ||
196 | 351 | ||
197 | /* Check if the device was enumerated by ACPI */ | 352 | /* Check if the device was enumerated by ACPI */ |
198 | if (!dev || !ACPI_HANDLE(dev)) | 353 | if (!dev || !ACPI_HANDLE(dev)) |
@@ -219,9 +374,20 @@ struct dma_chan *acpi_dma_request_slave_chan_by_index(struct device *dev, | |||
219 | mutex_lock(&acpi_dma_lock); | 374 | mutex_lock(&acpi_dma_lock); |
220 | 375 | ||
221 | list_for_each_entry(adma, &acpi_dma_list, dma_controllers) { | 376 | list_for_each_entry(adma, &acpi_dma_list, dma_controllers) { |
222 | dma_spec->dev = adma->dev; | 377 | /* |
378 | * We are not going to call translation function if slave_id | ||
379 | * doesn't fall to the request range. | ||
380 | */ | ||
381 | found = acpi_dma_update_dma_spec(adma, dma_spec); | ||
382 | if (found < 0) | ||
383 | continue; | ||
223 | chan = adma->acpi_dma_xlate(dma_spec, adma); | 384 | chan = adma->acpi_dma_xlate(dma_spec, adma); |
224 | if (chan) | 385 | /* |
386 | * Try to get a channel only from the DMA controller that | ||
387 | * matches the slave_id. See acpi_dma_update_dma_spec() | ||
388 | * description for the details. | ||
389 | */ | ||
390 | if (found > 0 || chan) | ||
225 | break; | 391 | break; |
226 | } | 392 | } |
227 | 393 | ||
diff --git a/drivers/edac/amd64_edac_inj.c b/drivers/edac/amd64_edac_inj.c index 8c171fa1cb9b..845f04786c2d 100644 --- a/drivers/edac/amd64_edac_inj.c +++ b/drivers/edac/amd64_edac_inj.c | |||
@@ -202,9 +202,9 @@ static DEVICE_ATTR(inject_word, S_IRUGO | S_IWUSR, | |||
202 | amd64_inject_word_show, amd64_inject_word_store); | 202 | amd64_inject_word_show, amd64_inject_word_store); |
203 | static DEVICE_ATTR(inject_ecc_vector, S_IRUGO | S_IWUSR, | 203 | static DEVICE_ATTR(inject_ecc_vector, S_IRUGO | S_IWUSR, |
204 | amd64_inject_ecc_vector_show, amd64_inject_ecc_vector_store); | 204 | amd64_inject_ecc_vector_show, amd64_inject_ecc_vector_store); |
205 | static DEVICE_ATTR(inject_write, S_IRUGO | S_IWUSR, | 205 | static DEVICE_ATTR(inject_write, S_IWUSR, |
206 | NULL, amd64_inject_write_store); | 206 | NULL, amd64_inject_write_store); |
207 | static DEVICE_ATTR(inject_read, S_IRUGO | S_IWUSR, | 207 | static DEVICE_ATTR(inject_read, S_IWUSR, |
208 | NULL, amd64_inject_read_store); | 208 | NULL, amd64_inject_read_store); |
209 | 209 | ||
210 | 210 | ||
diff --git a/drivers/firmware/efi/efivars.c b/drivers/firmware/efi/efivars.c index b623c599e572..8bd1bb6dbe47 100644 --- a/drivers/firmware/efi/efivars.c +++ b/drivers/firmware/efi/efivars.c | |||
@@ -523,13 +523,11 @@ static void efivar_update_sysfs_entries(struct work_struct *work) | |||
523 | struct efivar_entry *entry; | 523 | struct efivar_entry *entry; |
524 | int err; | 524 | int err; |
525 | 525 | ||
526 | entry = kzalloc(sizeof(*entry), GFP_KERNEL); | ||
527 | if (!entry) | ||
528 | return; | ||
529 | |||
530 | /* Add new sysfs entries */ | 526 | /* Add new sysfs entries */ |
531 | while (1) { | 527 | while (1) { |
532 | memset(entry, 0, sizeof(*entry)); | 528 | entry = kzalloc(sizeof(*entry), GFP_KERNEL); |
529 | if (!entry) | ||
530 | return; | ||
533 | 531 | ||
534 | err = efivar_init(efivar_update_sysfs_entry, entry, | 532 | err = efivar_init(efivar_update_sysfs_entry, entry, |
535 | true, false, &efivar_sysfs_list); | 533 | true, false, &efivar_sysfs_list); |
diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c b/drivers/gpu/drm/exynos/exynos_drm_crtc.c index e8894bc9e6d5..c200e4d71e3d 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c +++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c | |||
@@ -48,6 +48,8 @@ struct exynos_drm_crtc { | |||
48 | unsigned int pipe; | 48 | unsigned int pipe; |
49 | unsigned int dpms; | 49 | unsigned int dpms; |
50 | enum exynos_crtc_mode mode; | 50 | enum exynos_crtc_mode mode; |
51 | wait_queue_head_t pending_flip_queue; | ||
52 | atomic_t pending_flip; | ||
51 | }; | 53 | }; |
52 | 54 | ||
53 | static void exynos_drm_crtc_dpms(struct drm_crtc *crtc, int mode) | 55 | static void exynos_drm_crtc_dpms(struct drm_crtc *crtc, int mode) |
@@ -61,6 +63,13 @@ static void exynos_drm_crtc_dpms(struct drm_crtc *crtc, int mode) | |||
61 | return; | 63 | return; |
62 | } | 64 | } |
63 | 65 | ||
66 | if (mode > DRM_MODE_DPMS_ON) { | ||
67 | /* wait for the completion of page flip. */ | ||
68 | wait_event(exynos_crtc->pending_flip_queue, | ||
69 | atomic_read(&exynos_crtc->pending_flip) == 0); | ||
70 | drm_vblank_off(crtc->dev, exynos_crtc->pipe); | ||
71 | } | ||
72 | |||
64 | exynos_drm_fn_encoder(crtc, &mode, exynos_drm_encoder_crtc_dpms); | 73 | exynos_drm_fn_encoder(crtc, &mode, exynos_drm_encoder_crtc_dpms); |
65 | exynos_crtc->dpms = mode; | 74 | exynos_crtc->dpms = mode; |
66 | } | 75 | } |
@@ -217,7 +226,6 @@ static int exynos_drm_crtc_page_flip(struct drm_crtc *crtc, | |||
217 | ret = drm_vblank_get(dev, exynos_crtc->pipe); | 226 | ret = drm_vblank_get(dev, exynos_crtc->pipe); |
218 | if (ret) { | 227 | if (ret) { |
219 | DRM_DEBUG("failed to acquire vblank counter\n"); | 228 | DRM_DEBUG("failed to acquire vblank counter\n"); |
220 | list_del(&event->base.link); | ||
221 | 229 | ||
222 | goto out; | 230 | goto out; |
223 | } | 231 | } |
@@ -225,6 +233,7 @@ static int exynos_drm_crtc_page_flip(struct drm_crtc *crtc, | |||
225 | spin_lock_irq(&dev->event_lock); | 233 | spin_lock_irq(&dev->event_lock); |
226 | list_add_tail(&event->base.link, | 234 | list_add_tail(&event->base.link, |
227 | &dev_priv->pageflip_event_list); | 235 | &dev_priv->pageflip_event_list); |
236 | atomic_set(&exynos_crtc->pending_flip, 1); | ||
228 | spin_unlock_irq(&dev->event_lock); | 237 | spin_unlock_irq(&dev->event_lock); |
229 | 238 | ||
230 | crtc->fb = fb; | 239 | crtc->fb = fb; |
@@ -344,6 +353,8 @@ int exynos_drm_crtc_create(struct drm_device *dev, unsigned int nr) | |||
344 | 353 | ||
345 | exynos_crtc->pipe = nr; | 354 | exynos_crtc->pipe = nr; |
346 | exynos_crtc->dpms = DRM_MODE_DPMS_OFF; | 355 | exynos_crtc->dpms = DRM_MODE_DPMS_OFF; |
356 | init_waitqueue_head(&exynos_crtc->pending_flip_queue); | ||
357 | atomic_set(&exynos_crtc->pending_flip, 0); | ||
347 | exynos_crtc->plane = exynos_plane_init(dev, 1 << nr, true); | 358 | exynos_crtc->plane = exynos_plane_init(dev, 1 << nr, true); |
348 | if (!exynos_crtc->plane) { | 359 | if (!exynos_crtc->plane) { |
349 | kfree(exynos_crtc); | 360 | kfree(exynos_crtc); |
@@ -398,7 +409,8 @@ void exynos_drm_crtc_finish_pageflip(struct drm_device *dev, int crtc) | |||
398 | { | 409 | { |
399 | struct exynos_drm_private *dev_priv = dev->dev_private; | 410 | struct exynos_drm_private *dev_priv = dev->dev_private; |
400 | struct drm_pending_vblank_event *e, *t; | 411 | struct drm_pending_vblank_event *e, *t; |
401 | struct timeval now; | 412 | struct drm_crtc *drm_crtc = dev_priv->crtc[crtc]; |
413 | struct exynos_drm_crtc *exynos_crtc = to_exynos_crtc(drm_crtc); | ||
402 | unsigned long flags; | 414 | unsigned long flags; |
403 | 415 | ||
404 | DRM_DEBUG_KMS("%s\n", __FILE__); | 416 | DRM_DEBUG_KMS("%s\n", __FILE__); |
@@ -411,14 +423,11 @@ void exynos_drm_crtc_finish_pageflip(struct drm_device *dev, int crtc) | |||
411 | if (crtc != e->pipe) | 423 | if (crtc != e->pipe) |
412 | continue; | 424 | continue; |
413 | 425 | ||
414 | do_gettimeofday(&now); | 426 | list_del(&e->base.link); |
415 | e->event.sequence = 0; | 427 | drm_send_vblank_event(dev, -1, e); |
416 | e->event.tv_sec = now.tv_sec; | ||
417 | e->event.tv_usec = now.tv_usec; | ||
418 | |||
419 | list_move_tail(&e->base.link, &e->base.file_priv->event_list); | ||
420 | wake_up_interruptible(&e->base.file_priv->event_wait); | ||
421 | drm_vblank_put(dev, crtc); | 428 | drm_vblank_put(dev, crtc); |
429 | atomic_set(&exynos_crtc->pending_flip, 0); | ||
430 | wake_up(&exynos_crtc->pending_flip_queue); | ||
422 | } | 431 | } |
423 | 432 | ||
424 | spin_unlock_irqrestore(&dev->event_lock, flags); | 433 | spin_unlock_irqrestore(&dev->event_lock, flags); |
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c index 68f0045f86b8..8f007aaeffc3 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c | |||
@@ -182,7 +182,7 @@ static int exynos_drm_fbdev_create(struct drm_fb_helper *helper, | |||
182 | 182 | ||
183 | helper->fb = exynos_drm_framebuffer_init(dev, &mode_cmd, | 183 | helper->fb = exynos_drm_framebuffer_init(dev, &mode_cmd, |
184 | &exynos_gem_obj->base); | 184 | &exynos_gem_obj->base); |
185 | if (IS_ERR_OR_NULL(helper->fb)) { | 185 | if (IS_ERR(helper->fb)) { |
186 | DRM_ERROR("failed to create drm framebuffer.\n"); | 186 | DRM_ERROR("failed to create drm framebuffer.\n"); |
187 | ret = PTR_ERR(helper->fb); | 187 | ret = PTR_ERR(helper->fb); |
188 | goto err_destroy_gem; | 188 | goto err_destroy_gem; |
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimc.c b/drivers/gpu/drm/exynos/exynos_drm_fimc.c index 773f583fa964..4a1616a18ab7 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fimc.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fimc.c | |||
@@ -12,9 +12,9 @@ | |||
12 | * | 12 | * |
13 | */ | 13 | */ |
14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
15 | #include <linux/mfd/syscon.h> | ||
16 | #include <linux/module.h> | 15 | #include <linux/module.h> |
17 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
17 | #include <linux/mfd/syscon.h> | ||
18 | #include <linux/regmap.h> | 18 | #include <linux/regmap.h> |
19 | #include <linux/clk.h> | 19 | #include <linux/clk.h> |
20 | #include <linux/pm_runtime.h> | 20 | #include <linux/pm_runtime.h> |
@@ -1845,7 +1845,7 @@ static int fimc_probe(struct platform_device *pdev) | |||
1845 | } | 1845 | } |
1846 | 1846 | ||
1847 | ctx->irq = res->start; | 1847 | ctx->irq = res->start; |
1848 | ret = request_threaded_irq(ctx->irq, NULL, fimc_irq_handler, | 1848 | ret = devm_request_threaded_irq(dev, ctx->irq, NULL, fimc_irq_handler, |
1849 | IRQF_ONESHOT, "drm_fimc", ctx); | 1849 | IRQF_ONESHOT, "drm_fimc", ctx); |
1850 | if (ret < 0) { | 1850 | if (ret < 0) { |
1851 | dev_err(dev, "failed to request irq.\n"); | 1851 | dev_err(dev, "failed to request irq.\n"); |
@@ -1854,7 +1854,7 @@ static int fimc_probe(struct platform_device *pdev) | |||
1854 | 1854 | ||
1855 | ret = fimc_setup_clocks(ctx); | 1855 | ret = fimc_setup_clocks(ctx); |
1856 | if (ret < 0) | 1856 | if (ret < 0) |
1857 | goto err_free_irq; | 1857 | return ret; |
1858 | 1858 | ||
1859 | ippdrv = &ctx->ippdrv; | 1859 | ippdrv = &ctx->ippdrv; |
1860 | ippdrv->ops[EXYNOS_DRM_OPS_SRC] = &fimc_src_ops; | 1860 | ippdrv->ops[EXYNOS_DRM_OPS_SRC] = &fimc_src_ops; |
@@ -1884,7 +1884,7 @@ static int fimc_probe(struct platform_device *pdev) | |||
1884 | goto err_pm_dis; | 1884 | goto err_pm_dis; |
1885 | } | 1885 | } |
1886 | 1886 | ||
1887 | dev_info(&pdev->dev, "drm fimc registered successfully.\n"); | 1887 | dev_info(dev, "drm fimc registered successfully.\n"); |
1888 | 1888 | ||
1889 | return 0; | 1889 | return 0; |
1890 | 1890 | ||
@@ -1892,8 +1892,6 @@ err_pm_dis: | |||
1892 | pm_runtime_disable(dev); | 1892 | pm_runtime_disable(dev); |
1893 | err_put_clk: | 1893 | err_put_clk: |
1894 | fimc_put_clocks(ctx); | 1894 | fimc_put_clocks(ctx); |
1895 | err_free_irq: | ||
1896 | free_irq(ctx->irq, ctx); | ||
1897 | 1895 | ||
1898 | return ret; | 1896 | return ret; |
1899 | } | 1897 | } |
@@ -1911,8 +1909,6 @@ static int fimc_remove(struct platform_device *pdev) | |||
1911 | pm_runtime_set_suspended(dev); | 1909 | pm_runtime_set_suspended(dev); |
1912 | pm_runtime_disable(dev); | 1910 | pm_runtime_disable(dev); |
1913 | 1911 | ||
1914 | free_irq(ctx->irq, ctx); | ||
1915 | |||
1916 | return 0; | 1912 | return 0; |
1917 | } | 1913 | } |
1918 | 1914 | ||
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c index 746b282b343a..97c61dbffd82 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c | |||
@@ -885,7 +885,7 @@ static int fimd_probe(struct platform_device *pdev) | |||
885 | 885 | ||
886 | DRM_DEBUG_KMS("%s\n", __FILE__); | 886 | DRM_DEBUG_KMS("%s\n", __FILE__); |
887 | 887 | ||
888 | if (pdev->dev.of_node) { | 888 | if (dev->of_node) { |
889 | pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); | 889 | pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); |
890 | if (!pdata) { | 890 | if (!pdata) { |
891 | DRM_ERROR("memory allocation for pdata failed\n"); | 891 | DRM_ERROR("memory allocation for pdata failed\n"); |
@@ -899,7 +899,7 @@ static int fimd_probe(struct platform_device *pdev) | |||
899 | return ret; | 899 | return ret; |
900 | } | 900 | } |
901 | } else { | 901 | } else { |
902 | pdata = pdev->dev.platform_data; | 902 | pdata = dev->platform_data; |
903 | if (!pdata) { | 903 | if (!pdata) { |
904 | DRM_ERROR("no platform data specified\n"); | 904 | DRM_ERROR("no platform data specified\n"); |
905 | return -EINVAL; | 905 | return -EINVAL; |
@@ -912,7 +912,7 @@ static int fimd_probe(struct platform_device *pdev) | |||
912 | return -EINVAL; | 912 | return -EINVAL; |
913 | } | 913 | } |
914 | 914 | ||
915 | ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL); | 915 | ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL); |
916 | if (!ctx) | 916 | if (!ctx) |
917 | return -ENOMEM; | 917 | return -ENOMEM; |
918 | 918 | ||
@@ -930,7 +930,7 @@ static int fimd_probe(struct platform_device *pdev) | |||
930 | 930 | ||
931 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 931 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
932 | 932 | ||
933 | ctx->regs = devm_ioremap_resource(&pdev->dev, res); | 933 | ctx->regs = devm_ioremap_resource(dev, res); |
934 | if (IS_ERR(ctx->regs)) | 934 | if (IS_ERR(ctx->regs)) |
935 | return PTR_ERR(ctx->regs); | 935 | return PTR_ERR(ctx->regs); |
936 | 936 | ||
@@ -942,7 +942,7 @@ static int fimd_probe(struct platform_device *pdev) | |||
942 | 942 | ||
943 | ctx->irq = res->start; | 943 | ctx->irq = res->start; |
944 | 944 | ||
945 | ret = devm_request_irq(&pdev->dev, ctx->irq, fimd_irq_handler, | 945 | ret = devm_request_irq(dev, ctx->irq, fimd_irq_handler, |
946 | 0, "drm_fimd", ctx); | 946 | 0, "drm_fimd", ctx); |
947 | if (ret) { | 947 | if (ret) { |
948 | dev_err(dev, "irq request failed.\n"); | 948 | dev_err(dev, "irq request failed.\n"); |
diff --git a/drivers/gpu/drm/exynos/exynos_drm_g2d.c b/drivers/gpu/drm/exynos/exynos_drm_g2d.c index 47a493c8a71f..af75434ee4d7 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_g2d.c +++ b/drivers/gpu/drm/exynos/exynos_drm_g2d.c | |||
@@ -1379,7 +1379,7 @@ static int g2d_probe(struct platform_device *pdev) | |||
1379 | struct exynos_drm_subdrv *subdrv; | 1379 | struct exynos_drm_subdrv *subdrv; |
1380 | int ret; | 1380 | int ret; |
1381 | 1381 | ||
1382 | g2d = devm_kzalloc(&pdev->dev, sizeof(*g2d), GFP_KERNEL); | 1382 | g2d = devm_kzalloc(dev, sizeof(*g2d), GFP_KERNEL); |
1383 | if (!g2d) { | 1383 | if (!g2d) { |
1384 | dev_err(dev, "failed to allocate driver data\n"); | 1384 | dev_err(dev, "failed to allocate driver data\n"); |
1385 | return -ENOMEM; | 1385 | return -ENOMEM; |
@@ -1417,7 +1417,7 @@ static int g2d_probe(struct platform_device *pdev) | |||
1417 | 1417 | ||
1418 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 1418 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
1419 | 1419 | ||
1420 | g2d->regs = devm_ioremap_resource(&pdev->dev, res); | 1420 | g2d->regs = devm_ioremap_resource(dev, res); |
1421 | if (IS_ERR(g2d->regs)) { | 1421 | if (IS_ERR(g2d->regs)) { |
1422 | ret = PTR_ERR(g2d->regs); | 1422 | ret = PTR_ERR(g2d->regs); |
1423 | goto err_put_clk; | 1423 | goto err_put_clk; |
@@ -1430,7 +1430,7 @@ static int g2d_probe(struct platform_device *pdev) | |||
1430 | goto err_put_clk; | 1430 | goto err_put_clk; |
1431 | } | 1431 | } |
1432 | 1432 | ||
1433 | ret = devm_request_irq(&pdev->dev, g2d->irq, g2d_irq_handler, 0, | 1433 | ret = devm_request_irq(dev, g2d->irq, g2d_irq_handler, 0, |
1434 | "drm_g2d", g2d); | 1434 | "drm_g2d", g2d); |
1435 | if (ret < 0) { | 1435 | if (ret < 0) { |
1436 | dev_err(dev, "irq request failed\n"); | 1436 | dev_err(dev, "irq request failed\n"); |
diff --git a/drivers/gpu/drm/exynos/exynos_drm_gsc.c b/drivers/gpu/drm/exynos/exynos_drm_gsc.c index 7841c3b8a20e..762f40d548b7 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_gsc.c +++ b/drivers/gpu/drm/exynos/exynos_drm_gsc.c | |||
@@ -1704,7 +1704,7 @@ static int gsc_probe(struct platform_device *pdev) | |||
1704 | } | 1704 | } |
1705 | 1705 | ||
1706 | ctx->irq = res->start; | 1706 | ctx->irq = res->start; |
1707 | ret = request_threaded_irq(ctx->irq, NULL, gsc_irq_handler, | 1707 | ret = devm_request_threaded_irq(dev, ctx->irq, NULL, gsc_irq_handler, |
1708 | IRQF_ONESHOT, "drm_gsc", ctx); | 1708 | IRQF_ONESHOT, "drm_gsc", ctx); |
1709 | if (ret < 0) { | 1709 | if (ret < 0) { |
1710 | dev_err(dev, "failed to request irq.\n"); | 1710 | dev_err(dev, "failed to request irq.\n"); |
@@ -1725,7 +1725,7 @@ static int gsc_probe(struct platform_device *pdev) | |||
1725 | ret = gsc_init_prop_list(ippdrv); | 1725 | ret = gsc_init_prop_list(ippdrv); |
1726 | if (ret < 0) { | 1726 | if (ret < 0) { |
1727 | dev_err(dev, "failed to init property list.\n"); | 1727 | dev_err(dev, "failed to init property list.\n"); |
1728 | goto err_get_irq; | 1728 | return ret; |
1729 | } | 1729 | } |
1730 | 1730 | ||
1731 | DRM_DEBUG_KMS("%s:id[%d]ippdrv[0x%x]\n", __func__, ctx->id, | 1731 | DRM_DEBUG_KMS("%s:id[%d]ippdrv[0x%x]\n", __func__, ctx->id, |
@@ -1743,15 +1743,12 @@ static int gsc_probe(struct platform_device *pdev) | |||
1743 | goto err_ippdrv_register; | 1743 | goto err_ippdrv_register; |
1744 | } | 1744 | } |
1745 | 1745 | ||
1746 | dev_info(&pdev->dev, "drm gsc registered successfully.\n"); | 1746 | dev_info(dev, "drm gsc registered successfully.\n"); |
1747 | 1747 | ||
1748 | return 0; | 1748 | return 0; |
1749 | 1749 | ||
1750 | err_ippdrv_register: | 1750 | err_ippdrv_register: |
1751 | devm_kfree(dev, ippdrv->prop_list); | ||
1752 | pm_runtime_disable(dev); | 1751 | pm_runtime_disable(dev); |
1753 | err_get_irq: | ||
1754 | free_irq(ctx->irq, ctx); | ||
1755 | return ret; | 1752 | return ret; |
1756 | } | 1753 | } |
1757 | 1754 | ||
@@ -1761,15 +1758,12 @@ static int gsc_remove(struct platform_device *pdev) | |||
1761 | struct gsc_context *ctx = get_gsc_context(dev); | 1758 | struct gsc_context *ctx = get_gsc_context(dev); |
1762 | struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; | 1759 | struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; |
1763 | 1760 | ||
1764 | devm_kfree(dev, ippdrv->prop_list); | ||
1765 | exynos_drm_ippdrv_unregister(ippdrv); | 1761 | exynos_drm_ippdrv_unregister(ippdrv); |
1766 | mutex_destroy(&ctx->lock); | 1762 | mutex_destroy(&ctx->lock); |
1767 | 1763 | ||
1768 | pm_runtime_set_suspended(dev); | 1764 | pm_runtime_set_suspended(dev); |
1769 | pm_runtime_disable(dev); | 1765 | pm_runtime_disable(dev); |
1770 | 1766 | ||
1771 | free_irq(ctx->irq, ctx); | ||
1772 | |||
1773 | return 0; | 1767 | return 0; |
1774 | } | 1768 | } |
1775 | 1769 | ||
diff --git a/drivers/gpu/drm/exynos/exynos_drm_hdmi.c b/drivers/gpu/drm/exynos/exynos_drm_hdmi.c index ba2f0f1aa05f..437fb947e46d 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_hdmi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_hdmi.c | |||
@@ -442,7 +442,7 @@ static int exynos_drm_hdmi_probe(struct platform_device *pdev) | |||
442 | 442 | ||
443 | DRM_DEBUG_KMS("%s\n", __FILE__); | 443 | DRM_DEBUG_KMS("%s\n", __FILE__); |
444 | 444 | ||
445 | ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL); | 445 | ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL); |
446 | if (!ctx) { | 446 | if (!ctx) { |
447 | DRM_LOG_KMS("failed to alloc common hdmi context.\n"); | 447 | DRM_LOG_KMS("failed to alloc common hdmi context.\n"); |
448 | return -ENOMEM; | 448 | return -ENOMEM; |
diff --git a/drivers/gpu/drm/exynos/exynos_drm_ipp.c b/drivers/gpu/drm/exynos/exynos_drm_ipp.c index 29d2ad314490..be1e88463466 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_ipp.c +++ b/drivers/gpu/drm/exynos/exynos_drm_ipp.c | |||
@@ -222,7 +222,7 @@ static struct exynos_drm_ippdrv *ipp_find_driver(struct ipp_context *ctx, | |||
222 | /* find ipp driver using idr */ | 222 | /* find ipp driver using idr */ |
223 | ippdrv = ipp_find_obj(&ctx->ipp_idr, &ctx->ipp_lock, | 223 | ippdrv = ipp_find_obj(&ctx->ipp_idr, &ctx->ipp_lock, |
224 | ipp_id); | 224 | ipp_id); |
225 | if (IS_ERR_OR_NULL(ippdrv)) { | 225 | if (IS_ERR(ippdrv)) { |
226 | DRM_ERROR("not found ipp%d driver.\n", ipp_id); | 226 | DRM_ERROR("not found ipp%d driver.\n", ipp_id); |
227 | return ippdrv; | 227 | return ippdrv; |
228 | } | 228 | } |
@@ -388,7 +388,7 @@ static int ipp_find_and_set_property(struct drm_exynos_ipp_property *property) | |||
388 | DRM_DEBUG_KMS("%s:prop_id[%d]\n", __func__, prop_id); | 388 | DRM_DEBUG_KMS("%s:prop_id[%d]\n", __func__, prop_id); |
389 | 389 | ||
390 | ippdrv = ipp_find_drv_by_handle(prop_id); | 390 | ippdrv = ipp_find_drv_by_handle(prop_id); |
391 | if (IS_ERR_OR_NULL(ippdrv)) { | 391 | if (IS_ERR(ippdrv)) { |
392 | DRM_ERROR("failed to get ipp driver.\n"); | 392 | DRM_ERROR("failed to get ipp driver.\n"); |
393 | return -EINVAL; | 393 | return -EINVAL; |
394 | } | 394 | } |
@@ -492,7 +492,7 @@ int exynos_drm_ipp_set_property(struct drm_device *drm_dev, void *data, | |||
492 | 492 | ||
493 | /* find ipp driver using ipp id */ | 493 | /* find ipp driver using ipp id */ |
494 | ippdrv = ipp_find_driver(ctx, property); | 494 | ippdrv = ipp_find_driver(ctx, property); |
495 | if (IS_ERR_OR_NULL(ippdrv)) { | 495 | if (IS_ERR(ippdrv)) { |
496 | DRM_ERROR("failed to get ipp driver.\n"); | 496 | DRM_ERROR("failed to get ipp driver.\n"); |
497 | return -EINVAL; | 497 | return -EINVAL; |
498 | } | 498 | } |
@@ -521,19 +521,19 @@ int exynos_drm_ipp_set_property(struct drm_device *drm_dev, void *data, | |||
521 | c_node->state = IPP_STATE_IDLE; | 521 | c_node->state = IPP_STATE_IDLE; |
522 | 522 | ||
523 | c_node->start_work = ipp_create_cmd_work(); | 523 | c_node->start_work = ipp_create_cmd_work(); |
524 | if (IS_ERR_OR_NULL(c_node->start_work)) { | 524 | if (IS_ERR(c_node->start_work)) { |
525 | DRM_ERROR("failed to create start work.\n"); | 525 | DRM_ERROR("failed to create start work.\n"); |
526 | goto err_clear; | 526 | goto err_clear; |
527 | } | 527 | } |
528 | 528 | ||
529 | c_node->stop_work = ipp_create_cmd_work(); | 529 | c_node->stop_work = ipp_create_cmd_work(); |
530 | if (IS_ERR_OR_NULL(c_node->stop_work)) { | 530 | if (IS_ERR(c_node->stop_work)) { |
531 | DRM_ERROR("failed to create stop work.\n"); | 531 | DRM_ERROR("failed to create stop work.\n"); |
532 | goto err_free_start; | 532 | goto err_free_start; |
533 | } | 533 | } |
534 | 534 | ||
535 | c_node->event_work = ipp_create_event_work(); | 535 | c_node->event_work = ipp_create_event_work(); |
536 | if (IS_ERR_OR_NULL(c_node->event_work)) { | 536 | if (IS_ERR(c_node->event_work)) { |
537 | DRM_ERROR("failed to create event work.\n"); | 537 | DRM_ERROR("failed to create event work.\n"); |
538 | goto err_free_stop; | 538 | goto err_free_stop; |
539 | } | 539 | } |
@@ -915,7 +915,7 @@ static int ipp_queue_buf_with_run(struct device *dev, | |||
915 | DRM_DEBUG_KMS("%s\n", __func__); | 915 | DRM_DEBUG_KMS("%s\n", __func__); |
916 | 916 | ||
917 | ippdrv = ipp_find_drv_by_handle(qbuf->prop_id); | 917 | ippdrv = ipp_find_drv_by_handle(qbuf->prop_id); |
918 | if (IS_ERR_OR_NULL(ippdrv)) { | 918 | if (IS_ERR(ippdrv)) { |
919 | DRM_ERROR("failed to get ipp driver.\n"); | 919 | DRM_ERROR("failed to get ipp driver.\n"); |
920 | return -EFAULT; | 920 | return -EFAULT; |
921 | } | 921 | } |
@@ -1909,7 +1909,7 @@ static int ipp_probe(struct platform_device *pdev) | |||
1909 | struct exynos_drm_subdrv *subdrv; | 1909 | struct exynos_drm_subdrv *subdrv; |
1910 | int ret; | 1910 | int ret; |
1911 | 1911 | ||
1912 | ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL); | 1912 | ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL); |
1913 | if (!ctx) | 1913 | if (!ctx) |
1914 | return -ENOMEM; | 1914 | return -ENOMEM; |
1915 | 1915 | ||
@@ -1963,7 +1963,7 @@ static int ipp_probe(struct platform_device *pdev) | |||
1963 | goto err_cmd_workq; | 1963 | goto err_cmd_workq; |
1964 | } | 1964 | } |
1965 | 1965 | ||
1966 | dev_info(&pdev->dev, "drm ipp registered successfully.\n"); | 1966 | dev_info(dev, "drm ipp registered successfully.\n"); |
1967 | 1967 | ||
1968 | return 0; | 1968 | return 0; |
1969 | 1969 | ||
diff --git a/drivers/gpu/drm/exynos/exynos_drm_rotator.c b/drivers/gpu/drm/exynos/exynos_drm_rotator.c index 947f09f15ad1..9b6c70964d71 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_rotator.c +++ b/drivers/gpu/drm/exynos/exynos_drm_rotator.c | |||
@@ -666,8 +666,8 @@ static int rotator_probe(struct platform_device *pdev) | |||
666 | return rot->irq; | 666 | return rot->irq; |
667 | } | 667 | } |
668 | 668 | ||
669 | ret = request_threaded_irq(rot->irq, NULL, rotator_irq_handler, | 669 | ret = devm_request_threaded_irq(dev, rot->irq, NULL, |
670 | IRQF_ONESHOT, "drm_rotator", rot); | 670 | rotator_irq_handler, IRQF_ONESHOT, "drm_rotator", rot); |
671 | if (ret < 0) { | 671 | if (ret < 0) { |
672 | dev_err(dev, "failed to request irq\n"); | 672 | dev_err(dev, "failed to request irq\n"); |
673 | return ret; | 673 | return ret; |
@@ -676,8 +676,7 @@ static int rotator_probe(struct platform_device *pdev) | |||
676 | rot->clock = devm_clk_get(dev, "rotator"); | 676 | rot->clock = devm_clk_get(dev, "rotator"); |
677 | if (IS_ERR(rot->clock)) { | 677 | if (IS_ERR(rot->clock)) { |
678 | dev_err(dev, "failed to get clock\n"); | 678 | dev_err(dev, "failed to get clock\n"); |
679 | ret = PTR_ERR(rot->clock); | 679 | return PTR_ERR(rot->clock); |
680 | goto err_clk_get; | ||
681 | } | 680 | } |
682 | 681 | ||
683 | pm_runtime_enable(dev); | 682 | pm_runtime_enable(dev); |
@@ -709,10 +708,7 @@ static int rotator_probe(struct platform_device *pdev) | |||
709 | return 0; | 708 | return 0; |
710 | 709 | ||
711 | err_ippdrv_register: | 710 | err_ippdrv_register: |
712 | devm_kfree(dev, ippdrv->prop_list); | ||
713 | pm_runtime_disable(dev); | 711 | pm_runtime_disable(dev); |
714 | err_clk_get: | ||
715 | free_irq(rot->irq, rot); | ||
716 | return ret; | 712 | return ret; |
717 | } | 713 | } |
718 | 714 | ||
@@ -722,13 +718,10 @@ static int rotator_remove(struct platform_device *pdev) | |||
722 | struct rot_context *rot = dev_get_drvdata(dev); | 718 | struct rot_context *rot = dev_get_drvdata(dev); |
723 | struct exynos_drm_ippdrv *ippdrv = &rot->ippdrv; | 719 | struct exynos_drm_ippdrv *ippdrv = &rot->ippdrv; |
724 | 720 | ||
725 | devm_kfree(dev, ippdrv->prop_list); | ||
726 | exynos_drm_ippdrv_unregister(ippdrv); | 721 | exynos_drm_ippdrv_unregister(ippdrv); |
727 | 722 | ||
728 | pm_runtime_disable(dev); | 723 | pm_runtime_disable(dev); |
729 | 724 | ||
730 | free_irq(rot->irq, rot); | ||
731 | |||
732 | return 0; | 725 | return 0; |
733 | } | 726 | } |
734 | 727 | ||
diff --git a/drivers/gpu/drm/exynos/exynos_drm_vidi.c b/drivers/gpu/drm/exynos/exynos_drm_vidi.c index 9504b0cd825a..24376c194a5e 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c | |||
@@ -594,7 +594,7 @@ static int vidi_probe(struct platform_device *pdev) | |||
594 | 594 | ||
595 | DRM_DEBUG_KMS("%s\n", __FILE__); | 595 | DRM_DEBUG_KMS("%s\n", __FILE__); |
596 | 596 | ||
597 | ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL); | 597 | ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL); |
598 | if (!ctx) | 598 | if (!ctx) |
599 | return -ENOMEM; | 599 | return -ENOMEM; |
600 | 600 | ||
@@ -612,7 +612,7 @@ static int vidi_probe(struct platform_device *pdev) | |||
612 | 612 | ||
613 | platform_set_drvdata(pdev, ctx); | 613 | platform_set_drvdata(pdev, ctx); |
614 | 614 | ||
615 | ret = device_create_file(&pdev->dev, &dev_attr_connection); | 615 | ret = device_create_file(dev, &dev_attr_connection); |
616 | if (ret < 0) | 616 | if (ret < 0) |
617 | DRM_INFO("failed to create connection sysfs.\n"); | 617 | DRM_INFO("failed to create connection sysfs.\n"); |
618 | 618 | ||
diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c index 6652597586a1..fd1426dca882 100644 --- a/drivers/gpu/drm/exynos/exynos_hdmi.c +++ b/drivers/gpu/drm/exynos/exynos_hdmi.c | |||
@@ -1946,14 +1946,14 @@ static int hdmi_probe(struct platform_device *pdev) | |||
1946 | 1946 | ||
1947 | DRM_DEBUG_KMS("[%d]\n", __LINE__); | 1947 | DRM_DEBUG_KMS("[%d]\n", __LINE__); |
1948 | 1948 | ||
1949 | if (pdev->dev.of_node) { | 1949 | if (dev->of_node) { |
1950 | pdata = drm_hdmi_dt_parse_pdata(dev); | 1950 | pdata = drm_hdmi_dt_parse_pdata(dev); |
1951 | if (IS_ERR(pdata)) { | 1951 | if (IS_ERR(pdata)) { |
1952 | DRM_ERROR("failed to parse dt\n"); | 1952 | DRM_ERROR("failed to parse dt\n"); |
1953 | return PTR_ERR(pdata); | 1953 | return PTR_ERR(pdata); |
1954 | } | 1954 | } |
1955 | } else { | 1955 | } else { |
1956 | pdata = pdev->dev.platform_data; | 1956 | pdata = dev->platform_data; |
1957 | } | 1957 | } |
1958 | 1958 | ||
1959 | if (!pdata) { | 1959 | if (!pdata) { |
@@ -1961,14 +1961,14 @@ static int hdmi_probe(struct platform_device *pdev) | |||
1961 | return -EINVAL; | 1961 | return -EINVAL; |
1962 | } | 1962 | } |
1963 | 1963 | ||
1964 | drm_hdmi_ctx = devm_kzalloc(&pdev->dev, sizeof(*drm_hdmi_ctx), | 1964 | drm_hdmi_ctx = devm_kzalloc(dev, sizeof(*drm_hdmi_ctx), |
1965 | GFP_KERNEL); | 1965 | GFP_KERNEL); |
1966 | if (!drm_hdmi_ctx) { | 1966 | if (!drm_hdmi_ctx) { |
1967 | DRM_ERROR("failed to allocate common hdmi context.\n"); | 1967 | DRM_ERROR("failed to allocate common hdmi context.\n"); |
1968 | return -ENOMEM; | 1968 | return -ENOMEM; |
1969 | } | 1969 | } |
1970 | 1970 | ||
1971 | hdata = devm_kzalloc(&pdev->dev, sizeof(struct hdmi_context), | 1971 | hdata = devm_kzalloc(dev, sizeof(struct hdmi_context), |
1972 | GFP_KERNEL); | 1972 | GFP_KERNEL); |
1973 | if (!hdata) { | 1973 | if (!hdata) { |
1974 | DRM_ERROR("out of memory\n"); | 1974 | DRM_ERROR("out of memory\n"); |
@@ -1985,7 +1985,7 @@ static int hdmi_probe(struct platform_device *pdev) | |||
1985 | if (dev->of_node) { | 1985 | if (dev->of_node) { |
1986 | const struct of_device_id *match; | 1986 | const struct of_device_id *match; |
1987 | match = of_match_node(of_match_ptr(hdmi_match_types), | 1987 | match = of_match_node(of_match_ptr(hdmi_match_types), |
1988 | pdev->dev.of_node); | 1988 | dev->of_node); |
1989 | if (match == NULL) | 1989 | if (match == NULL) |
1990 | return -ENODEV; | 1990 | return -ENODEV; |
1991 | hdata->type = (enum hdmi_type)match->data; | 1991 | hdata->type = (enum hdmi_type)match->data; |
@@ -2005,11 +2005,11 @@ static int hdmi_probe(struct platform_device *pdev) | |||
2005 | } | 2005 | } |
2006 | 2006 | ||
2007 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 2007 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
2008 | hdata->regs = devm_ioremap_resource(&pdev->dev, res); | 2008 | hdata->regs = devm_ioremap_resource(dev, res); |
2009 | if (IS_ERR(hdata->regs)) | 2009 | if (IS_ERR(hdata->regs)) |
2010 | return PTR_ERR(hdata->regs); | 2010 | return PTR_ERR(hdata->regs); |
2011 | 2011 | ||
2012 | ret = devm_gpio_request(&pdev->dev, hdata->hpd_gpio, "HPD"); | 2012 | ret = devm_gpio_request(dev, hdata->hpd_gpio, "HPD"); |
2013 | if (ret) { | 2013 | if (ret) { |
2014 | DRM_ERROR("failed to request HPD gpio\n"); | 2014 | DRM_ERROR("failed to request HPD gpio\n"); |
2015 | return ret; | 2015 | return ret; |
@@ -2041,7 +2041,7 @@ static int hdmi_probe(struct platform_device *pdev) | |||
2041 | 2041 | ||
2042 | hdata->hpd = gpio_get_value(hdata->hpd_gpio); | 2042 | hdata->hpd = gpio_get_value(hdata->hpd_gpio); |
2043 | 2043 | ||
2044 | ret = request_threaded_irq(hdata->irq, NULL, | 2044 | ret = devm_request_threaded_irq(dev, hdata->irq, NULL, |
2045 | hdmi_irq_thread, IRQF_TRIGGER_RISING | | 2045 | hdmi_irq_thread, IRQF_TRIGGER_RISING | |
2046 | IRQF_TRIGGER_FALLING | IRQF_ONESHOT, | 2046 | IRQF_TRIGGER_FALLING | IRQF_ONESHOT, |
2047 | "hdmi", drm_hdmi_ctx); | 2047 | "hdmi", drm_hdmi_ctx); |
@@ -2070,16 +2070,11 @@ err_ddc: | |||
2070 | static int hdmi_remove(struct platform_device *pdev) | 2070 | static int hdmi_remove(struct platform_device *pdev) |
2071 | { | 2071 | { |
2072 | struct device *dev = &pdev->dev; | 2072 | struct device *dev = &pdev->dev; |
2073 | struct exynos_drm_hdmi_context *ctx = platform_get_drvdata(pdev); | ||
2074 | struct hdmi_context *hdata = ctx->ctx; | ||
2075 | 2073 | ||
2076 | DRM_DEBUG_KMS("[%d] %s\n", __LINE__, __func__); | 2074 | DRM_DEBUG_KMS("[%d] %s\n", __LINE__, __func__); |
2077 | 2075 | ||
2078 | pm_runtime_disable(dev); | 2076 | pm_runtime_disable(dev); |
2079 | 2077 | ||
2080 | free_irq(hdata->irq, hdata); | ||
2081 | |||
2082 | |||
2083 | /* hdmiphy i2c driver */ | 2078 | /* hdmiphy i2c driver */ |
2084 | i2c_del_driver(&hdmiphy_driver); | 2079 | i2c_del_driver(&hdmiphy_driver); |
2085 | /* DDC i2c driver */ | 2080 | /* DDC i2c driver */ |
diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c b/drivers/gpu/drm/exynos/exynos_mixer.c index ec3e376b7e01..7c197d3820c5 100644 --- a/drivers/gpu/drm/exynos/exynos_mixer.c +++ b/drivers/gpu/drm/exynos/exynos_mixer.c | |||
@@ -1061,7 +1061,7 @@ static int mixer_resources_init(struct exynos_drm_hdmi_context *ctx, | |||
1061 | return -ENXIO; | 1061 | return -ENXIO; |
1062 | } | 1062 | } |
1063 | 1063 | ||
1064 | mixer_res->mixer_regs = devm_ioremap(&pdev->dev, res->start, | 1064 | mixer_res->mixer_regs = devm_ioremap(dev, res->start, |
1065 | resource_size(res)); | 1065 | resource_size(res)); |
1066 | if (mixer_res->mixer_regs == NULL) { | 1066 | if (mixer_res->mixer_regs == NULL) { |
1067 | dev_err(dev, "register mapping failed.\n"); | 1067 | dev_err(dev, "register mapping failed.\n"); |
@@ -1074,7 +1074,7 @@ static int mixer_resources_init(struct exynos_drm_hdmi_context *ctx, | |||
1074 | return -ENXIO; | 1074 | return -ENXIO; |
1075 | } | 1075 | } |
1076 | 1076 | ||
1077 | ret = devm_request_irq(&pdev->dev, res->start, mixer_irq_handler, | 1077 | ret = devm_request_irq(dev, res->start, mixer_irq_handler, |
1078 | 0, "drm_mixer", ctx); | 1078 | 0, "drm_mixer", ctx); |
1079 | if (ret) { | 1079 | if (ret) { |
1080 | dev_err(dev, "request interrupt failed.\n"); | 1080 | dev_err(dev, "request interrupt failed.\n"); |
@@ -1118,7 +1118,7 @@ static int vp_resources_init(struct exynos_drm_hdmi_context *ctx, | |||
1118 | return -ENXIO; | 1118 | return -ENXIO; |
1119 | } | 1119 | } |
1120 | 1120 | ||
1121 | mixer_res->vp_regs = devm_ioremap(&pdev->dev, res->start, | 1121 | mixer_res->vp_regs = devm_ioremap(dev, res->start, |
1122 | resource_size(res)); | 1122 | resource_size(res)); |
1123 | if (mixer_res->vp_regs == NULL) { | 1123 | if (mixer_res->vp_regs == NULL) { |
1124 | dev_err(dev, "register mapping failed.\n"); | 1124 | dev_err(dev, "register mapping failed.\n"); |
@@ -1169,14 +1169,14 @@ static int mixer_probe(struct platform_device *pdev) | |||
1169 | 1169 | ||
1170 | dev_info(dev, "probe start\n"); | 1170 | dev_info(dev, "probe start\n"); |
1171 | 1171 | ||
1172 | drm_hdmi_ctx = devm_kzalloc(&pdev->dev, sizeof(*drm_hdmi_ctx), | 1172 | drm_hdmi_ctx = devm_kzalloc(dev, sizeof(*drm_hdmi_ctx), |
1173 | GFP_KERNEL); | 1173 | GFP_KERNEL); |
1174 | if (!drm_hdmi_ctx) { | 1174 | if (!drm_hdmi_ctx) { |
1175 | DRM_ERROR("failed to allocate common hdmi context.\n"); | 1175 | DRM_ERROR("failed to allocate common hdmi context.\n"); |
1176 | return -ENOMEM; | 1176 | return -ENOMEM; |
1177 | } | 1177 | } |
1178 | 1178 | ||
1179 | ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL); | 1179 | ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL); |
1180 | if (!ctx) { | 1180 | if (!ctx) { |
1181 | DRM_ERROR("failed to alloc mixer context.\n"); | 1181 | DRM_ERROR("failed to alloc mixer context.\n"); |
1182 | return -ENOMEM; | 1182 | return -ENOMEM; |
@@ -1187,14 +1187,14 @@ static int mixer_probe(struct platform_device *pdev) | |||
1187 | if (dev->of_node) { | 1187 | if (dev->of_node) { |
1188 | const struct of_device_id *match; | 1188 | const struct of_device_id *match; |
1189 | match = of_match_node(of_match_ptr(mixer_match_types), | 1189 | match = of_match_node(of_match_ptr(mixer_match_types), |
1190 | pdev->dev.of_node); | 1190 | dev->of_node); |
1191 | drv = (struct mixer_drv_data *)match->data; | 1191 | drv = (struct mixer_drv_data *)match->data; |
1192 | } else { | 1192 | } else { |
1193 | drv = (struct mixer_drv_data *) | 1193 | drv = (struct mixer_drv_data *) |
1194 | platform_get_device_id(pdev)->driver_data; | 1194 | platform_get_device_id(pdev)->driver_data; |
1195 | } | 1195 | } |
1196 | 1196 | ||
1197 | ctx->dev = &pdev->dev; | 1197 | ctx->dev = dev; |
1198 | ctx->parent_ctx = (void *)drm_hdmi_ctx; | 1198 | ctx->parent_ctx = (void *)drm_hdmi_ctx; |
1199 | drm_hdmi_ctx->ctx = (void *)ctx; | 1199 | drm_hdmi_ctx->ctx = (void *)ctx; |
1200 | ctx->vp_enabled = drv->is_vp_enabled; | 1200 | ctx->vp_enabled = drv->is_vp_enabled; |
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index 9ebe895c17d6..a2e4953b8e8d 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c | |||
@@ -364,40 +364,64 @@ static const struct pci_device_id pciidlist[] = { /* aka */ | |||
364 | INTEL_VGA_DEVICE(0x016a, &intel_ivybridge_d_info), /* GT2 server */ | 364 | INTEL_VGA_DEVICE(0x016a, &intel_ivybridge_d_info), /* GT2 server */ |
365 | INTEL_VGA_DEVICE(0x0402, &intel_haswell_d_info), /* GT1 desktop */ | 365 | INTEL_VGA_DEVICE(0x0402, &intel_haswell_d_info), /* GT1 desktop */ |
366 | INTEL_VGA_DEVICE(0x0412, &intel_haswell_d_info), /* GT2 desktop */ | 366 | INTEL_VGA_DEVICE(0x0412, &intel_haswell_d_info), /* GT2 desktop */ |
367 | INTEL_VGA_DEVICE(0x0422, &intel_haswell_d_info), /* GT2 desktop */ | 367 | INTEL_VGA_DEVICE(0x0422, &intel_haswell_d_info), /* GT3 desktop */ |
368 | INTEL_VGA_DEVICE(0x040a, &intel_haswell_d_info), /* GT1 server */ | 368 | INTEL_VGA_DEVICE(0x040a, &intel_haswell_d_info), /* GT1 server */ |
369 | INTEL_VGA_DEVICE(0x041a, &intel_haswell_d_info), /* GT2 server */ | 369 | INTEL_VGA_DEVICE(0x041a, &intel_haswell_d_info), /* GT2 server */ |
370 | INTEL_VGA_DEVICE(0x042a, &intel_haswell_d_info), /* GT2 server */ | 370 | INTEL_VGA_DEVICE(0x042a, &intel_haswell_d_info), /* GT3 server */ |
371 | INTEL_VGA_DEVICE(0x0406, &intel_haswell_m_info), /* GT1 mobile */ | 371 | INTEL_VGA_DEVICE(0x0406, &intel_haswell_m_info), /* GT1 mobile */ |
372 | INTEL_VGA_DEVICE(0x0416, &intel_haswell_m_info), /* GT2 mobile */ | 372 | INTEL_VGA_DEVICE(0x0416, &intel_haswell_m_info), /* GT2 mobile */ |
373 | INTEL_VGA_DEVICE(0x0426, &intel_haswell_m_info), /* GT2 mobile */ | 373 | INTEL_VGA_DEVICE(0x0426, &intel_haswell_m_info), /* GT2 mobile */ |
374 | INTEL_VGA_DEVICE(0x040B, &intel_haswell_d_info), /* GT1 reserved */ | ||
375 | INTEL_VGA_DEVICE(0x041B, &intel_haswell_d_info), /* GT2 reserved */ | ||
376 | INTEL_VGA_DEVICE(0x042B, &intel_haswell_d_info), /* GT3 reserved */ | ||
377 | INTEL_VGA_DEVICE(0x040E, &intel_haswell_d_info), /* GT1 reserved */ | ||
378 | INTEL_VGA_DEVICE(0x041E, &intel_haswell_d_info), /* GT2 reserved */ | ||
379 | INTEL_VGA_DEVICE(0x042E, &intel_haswell_d_info), /* GT3 reserved */ | ||
374 | INTEL_VGA_DEVICE(0x0C02, &intel_haswell_d_info), /* SDV GT1 desktop */ | 380 | INTEL_VGA_DEVICE(0x0C02, &intel_haswell_d_info), /* SDV GT1 desktop */ |
375 | INTEL_VGA_DEVICE(0x0C12, &intel_haswell_d_info), /* SDV GT2 desktop */ | 381 | INTEL_VGA_DEVICE(0x0C12, &intel_haswell_d_info), /* SDV GT2 desktop */ |
376 | INTEL_VGA_DEVICE(0x0C22, &intel_haswell_d_info), /* SDV GT2 desktop */ | 382 | INTEL_VGA_DEVICE(0x0C22, &intel_haswell_d_info), /* SDV GT3 desktop */ |
377 | INTEL_VGA_DEVICE(0x0C0A, &intel_haswell_d_info), /* SDV GT1 server */ | 383 | INTEL_VGA_DEVICE(0x0C0A, &intel_haswell_d_info), /* SDV GT1 server */ |
378 | INTEL_VGA_DEVICE(0x0C1A, &intel_haswell_d_info), /* SDV GT2 server */ | 384 | INTEL_VGA_DEVICE(0x0C1A, &intel_haswell_d_info), /* SDV GT2 server */ |
379 | INTEL_VGA_DEVICE(0x0C2A, &intel_haswell_d_info), /* SDV GT2 server */ | 385 | INTEL_VGA_DEVICE(0x0C2A, &intel_haswell_d_info), /* SDV GT3 server */ |
380 | INTEL_VGA_DEVICE(0x0C06, &intel_haswell_m_info), /* SDV GT1 mobile */ | 386 | INTEL_VGA_DEVICE(0x0C06, &intel_haswell_m_info), /* SDV GT1 mobile */ |
381 | INTEL_VGA_DEVICE(0x0C16, &intel_haswell_m_info), /* SDV GT2 mobile */ | 387 | INTEL_VGA_DEVICE(0x0C16, &intel_haswell_m_info), /* SDV GT2 mobile */ |
382 | INTEL_VGA_DEVICE(0x0C26, &intel_haswell_m_info), /* SDV GT2 mobile */ | 388 | INTEL_VGA_DEVICE(0x0C26, &intel_haswell_m_info), /* SDV GT3 mobile */ |
389 | INTEL_VGA_DEVICE(0x0C0B, &intel_haswell_d_info), /* SDV GT1 reserved */ | ||
390 | INTEL_VGA_DEVICE(0x0C1B, &intel_haswell_d_info), /* SDV GT2 reserved */ | ||
391 | INTEL_VGA_DEVICE(0x0C2B, &intel_haswell_d_info), /* SDV GT3 reserved */ | ||
392 | INTEL_VGA_DEVICE(0x0C0E, &intel_haswell_d_info), /* SDV GT1 reserved */ | ||
393 | INTEL_VGA_DEVICE(0x0C1E, &intel_haswell_d_info), /* SDV GT2 reserved */ | ||
394 | INTEL_VGA_DEVICE(0x0C2E, &intel_haswell_d_info), /* SDV GT3 reserved */ | ||
383 | INTEL_VGA_DEVICE(0x0A02, &intel_haswell_d_info), /* ULT GT1 desktop */ | 395 | INTEL_VGA_DEVICE(0x0A02, &intel_haswell_d_info), /* ULT GT1 desktop */ |
384 | INTEL_VGA_DEVICE(0x0A12, &intel_haswell_d_info), /* ULT GT2 desktop */ | 396 | INTEL_VGA_DEVICE(0x0A12, &intel_haswell_d_info), /* ULT GT2 desktop */ |
385 | INTEL_VGA_DEVICE(0x0A22, &intel_haswell_d_info), /* ULT GT2 desktop */ | 397 | INTEL_VGA_DEVICE(0x0A22, &intel_haswell_d_info), /* ULT GT3 desktop */ |
386 | INTEL_VGA_DEVICE(0x0A0A, &intel_haswell_d_info), /* ULT GT1 server */ | 398 | INTEL_VGA_DEVICE(0x0A0A, &intel_haswell_d_info), /* ULT GT1 server */ |
387 | INTEL_VGA_DEVICE(0x0A1A, &intel_haswell_d_info), /* ULT GT2 server */ | 399 | INTEL_VGA_DEVICE(0x0A1A, &intel_haswell_d_info), /* ULT GT2 server */ |
388 | INTEL_VGA_DEVICE(0x0A2A, &intel_haswell_d_info), /* ULT GT2 server */ | 400 | INTEL_VGA_DEVICE(0x0A2A, &intel_haswell_d_info), /* ULT GT3 server */ |
389 | INTEL_VGA_DEVICE(0x0A06, &intel_haswell_m_info), /* ULT GT1 mobile */ | 401 | INTEL_VGA_DEVICE(0x0A06, &intel_haswell_m_info), /* ULT GT1 mobile */ |
390 | INTEL_VGA_DEVICE(0x0A16, &intel_haswell_m_info), /* ULT GT2 mobile */ | 402 | INTEL_VGA_DEVICE(0x0A16, &intel_haswell_m_info), /* ULT GT2 mobile */ |
391 | INTEL_VGA_DEVICE(0x0A26, &intel_haswell_m_info), /* ULT GT2 mobile */ | 403 | INTEL_VGA_DEVICE(0x0A26, &intel_haswell_m_info), /* ULT GT3 mobile */ |
404 | INTEL_VGA_DEVICE(0x0A0B, &intel_haswell_d_info), /* ULT GT1 reserved */ | ||
405 | INTEL_VGA_DEVICE(0x0A1B, &intel_haswell_d_info), /* ULT GT2 reserved */ | ||
406 | INTEL_VGA_DEVICE(0x0A2B, &intel_haswell_d_info), /* ULT GT3 reserved */ | ||
407 | INTEL_VGA_DEVICE(0x0A0E, &intel_haswell_m_info), /* ULT GT1 reserved */ | ||
408 | INTEL_VGA_DEVICE(0x0A1E, &intel_haswell_m_info), /* ULT GT2 reserved */ | ||
409 | INTEL_VGA_DEVICE(0x0A2E, &intel_haswell_m_info), /* ULT GT3 reserved */ | ||
392 | INTEL_VGA_DEVICE(0x0D02, &intel_haswell_d_info), /* CRW GT1 desktop */ | 410 | INTEL_VGA_DEVICE(0x0D02, &intel_haswell_d_info), /* CRW GT1 desktop */ |
393 | INTEL_VGA_DEVICE(0x0D12, &intel_haswell_d_info), /* CRW GT2 desktop */ | 411 | INTEL_VGA_DEVICE(0x0D12, &intel_haswell_d_info), /* CRW GT2 desktop */ |
394 | INTEL_VGA_DEVICE(0x0D22, &intel_haswell_d_info), /* CRW GT2 desktop */ | 412 | INTEL_VGA_DEVICE(0x0D22, &intel_haswell_d_info), /* CRW GT3 desktop */ |
395 | INTEL_VGA_DEVICE(0x0D0A, &intel_haswell_d_info), /* CRW GT1 server */ | 413 | INTEL_VGA_DEVICE(0x0D0A, &intel_haswell_d_info), /* CRW GT1 server */ |
396 | INTEL_VGA_DEVICE(0x0D1A, &intel_haswell_d_info), /* CRW GT2 server */ | 414 | INTEL_VGA_DEVICE(0x0D1A, &intel_haswell_d_info), /* CRW GT2 server */ |
397 | INTEL_VGA_DEVICE(0x0D2A, &intel_haswell_d_info), /* CRW GT2 server */ | 415 | INTEL_VGA_DEVICE(0x0D2A, &intel_haswell_d_info), /* CRW GT3 server */ |
398 | INTEL_VGA_DEVICE(0x0D06, &intel_haswell_m_info), /* CRW GT1 mobile */ | 416 | INTEL_VGA_DEVICE(0x0D06, &intel_haswell_m_info), /* CRW GT1 mobile */ |
399 | INTEL_VGA_DEVICE(0x0D16, &intel_haswell_m_info), /* CRW GT2 mobile */ | 417 | INTEL_VGA_DEVICE(0x0D16, &intel_haswell_m_info), /* CRW GT2 mobile */ |
400 | INTEL_VGA_DEVICE(0x0D26, &intel_haswell_m_info), /* CRW GT2 mobile */ | 418 | INTEL_VGA_DEVICE(0x0D26, &intel_haswell_m_info), /* CRW GT3 mobile */ |
419 | INTEL_VGA_DEVICE(0x0D0B, &intel_haswell_d_info), /* CRW GT1 reserved */ | ||
420 | INTEL_VGA_DEVICE(0x0D1B, &intel_haswell_d_info), /* CRW GT2 reserved */ | ||
421 | INTEL_VGA_DEVICE(0x0D2B, &intel_haswell_d_info), /* CRW GT3 reserved */ | ||
422 | INTEL_VGA_DEVICE(0x0D0E, &intel_haswell_d_info), /* CRW GT1 reserved */ | ||
423 | INTEL_VGA_DEVICE(0x0D1E, &intel_haswell_d_info), /* CRW GT2 reserved */ | ||
424 | INTEL_VGA_DEVICE(0x0D2E, &intel_haswell_d_info), /* CRW GT3 reserved */ | ||
401 | INTEL_VGA_DEVICE(0x0f30, &intel_valleyview_m_info), | 425 | INTEL_VGA_DEVICE(0x0f30, &intel_valleyview_m_info), |
402 | INTEL_VGA_DEVICE(0x0f31, &intel_valleyview_m_info), | 426 | INTEL_VGA_DEVICE(0x0f31, &intel_valleyview_m_info), |
403 | INTEL_VGA_DEVICE(0x0f32, &intel_valleyview_m_info), | 427 | INTEL_VGA_DEVICE(0x0f32, &intel_valleyview_m_info), |
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index d5dcf7fe1ee9..b9d00dcf9a2d 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h | |||
@@ -1943,4 +1943,19 @@ static inline void __user *to_user_ptr(u64 address) | |||
1943 | return (void __user *)(uintptr_t)address; | 1943 | return (void __user *)(uintptr_t)address; |
1944 | } | 1944 | } |
1945 | 1945 | ||
1946 | static inline unsigned long msecs_to_jiffies_timeout(const unsigned int m) | ||
1947 | { | ||
1948 | unsigned long j = msecs_to_jiffies(m); | ||
1949 | |||
1950 | return min_t(unsigned long, MAX_JIFFY_OFFSET, j + 1); | ||
1951 | } | ||
1952 | |||
1953 | static inline unsigned long | ||
1954 | timespec_to_jiffies_timeout(const struct timespec *value) | ||
1955 | { | ||
1956 | unsigned long j = timespec_to_jiffies(value); | ||
1957 | |||
1958 | return min_t(unsigned long, MAX_JIFFY_OFFSET, j + 1); | ||
1959 | } | ||
1960 | |||
1946 | #endif | 1961 | #endif |
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 6165535d15f0..a6cf8e843973 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c | |||
@@ -1003,7 +1003,7 @@ static int __wait_seqno(struct intel_ring_buffer *ring, u32 seqno, | |||
1003 | wait_forever = false; | 1003 | wait_forever = false; |
1004 | } | 1004 | } |
1005 | 1005 | ||
1006 | timeout_jiffies = timespec_to_jiffies(&wait_time); | 1006 | timeout_jiffies = timespec_to_jiffies_timeout(&wait_time); |
1007 | 1007 | ||
1008 | if (WARN_ON(!ring->irq_get(ring))) | 1008 | if (WARN_ON(!ring->irq_get(ring))) |
1009 | return -ENODEV; | 1009 | return -ENODEV; |
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index efe829919755..ad1117bebd7e 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -8140,6 +8140,21 @@ static void intel_set_config_restore_state(struct drm_device *dev, | |||
8140 | } | 8140 | } |
8141 | } | 8141 | } |
8142 | 8142 | ||
8143 | static bool | ||
8144 | is_crtc_connector_off(struct drm_crtc *crtc, struct drm_connector *connectors, | ||
8145 | int num_connectors) | ||
8146 | { | ||
8147 | int i; | ||
8148 | |||
8149 | for (i = 0; i < num_connectors; i++) | ||
8150 | if (connectors[i].encoder && | ||
8151 | connectors[i].encoder->crtc == crtc && | ||
8152 | connectors[i].dpms != DRM_MODE_DPMS_ON) | ||
8153 | return true; | ||
8154 | |||
8155 | return false; | ||
8156 | } | ||
8157 | |||
8143 | static void | 8158 | static void |
8144 | intel_set_config_compute_mode_changes(struct drm_mode_set *set, | 8159 | intel_set_config_compute_mode_changes(struct drm_mode_set *set, |
8145 | struct intel_set_config *config) | 8160 | struct intel_set_config *config) |
@@ -8147,7 +8162,11 @@ intel_set_config_compute_mode_changes(struct drm_mode_set *set, | |||
8147 | 8162 | ||
8148 | /* We should be able to check here if the fb has the same properties | 8163 | /* We should be able to check here if the fb has the same properties |
8149 | * and then just flip_or_move it */ | 8164 | * and then just flip_or_move it */ |
8150 | if (set->crtc->fb != set->fb) { | 8165 | if (set->connectors != NULL && |
8166 | is_crtc_connector_off(set->crtc, *set->connectors, | ||
8167 | set->num_connectors)) { | ||
8168 | config->mode_changed = true; | ||
8169 | } else if (set->crtc->fb != set->fb) { | ||
8151 | /* If we have no fb then treat it as a full mode set */ | 8170 | /* If we have no fb then treat it as a full mode set */ |
8152 | if (set->crtc->fb == NULL) { | 8171 | if (set->crtc->fb == NULL) { |
8153 | DRM_DEBUG_KMS("crtc has no fb, full mode set\n"); | 8172 | DRM_DEBUG_KMS("crtc has no fb, full mode set\n"); |
@@ -8157,8 +8176,9 @@ intel_set_config_compute_mode_changes(struct drm_mode_set *set, | |||
8157 | } else if (set->fb->pixel_format != | 8176 | } else if (set->fb->pixel_format != |
8158 | set->crtc->fb->pixel_format) { | 8177 | set->crtc->fb->pixel_format) { |
8159 | config->mode_changed = true; | 8178 | config->mode_changed = true; |
8160 | } else | 8179 | } else { |
8161 | config->fb_changed = true; | 8180 | config->fb_changed = true; |
8181 | } | ||
8162 | } | 8182 | } |
8163 | 8183 | ||
8164 | if (set->fb && (set->x != set->crtc->x || set->y != set->crtc->y)) | 8184 | if (set->fb && (set->x != set->crtc->x || set->y != set->crtc->y)) |
@@ -8332,11 +8352,6 @@ static int intel_crtc_set_config(struct drm_mode_set *set) | |||
8332 | 8352 | ||
8333 | ret = intel_set_mode(set->crtc, set->mode, | 8353 | ret = intel_set_mode(set->crtc, set->mode, |
8334 | set->x, set->y, set->fb); | 8354 | set->x, set->y, set->fb); |
8335 | if (ret) { | ||
8336 | DRM_ERROR("failed to set mode on [CRTC:%d], err = %d\n", | ||
8337 | set->crtc->base.id, ret); | ||
8338 | goto fail; | ||
8339 | } | ||
8340 | } else if (config->fb_changed) { | 8355 | } else if (config->fb_changed) { |
8341 | intel_crtc_wait_for_pending_flips(set->crtc); | 8356 | intel_crtc_wait_for_pending_flips(set->crtc); |
8342 | 8357 | ||
@@ -8344,18 +8359,18 @@ static int intel_crtc_set_config(struct drm_mode_set *set) | |||
8344 | set->x, set->y, set->fb); | 8359 | set->x, set->y, set->fb); |
8345 | } | 8360 | } |
8346 | 8361 | ||
8347 | intel_set_config_free(config); | 8362 | if (ret) { |
8348 | 8363 | DRM_ERROR("failed to set mode on [CRTC:%d], err = %d\n", | |
8349 | return 0; | 8364 | set->crtc->base.id, ret); |
8350 | |||
8351 | fail: | 8365 | fail: |
8352 | intel_set_config_restore_state(dev, config); | 8366 | intel_set_config_restore_state(dev, config); |
8353 | 8367 | ||
8354 | /* Try to restore the config */ | 8368 | /* Try to restore the config */ |
8355 | if (config->mode_changed && | 8369 | if (config->mode_changed && |
8356 | intel_set_mode(save_set.crtc, save_set.mode, | 8370 | intel_set_mode(save_set.crtc, save_set.mode, |
8357 | save_set.x, save_set.y, save_set.fb)) | 8371 | save_set.x, save_set.y, save_set.fb)) |
8358 | DRM_ERROR("failed to restore config after modeset failure\n"); | 8372 | DRM_ERROR("failed to restore config after modeset failure\n"); |
8373 | } | ||
8359 | 8374 | ||
8360 | out_config: | 8375 | out_config: |
8361 | intel_set_config_free(config); | 8376 | intel_set_config_free(config); |
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 3d704b706a8d..70789b1b5642 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c | |||
@@ -303,7 +303,7 @@ intel_dp_aux_wait_done(struct intel_dp *intel_dp, bool has_aux_irq) | |||
303 | #define C (((status = I915_READ_NOTRACE(ch_ctl)) & DP_AUX_CH_CTL_SEND_BUSY) == 0) | 303 | #define C (((status = I915_READ_NOTRACE(ch_ctl)) & DP_AUX_CH_CTL_SEND_BUSY) == 0) |
304 | if (has_aux_irq) | 304 | if (has_aux_irq) |
305 | done = wait_event_timeout(dev_priv->gmbus_wait_queue, C, | 305 | done = wait_event_timeout(dev_priv->gmbus_wait_queue, C, |
306 | msecs_to_jiffies(10)); | 306 | msecs_to_jiffies_timeout(10)); |
307 | else | 307 | else |
308 | done = wait_for_atomic(C, 10) == 0; | 308 | done = wait_for_atomic(C, 10) == 0; |
309 | if (!done) | 309 | if (!done) |
diff --git a/drivers/gpu/drm/i915/intel_i2c.c b/drivers/gpu/drm/i915/intel_i2c.c index 5d245031e391..639fe192997c 100644 --- a/drivers/gpu/drm/i915/intel_i2c.c +++ b/drivers/gpu/drm/i915/intel_i2c.c | |||
@@ -228,7 +228,7 @@ gmbus_wait_hw_status(struct drm_i915_private *dev_priv, | |||
228 | * need to wake up periodically and check that ourselves. */ | 228 | * need to wake up periodically and check that ourselves. */ |
229 | I915_WRITE(GMBUS4 + reg_offset, gmbus4_irq_en); | 229 | I915_WRITE(GMBUS4 + reg_offset, gmbus4_irq_en); |
230 | 230 | ||
231 | for (i = 0; i < msecs_to_jiffies(50) + 1; i++) { | 231 | for (i = 0; i < msecs_to_jiffies_timeout(50); i++) { |
232 | prepare_to_wait(&dev_priv->gmbus_wait_queue, &wait, | 232 | prepare_to_wait(&dev_priv->gmbus_wait_queue, &wait, |
233 | TASK_UNINTERRUPTIBLE); | 233 | TASK_UNINTERRUPTIBLE); |
234 | 234 | ||
@@ -263,7 +263,8 @@ gmbus_wait_idle(struct drm_i915_private *dev_priv) | |||
263 | /* Important: The hw handles only the first bit, so set only one! */ | 263 | /* Important: The hw handles only the first bit, so set only one! */ |
264 | I915_WRITE(GMBUS4 + reg_offset, GMBUS_IDLE_EN); | 264 | I915_WRITE(GMBUS4 + reg_offset, GMBUS_IDLE_EN); |
265 | 265 | ||
266 | ret = wait_event_timeout(dev_priv->gmbus_wait_queue, C, 10); | 266 | ret = wait_event_timeout(dev_priv->gmbus_wait_queue, C, |
267 | msecs_to_jiffies_timeout(10)); | ||
267 | 268 | ||
268 | I915_WRITE(GMBUS4 + reg_offset, 0); | 269 | I915_WRITE(GMBUS4 + reg_offset, 0); |
269 | 270 | ||
diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c index 7bf22d4a3d96..f17dc2ab03ec 100644 --- a/drivers/gpu/drm/nouveau/nouveau_display.c +++ b/drivers/gpu/drm/nouveau/nouveau_display.c | |||
@@ -638,17 +638,8 @@ nouveau_finish_page_flip(struct nouveau_channel *chan, | |||
638 | } | 638 | } |
639 | 639 | ||
640 | s = list_first_entry(&fctx->flip, struct nouveau_page_flip_state, head); | 640 | s = list_first_entry(&fctx->flip, struct nouveau_page_flip_state, head); |
641 | if (s->event) { | 641 | if (s->event) |
642 | struct drm_pending_vblank_event *e = s->event; | 642 | drm_send_vblank_event(dev, -1, s->event); |
643 | struct timeval now; | ||
644 | |||
645 | do_gettimeofday(&now); | ||
646 | e->event.sequence = 0; | ||
647 | e->event.tv_sec = now.tv_sec; | ||
648 | e->event.tv_usec = now.tv_usec; | ||
649 | list_add_tail(&e->base.link, &e->base.file_priv->event_list); | ||
650 | wake_up_interruptible(&e->base.file_priv->event_wait); | ||
651 | } | ||
652 | 643 | ||
653 | list_del(&s->head); | 644 | list_del(&s->head); |
654 | if (ps) | 645 | if (ps) |
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c index 9c53c25e5201..826586ffbe83 100644 --- a/drivers/gpu/drm/omapdrm/omap_drv.c +++ b/drivers/gpu/drm/omapdrm/omap_drv.c | |||
@@ -649,6 +649,9 @@ static void pdev_shutdown(struct platform_device *device) | |||
649 | 649 | ||
650 | static int pdev_probe(struct platform_device *device) | 650 | static int pdev_probe(struct platform_device *device) |
651 | { | 651 | { |
652 | if (omapdss_is_initialized() == false) | ||
653 | return -EPROBE_DEFER; | ||
654 | |||
652 | DBG("%s", device->name); | 655 | DBG("%s", device->name); |
653 | return drm_platform_init(&omap_drm_driver, device); | 656 | return drm_platform_init(&omap_drm_driver, device); |
654 | } | 657 | } |
diff --git a/drivers/gpu/drm/qxl/Kconfig b/drivers/gpu/drm/qxl/Kconfig index 2f1a57e11140..d6c12796023c 100644 --- a/drivers/gpu/drm/qxl/Kconfig +++ b/drivers/gpu/drm/qxl/Kconfig | |||
@@ -4,6 +4,7 @@ config DRM_QXL | |||
4 | select FB_SYS_FILLRECT | 4 | select FB_SYS_FILLRECT |
5 | select FB_SYS_COPYAREA | 5 | select FB_SYS_COPYAREA |
6 | select FB_SYS_IMAGEBLIT | 6 | select FB_SYS_IMAGEBLIT |
7 | select FB_DEFERRED_IO | ||
7 | select DRM_KMS_HELPER | 8 | select DRM_KMS_HELPER |
8 | select DRM_TTM | 9 | select DRM_TTM |
9 | help | 10 | help |
diff --git a/drivers/gpu/drm/qxl/qxl_ioctl.c b/drivers/gpu/drm/qxl/qxl_ioctl.c index 6db7370373ea..a4b71b25fa53 100644 --- a/drivers/gpu/drm/qxl/qxl_ioctl.c +++ b/drivers/gpu/drm/qxl/qxl_ioctl.c | |||
@@ -151,7 +151,7 @@ static int qxl_execbuffer_ioctl(struct drm_device *dev, void *data, | |||
151 | struct qxl_bo *cmd_bo; | 151 | struct qxl_bo *cmd_bo; |
152 | int release_type; | 152 | int release_type; |
153 | struct drm_qxl_command *commands = | 153 | struct drm_qxl_command *commands = |
154 | (struct drm_qxl_command *)execbuffer->commands; | 154 | (struct drm_qxl_command *)(uintptr_t)execbuffer->commands; |
155 | 155 | ||
156 | if (DRM_COPY_FROM_USER(&user_cmd, &commands[cmd_num], | 156 | if (DRM_COPY_FROM_USER(&user_cmd, &commands[cmd_num], |
157 | sizeof(user_cmd))) | 157 | sizeof(user_cmd))) |
@@ -193,7 +193,7 @@ static int qxl_execbuffer_ioctl(struct drm_device *dev, void *data, | |||
193 | 193 | ||
194 | for (i = 0 ; i < user_cmd.relocs_num; ++i) { | 194 | for (i = 0 ; i < user_cmd.relocs_num; ++i) { |
195 | if (DRM_COPY_FROM_USER(&reloc, | 195 | if (DRM_COPY_FROM_USER(&reloc, |
196 | &((struct drm_qxl_reloc *)user_cmd.relocs)[i], | 196 | &((struct drm_qxl_reloc *)(uintptr_t)user_cmd.relocs)[i], |
197 | sizeof(reloc))) { | 197 | sizeof(reloc))) { |
198 | qxl_bo_list_unreserve(&reloc_list, true); | 198 | qxl_bo_list_unreserve(&reloc_list, true); |
199 | qxl_release_unreserve(qdev, release); | 199 | qxl_release_unreserve(qdev, release); |
diff --git a/drivers/gpu/drm/qxl/qxl_kms.c b/drivers/gpu/drm/qxl/qxl_kms.c index 85127ed24cfd..e27ce2a907cf 100644 --- a/drivers/gpu/drm/qxl/qxl_kms.c +++ b/drivers/gpu/drm/qxl/qxl_kms.c | |||
@@ -128,12 +128,13 @@ int qxl_device_init(struct qxl_device *qdev, | |||
128 | 128 | ||
129 | qdev->vram_mapping = io_mapping_create_wc(qdev->vram_base, pci_resource_len(pdev, 0)); | 129 | qdev->vram_mapping = io_mapping_create_wc(qdev->vram_base, pci_resource_len(pdev, 0)); |
130 | qdev->surface_mapping = io_mapping_create_wc(qdev->surfaceram_base, qdev->surfaceram_size); | 130 | qdev->surface_mapping = io_mapping_create_wc(qdev->surfaceram_base, qdev->surfaceram_size); |
131 | DRM_DEBUG_KMS("qxl: vram %p-%p(%dM %dk), surface %p-%p(%dM %dk)\n", | 131 | DRM_DEBUG_KMS("qxl: vram %llx-%llx(%dM %dk), surface %llx-%llx(%dM %dk)\n", |
132 | (void *)qdev->vram_base, (void *)pci_resource_end(pdev, 0), | 132 | (unsigned long long)qdev->vram_base, |
133 | (unsigned long long)pci_resource_end(pdev, 0), | ||
133 | (int)pci_resource_len(pdev, 0) / 1024 / 1024, | 134 | (int)pci_resource_len(pdev, 0) / 1024 / 1024, |
134 | (int)pci_resource_len(pdev, 0) / 1024, | 135 | (int)pci_resource_len(pdev, 0) / 1024, |
135 | (void *)qdev->surfaceram_base, | 136 | (unsigned long long)qdev->surfaceram_base, |
136 | (void *)pci_resource_end(pdev, 1), | 137 | (unsigned long long)pci_resource_end(pdev, 1), |
137 | (int)qdev->surfaceram_size / 1024 / 1024, | 138 | (int)qdev->surfaceram_size / 1024 / 1024, |
138 | (int)qdev->surfaceram_size / 1024); | 139 | (int)qdev->surfaceram_size / 1024); |
139 | 140 | ||
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c index 8f9e2d31b255..8546e3b333b4 100644 --- a/drivers/gpu/drm/radeon/evergreen.c +++ b/drivers/gpu/drm/radeon/evergreen.c | |||
@@ -4999,8 +4999,7 @@ void evergreen_fini(struct radeon_device *rdev) | |||
4999 | 4999 | ||
5000 | void evergreen_pcie_gen2_enable(struct radeon_device *rdev) | 5000 | void evergreen_pcie_gen2_enable(struct radeon_device *rdev) |
5001 | { | 5001 | { |
5002 | u32 link_width_cntl, speed_cntl, mask; | 5002 | u32 link_width_cntl, speed_cntl; |
5003 | int ret; | ||
5004 | 5003 | ||
5005 | if (radeon_pcie_gen2 == 0) | 5004 | if (radeon_pcie_gen2 == 0) |
5006 | return; | 5005 | return; |
@@ -5015,11 +5014,8 @@ void evergreen_pcie_gen2_enable(struct radeon_device *rdev) | |||
5015 | if (ASIC_IS_X2(rdev)) | 5014 | if (ASIC_IS_X2(rdev)) |
5016 | return; | 5015 | return; |
5017 | 5016 | ||
5018 | ret = drm_pcie_get_speed_cap_mask(rdev->ddev, &mask); | 5017 | if ((rdev->pdev->bus->max_bus_speed != PCIE_SPEED_5_0GT) && |
5019 | if (ret != 0) | 5018 | (rdev->pdev->bus->max_bus_speed != PCIE_SPEED_8_0GT)) |
5020 | return; | ||
5021 | |||
5022 | if (!(mask & DRM_PCIE_SPEED_50)) | ||
5023 | return; | 5019 | return; |
5024 | 5020 | ||
5025 | speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL); | 5021 | speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL); |
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c index 1a08008c978b..b45e64848677 100644 --- a/drivers/gpu/drm/radeon/r600.c +++ b/drivers/gpu/drm/radeon/r600.c | |||
@@ -4631,8 +4631,6 @@ static void r600_pcie_gen2_enable(struct radeon_device *rdev) | |||
4631 | { | 4631 | { |
4632 | u32 link_width_cntl, lanes, speed_cntl, training_cntl, tmp; | 4632 | u32 link_width_cntl, lanes, speed_cntl, training_cntl, tmp; |
4633 | u16 link_cntl2; | 4633 | u16 link_cntl2; |
4634 | u32 mask; | ||
4635 | int ret; | ||
4636 | 4634 | ||
4637 | if (radeon_pcie_gen2 == 0) | 4635 | if (radeon_pcie_gen2 == 0) |
4638 | return; | 4636 | return; |
@@ -4651,11 +4649,8 @@ static void r600_pcie_gen2_enable(struct radeon_device *rdev) | |||
4651 | if (rdev->family <= CHIP_R600) | 4649 | if (rdev->family <= CHIP_R600) |
4652 | return; | 4650 | return; |
4653 | 4651 | ||
4654 | ret = drm_pcie_get_speed_cap_mask(rdev->ddev, &mask); | 4652 | if ((rdev->pdev->bus->max_bus_speed != PCIE_SPEED_5_0GT) && |
4655 | if (ret != 0) | 4653 | (rdev->pdev->bus->max_bus_speed != PCIE_SPEED_8_0GT)) |
4656 | return; | ||
4657 | |||
4658 | if (!(mask & DRM_PCIE_SPEED_50)) | ||
4659 | return; | 4654 | return; |
4660 | 4655 | ||
4661 | speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL); | 4656 | speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL); |
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c index c2c59fb1ea01..189973836cff 100644 --- a/drivers/gpu/drm/radeon/radeon_device.c +++ b/drivers/gpu/drm/radeon/radeon_device.c | |||
@@ -467,23 +467,27 @@ bool radeon_card_posted(struct radeon_device *rdev) | |||
467 | { | 467 | { |
468 | uint32_t reg; | 468 | uint32_t reg; |
469 | 469 | ||
470 | /* required for EFI mode on macbook2,1 which uses an r5xx asic */ | ||
470 | if (efi_enabled(EFI_BOOT) && | 471 | if (efi_enabled(EFI_BOOT) && |
471 | rdev->pdev->subsystem_vendor == PCI_VENDOR_ID_APPLE) | 472 | (rdev->pdev->subsystem_vendor == PCI_VENDOR_ID_APPLE) && |
473 | (rdev->family < CHIP_R600)) | ||
472 | return false; | 474 | return false; |
473 | 475 | ||
476 | if (ASIC_IS_NODCE(rdev)) | ||
477 | goto check_memsize; | ||
478 | |||
474 | /* first check CRTCs */ | 479 | /* first check CRTCs */ |
475 | if (ASIC_IS_DCE41(rdev)) { | 480 | if (ASIC_IS_DCE4(rdev)) { |
476 | reg = RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET) | | 481 | reg = RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET) | |
477 | RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET); | 482 | RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET); |
478 | if (reg & EVERGREEN_CRTC_MASTER_EN) | 483 | if (rdev->num_crtc >= 4) { |
479 | return true; | 484 | reg |= RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET) | |
480 | } else if (ASIC_IS_DCE4(rdev)) { | 485 | RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET); |
481 | reg = RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET) | | 486 | } |
482 | RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET) | | 487 | if (rdev->num_crtc >= 6) { |
483 | RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET) | | 488 | reg |= RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET) | |
484 | RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET) | | 489 | RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET); |
485 | RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET) | | 490 | } |
486 | RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET); | ||
487 | if (reg & EVERGREEN_CRTC_MASTER_EN) | 491 | if (reg & EVERGREEN_CRTC_MASTER_EN) |
488 | return true; | 492 | return true; |
489 | } else if (ASIC_IS_AVIVO(rdev)) { | 493 | } else if (ASIC_IS_AVIVO(rdev)) { |
@@ -500,6 +504,7 @@ bool radeon_card_posted(struct radeon_device *rdev) | |||
500 | } | 504 | } |
501 | } | 505 | } |
502 | 506 | ||
507 | check_memsize: | ||
503 | /* then check MEM_SIZE, in case the crtcs are off */ | 508 | /* then check MEM_SIZE, in case the crtcs are off */ |
504 | if (rdev->family >= CHIP_R600) | 509 | if (rdev->family >= CHIP_R600) |
505 | reg = RREG32(R600_CONFIG_MEMSIZE); | 510 | reg = RREG32(R600_CONFIG_MEMSIZE); |
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c index e38fd559f1ab..eb18bb7af1cc 100644 --- a/drivers/gpu/drm/radeon/radeon_display.c +++ b/drivers/gpu/drm/radeon/radeon_display.c | |||
@@ -271,8 +271,6 @@ void radeon_crtc_handle_flip(struct radeon_device *rdev, int crtc_id) | |||
271 | { | 271 | { |
272 | struct radeon_crtc *radeon_crtc = rdev->mode_info.crtcs[crtc_id]; | 272 | struct radeon_crtc *radeon_crtc = rdev->mode_info.crtcs[crtc_id]; |
273 | struct radeon_unpin_work *work; | 273 | struct radeon_unpin_work *work; |
274 | struct drm_pending_vblank_event *e; | ||
275 | struct timeval now; | ||
276 | unsigned long flags; | 274 | unsigned long flags; |
277 | u32 update_pending; | 275 | u32 update_pending; |
278 | int vpos, hpos; | 276 | int vpos, hpos; |
@@ -328,14 +326,9 @@ void radeon_crtc_handle_flip(struct radeon_device *rdev, int crtc_id) | |||
328 | radeon_crtc->unpin_work = NULL; | 326 | radeon_crtc->unpin_work = NULL; |
329 | 327 | ||
330 | /* wakeup userspace */ | 328 | /* wakeup userspace */ |
331 | if (work->event) { | 329 | if (work->event) |
332 | e = work->event; | 330 | drm_send_vblank_event(rdev->ddev, crtc_id, work->event); |
333 | e->event.sequence = drm_vblank_count_and_time(rdev->ddev, crtc_id, &now); | 331 | |
334 | e->event.tv_sec = now.tv_sec; | ||
335 | e->event.tv_usec = now.tv_usec; | ||
336 | list_add_tail(&e->base.link, &e->base.file_priv->event_list); | ||
337 | wake_up_interruptible(&e->base.file_priv->event_wait); | ||
338 | } | ||
339 | spin_unlock_irqrestore(&rdev->ddev->event_lock, flags); | 332 | spin_unlock_irqrestore(&rdev->ddev->event_lock, flags); |
340 | 333 | ||
341 | drm_vblank_put(rdev->ddev, radeon_crtc->crtc_id); | 334 | drm_vblank_put(rdev->ddev, radeon_crtc->crtc_id); |
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c index 83f612a9500b..08aef24afe40 100644 --- a/drivers/gpu/drm/radeon/rv770.c +++ b/drivers/gpu/drm/radeon/rv770.c | |||
@@ -862,10 +862,8 @@ int rv770_uvd_resume(struct radeon_device *rdev) | |||
862 | chip_id = 0x0100000b; | 862 | chip_id = 0x0100000b; |
863 | break; | 863 | break; |
864 | case CHIP_SUMO: | 864 | case CHIP_SUMO: |
865 | chip_id = 0x0100000c; | ||
866 | break; | ||
867 | case CHIP_SUMO2: | 865 | case CHIP_SUMO2: |
868 | chip_id = 0x0100000d; | 866 | chip_id = 0x0100000c; |
869 | break; | 867 | break; |
870 | case CHIP_PALM: | 868 | case CHIP_PALM: |
871 | chip_id = 0x0100000e; | 869 | chip_id = 0x0100000e; |
@@ -2113,8 +2111,6 @@ static void rv770_pcie_gen2_enable(struct radeon_device *rdev) | |||
2113 | { | 2111 | { |
2114 | u32 link_width_cntl, lanes, speed_cntl, tmp; | 2112 | u32 link_width_cntl, lanes, speed_cntl, tmp; |
2115 | u16 link_cntl2; | 2113 | u16 link_cntl2; |
2116 | u32 mask; | ||
2117 | int ret; | ||
2118 | 2114 | ||
2119 | if (radeon_pcie_gen2 == 0) | 2115 | if (radeon_pcie_gen2 == 0) |
2120 | return; | 2116 | return; |
@@ -2129,11 +2125,8 @@ static void rv770_pcie_gen2_enable(struct radeon_device *rdev) | |||
2129 | if (ASIC_IS_X2(rdev)) | 2125 | if (ASIC_IS_X2(rdev)) |
2130 | return; | 2126 | return; |
2131 | 2127 | ||
2132 | ret = drm_pcie_get_speed_cap_mask(rdev->ddev, &mask); | 2128 | if ((rdev->pdev->bus->max_bus_speed != PCIE_SPEED_5_0GT) && |
2133 | if (ret != 0) | 2129 | (rdev->pdev->bus->max_bus_speed != PCIE_SPEED_8_0GT)) |
2134 | return; | ||
2135 | |||
2136 | if (!(mask & DRM_PCIE_SPEED_50)) | ||
2137 | return; | 2130 | return; |
2138 | 2131 | ||
2139 | DRM_INFO("enabling PCIE gen 2 link speeds, disable with radeon.pcie_gen2=0\n"); | 2132 | DRM_INFO("enabling PCIE gen 2 link speeds, disable with radeon.pcie_gen2=0\n"); |
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c index 5ffade69af25..d1ba9d88f311 100644 --- a/drivers/gpu/drm/radeon/si.c +++ b/drivers/gpu/drm/radeon/si.c | |||
@@ -2616,7 +2616,7 @@ static void si_gpu_init(struct radeon_device *rdev) | |||
2616 | default: | 2616 | default: |
2617 | rdev->config.si.max_shader_engines = 1; | 2617 | rdev->config.si.max_shader_engines = 1; |
2618 | rdev->config.si.max_tile_pipes = 4; | 2618 | rdev->config.si.max_tile_pipes = 4; |
2619 | rdev->config.si.max_cu_per_sh = 2; | 2619 | rdev->config.si.max_cu_per_sh = 5; |
2620 | rdev->config.si.max_sh_per_se = 2; | 2620 | rdev->config.si.max_sh_per_se = 2; |
2621 | rdev->config.si.max_backends_per_se = 4; | 2621 | rdev->config.si.max_backends_per_se = 4; |
2622 | rdev->config.si.max_texture_channel_caches = 4; | 2622 | rdev->config.si.max_texture_channel_caches = 4; |
diff --git a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c index 7dff49ed66e7..99e2034e49cc 100644 --- a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c +++ b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c | |||
@@ -451,27 +451,16 @@ void shmob_drm_crtc_finish_page_flip(struct shmob_drm_crtc *scrtc) | |||
451 | { | 451 | { |
452 | struct drm_pending_vblank_event *event; | 452 | struct drm_pending_vblank_event *event; |
453 | struct drm_device *dev = scrtc->crtc.dev; | 453 | struct drm_device *dev = scrtc->crtc.dev; |
454 | struct timeval vblanktime; | ||
455 | unsigned long flags; | 454 | unsigned long flags; |
456 | 455 | ||
457 | spin_lock_irqsave(&dev->event_lock, flags); | 456 | spin_lock_irqsave(&dev->event_lock, flags); |
458 | event = scrtc->event; | 457 | event = scrtc->event; |
459 | scrtc->event = NULL; | 458 | scrtc->event = NULL; |
459 | if (event) { | ||
460 | drm_send_vblank_event(dev, 0, event); | ||
461 | drm_vblank_put(dev, 0); | ||
462 | } | ||
460 | spin_unlock_irqrestore(&dev->event_lock, flags); | 463 | spin_unlock_irqrestore(&dev->event_lock, flags); |
461 | |||
462 | if (event == NULL) | ||
463 | return; | ||
464 | |||
465 | event->event.sequence = drm_vblank_count_and_time(dev, 0, &vblanktime); | ||
466 | event->event.tv_sec = vblanktime.tv_sec; | ||
467 | event->event.tv_usec = vblanktime.tv_usec; | ||
468 | |||
469 | spin_lock_irqsave(&dev->event_lock, flags); | ||
470 | list_add_tail(&event->base.link, &event->base.file_priv->event_list); | ||
471 | wake_up_interruptible(&event->base.file_priv->event_wait); | ||
472 | spin_unlock_irqrestore(&dev->event_lock, flags); | ||
473 | |||
474 | drm_vblank_put(dev, 0); | ||
475 | } | 464 | } |
476 | 465 | ||
477 | static int shmob_drm_crtc_page_flip(struct drm_crtc *crtc, | 466 | static int shmob_drm_crtc_page_flip(struct drm_crtc *crtc, |
diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c index b08ca7a9f76b..3f3f0416fbdd 100644 --- a/drivers/infiniband/ulp/srpt/ib_srpt.c +++ b/drivers/infiniband/ulp/srpt/ib_srpt.c | |||
@@ -2227,6 +2227,27 @@ static void srpt_close_ch(struct srpt_rdma_ch *ch) | |||
2227 | } | 2227 | } |
2228 | 2228 | ||
2229 | /** | 2229 | /** |
2230 | * srpt_shutdown_session() - Whether or not a session may be shut down. | ||
2231 | */ | ||
2232 | static int srpt_shutdown_session(struct se_session *se_sess) | ||
2233 | { | ||
2234 | struct srpt_rdma_ch *ch = se_sess->fabric_sess_ptr; | ||
2235 | unsigned long flags; | ||
2236 | |||
2237 | spin_lock_irqsave(&ch->spinlock, flags); | ||
2238 | if (ch->in_shutdown) { | ||
2239 | spin_unlock_irqrestore(&ch->spinlock, flags); | ||
2240 | return true; | ||
2241 | } | ||
2242 | |||
2243 | ch->in_shutdown = true; | ||
2244 | target_sess_cmd_list_set_waiting(se_sess); | ||
2245 | spin_unlock_irqrestore(&ch->spinlock, flags); | ||
2246 | |||
2247 | return true; | ||
2248 | } | ||
2249 | |||
2250 | /** | ||
2230 | * srpt_drain_channel() - Drain a channel by resetting the IB queue pair. | 2251 | * srpt_drain_channel() - Drain a channel by resetting the IB queue pair. |
2231 | * @cm_id: Pointer to the CM ID of the channel to be drained. | 2252 | * @cm_id: Pointer to the CM ID of the channel to be drained. |
2232 | * | 2253 | * |
@@ -2264,6 +2285,9 @@ static void srpt_drain_channel(struct ib_cm_id *cm_id) | |||
2264 | spin_unlock_irq(&sdev->spinlock); | 2285 | spin_unlock_irq(&sdev->spinlock); |
2265 | 2286 | ||
2266 | if (do_reset) { | 2287 | if (do_reset) { |
2288 | if (ch->sess) | ||
2289 | srpt_shutdown_session(ch->sess); | ||
2290 | |||
2267 | ret = srpt_ch_qp_err(ch); | 2291 | ret = srpt_ch_qp_err(ch); |
2268 | if (ret < 0) | 2292 | if (ret < 0) |
2269 | printk(KERN_ERR "Setting queue pair in error state" | 2293 | printk(KERN_ERR "Setting queue pair in error state" |
@@ -2328,7 +2352,7 @@ static void srpt_release_channel_work(struct work_struct *w) | |||
2328 | se_sess = ch->sess; | 2352 | se_sess = ch->sess; |
2329 | BUG_ON(!se_sess); | 2353 | BUG_ON(!se_sess); |
2330 | 2354 | ||
2331 | target_wait_for_sess_cmds(se_sess, 0); | 2355 | target_wait_for_sess_cmds(se_sess); |
2332 | 2356 | ||
2333 | transport_deregister_session_configfs(se_sess); | 2357 | transport_deregister_session_configfs(se_sess); |
2334 | transport_deregister_session(se_sess); | 2358 | transport_deregister_session(se_sess); |
@@ -3467,14 +3491,6 @@ static void srpt_release_cmd(struct se_cmd *se_cmd) | |||
3467 | } | 3491 | } |
3468 | 3492 | ||
3469 | /** | 3493 | /** |
3470 | * srpt_shutdown_session() - Whether or not a session may be shut down. | ||
3471 | */ | ||
3472 | static int srpt_shutdown_session(struct se_session *se_sess) | ||
3473 | { | ||
3474 | return true; | ||
3475 | } | ||
3476 | |||
3477 | /** | ||
3478 | * srpt_close_session() - Forcibly close a session. | 3494 | * srpt_close_session() - Forcibly close a session. |
3479 | * | 3495 | * |
3480 | * Callback function invoked by the TCM core to clean up sessions associated | 3496 | * Callback function invoked by the TCM core to clean up sessions associated |
diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.h b/drivers/infiniband/ulp/srpt/ib_srpt.h index 4caf55cda7b1..3dae156905de 100644 --- a/drivers/infiniband/ulp/srpt/ib_srpt.h +++ b/drivers/infiniband/ulp/srpt/ib_srpt.h | |||
@@ -325,6 +325,7 @@ struct srpt_rdma_ch { | |||
325 | u8 sess_name[36]; | 325 | u8 sess_name[36]; |
326 | struct work_struct release_work; | 326 | struct work_struct release_work; |
327 | struct completion *release_done; | 327 | struct completion *release_done; |
328 | bool in_shutdown; | ||
328 | }; | 329 | }; |
329 | 330 | ||
330 | /** | 331 | /** |
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c index 2f78538e09d0..b2420ae19e14 100644 --- a/drivers/input/mouse/synaptics.c +++ b/drivers/input/mouse/synaptics.c | |||
@@ -1379,6 +1379,7 @@ static int synaptics_reconnect(struct psmouse *psmouse) | |||
1379 | { | 1379 | { |
1380 | struct synaptics_data *priv = psmouse->private; | 1380 | struct synaptics_data *priv = psmouse->private; |
1381 | struct synaptics_data old_priv = *priv; | 1381 | struct synaptics_data old_priv = *priv; |
1382 | unsigned char param[2]; | ||
1382 | int retry = 0; | 1383 | int retry = 0; |
1383 | int error; | 1384 | int error; |
1384 | 1385 | ||
@@ -1394,6 +1395,7 @@ static int synaptics_reconnect(struct psmouse *psmouse) | |||
1394 | */ | 1395 | */ |
1395 | ssleep(1); | 1396 | ssleep(1); |
1396 | } | 1397 | } |
1398 | ps2_command(&psmouse->ps2dev, param, PSMOUSE_CMD_GETID); | ||
1397 | error = synaptics_detect(psmouse, 0); | 1399 | error = synaptics_detect(psmouse, 0); |
1398 | } while (error && ++retry < 3); | 1400 | } while (error && ++retry < 3); |
1399 | 1401 | ||
diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c index 5c68e4486845..518282da6d85 100644 --- a/drivers/input/tablet/wacom_wac.c +++ b/drivers/input/tablet/wacom_wac.c | |||
@@ -1966,7 +1966,8 @@ static const struct wacom_features wacom_features_0xF4 = | |||
1966 | 63, WACOM_24HD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES }; | 1966 | 63, WACOM_24HD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES }; |
1967 | static const struct wacom_features wacom_features_0xF8 = | 1967 | static const struct wacom_features wacom_features_0xF8 = |
1968 | { "Wacom Cintiq 24HD touch", WACOM_PKGLEN_INTUOS, 104480, 65600, 2047, /* Pen */ | 1968 | { "Wacom Cintiq 24HD touch", WACOM_PKGLEN_INTUOS, 104480, 65600, 2047, /* Pen */ |
1969 | 63, WACOM_24HD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, .oVid = USB_VENDOR_ID_WACOM, .oPid = 0xf6 }; | 1969 | 63, WACOM_24HD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, |
1970 | .oVid = USB_VENDOR_ID_WACOM, .oPid = 0xf6 }; | ||
1970 | static const struct wacom_features wacom_features_0xF6 = | 1971 | static const struct wacom_features wacom_features_0xF6 = |
1971 | { "Wacom Cintiq 24HD touch", .type = WACOM_24HDT, /* Touch */ | 1972 | { "Wacom Cintiq 24HD touch", .type = WACOM_24HDT, /* Touch */ |
1972 | .oVid = USB_VENDOR_ID_WACOM, .oPid = 0xf8, .touch_max = 10 }; | 1973 | .oVid = USB_VENDOR_ID_WACOM, .oPid = 0xf8, .touch_max = 10 }; |
@@ -2009,7 +2010,8 @@ static const struct wacom_features wacom_features_0xFA = | |||
2009 | 63, WACOM_22HD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES }; | 2010 | 63, WACOM_22HD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES }; |
2010 | static const struct wacom_features wacom_features_0x5B = | 2011 | static const struct wacom_features wacom_features_0x5B = |
2011 | { "Wacom Cintiq 22HDT", WACOM_PKGLEN_INTUOS, 95840, 54260, 2047, | 2012 | { "Wacom Cintiq 22HDT", WACOM_PKGLEN_INTUOS, 95840, 54260, 2047, |
2012 | 63, WACOM_24HD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x5e }; | 2013 | 63, WACOM_22HD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, |
2014 | .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x5e }; | ||
2013 | static const struct wacom_features wacom_features_0x5E = | 2015 | static const struct wacom_features wacom_features_0x5E = |
2014 | { "Wacom Cintiq 22HDT", .type = WACOM_24HDT, | 2016 | { "Wacom Cintiq 22HDT", .type = WACOM_24HDT, |
2015 | .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x5b, .touch_max = 10 }; | 2017 | .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x5b, .touch_max = 10 }; |
@@ -2042,7 +2044,7 @@ static const struct wacom_features wacom_features_0xE5 = | |||
2042 | static const struct wacom_features wacom_features_0xE6 = | 2044 | static const struct wacom_features wacom_features_0xE6 = |
2043 | { "Wacom ISDv4 E6", WACOM_PKGLEN_TPC2FG, 27760, 15694, 255, | 2045 | { "Wacom ISDv4 E6", WACOM_PKGLEN_TPC2FG, 27760, 15694, 255, |
2044 | 0, TABLETPC2FG, WACOM_INTUOS_RES, WACOM_INTUOS_RES, | 2046 | 0, TABLETPC2FG, WACOM_INTUOS_RES, WACOM_INTUOS_RES, |
2045 | .touch_max = 2 }; | 2047 | .touch_max = 2 }; |
2046 | static const struct wacom_features wacom_features_0xEC = | 2048 | static const struct wacom_features wacom_features_0xEC = |
2047 | { "Wacom ISDv4 EC", WACOM_PKGLEN_GRAPHIRE, 25710, 14500, 255, | 2049 | { "Wacom ISDv4 EC", WACOM_PKGLEN_GRAPHIRE, 25710, 14500, 255, |
2048 | 0, TABLETPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES }; | 2050 | 0, TABLETPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES }; |
diff --git a/drivers/leds/leds-ot200.c b/drivers/leds/leds-ot200.c index ee14662ed5ce..98cae529373f 100644 --- a/drivers/leds/leds-ot200.c +++ b/drivers/leds/leds-ot200.c | |||
@@ -47,37 +47,37 @@ static struct ot200_led leds[] = { | |||
47 | { | 47 | { |
48 | .name = "led_1", | 48 | .name = "led_1", |
49 | .port = 0x49, | 49 | .port = 0x49, |
50 | .mask = BIT(7), | 50 | .mask = BIT(6), |
51 | }, | 51 | }, |
52 | { | 52 | { |
53 | .name = "led_2", | 53 | .name = "led_2", |
54 | .port = 0x49, | 54 | .port = 0x49, |
55 | .mask = BIT(6), | 55 | .mask = BIT(5), |
56 | }, | 56 | }, |
57 | { | 57 | { |
58 | .name = "led_3", | 58 | .name = "led_3", |
59 | .port = 0x49, | 59 | .port = 0x49, |
60 | .mask = BIT(5), | 60 | .mask = BIT(4), |
61 | }, | 61 | }, |
62 | { | 62 | { |
63 | .name = "led_4", | 63 | .name = "led_4", |
64 | .port = 0x49, | 64 | .port = 0x49, |
65 | .mask = BIT(4), | 65 | .mask = BIT(3), |
66 | }, | 66 | }, |
67 | { | 67 | { |
68 | .name = "led_5", | 68 | .name = "led_5", |
69 | .port = 0x49, | 69 | .port = 0x49, |
70 | .mask = BIT(3), | 70 | .mask = BIT(2), |
71 | }, | 71 | }, |
72 | { | 72 | { |
73 | .name = "led_6", | 73 | .name = "led_6", |
74 | .port = 0x49, | 74 | .port = 0x49, |
75 | .mask = BIT(2), | 75 | .mask = BIT(1), |
76 | }, | 76 | }, |
77 | { | 77 | { |
78 | .name = "led_7", | 78 | .name = "led_7", |
79 | .port = 0x49, | 79 | .port = 0x49, |
80 | .mask = BIT(1), | 80 | .mask = BIT(0), |
81 | } | 81 | } |
82 | }; | 82 | }; |
83 | 83 | ||
diff --git a/drivers/media/pci/zoran/zoran.h b/drivers/media/pci/zoran/zoran.h index ca2754a3cd63..5e040085c2ff 100644 --- a/drivers/media/pci/zoran/zoran.h +++ b/drivers/media/pci/zoran/zoran.h | |||
@@ -176,7 +176,7 @@ struct zoran_fh; | |||
176 | 176 | ||
177 | struct zoran_mapping { | 177 | struct zoran_mapping { |
178 | struct zoran_fh *fh; | 178 | struct zoran_fh *fh; |
179 | int count; | 179 | atomic_t count; |
180 | }; | 180 | }; |
181 | 181 | ||
182 | struct zoran_buffer { | 182 | struct zoran_buffer { |
diff --git a/drivers/media/pci/zoran/zoran_driver.c b/drivers/media/pci/zoran/zoran_driver.c index 1168a84a737d..d133c30c3fdc 100644 --- a/drivers/media/pci/zoran/zoran_driver.c +++ b/drivers/media/pci/zoran/zoran_driver.c | |||
@@ -2803,8 +2803,7 @@ static void | |||
2803 | zoran_vm_open (struct vm_area_struct *vma) | 2803 | zoran_vm_open (struct vm_area_struct *vma) |
2804 | { | 2804 | { |
2805 | struct zoran_mapping *map = vma->vm_private_data; | 2805 | struct zoran_mapping *map = vma->vm_private_data; |
2806 | 2806 | atomic_inc(&map->count); | |
2807 | map->count++; | ||
2808 | } | 2807 | } |
2809 | 2808 | ||
2810 | static void | 2809 | static void |
@@ -2815,7 +2814,7 @@ zoran_vm_close (struct vm_area_struct *vma) | |||
2815 | struct zoran *zr = fh->zr; | 2814 | struct zoran *zr = fh->zr; |
2816 | int i; | 2815 | int i; |
2817 | 2816 | ||
2818 | if (--map->count > 0) | 2817 | if (!atomic_dec_and_mutex_lock(&map->count, &zr->resource_lock)) |
2819 | return; | 2818 | return; |
2820 | 2819 | ||
2821 | dprintk(3, KERN_INFO "%s: %s - munmap(%s)\n", ZR_DEVNAME(zr), | 2820 | dprintk(3, KERN_INFO "%s: %s - munmap(%s)\n", ZR_DEVNAME(zr), |
@@ -2828,14 +2827,16 @@ zoran_vm_close (struct vm_area_struct *vma) | |||
2828 | kfree(map); | 2827 | kfree(map); |
2829 | 2828 | ||
2830 | /* Any buffers still mapped? */ | 2829 | /* Any buffers still mapped? */ |
2831 | for (i = 0; i < fh->buffers.num_buffers; i++) | 2830 | for (i = 0; i < fh->buffers.num_buffers; i++) { |
2832 | if (fh->buffers.buffer[i].map) | 2831 | if (fh->buffers.buffer[i].map) { |
2832 | mutex_unlock(&zr->resource_lock); | ||
2833 | return; | 2833 | return; |
2834 | } | ||
2835 | } | ||
2834 | 2836 | ||
2835 | dprintk(3, KERN_INFO "%s: %s - free %s buffers\n", ZR_DEVNAME(zr), | 2837 | dprintk(3, KERN_INFO "%s: %s - free %s buffers\n", ZR_DEVNAME(zr), |
2836 | __func__, mode_name(fh->map_mode)); | 2838 | __func__, mode_name(fh->map_mode)); |
2837 | 2839 | ||
2838 | mutex_lock(&zr->resource_lock); | ||
2839 | 2840 | ||
2840 | if (fh->map_mode == ZORAN_MAP_MODE_RAW) { | 2841 | if (fh->map_mode == ZORAN_MAP_MODE_RAW) { |
2841 | if (fh->buffers.active != ZORAN_FREE) { | 2842 | if (fh->buffers.active != ZORAN_FREE) { |
@@ -2939,7 +2940,7 @@ zoran_mmap (struct file *file, | |||
2939 | goto mmap_unlock_and_return; | 2940 | goto mmap_unlock_and_return; |
2940 | } | 2941 | } |
2941 | map->fh = fh; | 2942 | map->fh = fh; |
2942 | map->count = 1; | 2943 | atomic_set(&map->count, 1); |
2943 | 2944 | ||
2944 | vma->vm_ops = &zoran_vm_ops; | 2945 | vma->vm_ops = &zoran_vm_ops; |
2945 | vma->vm_flags |= VM_DONTEXPAND; | 2946 | vma->vm_flags |= VM_DONTEXPAND; |
diff --git a/drivers/media/platform/omap/omap_vout.c b/drivers/media/platform/omap/omap_vout.c index 477268a2415f..d338b19da544 100644 --- a/drivers/media/platform/omap/omap_vout.c +++ b/drivers/media/platform/omap/omap_vout.c | |||
@@ -2150,6 +2150,9 @@ static int __init omap_vout_probe(struct platform_device *pdev) | |||
2150 | struct omap_dss_device *def_display; | 2150 | struct omap_dss_device *def_display; |
2151 | struct omap2video_device *vid_dev = NULL; | 2151 | struct omap2video_device *vid_dev = NULL; |
2152 | 2152 | ||
2153 | if (omapdss_is_initialized() == false) | ||
2154 | return -EPROBE_DEFER; | ||
2155 | |||
2153 | ret = omapdss_compat_init(); | 2156 | ret = omapdss_compat_init(); |
2154 | if (ret) { | 2157 | if (ret) { |
2155 | dev_err(&pdev->dev, "failed to init dss\n"); | 2158 | dev_err(&pdev->dev, "failed to init dss\n"); |
diff --git a/drivers/mmc/host/atmel-mci.c b/drivers/mmc/host/atmel-mci.c index e75774f72606..aca59d93d5a9 100644 --- a/drivers/mmc/host/atmel-mci.c +++ b/drivers/mmc/host/atmel-mci.c | |||
@@ -2230,10 +2230,15 @@ static void __exit atmci_cleanup_slot(struct atmel_mci_slot *slot, | |||
2230 | mmc_free_host(slot->mmc); | 2230 | mmc_free_host(slot->mmc); |
2231 | } | 2231 | } |
2232 | 2232 | ||
2233 | static bool atmci_filter(struct dma_chan *chan, void *slave) | 2233 | static bool atmci_filter(struct dma_chan *chan, void *pdata) |
2234 | { | 2234 | { |
2235 | struct mci_dma_data *sl = slave; | 2235 | struct mci_platform_data *sl_pdata = pdata; |
2236 | struct mci_dma_data *sl; | ||
2236 | 2237 | ||
2238 | if (!sl_pdata) | ||
2239 | return false; | ||
2240 | |||
2241 | sl = sl_pdata->dma_slave; | ||
2237 | if (sl && find_slave_dev(sl) == chan->device->dev) { | 2242 | if (sl && find_slave_dev(sl) == chan->device->dev) { |
2238 | chan->private = slave_data_ptr(sl); | 2243 | chan->private = slave_data_ptr(sl); |
2239 | return true; | 2244 | return true; |
@@ -2245,24 +2250,18 @@ static bool atmci_filter(struct dma_chan *chan, void *slave) | |||
2245 | static bool atmci_configure_dma(struct atmel_mci *host) | 2250 | static bool atmci_configure_dma(struct atmel_mci *host) |
2246 | { | 2251 | { |
2247 | struct mci_platform_data *pdata; | 2252 | struct mci_platform_data *pdata; |
2253 | dma_cap_mask_t mask; | ||
2248 | 2254 | ||
2249 | if (host == NULL) | 2255 | if (host == NULL) |
2250 | return false; | 2256 | return false; |
2251 | 2257 | ||
2252 | pdata = host->pdev->dev.platform_data; | 2258 | pdata = host->pdev->dev.platform_data; |
2253 | 2259 | ||
2254 | if (!pdata) | 2260 | dma_cap_zero(mask); |
2255 | return false; | 2261 | dma_cap_set(DMA_SLAVE, mask); |
2256 | 2262 | ||
2257 | if (pdata->dma_slave && find_slave_dev(pdata->dma_slave)) { | 2263 | host->dma.chan = dma_request_slave_channel_compat(mask, atmci_filter, pdata, |
2258 | dma_cap_mask_t mask; | 2264 | &host->pdev->dev, "rxtx"); |
2259 | |||
2260 | /* Try to grab a DMA channel */ | ||
2261 | dma_cap_zero(mask); | ||
2262 | dma_cap_set(DMA_SLAVE, mask); | ||
2263 | host->dma.chan = | ||
2264 | dma_request_channel(mask, atmci_filter, pdata->dma_slave); | ||
2265 | } | ||
2266 | if (!host->dma.chan) { | 2265 | if (!host->dma.chan) { |
2267 | dev_warn(&host->pdev->dev, "no DMA channel available\n"); | 2266 | dev_warn(&host->pdev->dev, "no DMA channel available\n"); |
2268 | return false; | 2267 | return false; |
diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c index 6e44025acf01..eccedc7d06a4 100644 --- a/drivers/mmc/host/omap_hsmmc.c +++ b/drivers/mmc/host/omap_hsmmc.c | |||
@@ -161,6 +161,7 @@ struct omap_hsmmc_host { | |||
161 | */ | 161 | */ |
162 | struct regulator *vcc; | 162 | struct regulator *vcc; |
163 | struct regulator *vcc_aux; | 163 | struct regulator *vcc_aux; |
164 | int pbias_disable; | ||
164 | void __iomem *base; | 165 | void __iomem *base; |
165 | resource_size_t mapbase; | 166 | resource_size_t mapbase; |
166 | spinlock_t irq_lock; /* Prevent races with irq handler */ | 167 | spinlock_t irq_lock; /* Prevent races with irq handler */ |
@@ -255,11 +256,11 @@ static int omap_hsmmc_set_power(struct device *dev, int slot, int power_on, | |||
255 | if (!host->vcc) | 256 | if (!host->vcc) |
256 | return 0; | 257 | return 0; |
257 | /* | 258 | /* |
258 | * With DT, never turn OFF the regulator. This is because | 259 | * With DT, never turn OFF the regulator for MMC1. This is because |
259 | * the pbias cell programming support is still missing when | 260 | * the pbias cell programming support is still missing when |
260 | * booting with Device tree | 261 | * booting with Device tree |
261 | */ | 262 | */ |
262 | if (dev->of_node && !vdd) | 263 | if (host->pbias_disable && !vdd) |
263 | return 0; | 264 | return 0; |
264 | 265 | ||
265 | if (mmc_slot(host).before_set_reg) | 266 | if (mmc_slot(host).before_set_reg) |
@@ -1520,10 +1521,10 @@ static void omap_hsmmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) | |||
1520 | (ios->vdd == DUAL_VOLT_OCR_BIT) && | 1521 | (ios->vdd == DUAL_VOLT_OCR_BIT) && |
1521 | /* | 1522 | /* |
1522 | * With pbias cell programming missing, this | 1523 | * With pbias cell programming missing, this |
1523 | * can't be allowed when booting with device | 1524 | * can't be allowed on MMC1 when booting with device |
1524 | * tree. | 1525 | * tree. |
1525 | */ | 1526 | */ |
1526 | !host->dev->of_node) { | 1527 | !host->pbias_disable) { |
1527 | /* | 1528 | /* |
1528 | * The mmc_select_voltage fn of the core does | 1529 | * The mmc_select_voltage fn of the core does |
1529 | * not seem to set the power_mode to | 1530 | * not seem to set the power_mode to |
@@ -1871,6 +1872,10 @@ static int omap_hsmmc_probe(struct platform_device *pdev) | |||
1871 | 1872 | ||
1872 | omap_hsmmc_context_save(host); | 1873 | omap_hsmmc_context_save(host); |
1873 | 1874 | ||
1875 | /* This can be removed once we support PBIAS with DT */ | ||
1876 | if (host->dev->of_node && host->mapbase == 0x4809c000) | ||
1877 | host->pbias_disable = 1; | ||
1878 | |||
1874 | host->dbclk = clk_get(&pdev->dev, "mmchsdb_fck"); | 1879 | host->dbclk = clk_get(&pdev->dev, "mmchsdb_fck"); |
1875 | /* | 1880 | /* |
1876 | * MMC can still work without debounce clock. | 1881 | * MMC can still work without debounce clock. |
@@ -1906,33 +1911,41 @@ static int omap_hsmmc_probe(struct platform_device *pdev) | |||
1906 | 1911 | ||
1907 | omap_hsmmc_conf_bus_power(host); | 1912 | omap_hsmmc_conf_bus_power(host); |
1908 | 1913 | ||
1909 | res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "tx"); | 1914 | if (!pdev->dev.of_node) { |
1910 | if (!res) { | 1915 | res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "tx"); |
1911 | dev_err(mmc_dev(host->mmc), "cannot get DMA TX channel\n"); | 1916 | if (!res) { |
1912 | ret = -ENXIO; | 1917 | dev_err(mmc_dev(host->mmc), "cannot get DMA TX channel\n"); |
1913 | goto err_irq; | 1918 | ret = -ENXIO; |
1914 | } | 1919 | goto err_irq; |
1915 | tx_req = res->start; | 1920 | } |
1921 | tx_req = res->start; | ||
1916 | 1922 | ||
1917 | res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "rx"); | 1923 | res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "rx"); |
1918 | if (!res) { | 1924 | if (!res) { |
1919 | dev_err(mmc_dev(host->mmc), "cannot get DMA RX channel\n"); | 1925 | dev_err(mmc_dev(host->mmc), "cannot get DMA RX channel\n"); |
1920 | ret = -ENXIO; | 1926 | ret = -ENXIO; |
1921 | goto err_irq; | 1927 | goto err_irq; |
1928 | } | ||
1929 | rx_req = res->start; | ||
1922 | } | 1930 | } |
1923 | rx_req = res->start; | ||
1924 | 1931 | ||
1925 | dma_cap_zero(mask); | 1932 | dma_cap_zero(mask); |
1926 | dma_cap_set(DMA_SLAVE, mask); | 1933 | dma_cap_set(DMA_SLAVE, mask); |
1927 | 1934 | ||
1928 | host->rx_chan = dma_request_channel(mask, omap_dma_filter_fn, &rx_req); | 1935 | host->rx_chan = |
1936 | dma_request_slave_channel_compat(mask, omap_dma_filter_fn, | ||
1937 | &rx_req, &pdev->dev, "rx"); | ||
1938 | |||
1929 | if (!host->rx_chan) { | 1939 | if (!host->rx_chan) { |
1930 | dev_err(mmc_dev(host->mmc), "unable to obtain RX DMA engine channel %u\n", rx_req); | 1940 | dev_err(mmc_dev(host->mmc), "unable to obtain RX DMA engine channel %u\n", rx_req); |
1931 | ret = -ENXIO; | 1941 | ret = -ENXIO; |
1932 | goto err_irq; | 1942 | goto err_irq; |
1933 | } | 1943 | } |
1934 | 1944 | ||
1935 | host->tx_chan = dma_request_channel(mask, omap_dma_filter_fn, &tx_req); | 1945 | host->tx_chan = |
1946 | dma_request_slave_channel_compat(mask, omap_dma_filter_fn, | ||
1947 | &tx_req, &pdev->dev, "tx"); | ||
1948 | |||
1936 | if (!host->tx_chan) { | 1949 | if (!host->tx_chan) { |
1937 | dev_err(mmc_dev(host->mmc), "unable to obtain TX DMA engine channel %u\n", tx_req); | 1950 | dev_err(mmc_dev(host->mmc), "unable to obtain TX DMA engine channel %u\n", tx_req); |
1938 | ret = -ENXIO; | 1951 | ret = -ENXIO; |
diff --git a/drivers/mmc/host/sdhci-acpi.c b/drivers/mmc/host/sdhci-acpi.c index 7bcf74b1a5cd..706d9cb1a49e 100644 --- a/drivers/mmc/host/sdhci-acpi.c +++ b/drivers/mmc/host/sdhci-acpi.c | |||
@@ -87,6 +87,12 @@ static const struct sdhci_ops sdhci_acpi_ops_dflt = { | |||
87 | .enable_dma = sdhci_acpi_enable_dma, | 87 | .enable_dma = sdhci_acpi_enable_dma, |
88 | }; | 88 | }; |
89 | 89 | ||
90 | static const struct sdhci_acpi_slot sdhci_acpi_slot_int_emmc = { | ||
91 | .caps = MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE, | ||
92 | .caps2 = MMC_CAP2_HC_ERASE_SZ, | ||
93 | .flags = SDHCI_ACPI_RUNTIME_PM, | ||
94 | }; | ||
95 | |||
90 | static const struct sdhci_acpi_slot sdhci_acpi_slot_int_sdio = { | 96 | static const struct sdhci_acpi_slot sdhci_acpi_slot_int_sdio = { |
91 | .quirks2 = SDHCI_QUIRK2_HOST_OFF_CARD_ON, | 97 | .quirks2 = SDHCI_QUIRK2_HOST_OFF_CARD_ON, |
92 | .caps = MMC_CAP_NONREMOVABLE | MMC_CAP_POWER_OFF_CARD, | 98 | .caps = MMC_CAP_NONREMOVABLE | MMC_CAP_POWER_OFF_CARD, |
@@ -94,23 +100,67 @@ static const struct sdhci_acpi_slot sdhci_acpi_slot_int_sdio = { | |||
94 | .pm_caps = MMC_PM_KEEP_POWER, | 100 | .pm_caps = MMC_PM_KEEP_POWER, |
95 | }; | 101 | }; |
96 | 102 | ||
103 | static const struct sdhci_acpi_slot sdhci_acpi_slot_int_sd = { | ||
104 | }; | ||
105 | |||
106 | struct sdhci_acpi_uid_slot { | ||
107 | const char *hid; | ||
108 | const char *uid; | ||
109 | const struct sdhci_acpi_slot *slot; | ||
110 | }; | ||
111 | |||
112 | static const struct sdhci_acpi_uid_slot sdhci_acpi_uids[] = { | ||
113 | { "80860F14" , "1" , &sdhci_acpi_slot_int_emmc }, | ||
114 | { "80860F14" , "3" , &sdhci_acpi_slot_int_sd }, | ||
115 | { "INT33BB" , "2" , &sdhci_acpi_slot_int_sdio }, | ||
116 | { "INT33C6" , NULL, &sdhci_acpi_slot_int_sdio }, | ||
117 | { "PNP0D40" }, | ||
118 | { }, | ||
119 | }; | ||
120 | |||
97 | static const struct acpi_device_id sdhci_acpi_ids[] = { | 121 | static const struct acpi_device_id sdhci_acpi_ids[] = { |
98 | { "INT33C6", (kernel_ulong_t)&sdhci_acpi_slot_int_sdio }, | 122 | { "80860F14" }, |
99 | { "PNP0D40" }, | 123 | { "INT33BB" }, |
124 | { "INT33C6" }, | ||
125 | { "PNP0D40" }, | ||
100 | { }, | 126 | { }, |
101 | }; | 127 | }; |
102 | MODULE_DEVICE_TABLE(acpi, sdhci_acpi_ids); | 128 | MODULE_DEVICE_TABLE(acpi, sdhci_acpi_ids); |
103 | 129 | ||
104 | static const struct sdhci_acpi_slot *sdhci_acpi_get_slot(const char *hid) | 130 | static const struct sdhci_acpi_slot *sdhci_acpi_get_slot_by_ids(const char *hid, |
131 | const char *uid) | ||
105 | { | 132 | { |
106 | const struct acpi_device_id *id; | 133 | const struct sdhci_acpi_uid_slot *u; |
107 | 134 | ||
108 | for (id = sdhci_acpi_ids; id->id[0]; id++) | 135 | for (u = sdhci_acpi_uids; u->hid; u++) { |
109 | if (!strcmp(id->id, hid)) | 136 | if (strcmp(u->hid, hid)) |
110 | return (const struct sdhci_acpi_slot *)id->driver_data; | 137 | continue; |
138 | if (!u->uid) | ||
139 | return u->slot; | ||
140 | if (uid && !strcmp(u->uid, uid)) | ||
141 | return u->slot; | ||
142 | } | ||
111 | return NULL; | 143 | return NULL; |
112 | } | 144 | } |
113 | 145 | ||
146 | static const struct sdhci_acpi_slot *sdhci_acpi_get_slot(acpi_handle handle, | ||
147 | const char *hid) | ||
148 | { | ||
149 | const struct sdhci_acpi_slot *slot; | ||
150 | struct acpi_device_info *info; | ||
151 | const char *uid = NULL; | ||
152 | acpi_status status; | ||
153 | |||
154 | status = acpi_get_object_info(handle, &info); | ||
155 | if (!ACPI_FAILURE(status) && (info->valid & ACPI_VALID_UID)) | ||
156 | uid = info->unique_id.string; | ||
157 | |||
158 | slot = sdhci_acpi_get_slot_by_ids(hid, uid); | ||
159 | |||
160 | kfree(info); | ||
161 | return slot; | ||
162 | } | ||
163 | |||
114 | static int sdhci_acpi_probe(struct platform_device *pdev) | 164 | static int sdhci_acpi_probe(struct platform_device *pdev) |
115 | { | 165 | { |
116 | struct device *dev = &pdev->dev; | 166 | struct device *dev = &pdev->dev; |
@@ -148,7 +198,7 @@ static int sdhci_acpi_probe(struct platform_device *pdev) | |||
148 | 198 | ||
149 | c = sdhci_priv(host); | 199 | c = sdhci_priv(host); |
150 | c->host = host; | 200 | c->host = host; |
151 | c->slot = sdhci_acpi_get_slot(hid); | 201 | c->slot = sdhci_acpi_get_slot(handle, hid); |
152 | c->pdev = pdev; | 202 | c->pdev = pdev; |
153 | c->use_runtime_pm = sdhci_acpi_flag(c, SDHCI_ACPI_RUNTIME_PM); | 203 | c->use_runtime_pm = sdhci_acpi_flag(c, SDHCI_ACPI_RUNTIME_PM); |
154 | 204 | ||
@@ -202,6 +252,7 @@ static int sdhci_acpi_probe(struct platform_device *pdev) | |||
202 | goto err_free; | 252 | goto err_free; |
203 | 253 | ||
204 | if (c->use_runtime_pm) { | 254 | if (c->use_runtime_pm) { |
255 | pm_runtime_set_active(dev); | ||
205 | pm_suspend_ignore_children(dev, 1); | 256 | pm_suspend_ignore_children(dev, 1); |
206 | pm_runtime_set_autosuspend_delay(dev, 50); | 257 | pm_runtime_set_autosuspend_delay(dev, 50); |
207 | pm_runtime_use_autosuspend(dev); | 258 | pm_runtime_use_autosuspend(dev); |
diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c index 67d6dde2ff19..d5f0d59e1310 100644 --- a/drivers/mmc/host/sdhci-esdhc-imx.c +++ b/drivers/mmc/host/sdhci-esdhc-imx.c | |||
@@ -85,6 +85,12 @@ struct pltfm_imx_data { | |||
85 | struct clk *clk_ipg; | 85 | struct clk *clk_ipg; |
86 | struct clk *clk_ahb; | 86 | struct clk *clk_ahb; |
87 | struct clk *clk_per; | 87 | struct clk *clk_per; |
88 | enum { | ||
89 | NO_CMD_PENDING, /* no multiblock command pending*/ | ||
90 | MULTIBLK_IN_PROCESS, /* exact multiblock cmd in process */ | ||
91 | WAIT_FOR_INT, /* sent CMD12, waiting for response INT */ | ||
92 | } multiblock_status; | ||
93 | |||
88 | }; | 94 | }; |
89 | 95 | ||
90 | static struct platform_device_id imx_esdhc_devtype[] = { | 96 | static struct platform_device_id imx_esdhc_devtype[] = { |
@@ -154,6 +160,8 @@ static inline void esdhc_clrset_le(struct sdhci_host *host, u32 mask, u32 val, i | |||
154 | 160 | ||
155 | static u32 esdhc_readl_le(struct sdhci_host *host, int reg) | 161 | static u32 esdhc_readl_le(struct sdhci_host *host, int reg) |
156 | { | 162 | { |
163 | struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); | ||
164 | struct pltfm_imx_data *imx_data = pltfm_host->priv; | ||
157 | u32 val = readl(host->ioaddr + reg); | 165 | u32 val = readl(host->ioaddr + reg); |
158 | 166 | ||
159 | if (unlikely(reg == SDHCI_CAPABILITIES)) { | 167 | if (unlikely(reg == SDHCI_CAPABILITIES)) { |
@@ -175,6 +183,18 @@ static u32 esdhc_readl_le(struct sdhci_host *host, int reg) | |||
175 | val &= ~ESDHC_INT_VENDOR_SPEC_DMA_ERR; | 183 | val &= ~ESDHC_INT_VENDOR_SPEC_DMA_ERR; |
176 | val |= SDHCI_INT_ADMA_ERROR; | 184 | val |= SDHCI_INT_ADMA_ERROR; |
177 | } | 185 | } |
186 | |||
187 | /* | ||
188 | * mask off the interrupt we get in response to the manually | ||
189 | * sent CMD12 | ||
190 | */ | ||
191 | if ((imx_data->multiblock_status == WAIT_FOR_INT) && | ||
192 | ((val & SDHCI_INT_RESPONSE) == SDHCI_INT_RESPONSE)) { | ||
193 | val &= ~SDHCI_INT_RESPONSE; | ||
194 | writel(SDHCI_INT_RESPONSE, host->ioaddr + | ||
195 | SDHCI_INT_STATUS); | ||
196 | imx_data->multiblock_status = NO_CMD_PENDING; | ||
197 | } | ||
178 | } | 198 | } |
179 | 199 | ||
180 | return val; | 200 | return val; |
@@ -211,6 +231,15 @@ static void esdhc_writel_le(struct sdhci_host *host, u32 val, int reg) | |||
211 | v = readl(host->ioaddr + ESDHC_VENDOR_SPEC); | 231 | v = readl(host->ioaddr + ESDHC_VENDOR_SPEC); |
212 | v &= ~ESDHC_VENDOR_SPEC_SDIO_QUIRK; | 232 | v &= ~ESDHC_VENDOR_SPEC_SDIO_QUIRK; |
213 | writel(v, host->ioaddr + ESDHC_VENDOR_SPEC); | 233 | writel(v, host->ioaddr + ESDHC_VENDOR_SPEC); |
234 | |||
235 | if (imx_data->multiblock_status == MULTIBLK_IN_PROCESS) | ||
236 | { | ||
237 | /* send a manual CMD12 with RESPTYP=none */ | ||
238 | data = MMC_STOP_TRANSMISSION << 24 | | ||
239 | SDHCI_CMD_ABORTCMD << 16; | ||
240 | writel(data, host->ioaddr + SDHCI_TRANSFER_MODE); | ||
241 | imx_data->multiblock_status = WAIT_FOR_INT; | ||
242 | } | ||
214 | } | 243 | } |
215 | 244 | ||
216 | if (unlikely(reg == SDHCI_INT_ENABLE || reg == SDHCI_SIGNAL_ENABLE)) { | 245 | if (unlikely(reg == SDHCI_INT_ENABLE || reg == SDHCI_SIGNAL_ENABLE)) { |
@@ -277,11 +306,13 @@ static void esdhc_writew_le(struct sdhci_host *host, u16 val, int reg) | |||
277 | } | 306 | } |
278 | return; | 307 | return; |
279 | case SDHCI_COMMAND: | 308 | case SDHCI_COMMAND: |
280 | if ((host->cmd->opcode == MMC_STOP_TRANSMISSION || | 309 | if (host->cmd->opcode == MMC_STOP_TRANSMISSION) |
281 | host->cmd->opcode == MMC_SET_BLOCK_COUNT) && | ||
282 | (imx_data->flags & ESDHC_FLAG_MULTIBLK_NO_INT)) | ||
283 | val |= SDHCI_CMD_ABORTCMD; | 310 | val |= SDHCI_CMD_ABORTCMD; |
284 | 311 | ||
312 | if ((host->cmd->opcode == MMC_SET_BLOCK_COUNT) && | ||
313 | (imx_data->flags & ESDHC_FLAG_MULTIBLK_NO_INT)) | ||
314 | imx_data->multiblock_status = MULTIBLK_IN_PROCESS; | ||
315 | |||
285 | if (is_imx6q_usdhc(imx_data)) | 316 | if (is_imx6q_usdhc(imx_data)) |
286 | writel(val << 16, | 317 | writel(val << 16, |
287 | host->ioaddr + SDHCI_TRANSFER_MODE); | 318 | host->ioaddr + SDHCI_TRANSFER_MODE); |
@@ -324,8 +355,10 @@ static void esdhc_writeb_le(struct sdhci_host *host, u8 val, int reg) | |||
324 | /* | 355 | /* |
325 | * Do not touch buswidth bits here. This is done in | 356 | * Do not touch buswidth bits here. This is done in |
326 | * esdhc_pltfm_bus_width. | 357 | * esdhc_pltfm_bus_width. |
358 | * Do not touch the D3CD bit either which is used for the | ||
359 | * SDIO interrupt errata workaround. | ||
327 | */ | 360 | */ |
328 | mask = 0xffff & ~ESDHC_CTRL_BUSWIDTH_MASK; | 361 | mask = 0xffff & ~(ESDHC_CTRL_BUSWIDTH_MASK | ESDHC_CTRL_D3CD); |
329 | 362 | ||
330 | esdhc_clrset_le(host, mask, new_val, reg); | 363 | esdhc_clrset_le(host, mask, new_val, reg); |
331 | return; | 364 | return; |
diff --git a/drivers/mmc/host/sdhci-pci.c b/drivers/mmc/host/sdhci-pci.c index 0012d3fdc999..701d06d0e1fb 100644 --- a/drivers/mmc/host/sdhci-pci.c +++ b/drivers/mmc/host/sdhci-pci.c | |||
@@ -33,6 +33,9 @@ | |||
33 | */ | 33 | */ |
34 | #define PCI_DEVICE_ID_INTEL_PCH_SDIO0 0x8809 | 34 | #define PCI_DEVICE_ID_INTEL_PCH_SDIO0 0x8809 |
35 | #define PCI_DEVICE_ID_INTEL_PCH_SDIO1 0x880a | 35 | #define PCI_DEVICE_ID_INTEL_PCH_SDIO1 0x880a |
36 | #define PCI_DEVICE_ID_INTEL_BYT_EMMC 0x0f14 | ||
37 | #define PCI_DEVICE_ID_INTEL_BYT_SDIO 0x0f15 | ||
38 | #define PCI_DEVICE_ID_INTEL_BYT_SD 0x0f16 | ||
36 | 39 | ||
37 | /* | 40 | /* |
38 | * PCI registers | 41 | * PCI registers |
@@ -304,6 +307,33 @@ static const struct sdhci_pci_fixes sdhci_intel_pch_sdio = { | |||
304 | .probe_slot = pch_hc_probe_slot, | 307 | .probe_slot = pch_hc_probe_slot, |
305 | }; | 308 | }; |
306 | 309 | ||
310 | static int byt_emmc_probe_slot(struct sdhci_pci_slot *slot) | ||
311 | { | ||
312 | slot->host->mmc->caps |= MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE; | ||
313 | slot->host->mmc->caps2 |= MMC_CAP2_HC_ERASE_SZ; | ||
314 | return 0; | ||
315 | } | ||
316 | |||
317 | static int byt_sdio_probe_slot(struct sdhci_pci_slot *slot) | ||
318 | { | ||
319 | slot->host->mmc->caps |= MMC_CAP_POWER_OFF_CARD | MMC_CAP_NONREMOVABLE; | ||
320 | return 0; | ||
321 | } | ||
322 | |||
323 | static const struct sdhci_pci_fixes sdhci_intel_byt_emmc = { | ||
324 | .allow_runtime_pm = true, | ||
325 | .probe_slot = byt_emmc_probe_slot, | ||
326 | }; | ||
327 | |||
328 | static const struct sdhci_pci_fixes sdhci_intel_byt_sdio = { | ||
329 | .quirks2 = SDHCI_QUIRK2_HOST_OFF_CARD_ON, | ||
330 | .allow_runtime_pm = true, | ||
331 | .probe_slot = byt_sdio_probe_slot, | ||
332 | }; | ||
333 | |||
334 | static const struct sdhci_pci_fixes sdhci_intel_byt_sd = { | ||
335 | }; | ||
336 | |||
307 | /* O2Micro extra registers */ | 337 | /* O2Micro extra registers */ |
308 | #define O2_SD_LOCK_WP 0xD3 | 338 | #define O2_SD_LOCK_WP 0xD3 |
309 | #define O2_SD_MULTI_VCC3V 0xEE | 339 | #define O2_SD_MULTI_VCC3V 0xEE |
@@ -856,6 +886,30 @@ static const struct pci_device_id pci_ids[] = { | |||
856 | }, | 886 | }, |
857 | 887 | ||
858 | { | 888 | { |
889 | .vendor = PCI_VENDOR_ID_INTEL, | ||
890 | .device = PCI_DEVICE_ID_INTEL_BYT_EMMC, | ||
891 | .subvendor = PCI_ANY_ID, | ||
892 | .subdevice = PCI_ANY_ID, | ||
893 | .driver_data = (kernel_ulong_t)&sdhci_intel_byt_emmc, | ||
894 | }, | ||
895 | |||
896 | { | ||
897 | .vendor = PCI_VENDOR_ID_INTEL, | ||
898 | .device = PCI_DEVICE_ID_INTEL_BYT_SDIO, | ||
899 | .subvendor = PCI_ANY_ID, | ||
900 | .subdevice = PCI_ANY_ID, | ||
901 | .driver_data = (kernel_ulong_t)&sdhci_intel_byt_sdio, | ||
902 | }, | ||
903 | |||
904 | { | ||
905 | .vendor = PCI_VENDOR_ID_INTEL, | ||
906 | .device = PCI_DEVICE_ID_INTEL_BYT_SD, | ||
907 | .subvendor = PCI_ANY_ID, | ||
908 | .subdevice = PCI_ANY_ID, | ||
909 | .driver_data = (kernel_ulong_t)&sdhci_intel_byt_sd, | ||
910 | }, | ||
911 | |||
912 | { | ||
859 | .vendor = PCI_VENDOR_ID_O2, | 913 | .vendor = PCI_VENDOR_ID_O2, |
860 | .device = PCI_DEVICE_ID_O2_8120, | 914 | .device = PCI_DEVICE_ID_O2_8120, |
861 | .subvendor = PCI_ANY_ID, | 915 | .subvendor = PCI_ANY_ID, |
diff --git a/drivers/net/can/usb/esd_usb2.c b/drivers/net/can/usb/esd_usb2.c index 9b74d1e3ad44..6aa7b3266c80 100644 --- a/drivers/net/can/usb/esd_usb2.c +++ b/drivers/net/can/usb/esd_usb2.c | |||
@@ -612,9 +612,15 @@ static int esd_usb2_start(struct esd_usb2_net_priv *priv) | |||
612 | { | 612 | { |
613 | struct esd_usb2 *dev = priv->usb2; | 613 | struct esd_usb2 *dev = priv->usb2; |
614 | struct net_device *netdev = priv->netdev; | 614 | struct net_device *netdev = priv->netdev; |
615 | struct esd_usb2_msg msg; | 615 | struct esd_usb2_msg *msg; |
616 | int err, i; | 616 | int err, i; |
617 | 617 | ||
618 | msg = kmalloc(sizeof(*msg), GFP_KERNEL); | ||
619 | if (!msg) { | ||
620 | err = -ENOMEM; | ||
621 | goto out; | ||
622 | } | ||
623 | |||
618 | /* | 624 | /* |
619 | * Enable all IDs | 625 | * Enable all IDs |
620 | * The IDADD message takes up to 64 32 bit bitmasks (2048 bits). | 626 | * The IDADD message takes up to 64 32 bit bitmasks (2048 bits). |
@@ -628,33 +634,32 @@ static int esd_usb2_start(struct esd_usb2_net_priv *priv) | |||
628 | * the number of the starting bitmask (0..64) to the filter.option | 634 | * the number of the starting bitmask (0..64) to the filter.option |
629 | * field followed by only some bitmasks. | 635 | * field followed by only some bitmasks. |
630 | */ | 636 | */ |
631 | msg.msg.hdr.cmd = CMD_IDADD; | 637 | msg->msg.hdr.cmd = CMD_IDADD; |
632 | msg.msg.hdr.len = 2 + ESD_MAX_ID_SEGMENT; | 638 | msg->msg.hdr.len = 2 + ESD_MAX_ID_SEGMENT; |
633 | msg.msg.filter.net = priv->index; | 639 | msg->msg.filter.net = priv->index; |
634 | msg.msg.filter.option = ESD_ID_ENABLE; /* start with segment 0 */ | 640 | msg->msg.filter.option = ESD_ID_ENABLE; /* start with segment 0 */ |
635 | for (i = 0; i < ESD_MAX_ID_SEGMENT; i++) | 641 | for (i = 0; i < ESD_MAX_ID_SEGMENT; i++) |
636 | msg.msg.filter.mask[i] = cpu_to_le32(0xffffffff); | 642 | msg->msg.filter.mask[i] = cpu_to_le32(0xffffffff); |
637 | /* enable 29bit extended IDs */ | 643 | /* enable 29bit extended IDs */ |
638 | msg.msg.filter.mask[ESD_MAX_ID_SEGMENT] = cpu_to_le32(0x00000001); | 644 | msg->msg.filter.mask[ESD_MAX_ID_SEGMENT] = cpu_to_le32(0x00000001); |
639 | 645 | ||
640 | err = esd_usb2_send_msg(dev, &msg); | 646 | err = esd_usb2_send_msg(dev, msg); |
641 | if (err) | 647 | if (err) |
642 | goto failed; | 648 | goto out; |
643 | 649 | ||
644 | err = esd_usb2_setup_rx_urbs(dev); | 650 | err = esd_usb2_setup_rx_urbs(dev); |
645 | if (err) | 651 | if (err) |
646 | goto failed; | 652 | goto out; |
647 | 653 | ||
648 | priv->can.state = CAN_STATE_ERROR_ACTIVE; | 654 | priv->can.state = CAN_STATE_ERROR_ACTIVE; |
649 | 655 | ||
650 | return 0; | 656 | out: |
651 | |||
652 | failed: | ||
653 | if (err == -ENODEV) | 657 | if (err == -ENODEV) |
654 | netif_device_detach(netdev); | 658 | netif_device_detach(netdev); |
659 | if (err) | ||
660 | netdev_err(netdev, "couldn't start device: %d\n", err); | ||
655 | 661 | ||
656 | netdev_err(netdev, "couldn't start device: %d\n", err); | 662 | kfree(msg); |
657 | |||
658 | return err; | 663 | return err; |
659 | } | 664 | } |
660 | 665 | ||
@@ -833,26 +838,30 @@ nourbmem: | |||
833 | static int esd_usb2_close(struct net_device *netdev) | 838 | static int esd_usb2_close(struct net_device *netdev) |
834 | { | 839 | { |
835 | struct esd_usb2_net_priv *priv = netdev_priv(netdev); | 840 | struct esd_usb2_net_priv *priv = netdev_priv(netdev); |
836 | struct esd_usb2_msg msg; | 841 | struct esd_usb2_msg *msg; |
837 | int i; | 842 | int i; |
838 | 843 | ||
844 | msg = kmalloc(sizeof(*msg), GFP_KERNEL); | ||
845 | if (!msg) | ||
846 | return -ENOMEM; | ||
847 | |||
839 | /* Disable all IDs (see esd_usb2_start()) */ | 848 | /* Disable all IDs (see esd_usb2_start()) */ |
840 | msg.msg.hdr.cmd = CMD_IDADD; | 849 | msg->msg.hdr.cmd = CMD_IDADD; |
841 | msg.msg.hdr.len = 2 + ESD_MAX_ID_SEGMENT; | 850 | msg->msg.hdr.len = 2 + ESD_MAX_ID_SEGMENT; |
842 | msg.msg.filter.net = priv->index; | 851 | msg->msg.filter.net = priv->index; |
843 | msg.msg.filter.option = ESD_ID_ENABLE; /* start with segment 0 */ | 852 | msg->msg.filter.option = ESD_ID_ENABLE; /* start with segment 0 */ |
844 | for (i = 0; i <= ESD_MAX_ID_SEGMENT; i++) | 853 | for (i = 0; i <= ESD_MAX_ID_SEGMENT; i++) |
845 | msg.msg.filter.mask[i] = 0; | 854 | msg->msg.filter.mask[i] = 0; |
846 | if (esd_usb2_send_msg(priv->usb2, &msg) < 0) | 855 | if (esd_usb2_send_msg(priv->usb2, msg) < 0) |
847 | netdev_err(netdev, "sending idadd message failed\n"); | 856 | netdev_err(netdev, "sending idadd message failed\n"); |
848 | 857 | ||
849 | /* set CAN controller to reset mode */ | 858 | /* set CAN controller to reset mode */ |
850 | msg.msg.hdr.len = 2; | 859 | msg->msg.hdr.len = 2; |
851 | msg.msg.hdr.cmd = CMD_SETBAUD; | 860 | msg->msg.hdr.cmd = CMD_SETBAUD; |
852 | msg.msg.setbaud.net = priv->index; | 861 | msg->msg.setbaud.net = priv->index; |
853 | msg.msg.setbaud.rsvd = 0; | 862 | msg->msg.setbaud.rsvd = 0; |
854 | msg.msg.setbaud.baud = cpu_to_le32(ESD_USB2_NO_BAUDRATE); | 863 | msg->msg.setbaud.baud = cpu_to_le32(ESD_USB2_NO_BAUDRATE); |
855 | if (esd_usb2_send_msg(priv->usb2, &msg) < 0) | 864 | if (esd_usb2_send_msg(priv->usb2, msg) < 0) |
856 | netdev_err(netdev, "sending setbaud message failed\n"); | 865 | netdev_err(netdev, "sending setbaud message failed\n"); |
857 | 866 | ||
858 | priv->can.state = CAN_STATE_STOPPED; | 867 | priv->can.state = CAN_STATE_STOPPED; |
@@ -861,6 +870,8 @@ static int esd_usb2_close(struct net_device *netdev) | |||
861 | 870 | ||
862 | close_candev(netdev); | 871 | close_candev(netdev); |
863 | 872 | ||
873 | kfree(msg); | ||
874 | |||
864 | return 0; | 875 | return 0; |
865 | } | 876 | } |
866 | 877 | ||
@@ -886,7 +897,8 @@ static int esd_usb2_set_bittiming(struct net_device *netdev) | |||
886 | { | 897 | { |
887 | struct esd_usb2_net_priv *priv = netdev_priv(netdev); | 898 | struct esd_usb2_net_priv *priv = netdev_priv(netdev); |
888 | struct can_bittiming *bt = &priv->can.bittiming; | 899 | struct can_bittiming *bt = &priv->can.bittiming; |
889 | struct esd_usb2_msg msg; | 900 | struct esd_usb2_msg *msg; |
901 | int err; | ||
890 | u32 canbtr; | 902 | u32 canbtr; |
891 | int sjw_shift; | 903 | int sjw_shift; |
892 | 904 | ||
@@ -912,15 +924,22 @@ static int esd_usb2_set_bittiming(struct net_device *netdev) | |||
912 | if (priv->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES) | 924 | if (priv->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES) |
913 | canbtr |= ESD_USB2_3_SAMPLES; | 925 | canbtr |= ESD_USB2_3_SAMPLES; |
914 | 926 | ||
915 | msg.msg.hdr.len = 2; | 927 | msg = kmalloc(sizeof(*msg), GFP_KERNEL); |
916 | msg.msg.hdr.cmd = CMD_SETBAUD; | 928 | if (!msg) |
917 | msg.msg.setbaud.net = priv->index; | 929 | return -ENOMEM; |
918 | msg.msg.setbaud.rsvd = 0; | 930 | |
919 | msg.msg.setbaud.baud = cpu_to_le32(canbtr); | 931 | msg->msg.hdr.len = 2; |
932 | msg->msg.hdr.cmd = CMD_SETBAUD; | ||
933 | msg->msg.setbaud.net = priv->index; | ||
934 | msg->msg.setbaud.rsvd = 0; | ||
935 | msg->msg.setbaud.baud = cpu_to_le32(canbtr); | ||
920 | 936 | ||
921 | netdev_info(netdev, "setting BTR=%#x\n", canbtr); | 937 | netdev_info(netdev, "setting BTR=%#x\n", canbtr); |
922 | 938 | ||
923 | return esd_usb2_send_msg(priv->usb2, &msg); | 939 | err = esd_usb2_send_msg(priv->usb2, msg); |
940 | |||
941 | kfree(msg); | ||
942 | return err; | ||
924 | } | 943 | } |
925 | 944 | ||
926 | static int esd_usb2_get_berr_counter(const struct net_device *netdev, | 945 | static int esd_usb2_get_berr_counter(const struct net_device *netdev, |
@@ -1022,7 +1041,7 @@ static int esd_usb2_probe(struct usb_interface *intf, | |||
1022 | const struct usb_device_id *id) | 1041 | const struct usb_device_id *id) |
1023 | { | 1042 | { |
1024 | struct esd_usb2 *dev; | 1043 | struct esd_usb2 *dev; |
1025 | struct esd_usb2_msg msg; | 1044 | struct esd_usb2_msg *msg; |
1026 | int i, err; | 1045 | int i, err; |
1027 | 1046 | ||
1028 | dev = kzalloc(sizeof(*dev), GFP_KERNEL); | 1047 | dev = kzalloc(sizeof(*dev), GFP_KERNEL); |
@@ -1037,27 +1056,33 @@ static int esd_usb2_probe(struct usb_interface *intf, | |||
1037 | 1056 | ||
1038 | usb_set_intfdata(intf, dev); | 1057 | usb_set_intfdata(intf, dev); |
1039 | 1058 | ||
1059 | msg = kmalloc(sizeof(*msg), GFP_KERNEL); | ||
1060 | if (!msg) { | ||
1061 | err = -ENOMEM; | ||
1062 | goto free_msg; | ||
1063 | } | ||
1064 | |||
1040 | /* query number of CAN interfaces (nets) */ | 1065 | /* query number of CAN interfaces (nets) */ |
1041 | msg.msg.hdr.cmd = CMD_VERSION; | 1066 | msg->msg.hdr.cmd = CMD_VERSION; |
1042 | msg.msg.hdr.len = 2; | 1067 | msg->msg.hdr.len = 2; |
1043 | msg.msg.version.rsvd = 0; | 1068 | msg->msg.version.rsvd = 0; |
1044 | msg.msg.version.flags = 0; | 1069 | msg->msg.version.flags = 0; |
1045 | msg.msg.version.drv_version = 0; | 1070 | msg->msg.version.drv_version = 0; |
1046 | 1071 | ||
1047 | err = esd_usb2_send_msg(dev, &msg); | 1072 | err = esd_usb2_send_msg(dev, msg); |
1048 | if (err < 0) { | 1073 | if (err < 0) { |
1049 | dev_err(&intf->dev, "sending version message failed\n"); | 1074 | dev_err(&intf->dev, "sending version message failed\n"); |
1050 | goto free_dev; | 1075 | goto free_msg; |
1051 | } | 1076 | } |
1052 | 1077 | ||
1053 | err = esd_usb2_wait_msg(dev, &msg); | 1078 | err = esd_usb2_wait_msg(dev, msg); |
1054 | if (err < 0) { | 1079 | if (err < 0) { |
1055 | dev_err(&intf->dev, "no version message answer\n"); | 1080 | dev_err(&intf->dev, "no version message answer\n"); |
1056 | goto free_dev; | 1081 | goto free_msg; |
1057 | } | 1082 | } |
1058 | 1083 | ||
1059 | dev->net_count = (int)msg.msg.version_reply.nets; | 1084 | dev->net_count = (int)msg->msg.version_reply.nets; |
1060 | dev->version = le32_to_cpu(msg.msg.version_reply.version); | 1085 | dev->version = le32_to_cpu(msg->msg.version_reply.version); |
1061 | 1086 | ||
1062 | if (device_create_file(&intf->dev, &dev_attr_firmware)) | 1087 | if (device_create_file(&intf->dev, &dev_attr_firmware)) |
1063 | dev_err(&intf->dev, | 1088 | dev_err(&intf->dev, |
@@ -1075,10 +1100,10 @@ static int esd_usb2_probe(struct usb_interface *intf, | |||
1075 | for (i = 0; i < dev->net_count; i++) | 1100 | for (i = 0; i < dev->net_count; i++) |
1076 | esd_usb2_probe_one_net(intf, i); | 1101 | esd_usb2_probe_one_net(intf, i); |
1077 | 1102 | ||
1078 | return 0; | 1103 | free_msg: |
1079 | 1104 | kfree(msg); | |
1080 | free_dev: | 1105 | if (err) |
1081 | kfree(dev); | 1106 | kfree(dev); |
1082 | done: | 1107 | done: |
1083 | return err; | 1108 | return err; |
1084 | } | 1109 | } |
diff --git a/drivers/net/can/usb/kvaser_usb.c b/drivers/net/can/usb/kvaser_usb.c index 45cb9f3c1324..3b9546588240 100644 --- a/drivers/net/can/usb/kvaser_usb.c +++ b/drivers/net/can/usb/kvaser_usb.c | |||
@@ -136,6 +136,9 @@ | |||
136 | #define KVASER_CTRL_MODE_SELFRECEPTION 3 | 136 | #define KVASER_CTRL_MODE_SELFRECEPTION 3 |
137 | #define KVASER_CTRL_MODE_OFF 4 | 137 | #define KVASER_CTRL_MODE_OFF 4 |
138 | 138 | ||
139 | /* log message */ | ||
140 | #define KVASER_EXTENDED_FRAME BIT(31) | ||
141 | |||
139 | struct kvaser_msg_simple { | 142 | struct kvaser_msg_simple { |
140 | u8 tid; | 143 | u8 tid; |
141 | u8 channel; | 144 | u8 channel; |
@@ -817,8 +820,13 @@ static void kvaser_usb_rx_can_msg(const struct kvaser_usb *dev, | |||
817 | priv = dev->nets[channel]; | 820 | priv = dev->nets[channel]; |
818 | stats = &priv->netdev->stats; | 821 | stats = &priv->netdev->stats; |
819 | 822 | ||
820 | if (msg->u.rx_can.flag & (MSG_FLAG_ERROR_FRAME | MSG_FLAG_NERR | | 823 | if ((msg->u.rx_can.flag & MSG_FLAG_ERROR_FRAME) && |
821 | MSG_FLAG_OVERRUN)) { | 824 | (msg->id == CMD_LOG_MESSAGE)) { |
825 | kvaser_usb_rx_error(dev, msg); | ||
826 | return; | ||
827 | } else if (msg->u.rx_can.flag & (MSG_FLAG_ERROR_FRAME | | ||
828 | MSG_FLAG_NERR | | ||
829 | MSG_FLAG_OVERRUN)) { | ||
822 | kvaser_usb_rx_can_err(priv, msg); | 830 | kvaser_usb_rx_can_err(priv, msg); |
823 | return; | 831 | return; |
824 | } else if (msg->u.rx_can.flag & ~MSG_FLAG_REMOTE_FRAME) { | 832 | } else if (msg->u.rx_can.flag & ~MSG_FLAG_REMOTE_FRAME) { |
@@ -834,22 +842,40 @@ static void kvaser_usb_rx_can_msg(const struct kvaser_usb *dev, | |||
834 | return; | 842 | return; |
835 | } | 843 | } |
836 | 844 | ||
837 | cf->can_id = ((msg->u.rx_can.msg[0] & 0x1f) << 6) | | 845 | if (msg->id == CMD_LOG_MESSAGE) { |
838 | (msg->u.rx_can.msg[1] & 0x3f); | 846 | cf->can_id = le32_to_cpu(msg->u.log_message.id); |
839 | cf->can_dlc = get_can_dlc(msg->u.rx_can.msg[5]); | 847 | if (cf->can_id & KVASER_EXTENDED_FRAME) |
848 | cf->can_id &= CAN_EFF_MASK | CAN_EFF_FLAG; | ||
849 | else | ||
850 | cf->can_id &= CAN_SFF_MASK; | ||
840 | 851 | ||
841 | if (msg->id == CMD_RX_EXT_MESSAGE) { | 852 | cf->can_dlc = get_can_dlc(msg->u.log_message.dlc); |
842 | cf->can_id <<= 18; | ||
843 | cf->can_id |= ((msg->u.rx_can.msg[2] & 0x0f) << 14) | | ||
844 | ((msg->u.rx_can.msg[3] & 0xff) << 6) | | ||
845 | (msg->u.rx_can.msg[4] & 0x3f); | ||
846 | cf->can_id |= CAN_EFF_FLAG; | ||
847 | } | ||
848 | 853 | ||
849 | if (msg->u.rx_can.flag & MSG_FLAG_REMOTE_FRAME) | 854 | if (msg->u.log_message.flags & MSG_FLAG_REMOTE_FRAME) |
850 | cf->can_id |= CAN_RTR_FLAG; | 855 | cf->can_id |= CAN_RTR_FLAG; |
851 | else | 856 | else |
852 | memcpy(cf->data, &msg->u.rx_can.msg[6], cf->can_dlc); | 857 | memcpy(cf->data, &msg->u.log_message.data, |
858 | cf->can_dlc); | ||
859 | } else { | ||
860 | cf->can_id = ((msg->u.rx_can.msg[0] & 0x1f) << 6) | | ||
861 | (msg->u.rx_can.msg[1] & 0x3f); | ||
862 | |||
863 | if (msg->id == CMD_RX_EXT_MESSAGE) { | ||
864 | cf->can_id <<= 18; | ||
865 | cf->can_id |= ((msg->u.rx_can.msg[2] & 0x0f) << 14) | | ||
866 | ((msg->u.rx_can.msg[3] & 0xff) << 6) | | ||
867 | (msg->u.rx_can.msg[4] & 0x3f); | ||
868 | cf->can_id |= CAN_EFF_FLAG; | ||
869 | } | ||
870 | |||
871 | cf->can_dlc = get_can_dlc(msg->u.rx_can.msg[5]); | ||
872 | |||
873 | if (msg->u.rx_can.flag & MSG_FLAG_REMOTE_FRAME) | ||
874 | cf->can_id |= CAN_RTR_FLAG; | ||
875 | else | ||
876 | memcpy(cf->data, &msg->u.rx_can.msg[6], | ||
877 | cf->can_dlc); | ||
878 | } | ||
853 | 879 | ||
854 | netif_rx(skb); | 880 | netif_rx(skb); |
855 | 881 | ||
@@ -911,6 +937,7 @@ static void kvaser_usb_handle_message(const struct kvaser_usb *dev, | |||
911 | 937 | ||
912 | case CMD_RX_STD_MESSAGE: | 938 | case CMD_RX_STD_MESSAGE: |
913 | case CMD_RX_EXT_MESSAGE: | 939 | case CMD_RX_EXT_MESSAGE: |
940 | case CMD_LOG_MESSAGE: | ||
914 | kvaser_usb_rx_can_msg(dev, msg); | 941 | kvaser_usb_rx_can_msg(dev, msg); |
915 | break; | 942 | break; |
916 | 943 | ||
@@ -919,11 +946,6 @@ static void kvaser_usb_handle_message(const struct kvaser_usb *dev, | |||
919 | kvaser_usb_rx_error(dev, msg); | 946 | kvaser_usb_rx_error(dev, msg); |
920 | break; | 947 | break; |
921 | 948 | ||
922 | case CMD_LOG_MESSAGE: | ||
923 | if (msg->u.log_message.flags & MSG_FLAG_ERROR_FRAME) | ||
924 | kvaser_usb_rx_error(dev, msg); | ||
925 | break; | ||
926 | |||
927 | case CMD_TX_ACKNOWLEDGE: | 949 | case CMD_TX_ACKNOWLEDGE: |
928 | kvaser_usb_tx_acknowledge(dev, msg); | 950 | kvaser_usb_tx_acknowledge(dev, msg); |
929 | break; | 951 | break; |
diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_pro.c b/drivers/net/can/usb/peak_usb/pcan_usb_pro.c index 30d79bfa5b10..8ee9d1556e6e 100644 --- a/drivers/net/can/usb/peak_usb/pcan_usb_pro.c +++ b/drivers/net/can/usb/peak_usb/pcan_usb_pro.c | |||
@@ -504,15 +504,24 @@ static int pcan_usb_pro_restart_async(struct peak_usb_device *dev, | |||
504 | return usb_submit_urb(urb, GFP_ATOMIC); | 504 | return usb_submit_urb(urb, GFP_ATOMIC); |
505 | } | 505 | } |
506 | 506 | ||
507 | static void pcan_usb_pro_drv_loaded(struct peak_usb_device *dev, int loaded) | 507 | static int pcan_usb_pro_drv_loaded(struct peak_usb_device *dev, int loaded) |
508 | { | 508 | { |
509 | u8 buffer[16]; | 509 | u8 *buffer; |
510 | int err; | ||
511 | |||
512 | buffer = kmalloc(PCAN_USBPRO_FCT_DRVLD_REQ_LEN, GFP_KERNEL); | ||
513 | if (!buffer) | ||
514 | return -ENOMEM; | ||
510 | 515 | ||
511 | buffer[0] = 0; | 516 | buffer[0] = 0; |
512 | buffer[1] = !!loaded; | 517 | buffer[1] = !!loaded; |
513 | 518 | ||
514 | pcan_usb_pro_send_req(dev, PCAN_USBPRO_REQ_FCT, | 519 | err = pcan_usb_pro_send_req(dev, PCAN_USBPRO_REQ_FCT, |
515 | PCAN_USBPRO_FCT_DRVLD, buffer, sizeof(buffer)); | 520 | PCAN_USBPRO_FCT_DRVLD, buffer, |
521 | PCAN_USBPRO_FCT_DRVLD_REQ_LEN); | ||
522 | kfree(buffer); | ||
523 | |||
524 | return err; | ||
516 | } | 525 | } |
517 | 526 | ||
518 | static inline | 527 | static inline |
@@ -851,21 +860,24 @@ static int pcan_usb_pro_stop(struct peak_usb_device *dev) | |||
851 | */ | 860 | */ |
852 | static int pcan_usb_pro_init(struct peak_usb_device *dev) | 861 | static int pcan_usb_pro_init(struct peak_usb_device *dev) |
853 | { | 862 | { |
854 | struct pcan_usb_pro_interface *usb_if; | ||
855 | struct pcan_usb_pro_device *pdev = | 863 | struct pcan_usb_pro_device *pdev = |
856 | container_of(dev, struct pcan_usb_pro_device, dev); | 864 | container_of(dev, struct pcan_usb_pro_device, dev); |
865 | struct pcan_usb_pro_interface *usb_if = NULL; | ||
866 | struct pcan_usb_pro_fwinfo *fi = NULL; | ||
867 | struct pcan_usb_pro_blinfo *bi = NULL; | ||
868 | int err; | ||
857 | 869 | ||
858 | /* do this for 1st channel only */ | 870 | /* do this for 1st channel only */ |
859 | if (!dev->prev_siblings) { | 871 | if (!dev->prev_siblings) { |
860 | struct pcan_usb_pro_fwinfo fi; | ||
861 | struct pcan_usb_pro_blinfo bi; | ||
862 | int err; | ||
863 | |||
864 | /* allocate netdevices common structure attached to first one */ | 872 | /* allocate netdevices common structure attached to first one */ |
865 | usb_if = kzalloc(sizeof(struct pcan_usb_pro_interface), | 873 | usb_if = kzalloc(sizeof(struct pcan_usb_pro_interface), |
866 | GFP_KERNEL); | 874 | GFP_KERNEL); |
867 | if (!usb_if) | 875 | fi = kmalloc(sizeof(struct pcan_usb_pro_fwinfo), GFP_KERNEL); |
868 | return -ENOMEM; | 876 | bi = kmalloc(sizeof(struct pcan_usb_pro_blinfo), GFP_KERNEL); |
877 | if (!usb_if || !fi || !bi) { | ||
878 | err = -ENOMEM; | ||
879 | goto err_out; | ||
880 | } | ||
869 | 881 | ||
870 | /* number of ts msgs to ignore before taking one into account */ | 882 | /* number of ts msgs to ignore before taking one into account */ |
871 | usb_if->cm_ignore_count = 5; | 883 | usb_if->cm_ignore_count = 5; |
@@ -877,34 +889,34 @@ static int pcan_usb_pro_init(struct peak_usb_device *dev) | |||
877 | */ | 889 | */ |
878 | err = pcan_usb_pro_send_req(dev, PCAN_USBPRO_REQ_INFO, | 890 | err = pcan_usb_pro_send_req(dev, PCAN_USBPRO_REQ_INFO, |
879 | PCAN_USBPRO_INFO_FW, | 891 | PCAN_USBPRO_INFO_FW, |
880 | &fi, sizeof(fi)); | 892 | fi, sizeof(*fi)); |
881 | if (err) { | 893 | if (err) { |
882 | kfree(usb_if); | ||
883 | dev_err(dev->netdev->dev.parent, | 894 | dev_err(dev->netdev->dev.parent, |
884 | "unable to read %s firmware info (err %d)\n", | 895 | "unable to read %s firmware info (err %d)\n", |
885 | pcan_usb_pro.name, err); | 896 | pcan_usb_pro.name, err); |
886 | return err; | 897 | goto err_out; |
887 | } | 898 | } |
888 | 899 | ||
889 | err = pcan_usb_pro_send_req(dev, PCAN_USBPRO_REQ_INFO, | 900 | err = pcan_usb_pro_send_req(dev, PCAN_USBPRO_REQ_INFO, |
890 | PCAN_USBPRO_INFO_BL, | 901 | PCAN_USBPRO_INFO_BL, |
891 | &bi, sizeof(bi)); | 902 | bi, sizeof(*bi)); |
892 | if (err) { | 903 | if (err) { |
893 | kfree(usb_if); | ||
894 | dev_err(dev->netdev->dev.parent, | 904 | dev_err(dev->netdev->dev.parent, |
895 | "unable to read %s bootloader info (err %d)\n", | 905 | "unable to read %s bootloader info (err %d)\n", |
896 | pcan_usb_pro.name, err); | 906 | pcan_usb_pro.name, err); |
897 | return err; | 907 | goto err_out; |
898 | } | 908 | } |
899 | 909 | ||
910 | /* tell the device the can driver is running */ | ||
911 | err = pcan_usb_pro_drv_loaded(dev, 1); | ||
912 | if (err) | ||
913 | goto err_out; | ||
914 | |||
900 | dev_info(dev->netdev->dev.parent, | 915 | dev_info(dev->netdev->dev.parent, |
901 | "PEAK-System %s hwrev %u serial %08X.%08X (%u channels)\n", | 916 | "PEAK-System %s hwrev %u serial %08X.%08X (%u channels)\n", |
902 | pcan_usb_pro.name, | 917 | pcan_usb_pro.name, |
903 | bi.hw_rev, bi.serial_num_hi, bi.serial_num_lo, | 918 | bi->hw_rev, bi->serial_num_hi, bi->serial_num_lo, |
904 | pcan_usb_pro.ctrl_count); | 919 | pcan_usb_pro.ctrl_count); |
905 | |||
906 | /* tell the device the can driver is running */ | ||
907 | pcan_usb_pro_drv_loaded(dev, 1); | ||
908 | } else { | 920 | } else { |
909 | usb_if = pcan_usb_pro_dev_if(dev->prev_siblings); | 921 | usb_if = pcan_usb_pro_dev_if(dev->prev_siblings); |
910 | } | 922 | } |
@@ -916,6 +928,13 @@ static int pcan_usb_pro_init(struct peak_usb_device *dev) | |||
916 | pcan_usb_pro_set_led(dev, 0, 1); | 928 | pcan_usb_pro_set_led(dev, 0, 1); |
917 | 929 | ||
918 | return 0; | 930 | return 0; |
931 | |||
932 | err_out: | ||
933 | kfree(bi); | ||
934 | kfree(fi); | ||
935 | kfree(usb_if); | ||
936 | |||
937 | return err; | ||
919 | } | 938 | } |
920 | 939 | ||
921 | static void pcan_usb_pro_exit(struct peak_usb_device *dev) | 940 | static void pcan_usb_pro_exit(struct peak_usb_device *dev) |
diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_pro.h b/drivers/net/can/usb/peak_usb/pcan_usb_pro.h index a869918c5620..32275af547e0 100644 --- a/drivers/net/can/usb/peak_usb/pcan_usb_pro.h +++ b/drivers/net/can/usb/peak_usb/pcan_usb_pro.h | |||
@@ -29,6 +29,7 @@ | |||
29 | 29 | ||
30 | /* Vendor Request value for XXX_FCT */ | 30 | /* Vendor Request value for XXX_FCT */ |
31 | #define PCAN_USBPRO_FCT_DRVLD 5 /* tell device driver is loaded */ | 31 | #define PCAN_USBPRO_FCT_DRVLD 5 /* tell device driver is loaded */ |
32 | #define PCAN_USBPRO_FCT_DRVLD_REQ_LEN 16 | ||
32 | 33 | ||
33 | /* PCAN_USBPRO_INFO_BL vendor request record type */ | 34 | /* PCAN_USBPRO_INFO_BL vendor request record type */ |
34 | struct __packed pcan_usb_pro_blinfo { | 35 | struct __packed pcan_usb_pro_blinfo { |
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c index 14b5acd8eafc..4e42bdd7c522 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | |||
@@ -3191,11 +3191,11 @@ static u32 bnx2x_xmit_type(struct bnx2x *bp, struct sk_buff *skb) | |||
3191 | rc |= XMIT_CSUM_TCP; | 3191 | rc |= XMIT_CSUM_TCP; |
3192 | 3192 | ||
3193 | if (skb_is_gso_v6(skb)) { | 3193 | if (skb_is_gso_v6(skb)) { |
3194 | rc |= (XMIT_GSO_V6 | XMIT_CSUM_TCP | XMIT_CSUM_V6); | 3194 | rc |= (XMIT_GSO_V6 | XMIT_CSUM_TCP); |
3195 | if (rc & XMIT_CSUM_ENC) | 3195 | if (rc & XMIT_CSUM_ENC) |
3196 | rc |= XMIT_GSO_ENC_V6; | 3196 | rc |= XMIT_GSO_ENC_V6; |
3197 | } else if (skb_is_gso(skb)) { | 3197 | } else if (skb_is_gso(skb)) { |
3198 | rc |= (XMIT_GSO_V4 | XMIT_CSUM_V4 | XMIT_CSUM_TCP); | 3198 | rc |= (XMIT_GSO_V4 | XMIT_CSUM_TCP); |
3199 | if (rc & XMIT_CSUM_ENC) | 3199 | if (rc & XMIT_CSUM_ENC) |
3200 | rc |= XMIT_GSO_ENC_V4; | 3200 | rc |= XMIT_GSO_ENC_V4; |
3201 | } | 3201 | } |
@@ -3482,19 +3482,18 @@ static void bnx2x_update_pbds_gso_enc(struct sk_buff *skb, | |||
3482 | { | 3482 | { |
3483 | u16 hlen_w = 0; | 3483 | u16 hlen_w = 0; |
3484 | u8 outerip_off, outerip_len = 0; | 3484 | u8 outerip_off, outerip_len = 0; |
3485 | |||
3485 | /* from outer IP to transport */ | 3486 | /* from outer IP to transport */ |
3486 | hlen_w = (skb_inner_transport_header(skb) - | 3487 | hlen_w = (skb_inner_transport_header(skb) - |
3487 | skb_network_header(skb)) >> 1; | 3488 | skb_network_header(skb)) >> 1; |
3488 | 3489 | ||
3489 | /* transport len */ | 3490 | /* transport len */ |
3490 | if (xmit_type & XMIT_CSUM_TCP) | 3491 | hlen_w += inner_tcp_hdrlen(skb) >> 1; |
3491 | hlen_w += inner_tcp_hdrlen(skb) >> 1; | ||
3492 | else | ||
3493 | hlen_w += sizeof(struct udphdr) >> 1; | ||
3494 | 3492 | ||
3495 | pbd2->fw_ip_hdr_to_payload_w = hlen_w; | 3493 | pbd2->fw_ip_hdr_to_payload_w = hlen_w; |
3496 | 3494 | ||
3497 | if (xmit_type & XMIT_CSUM_ENC_V4) { | 3495 | /* outer IP header info */ |
3496 | if (xmit_type & XMIT_CSUM_V4) { | ||
3498 | struct iphdr *iph = ip_hdr(skb); | 3497 | struct iphdr *iph = ip_hdr(skb); |
3499 | pbd2->fw_ip_csum_wo_len_flags_frag = | 3498 | pbd2->fw_ip_csum_wo_len_flags_frag = |
3500 | bswab16(csum_fold((~iph->check) - | 3499 | bswab16(csum_fold((~iph->check) - |
@@ -3817,8 +3816,7 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
3817 | bnx2x_set_pbd_gso_e2(skb, &pbd_e2_parsing_data, | 3816 | bnx2x_set_pbd_gso_e2(skb, &pbd_e2_parsing_data, |
3818 | xmit_type); | 3817 | xmit_type); |
3819 | else | 3818 | else |
3820 | bnx2x_set_pbd_gso(skb, pbd_e1x, tx_start_bd, | 3819 | bnx2x_set_pbd_gso(skb, pbd_e1x, first_bd, xmit_type); |
3821 | xmit_type); | ||
3822 | } | 3820 | } |
3823 | 3821 | ||
3824 | /* Set the PBD's parsing_data field if not zero | 3822 | /* Set the PBD's parsing_data field if not zero |
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c index 3cfae0e49207..28a645fc68bf 100644 --- a/drivers/net/ethernet/broadcom/tg3.c +++ b/drivers/net/ethernet/broadcom/tg3.c | |||
@@ -9568,6 +9568,14 @@ static void tg3_rss_write_indir_tbl(struct tg3 *tp) | |||
9568 | } | 9568 | } |
9569 | } | 9569 | } |
9570 | 9570 | ||
9571 | static inline u32 tg3_lso_rd_dma_workaround_bit(struct tg3 *tp) | ||
9572 | { | ||
9573 | if (tg3_asic_rev(tp) == ASIC_REV_5719) | ||
9574 | return TG3_LSO_RD_DMA_TX_LENGTH_WA_5719; | ||
9575 | else | ||
9576 | return TG3_LSO_RD_DMA_TX_LENGTH_WA_5720; | ||
9577 | } | ||
9578 | |||
9571 | /* tp->lock is held. */ | 9579 | /* tp->lock is held. */ |
9572 | static int tg3_reset_hw(struct tg3 *tp, bool reset_phy) | 9580 | static int tg3_reset_hw(struct tg3 *tp, bool reset_phy) |
9573 | { | 9581 | { |
@@ -10224,16 +10232,17 @@ static int tg3_reset_hw(struct tg3 *tp, bool reset_phy) | |||
10224 | tw32_f(RDMAC_MODE, rdmac_mode); | 10232 | tw32_f(RDMAC_MODE, rdmac_mode); |
10225 | udelay(40); | 10233 | udelay(40); |
10226 | 10234 | ||
10227 | if (tg3_asic_rev(tp) == ASIC_REV_5719) { | 10235 | if (tg3_asic_rev(tp) == ASIC_REV_5719 || |
10236 | tg3_asic_rev(tp) == ASIC_REV_5720) { | ||
10228 | for (i = 0; i < TG3_NUM_RDMA_CHANNELS; i++) { | 10237 | for (i = 0; i < TG3_NUM_RDMA_CHANNELS; i++) { |
10229 | if (tr32(TG3_RDMA_LENGTH + (i << 2)) > TG3_MAX_MTU(tp)) | 10238 | if (tr32(TG3_RDMA_LENGTH + (i << 2)) > TG3_MAX_MTU(tp)) |
10230 | break; | 10239 | break; |
10231 | } | 10240 | } |
10232 | if (i < TG3_NUM_RDMA_CHANNELS) { | 10241 | if (i < TG3_NUM_RDMA_CHANNELS) { |
10233 | val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL); | 10242 | val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL); |
10234 | val |= TG3_LSO_RD_DMA_TX_LENGTH_WA; | 10243 | val |= tg3_lso_rd_dma_workaround_bit(tp); |
10235 | tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val); | 10244 | tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val); |
10236 | tg3_flag_set(tp, 5719_RDMA_BUG); | 10245 | tg3_flag_set(tp, 5719_5720_RDMA_BUG); |
10237 | } | 10246 | } |
10238 | } | 10247 | } |
10239 | 10248 | ||
@@ -10597,15 +10606,15 @@ static void tg3_periodic_fetch_stats(struct tg3 *tp) | |||
10597 | TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST); | 10606 | TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST); |
10598 | TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST); | 10607 | TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST); |
10599 | TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST); | 10608 | TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST); |
10600 | if (unlikely(tg3_flag(tp, 5719_RDMA_BUG) && | 10609 | if (unlikely(tg3_flag(tp, 5719_5720_RDMA_BUG) && |
10601 | (sp->tx_ucast_packets.low + sp->tx_mcast_packets.low + | 10610 | (sp->tx_ucast_packets.low + sp->tx_mcast_packets.low + |
10602 | sp->tx_bcast_packets.low) > TG3_NUM_RDMA_CHANNELS)) { | 10611 | sp->tx_bcast_packets.low) > TG3_NUM_RDMA_CHANNELS)) { |
10603 | u32 val; | 10612 | u32 val; |
10604 | 10613 | ||
10605 | val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL); | 10614 | val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL); |
10606 | val &= ~TG3_LSO_RD_DMA_TX_LENGTH_WA; | 10615 | val &= ~tg3_lso_rd_dma_workaround_bit(tp); |
10607 | tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val); | 10616 | tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val); |
10608 | tg3_flag_clear(tp, 5719_RDMA_BUG); | 10617 | tg3_flag_clear(tp, 5719_5720_RDMA_BUG); |
10609 | } | 10618 | } |
10610 | 10619 | ||
10611 | TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS); | 10620 | TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS); |
diff --git a/drivers/net/ethernet/broadcom/tg3.h b/drivers/net/ethernet/broadcom/tg3.h index 2530c20dd823..cd63d1189aae 100644 --- a/drivers/net/ethernet/broadcom/tg3.h +++ b/drivers/net/ethernet/broadcom/tg3.h | |||
@@ -1423,7 +1423,8 @@ | |||
1423 | #define TG3_LSO_RD_DMA_CRPTEN_CTRL 0x00004910 | 1423 | #define TG3_LSO_RD_DMA_CRPTEN_CTRL 0x00004910 |
1424 | #define TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K 0x00030000 | 1424 | #define TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K 0x00030000 |
1425 | #define TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K 0x000c0000 | 1425 | #define TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K 0x000c0000 |
1426 | #define TG3_LSO_RD_DMA_TX_LENGTH_WA 0x02000000 | 1426 | #define TG3_LSO_RD_DMA_TX_LENGTH_WA_5719 0x02000000 |
1427 | #define TG3_LSO_RD_DMA_TX_LENGTH_WA_5720 0x00200000 | ||
1427 | /* 0x4914 --> 0x4be0 unused */ | 1428 | /* 0x4914 --> 0x4be0 unused */ |
1428 | 1429 | ||
1429 | #define TG3_NUM_RDMA_CHANNELS 4 | 1430 | #define TG3_NUM_RDMA_CHANNELS 4 |
@@ -3060,7 +3061,7 @@ enum TG3_FLAGS { | |||
3060 | TG3_FLAG_APE_HAS_NCSI, | 3061 | TG3_FLAG_APE_HAS_NCSI, |
3061 | TG3_FLAG_TX_TSTAMP_EN, | 3062 | TG3_FLAG_TX_TSTAMP_EN, |
3062 | TG3_FLAG_4K_FIFO_LIMIT, | 3063 | TG3_FLAG_4K_FIFO_LIMIT, |
3063 | TG3_FLAG_5719_RDMA_BUG, | 3064 | TG3_FLAG_5719_5720_RDMA_BUG, |
3064 | TG3_FLAG_RESET_TASK_PENDING, | 3065 | TG3_FLAG_RESET_TASK_PENDING, |
3065 | TG3_FLAG_PTP_CAPABLE, | 3066 | TG3_FLAG_PTP_CAPABLE, |
3066 | TG3_FLAG_5705_PLUS, | 3067 | TG3_FLAG_5705_PLUS, |
diff --git a/drivers/net/ethernet/emulex/benet/be.h b/drivers/net/ethernet/emulex/benet/be.h index fcc30a2d831b..c827b1b6b1ce 100644 --- a/drivers/net/ethernet/emulex/benet/be.h +++ b/drivers/net/ethernet/emulex/benet/be.h | |||
@@ -262,6 +262,7 @@ struct be_rx_compl_info { | |||
262 | u8 ipv6; | 262 | u8 ipv6; |
263 | u8 vtm; | 263 | u8 vtm; |
264 | u8 pkt_type; | 264 | u8 pkt_type; |
265 | u8 ip_frag; | ||
265 | }; | 266 | }; |
266 | 267 | ||
267 | struct be_rx_obj { | 268 | struct be_rx_obj { |
diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.c b/drivers/net/ethernet/emulex/benet/be_cmds.c index 4d0ec3649a63..6e6e0a117ee2 100644 --- a/drivers/net/ethernet/emulex/benet/be_cmds.c +++ b/drivers/net/ethernet/emulex/benet/be_cmds.c | |||
@@ -562,7 +562,7 @@ int lancer_test_and_set_rdy_state(struct be_adapter *adapter) | |||
562 | 562 | ||
563 | resource_error = lancer_provisioning_error(adapter); | 563 | resource_error = lancer_provisioning_error(adapter); |
564 | if (resource_error) | 564 | if (resource_error) |
565 | return -1; | 565 | return -EAGAIN; |
566 | 566 | ||
567 | status = lancer_wait_ready(adapter); | 567 | status = lancer_wait_ready(adapter); |
568 | if (!status) { | 568 | if (!status) { |
@@ -590,8 +590,8 @@ int lancer_test_and_set_rdy_state(struct be_adapter *adapter) | |||
590 | * when PF provisions resources. | 590 | * when PF provisions resources. |
591 | */ | 591 | */ |
592 | resource_error = lancer_provisioning_error(adapter); | 592 | resource_error = lancer_provisioning_error(adapter); |
593 | if (status == -1 && !resource_error) | 593 | if (resource_error) |
594 | adapter->eeh_error = true; | 594 | status = -EAGAIN; |
595 | 595 | ||
596 | return status; | 596 | return status; |
597 | } | 597 | } |
diff --git a/drivers/net/ethernet/emulex/benet/be_hw.h b/drivers/net/ethernet/emulex/benet/be_hw.h index 0311d9bfe858..3e2162121601 100644 --- a/drivers/net/ethernet/emulex/benet/be_hw.h +++ b/drivers/net/ethernet/emulex/benet/be_hw.h | |||
@@ -358,7 +358,7 @@ struct amap_eth_rx_compl_v0 { | |||
358 | u8 ip_version; /* dword 1 */ | 358 | u8 ip_version; /* dword 1 */ |
359 | u8 macdst[6]; /* dword 1 */ | 359 | u8 macdst[6]; /* dword 1 */ |
360 | u8 vtp; /* dword 1 */ | 360 | u8 vtp; /* dword 1 */ |
361 | u8 rsvd0; /* dword 1 */ | 361 | u8 ip_frag; /* dword 1 */ |
362 | u8 fragndx[10]; /* dword 1 */ | 362 | u8 fragndx[10]; /* dword 1 */ |
363 | u8 ct[2]; /* dword 1 */ | 363 | u8 ct[2]; /* dword 1 */ |
364 | u8 sw; /* dword 1 */ | 364 | u8 sw; /* dword 1 */ |
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c index 5d9044e4afe2..9aef457dacbb 100644 --- a/drivers/net/ethernet/emulex/benet/be_main.c +++ b/drivers/net/ethernet/emulex/benet/be_main.c | |||
@@ -1625,6 +1625,8 @@ static void be_parse_rx_compl_v0(struct be_eth_rx_compl *compl, | |||
1625 | compl); | 1625 | compl); |
1626 | } | 1626 | } |
1627 | rxcp->port = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, port, compl); | 1627 | rxcp->port = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, port, compl); |
1628 | rxcp->ip_frag = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, | ||
1629 | ip_frag, compl); | ||
1628 | } | 1630 | } |
1629 | 1631 | ||
1630 | static struct be_rx_compl_info *be_rx_compl_get(struct be_rx_obj *rxo) | 1632 | static struct be_rx_compl_info *be_rx_compl_get(struct be_rx_obj *rxo) |
@@ -1646,6 +1648,9 @@ static struct be_rx_compl_info *be_rx_compl_get(struct be_rx_obj *rxo) | |||
1646 | else | 1648 | else |
1647 | be_parse_rx_compl_v0(compl, rxcp); | 1649 | be_parse_rx_compl_v0(compl, rxcp); |
1648 | 1650 | ||
1651 | if (rxcp->ip_frag) | ||
1652 | rxcp->l4_csum = 0; | ||
1653 | |||
1649 | if (rxcp->vlanf) { | 1654 | if (rxcp->vlanf) { |
1650 | /* vlanf could be wrongly set in some cards. | 1655 | /* vlanf could be wrongly set in some cards. |
1651 | * ignore if vtm is not set */ | 1656 | * ignore if vtm is not set */ |
@@ -2194,7 +2199,7 @@ static irqreturn_t be_msix(int irq, void *dev) | |||
2194 | 2199 | ||
2195 | static inline bool do_gro(struct be_rx_compl_info *rxcp) | 2200 | static inline bool do_gro(struct be_rx_compl_info *rxcp) |
2196 | { | 2201 | { |
2197 | return (rxcp->tcpf && !rxcp->err) ? true : false; | 2202 | return (rxcp->tcpf && !rxcp->err && rxcp->l4_csum) ? true : false; |
2198 | } | 2203 | } |
2199 | 2204 | ||
2200 | static int be_process_rx(struct be_rx_obj *rxo, struct napi_struct *napi, | 2205 | static int be_process_rx(struct be_rx_obj *rxo, struct napi_struct *napi, |
@@ -4090,6 +4095,7 @@ static int be_get_initial_config(struct be_adapter *adapter) | |||
4090 | 4095 | ||
4091 | static int lancer_recover_func(struct be_adapter *adapter) | 4096 | static int lancer_recover_func(struct be_adapter *adapter) |
4092 | { | 4097 | { |
4098 | struct device *dev = &adapter->pdev->dev; | ||
4093 | int status; | 4099 | int status; |
4094 | 4100 | ||
4095 | status = lancer_test_and_set_rdy_state(adapter); | 4101 | status = lancer_test_and_set_rdy_state(adapter); |
@@ -4101,8 +4107,7 @@ static int lancer_recover_func(struct be_adapter *adapter) | |||
4101 | 4107 | ||
4102 | be_clear(adapter); | 4108 | be_clear(adapter); |
4103 | 4109 | ||
4104 | adapter->hw_error = false; | 4110 | be_clear_all_error(adapter); |
4105 | adapter->fw_timeout = false; | ||
4106 | 4111 | ||
4107 | status = be_setup(adapter); | 4112 | status = be_setup(adapter); |
4108 | if (status) | 4113 | if (status) |
@@ -4114,13 +4119,13 @@ static int lancer_recover_func(struct be_adapter *adapter) | |||
4114 | goto err; | 4119 | goto err; |
4115 | } | 4120 | } |
4116 | 4121 | ||
4117 | dev_err(&adapter->pdev->dev, | 4122 | dev_err(dev, "Error recovery successful\n"); |
4118 | "Adapter SLIPORT recovery succeeded\n"); | ||
4119 | return 0; | 4123 | return 0; |
4120 | err: | 4124 | err: |
4121 | if (adapter->eeh_error) | 4125 | if (status == -EAGAIN) |
4122 | dev_err(&adapter->pdev->dev, | 4126 | dev_err(dev, "Waiting for resource provisioning\n"); |
4123 | "Adapter SLIPORT recovery failed\n"); | 4127 | else |
4128 | dev_err(dev, "Error recovery failed\n"); | ||
4124 | 4129 | ||
4125 | return status; | 4130 | return status; |
4126 | } | 4131 | } |
@@ -4129,28 +4134,27 @@ static void be_func_recovery_task(struct work_struct *work) | |||
4129 | { | 4134 | { |
4130 | struct be_adapter *adapter = | 4135 | struct be_adapter *adapter = |
4131 | container_of(work, struct be_adapter, func_recovery_work.work); | 4136 | container_of(work, struct be_adapter, func_recovery_work.work); |
4132 | int status; | 4137 | int status = 0; |
4133 | 4138 | ||
4134 | be_detect_error(adapter); | 4139 | be_detect_error(adapter); |
4135 | 4140 | ||
4136 | if (adapter->hw_error && lancer_chip(adapter)) { | 4141 | if (adapter->hw_error && lancer_chip(adapter)) { |
4137 | 4142 | ||
4138 | if (adapter->eeh_error) | ||
4139 | goto out; | ||
4140 | |||
4141 | rtnl_lock(); | 4143 | rtnl_lock(); |
4142 | netif_device_detach(adapter->netdev); | 4144 | netif_device_detach(adapter->netdev); |
4143 | rtnl_unlock(); | 4145 | rtnl_unlock(); |
4144 | 4146 | ||
4145 | status = lancer_recover_func(adapter); | 4147 | status = lancer_recover_func(adapter); |
4146 | |||
4147 | if (!status) | 4148 | if (!status) |
4148 | netif_device_attach(adapter->netdev); | 4149 | netif_device_attach(adapter->netdev); |
4149 | } | 4150 | } |
4150 | 4151 | ||
4151 | out: | 4152 | /* In Lancer, for all errors other than provisioning error (-EAGAIN), |
4152 | schedule_delayed_work(&adapter->func_recovery_work, | 4153 | * no need to attempt further recovery. |
4153 | msecs_to_jiffies(1000)); | 4154 | */ |
4155 | if (!status || status == -EAGAIN) | ||
4156 | schedule_delayed_work(&adapter->func_recovery_work, | ||
4157 | msecs_to_jiffies(1000)); | ||
4154 | } | 4158 | } |
4155 | 4159 | ||
4156 | static void be_worker(struct work_struct *work) | 4160 | static void be_worker(struct work_struct *work) |
@@ -4433,20 +4437,19 @@ static pci_ers_result_t be_eeh_err_detected(struct pci_dev *pdev, | |||
4433 | 4437 | ||
4434 | dev_err(&adapter->pdev->dev, "EEH error detected\n"); | 4438 | dev_err(&adapter->pdev->dev, "EEH error detected\n"); |
4435 | 4439 | ||
4436 | adapter->eeh_error = true; | 4440 | if (!adapter->eeh_error) { |
4437 | 4441 | adapter->eeh_error = true; | |
4438 | cancel_delayed_work_sync(&adapter->func_recovery_work); | ||
4439 | 4442 | ||
4440 | rtnl_lock(); | 4443 | cancel_delayed_work_sync(&adapter->func_recovery_work); |
4441 | netif_device_detach(netdev); | ||
4442 | rtnl_unlock(); | ||
4443 | 4444 | ||
4444 | if (netif_running(netdev)) { | ||
4445 | rtnl_lock(); | 4445 | rtnl_lock(); |
4446 | be_close(netdev); | 4446 | netif_device_detach(netdev); |
4447 | if (netif_running(netdev)) | ||
4448 | be_close(netdev); | ||
4447 | rtnl_unlock(); | 4449 | rtnl_unlock(); |
4450 | |||
4451 | be_clear(adapter); | ||
4448 | } | 4452 | } |
4449 | be_clear(adapter); | ||
4450 | 4453 | ||
4451 | if (state == pci_channel_io_perm_failure) | 4454 | if (state == pci_channel_io_perm_failure) |
4452 | return PCI_ERS_RESULT_DISCONNECT; | 4455 | return PCI_ERS_RESULT_DISCONNECT; |
@@ -4471,7 +4474,6 @@ static pci_ers_result_t be_eeh_reset(struct pci_dev *pdev) | |||
4471 | int status; | 4474 | int status; |
4472 | 4475 | ||
4473 | dev_info(&adapter->pdev->dev, "EEH reset\n"); | 4476 | dev_info(&adapter->pdev->dev, "EEH reset\n"); |
4474 | be_clear_all_error(adapter); | ||
4475 | 4477 | ||
4476 | status = pci_enable_device(pdev); | 4478 | status = pci_enable_device(pdev); |
4477 | if (status) | 4479 | if (status) |
@@ -4489,6 +4491,7 @@ static pci_ers_result_t be_eeh_reset(struct pci_dev *pdev) | |||
4489 | return PCI_ERS_RESULT_DISCONNECT; | 4491 | return PCI_ERS_RESULT_DISCONNECT; |
4490 | 4492 | ||
4491 | pci_cleanup_aer_uncorrect_error_status(pdev); | 4493 | pci_cleanup_aer_uncorrect_error_status(pdev); |
4494 | be_clear_all_error(adapter); | ||
4492 | return PCI_ERS_RESULT_RECOVERED; | 4495 | return PCI_ERS_RESULT_RECOVERED; |
4493 | } | 4496 | } |
4494 | 4497 | ||
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c index 9b0c6472bf04..c42c42a0cc57 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c | |||
@@ -1037,6 +1037,18 @@ static void fec_get_mac(struct net_device *ndev) | |||
1037 | iap = &tmpaddr[0]; | 1037 | iap = &tmpaddr[0]; |
1038 | } | 1038 | } |
1039 | 1039 | ||
1040 | /* | ||
1041 | * 5) random mac address | ||
1042 | */ | ||
1043 | if (!is_valid_ether_addr(iap)) { | ||
1044 | /* Report it and use a random ethernet address instead */ | ||
1045 | netdev_err(ndev, "Invalid MAC address: %pM\n", iap); | ||
1046 | eth_hw_addr_random(ndev); | ||
1047 | netdev_info(ndev, "Using random MAC address: %pM\n", | ||
1048 | ndev->dev_addr); | ||
1049 | return; | ||
1050 | } | ||
1051 | |||
1040 | memcpy(ndev->dev_addr, iap, ETH_ALEN); | 1052 | memcpy(ndev->dev_addr, iap, ETH_ALEN); |
1041 | 1053 | ||
1042 | /* Adjust MAC if using macaddr */ | 1054 | /* Adjust MAC if using macaddr */ |
diff --git a/drivers/net/ethernet/mellanox/mlx4/cmd.c b/drivers/net/ethernet/mellanox/mlx4/cmd.c index 1df56cc50ee9..0e572a527154 100644 --- a/drivers/net/ethernet/mellanox/mlx4/cmd.c +++ b/drivers/net/ethernet/mellanox/mlx4/cmd.c | |||
@@ -222,8 +222,6 @@ static int mlx4_comm_cmd_poll(struct mlx4_dev *dev, u8 cmd, u16 param, | |||
222 | * FLR process. The only non-zero result in the RESET command | 222 | * FLR process. The only non-zero result in the RESET command |
223 | * is MLX4_DELAY_RESET_SLAVE*/ | 223 | * is MLX4_DELAY_RESET_SLAVE*/ |
224 | if ((MLX4_COMM_CMD_RESET == cmd)) { | 224 | if ((MLX4_COMM_CMD_RESET == cmd)) { |
225 | mlx4_warn(dev, "Got slave FLRed from Communication" | ||
226 | " channel (ret:0x%x)\n", ret_from_pending); | ||
227 | err = MLX4_DELAY_RESET_SLAVE; | 225 | err = MLX4_DELAY_RESET_SLAVE; |
228 | } else { | 226 | } else { |
229 | mlx4_warn(dev, "Communication channel timed out\n"); | 227 | mlx4_warn(dev, "Communication channel timed out\n"); |
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c index b35f94700093..89c47ea84b50 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c | |||
@@ -1323,6 +1323,7 @@ static void mlx4_en_auto_moderation(struct mlx4_en_priv *priv) | |||
1323 | priv->last_moder_time[ring] = moder_time; | 1323 | priv->last_moder_time[ring] = moder_time; |
1324 | cq = &priv->rx_cq[ring]; | 1324 | cq = &priv->rx_cq[ring]; |
1325 | cq->moder_time = moder_time; | 1325 | cq->moder_time = moder_time; |
1326 | cq->moder_cnt = priv->rx_frames; | ||
1326 | err = mlx4_en_set_cq_moder(priv, cq); | 1327 | err = mlx4_en_set_cq_moder(priv, cq); |
1327 | if (err) | 1328 | if (err) |
1328 | en_err(priv, "Failed modifying moderation for cq:%d\n", | 1329 | en_err(priv, "Failed modifying moderation for cq:%d\n", |
@@ -2118,6 +2119,7 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port, | |||
2118 | struct mlx4_en_priv *priv; | 2119 | struct mlx4_en_priv *priv; |
2119 | int i; | 2120 | int i; |
2120 | int err; | 2121 | int err; |
2122 | u64 mac_u64; | ||
2121 | 2123 | ||
2122 | dev = alloc_etherdev_mqs(sizeof(struct mlx4_en_priv), | 2124 | dev = alloc_etherdev_mqs(sizeof(struct mlx4_en_priv), |
2123 | MAX_TX_RINGS, MAX_RX_RINGS); | 2125 | MAX_TX_RINGS, MAX_RX_RINGS); |
@@ -2191,10 +2193,17 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port, | |||
2191 | dev->addr_len = ETH_ALEN; | 2193 | dev->addr_len = ETH_ALEN; |
2192 | mlx4_en_u64_to_mac(dev->dev_addr, mdev->dev->caps.def_mac[priv->port]); | 2194 | mlx4_en_u64_to_mac(dev->dev_addr, mdev->dev->caps.def_mac[priv->port]); |
2193 | if (!is_valid_ether_addr(dev->dev_addr)) { | 2195 | if (!is_valid_ether_addr(dev->dev_addr)) { |
2194 | en_err(priv, "Port: %d, invalid mac burned: %pM, quiting\n", | 2196 | if (mlx4_is_slave(priv->mdev->dev)) { |
2195 | priv->port, dev->dev_addr); | 2197 | eth_hw_addr_random(dev); |
2196 | err = -EINVAL; | 2198 | en_warn(priv, "Assigned random MAC address %pM\n", dev->dev_addr); |
2197 | goto out; | 2199 | mac_u64 = mlx4_en_mac_to_u64(dev->dev_addr); |
2200 | mdev->dev->caps.def_mac[priv->port] = mac_u64; | ||
2201 | } else { | ||
2202 | en_err(priv, "Port: %d, invalid mac burned: %pM, quiting\n", | ||
2203 | priv->port, dev->dev_addr); | ||
2204 | err = -EINVAL; | ||
2205 | goto out; | ||
2206 | } | ||
2198 | } | 2207 | } |
2199 | 2208 | ||
2200 | memcpy(priv->prev_mac, dev->dev_addr, sizeof(priv->prev_mac)); | 2209 | memcpy(priv->prev_mac, dev->dev_addr, sizeof(priv->prev_mac)); |
diff --git a/drivers/net/ethernet/mellanox/mlx4/fw.c b/drivers/net/ethernet/mellanox/mlx4/fw.c index 58a8e535d698..2c97901c6a6d 100644 --- a/drivers/net/ethernet/mellanox/mlx4/fw.c +++ b/drivers/net/ethernet/mellanox/mlx4/fw.c | |||
@@ -840,12 +840,16 @@ int mlx4_QUERY_PORT_wrapper(struct mlx4_dev *dev, int slave, | |||
840 | MLX4_CMD_NATIVE); | 840 | MLX4_CMD_NATIVE); |
841 | 841 | ||
842 | if (!err && dev->caps.function != slave) { | 842 | if (!err && dev->caps.function != slave) { |
843 | /* set slave default_mac address */ | ||
844 | MLX4_GET(def_mac, outbox->buf, QUERY_PORT_MAC_OFFSET); | ||
845 | def_mac += slave << 8; | ||
846 | /* if config MAC in DB use it */ | 843 | /* if config MAC in DB use it */ |
847 | if (priv->mfunc.master.vf_oper[slave].vport[vhcr->in_modifier].state.mac) | 844 | if (priv->mfunc.master.vf_oper[slave].vport[vhcr->in_modifier].state.mac) |
848 | def_mac = priv->mfunc.master.vf_oper[slave].vport[vhcr->in_modifier].state.mac; | 845 | def_mac = priv->mfunc.master.vf_oper[slave].vport[vhcr->in_modifier].state.mac; |
846 | else { | ||
847 | /* set slave default_mac address */ | ||
848 | MLX4_GET(def_mac, outbox->buf, QUERY_PORT_MAC_OFFSET); | ||
849 | def_mac += slave << 8; | ||
850 | priv->mfunc.master.vf_admin[slave].vport[vhcr->in_modifier].mac = def_mac; | ||
851 | } | ||
852 | |||
849 | MLX4_PUT(outbox->buf, def_mac, QUERY_PORT_MAC_OFFSET); | 853 | MLX4_PUT(outbox->buf, def_mac, QUERY_PORT_MAC_OFFSET); |
850 | 854 | ||
851 | /* get port type - currently only eth is enabled */ | 855 | /* get port type - currently only eth is enabled */ |
diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c index 0d32a82458bf..2f4a26039e80 100644 --- a/drivers/net/ethernet/mellanox/mlx4/main.c +++ b/drivers/net/ethernet/mellanox/mlx4/main.c | |||
@@ -1290,7 +1290,6 @@ static int mlx4_init_slave(struct mlx4_dev *dev) | |||
1290 | { | 1290 | { |
1291 | struct mlx4_priv *priv = mlx4_priv(dev); | 1291 | struct mlx4_priv *priv = mlx4_priv(dev); |
1292 | u64 dma = (u64) priv->mfunc.vhcr_dma; | 1292 | u64 dma = (u64) priv->mfunc.vhcr_dma; |
1293 | int num_of_reset_retries = NUM_OF_RESET_RETRIES; | ||
1294 | int ret_from_reset = 0; | 1293 | int ret_from_reset = 0; |
1295 | u32 slave_read; | 1294 | u32 slave_read; |
1296 | u32 cmd_channel_ver; | 1295 | u32 cmd_channel_ver; |
@@ -1304,18 +1303,10 @@ static int mlx4_init_slave(struct mlx4_dev *dev) | |||
1304 | * NUM_OF_RESET_RETRIES times before leaving.*/ | 1303 | * NUM_OF_RESET_RETRIES times before leaving.*/ |
1305 | if (ret_from_reset) { | 1304 | if (ret_from_reset) { |
1306 | if (MLX4_DELAY_RESET_SLAVE == ret_from_reset) { | 1305 | if (MLX4_DELAY_RESET_SLAVE == ret_from_reset) { |
1307 | msleep(SLEEP_TIME_IN_RESET); | 1306 | mlx4_warn(dev, "slave is currently in the " |
1308 | while (ret_from_reset && num_of_reset_retries) { | 1307 | "middle of FLR. Deferring probe.\n"); |
1309 | mlx4_warn(dev, "slave is currently in the" | 1308 | mutex_unlock(&priv->cmd.slave_cmd_mutex); |
1310 | "middle of FLR. retrying..." | 1309 | return -EPROBE_DEFER; |
1311 | "(try num:%d)\n", | ||
1312 | (NUM_OF_RESET_RETRIES - | ||
1313 | num_of_reset_retries + 1)); | ||
1314 | ret_from_reset = | ||
1315 | mlx4_comm_cmd(dev, MLX4_COMM_CMD_RESET, | ||
1316 | 0, MLX4_COMM_TIME); | ||
1317 | num_of_reset_retries = num_of_reset_retries - 1; | ||
1318 | } | ||
1319 | } else | 1310 | } else |
1320 | goto err; | 1311 | goto err; |
1321 | } | 1312 | } |
@@ -1526,7 +1517,8 @@ static int mlx4_init_hca(struct mlx4_dev *dev) | |||
1526 | } else { | 1517 | } else { |
1527 | err = mlx4_init_slave(dev); | 1518 | err = mlx4_init_slave(dev); |
1528 | if (err) { | 1519 | if (err) { |
1529 | mlx4_err(dev, "Failed to initialize slave\n"); | 1520 | if (err != -EPROBE_DEFER) |
1521 | mlx4_err(dev, "Failed to initialize slave\n"); | ||
1530 | return err; | 1522 | return err; |
1531 | } | 1523 | } |
1532 | 1524 | ||
diff --git a/drivers/net/ethernet/qlogic/qlge/qlge_main.c b/drivers/net/ethernet/qlogic/qlge/qlge_main.c index e04d471acb10..2553cf4503b9 100644 --- a/drivers/net/ethernet/qlogic/qlge/qlge_main.c +++ b/drivers/net/ethernet/qlogic/qlge/qlge_main.c | |||
@@ -4717,6 +4717,7 @@ static int qlge_probe(struct pci_dev *pdev, | |||
4717 | dev_err(&pdev->dev, "net device registration failed.\n"); | 4717 | dev_err(&pdev->dev, "net device registration failed.\n"); |
4718 | ql_release_all(pdev); | 4718 | ql_release_all(pdev); |
4719 | pci_disable_device(pdev); | 4719 | pci_disable_device(pdev); |
4720 | free_netdev(ndev); | ||
4720 | return err; | 4721 | return err; |
4721 | } | 4722 | } |
4722 | /* Start up the timer to trigger EEH if | 4723 | /* Start up the timer to trigger EEH if |
diff --git a/drivers/net/ethernet/xilinx/xilinx_emaclite.c b/drivers/net/ethernet/xilinx/xilinx_emaclite.c index c4d8aeffb4ba..1cd131bde680 100644 --- a/drivers/net/ethernet/xilinx/xilinx_emaclite.c +++ b/drivers/net/ethernet/xilinx/xilinx_emaclite.c | |||
@@ -963,7 +963,8 @@ static int xemaclite_open(struct net_device *dev) | |||
963 | phy_write(lp->phy_dev, MII_CTRL1000, 0); | 963 | phy_write(lp->phy_dev, MII_CTRL1000, 0); |
964 | 964 | ||
965 | /* Advertise only 10 and 100mbps full/half duplex speeds */ | 965 | /* Advertise only 10 and 100mbps full/half duplex speeds */ |
966 | phy_write(lp->phy_dev, MII_ADVERTISE, ADVERTISE_ALL); | 966 | phy_write(lp->phy_dev, MII_ADVERTISE, ADVERTISE_ALL | |
967 | ADVERTISE_CSMA); | ||
967 | 968 | ||
968 | /* Restart auto negotiation */ | 969 | /* Restart auto negotiation */ |
969 | bmcr = phy_read(lp->phy_dev, MII_BMCR); | 970 | bmcr = phy_read(lp->phy_dev, MII_BMCR); |
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c index 088c55496191..ab2307b5d9a7 100644 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <linux/inetdevice.h> | 31 | #include <linux/inetdevice.h> |
32 | #include <linux/etherdevice.h> | 32 | #include <linux/etherdevice.h> |
33 | #include <linux/skbuff.h> | 33 | #include <linux/skbuff.h> |
34 | #include <linux/if_vlan.h> | ||
34 | #include <linux/in.h> | 35 | #include <linux/in.h> |
35 | #include <linux/slab.h> | 36 | #include <linux/slab.h> |
36 | #include <net/arp.h> | 37 | #include <net/arp.h> |
@@ -284,7 +285,7 @@ int netvsc_recv_callback(struct hv_device *device_obj, | |||
284 | 285 | ||
285 | skb->protocol = eth_type_trans(skb, net); | 286 | skb->protocol = eth_type_trans(skb, net); |
286 | skb->ip_summed = CHECKSUM_NONE; | 287 | skb->ip_summed = CHECKSUM_NONE; |
287 | skb->vlan_tci = packet->vlan_tci; | 288 | __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), packet->vlan_tci); |
288 | 289 | ||
289 | net->stats.rx_packets++; | 290 | net->stats.rx_packets++; |
290 | net->stats.rx_bytes += packet->total_data_buflen; | 291 | net->stats.rx_bytes += packet->total_data_buflen; |
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index b2a94e436ed8..10d058ab4f79 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c | |||
@@ -1050,7 +1050,7 @@ int phy_init_eee(struct phy_device *phydev, bool clk_stop_enable) | |||
1050 | adv = mmd_eee_adv_to_ethtool_adv_t(eee_adv); | 1050 | adv = mmd_eee_adv_to_ethtool_adv_t(eee_adv); |
1051 | lp = mmd_eee_adv_to_ethtool_adv_t(eee_lp); | 1051 | lp = mmd_eee_adv_to_ethtool_adv_t(eee_lp); |
1052 | idx = phy_find_setting(phydev->speed, phydev->duplex); | 1052 | idx = phy_find_setting(phydev->speed, phydev->duplex); |
1053 | if ((lp & adv & settings[idx].setting)) | 1053 | if (!(lp & adv & settings[idx].setting)) |
1054 | goto eee_exit; | 1054 | goto eee_exit; |
1055 | 1055 | ||
1056 | if (clk_stop_enable) { | 1056 | if (clk_stop_enable) { |
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c index 9273f48a512b..04e9adb748c5 100644 --- a/drivers/net/team/team.c +++ b/drivers/net/team/team.c | |||
@@ -2374,7 +2374,8 @@ static int team_nl_send_port_list_get(struct team *team, u32 portid, u32 seq, | |||
2374 | bool incomplete; | 2374 | bool incomplete; |
2375 | int i; | 2375 | int i; |
2376 | 2376 | ||
2377 | port = list_first_entry(&team->port_list, struct team_port, list); | 2377 | port = list_first_entry_or_null(&team->port_list, |
2378 | struct team_port, list); | ||
2378 | 2379 | ||
2379 | start_again: | 2380 | start_again: |
2380 | err = __send_and_alloc_skb(&skb, team, portid, send_func); | 2381 | err = __send_and_alloc_skb(&skb, team, portid, send_func); |
@@ -2402,8 +2403,8 @@ start_again: | |||
2402 | err = team_nl_fill_one_port_get(skb, one_port); | 2403 | err = team_nl_fill_one_port_get(skb, one_port); |
2403 | if (err) | 2404 | if (err) |
2404 | goto errout; | 2405 | goto errout; |
2405 | } else { | 2406 | } else if (port) { |
2406 | list_for_each_entry(port, &team->port_list, list) { | 2407 | list_for_each_entry_from(port, &team->port_list, list) { |
2407 | err = team_nl_fill_one_port_get(skb, port); | 2408 | err = team_nl_fill_one_port_get(skb, port); |
2408 | if (err) { | 2409 | if (err) { |
2409 | if (err == -EMSGSIZE) { | 2410 | if (err == -EMSGSIZE) { |
diff --git a/drivers/net/tun.c b/drivers/net/tun.c index f042b0373e5d..89776c592151 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c | |||
@@ -1585,6 +1585,10 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr) | |||
1585 | else | 1585 | else |
1586 | return -EINVAL; | 1586 | return -EINVAL; |
1587 | 1587 | ||
1588 | if (!!(ifr->ifr_flags & IFF_MULTI_QUEUE) != | ||
1589 | !!(tun->flags & TUN_TAP_MQ)) | ||
1590 | return -EINVAL; | ||
1591 | |||
1588 | if (tun_not_capable(tun)) | 1592 | if (tun_not_capable(tun)) |
1589 | return -EPERM; | 1593 | return -EPERM; |
1590 | err = security_tun_dev_open(tun->security); | 1594 | err = security_tun_dev_open(tun->security); |
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h index 54ba42f4108a..874f6570bd1c 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h +++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h | |||
@@ -68,13 +68,16 @@ | |||
68 | #define AR9300_BASE_ADDR 0x3ff | 68 | #define AR9300_BASE_ADDR 0x3ff |
69 | #define AR9300_BASE_ADDR_512 0x1ff | 69 | #define AR9300_BASE_ADDR_512 0x1ff |
70 | 70 | ||
71 | #define AR9300_OTP_BASE (AR_SREV_9340(ah) ? 0x30000 : 0x14000) | 71 | #define AR9300_OTP_BASE \ |
72 | #define AR9300_OTP_STATUS (AR_SREV_9340(ah) ? 0x30018 : 0x15f18) | 72 | ((AR_SREV_9340(ah) || AR_SREV_9550(ah)) ? 0x30000 : 0x14000) |
73 | #define AR9300_OTP_STATUS \ | ||
74 | ((AR_SREV_9340(ah) || AR_SREV_9550(ah)) ? 0x30018 : 0x15f18) | ||
73 | #define AR9300_OTP_STATUS_TYPE 0x7 | 75 | #define AR9300_OTP_STATUS_TYPE 0x7 |
74 | #define AR9300_OTP_STATUS_VALID 0x4 | 76 | #define AR9300_OTP_STATUS_VALID 0x4 |
75 | #define AR9300_OTP_STATUS_ACCESS_BUSY 0x2 | 77 | #define AR9300_OTP_STATUS_ACCESS_BUSY 0x2 |
76 | #define AR9300_OTP_STATUS_SM_BUSY 0x1 | 78 | #define AR9300_OTP_STATUS_SM_BUSY 0x1 |
77 | #define AR9300_OTP_READ_DATA (AR_SREV_9340(ah) ? 0x3001c : 0x15f1c) | 79 | #define AR9300_OTP_READ_DATA \ |
80 | ((AR_SREV_9340(ah) || AR_SREV_9550(ah)) ? 0x3001c : 0x15f1c) | ||
78 | 81 | ||
79 | enum targetPowerHTRates { | 82 | enum targetPowerHTRates { |
80 | HT_TARGET_RATE_0_8_16, | 83 | HT_TARGET_RATE_0_8_16, |
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.c b/drivers/net/wireless/ath/ath9k/ar9003_phy.c index 2bf6548dd143..e1714d7c9eeb 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c | |||
@@ -334,7 +334,8 @@ static void ar9003_hw_spur_ofdm(struct ath_hw *ah, | |||
334 | REG_RMW_FIELD(ah, AR_PHY_SPUR_REG, | 334 | REG_RMW_FIELD(ah, AR_PHY_SPUR_REG, |
335 | AR_PHY_SPUR_REG_EN_VIT_SPUR_RSSI, 1); | 335 | AR_PHY_SPUR_REG_EN_VIT_SPUR_RSSI, 1); |
336 | 336 | ||
337 | if (REG_READ_FIELD(ah, AR_PHY_MODE, | 337 | if (!AR_SREV_9340(ah) && |
338 | REG_READ_FIELD(ah, AR_PHY_MODE, | ||
338 | AR_PHY_MODE_DYNAMIC) == 0x1) | 339 | AR_PHY_MODE_DYNAMIC) == 0x1) |
339 | REG_RMW_FIELD(ah, AR_PHY_SPUR_REG, | 340 | REG_RMW_FIELD(ah, AR_PHY_SPUR_REG, |
340 | AR_PHY_SPUR_REG_ENABLE_NF_RSSI_SPUR_MIT, 1); | 341 | AR_PHY_SPUR_REG_ENABLE_NF_RSSI_SPUR_MIT, 1); |
diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h index 366002f266f8..42b03dc39d14 100644 --- a/drivers/net/wireless/ath/ath9k/ath9k.h +++ b/drivers/net/wireless/ath/ath9k/ath9k.h | |||
@@ -251,10 +251,9 @@ struct ath_atx_tid { | |||
251 | int tidno; | 251 | int tidno; |
252 | int baw_head; /* first un-acked tx buffer */ | 252 | int baw_head; /* first un-acked tx buffer */ |
253 | int baw_tail; /* next unused tx buffer slot */ | 253 | int baw_tail; /* next unused tx buffer slot */ |
254 | int sched; | 254 | bool sched; |
255 | int paused; | 255 | bool paused; |
256 | u8 state; | 256 | bool active; |
257 | bool stop_cb; | ||
258 | }; | 257 | }; |
259 | 258 | ||
260 | struct ath_node { | 259 | struct ath_node { |
@@ -275,10 +274,6 @@ struct ath_node { | |||
275 | #endif | 274 | #endif |
276 | }; | 275 | }; |
277 | 276 | ||
278 | #define AGGR_CLEANUP BIT(1) | ||
279 | #define AGGR_ADDBA_COMPLETE BIT(2) | ||
280 | #define AGGR_ADDBA_PROGRESS BIT(3) | ||
281 | |||
282 | struct ath_tx_control { | 277 | struct ath_tx_control { |
283 | struct ath_txq *txq; | 278 | struct ath_txq *txq; |
284 | struct ath_node *an; | 279 | struct ath_node *an; |
@@ -352,8 +347,7 @@ void ath_tx_tasklet(struct ath_softc *sc); | |||
352 | void ath_tx_edma_tasklet(struct ath_softc *sc); | 347 | void ath_tx_edma_tasklet(struct ath_softc *sc); |
353 | int ath_tx_aggr_start(struct ath_softc *sc, struct ieee80211_sta *sta, | 348 | int ath_tx_aggr_start(struct ath_softc *sc, struct ieee80211_sta *sta, |
354 | u16 tid, u16 *ssn); | 349 | u16 tid, u16 *ssn); |
355 | bool ath_tx_aggr_stop(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid, | 350 | void ath_tx_aggr_stop(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid); |
356 | bool flush); | ||
357 | void ath_tx_aggr_resume(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid); | 351 | void ath_tx_aggr_resume(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid); |
358 | 352 | ||
359 | void ath_tx_aggr_wakeup(struct ath_softc *sc, struct ath_node *an); | 353 | void ath_tx_aggr_wakeup(struct ath_softc *sc, struct ath_node *an); |
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c index 7f25da8444fe..15dfefcf2d0f 100644 --- a/drivers/net/wireless/ath/ath9k/hw.c +++ b/drivers/net/wireless/ath/ath9k/hw.c | |||
@@ -1172,6 +1172,7 @@ u32 ath9k_regd_get_ctl(struct ath_regulatory *reg, struct ath9k_channel *chan) | |||
1172 | static inline void ath9k_hw_set_dma(struct ath_hw *ah) | 1172 | static inline void ath9k_hw_set_dma(struct ath_hw *ah) |
1173 | { | 1173 | { |
1174 | struct ath_common *common = ath9k_hw_common(ah); | 1174 | struct ath_common *common = ath9k_hw_common(ah); |
1175 | int txbuf_size; | ||
1175 | 1176 | ||
1176 | ENABLE_REGWRITE_BUFFER(ah); | 1177 | ENABLE_REGWRITE_BUFFER(ah); |
1177 | 1178 | ||
@@ -1225,13 +1226,17 @@ static inline void ath9k_hw_set_dma(struct ath_hw *ah) | |||
1225 | * So set the usable tx buf size also to half to | 1226 | * So set the usable tx buf size also to half to |
1226 | * avoid data/delimiter underruns | 1227 | * avoid data/delimiter underruns |
1227 | */ | 1228 | */ |
1228 | REG_WRITE(ah, AR_PCU_TXBUF_CTRL, | 1229 | txbuf_size = AR_9285_PCU_TXBUF_CTRL_USABLE_SIZE; |
1229 | AR_9285_PCU_TXBUF_CTRL_USABLE_SIZE); | 1230 | } else if (AR_SREV_9340_13_OR_LATER(ah)) { |
1230 | } else if (!AR_SREV_9271(ah)) { | 1231 | /* Uses fewer entries for AR934x v1.3+ to prevent rx overruns */ |
1231 | REG_WRITE(ah, AR_PCU_TXBUF_CTRL, | 1232 | txbuf_size = AR_9340_PCU_TXBUF_CTRL_USABLE_SIZE; |
1232 | AR_PCU_TXBUF_CTRL_USABLE_SIZE); | 1233 | } else { |
1234 | txbuf_size = AR_PCU_TXBUF_CTRL_USABLE_SIZE; | ||
1233 | } | 1235 | } |
1234 | 1236 | ||
1237 | if (!AR_SREV_9271(ah)) | ||
1238 | REG_WRITE(ah, AR_PCU_TXBUF_CTRL, txbuf_size); | ||
1239 | |||
1235 | REGWRITE_BUFFER_FLUSH(ah); | 1240 | REGWRITE_BUFFER_FLUSH(ah); |
1236 | 1241 | ||
1237 | if (AR_SREV_9300_20_OR_LATER(ah)) | 1242 | if (AR_SREV_9300_20_OR_LATER(ah)) |
@@ -1306,9 +1311,13 @@ static bool ath9k_hw_set_reset(struct ath_hw *ah, int type) | |||
1306 | AR_RTC_RC_COLD_RESET | AR_RTC_RC_WARM_RESET; | 1311 | AR_RTC_RC_COLD_RESET | AR_RTC_RC_WARM_RESET; |
1307 | } else { | 1312 | } else { |
1308 | tmpReg = REG_READ(ah, AR_INTR_SYNC_CAUSE); | 1313 | tmpReg = REG_READ(ah, AR_INTR_SYNC_CAUSE); |
1309 | if (tmpReg & | 1314 | if (AR_SREV_9340(ah)) |
1310 | (AR_INTR_SYNC_LOCAL_TIMEOUT | | 1315 | tmpReg &= AR9340_INTR_SYNC_LOCAL_TIMEOUT; |
1311 | AR_INTR_SYNC_RADM_CPL_TIMEOUT)) { | 1316 | else |
1317 | tmpReg &= AR_INTR_SYNC_LOCAL_TIMEOUT | | ||
1318 | AR_INTR_SYNC_RADM_CPL_TIMEOUT; | ||
1319 | |||
1320 | if (tmpReg) { | ||
1312 | u32 val; | 1321 | u32 val; |
1313 | REG_WRITE(ah, AR_INTR_SYNC_ENABLE, 0); | 1322 | REG_WRITE(ah, AR_INTR_SYNC_ENABLE, 0); |
1314 | 1323 | ||
diff --git a/drivers/net/wireless/ath/ath9k/mac.c b/drivers/net/wireless/ath/ath9k/mac.c index 498fee04afa0..566109a40fb3 100644 --- a/drivers/net/wireless/ath/ath9k/mac.c +++ b/drivers/net/wireless/ath/ath9k/mac.c | |||
@@ -410,7 +410,7 @@ bool ath9k_hw_resettxqueue(struct ath_hw *ah, u32 q) | |||
410 | 410 | ||
411 | REG_WRITE(ah, AR_QMISC(q), AR_Q_MISC_DCU_EARLY_TERM_REQ); | 411 | REG_WRITE(ah, AR_QMISC(q), AR_Q_MISC_DCU_EARLY_TERM_REQ); |
412 | 412 | ||
413 | if (AR_SREV_9340(ah)) | 413 | if (AR_SREV_9340(ah) && !AR_SREV_9340_13_OR_LATER(ah)) |
414 | REG_WRITE(ah, AR_DMISC(q), | 414 | REG_WRITE(ah, AR_DMISC(q), |
415 | AR_D_MISC_CW_BKOFF_EN | AR_D_MISC_FRAG_WAIT_EN | 0x1); | 415 | AR_D_MISC_CW_BKOFF_EN | AR_D_MISC_FRAG_WAIT_EN | 0x1); |
416 | else | 416 | else |
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index 2382d1262e7f..5092ecae7706 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c | |||
@@ -1709,7 +1709,8 @@ static int ath9k_ampdu_action(struct ieee80211_hw *hw, | |||
1709 | flush = true; | 1709 | flush = true; |
1710 | case IEEE80211_AMPDU_TX_STOP_CONT: | 1710 | case IEEE80211_AMPDU_TX_STOP_CONT: |
1711 | ath9k_ps_wakeup(sc); | 1711 | ath9k_ps_wakeup(sc); |
1712 | if (ath_tx_aggr_stop(sc, sta, tid, flush)) | 1712 | ath_tx_aggr_stop(sc, sta, tid); |
1713 | if (!flush) | ||
1713 | ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid); | 1714 | ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid); |
1714 | ath9k_ps_restore(sc); | 1715 | ath9k_ps_restore(sc); |
1715 | break; | 1716 | break; |
diff --git a/drivers/net/wireless/ath/ath9k/rc.c b/drivers/net/wireless/ath/ath9k/rc.c index aa4d368d8d3d..7eb1f4b458e4 100644 --- a/drivers/net/wireless/ath/ath9k/rc.c +++ b/drivers/net/wireless/ath/ath9k/rc.c | |||
@@ -1227,10 +1227,7 @@ static bool ath_tx_aggr_check(struct ath_softc *sc, struct ieee80211_sta *sta, | |||
1227 | return false; | 1227 | return false; |
1228 | 1228 | ||
1229 | txtid = ATH_AN_2_TID(an, tidno); | 1229 | txtid = ATH_AN_2_TID(an, tidno); |
1230 | 1230 | return !txtid->active; | |
1231 | if (!(txtid->state & (AGGR_ADDBA_COMPLETE | AGGR_ADDBA_PROGRESS))) | ||
1232 | return true; | ||
1233 | return false; | ||
1234 | } | 1231 | } |
1235 | 1232 | ||
1236 | 1233 | ||
diff --git a/drivers/net/wireless/ath/ath9k/reg.h b/drivers/net/wireless/ath/ath9k/reg.h index 5c4ab5026dca..f7c90cc58d56 100644 --- a/drivers/net/wireless/ath/ath9k/reg.h +++ b/drivers/net/wireless/ath/ath9k/reg.h | |||
@@ -798,6 +798,10 @@ | |||
798 | #define AR_SREV_REVISION_9485_10 0 | 798 | #define AR_SREV_REVISION_9485_10 0 |
799 | #define AR_SREV_REVISION_9485_11 1 | 799 | #define AR_SREV_REVISION_9485_11 1 |
800 | #define AR_SREV_VERSION_9340 0x300 | 800 | #define AR_SREV_VERSION_9340 0x300 |
801 | #define AR_SREV_REVISION_9340_10 0 | ||
802 | #define AR_SREV_REVISION_9340_11 1 | ||
803 | #define AR_SREV_REVISION_9340_12 2 | ||
804 | #define AR_SREV_REVISION_9340_13 3 | ||
801 | #define AR_SREV_VERSION_9580 0x1C0 | 805 | #define AR_SREV_VERSION_9580 0x1C0 |
802 | #define AR_SREV_REVISION_9580_10 4 /* AR9580 1.0 */ | 806 | #define AR_SREV_REVISION_9580_10 4 /* AR9580 1.0 */ |
803 | #define AR_SREV_VERSION_9462 0x280 | 807 | #define AR_SREV_VERSION_9462 0x280 |
@@ -897,6 +901,10 @@ | |||
897 | #define AR_SREV_9340(_ah) \ | 901 | #define AR_SREV_9340(_ah) \ |
898 | (((_ah)->hw_version.macVersion == AR_SREV_VERSION_9340)) | 902 | (((_ah)->hw_version.macVersion == AR_SREV_VERSION_9340)) |
899 | 903 | ||
904 | #define AR_SREV_9340_13_OR_LATER(_ah) \ | ||
905 | (AR_SREV_9340((_ah)) && \ | ||
906 | ((_ah)->hw_version.macRev >= AR_SREV_REVISION_9340_13)) | ||
907 | |||
900 | #define AR_SREV_9285E_20(_ah) \ | 908 | #define AR_SREV_9285E_20(_ah) \ |
901 | (AR_SREV_9285_12_OR_LATER(_ah) && \ | 909 | (AR_SREV_9285_12_OR_LATER(_ah) && \ |
902 | ((REG_READ(_ah, AR_AN_SYNTH9) & 0x7) == 0x1)) | 910 | ((REG_READ(_ah, AR_AN_SYNTH9) & 0x7) == 0x1)) |
@@ -1007,6 +1015,8 @@ enum { | |||
1007 | AR_INTR_SYNC_LOCAL_TIMEOUT | | 1015 | AR_INTR_SYNC_LOCAL_TIMEOUT | |
1008 | AR_INTR_SYNC_MAC_SLEEP_ACCESS), | 1016 | AR_INTR_SYNC_MAC_SLEEP_ACCESS), |
1009 | 1017 | ||
1018 | AR9340_INTR_SYNC_LOCAL_TIMEOUT = 0x00000010, | ||
1019 | |||
1010 | AR_INTR_SYNC_SPURIOUS = 0xFFFFFFFF, | 1020 | AR_INTR_SYNC_SPURIOUS = 0xFFFFFFFF, |
1011 | 1021 | ||
1012 | }; | 1022 | }; |
@@ -1881,6 +1891,7 @@ enum { | |||
1881 | #define AR_PCU_TXBUF_CTRL_SIZE_MASK 0x7FF | 1891 | #define AR_PCU_TXBUF_CTRL_SIZE_MASK 0x7FF |
1882 | #define AR_PCU_TXBUF_CTRL_USABLE_SIZE 0x700 | 1892 | #define AR_PCU_TXBUF_CTRL_USABLE_SIZE 0x700 |
1883 | #define AR_9285_PCU_TXBUF_CTRL_USABLE_SIZE 0x380 | 1893 | #define AR_9285_PCU_TXBUF_CTRL_USABLE_SIZE 0x380 |
1894 | #define AR_9340_PCU_TXBUF_CTRL_USABLE_SIZE 0x500 | ||
1884 | 1895 | ||
1885 | #define AR_PCU_MISC_MODE2 0x8344 | 1896 | #define AR_PCU_MISC_MODE2 0x8344 |
1886 | #define AR_PCU_MISC_MODE2_MGMT_CRYPTO_ENABLE 0x00000002 | 1897 | #define AR_PCU_MISC_MODE2_MGMT_CRYPTO_ENABLE 0x00000002 |
diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c index 14bb3354ea64..1c9b1bac8b0d 100644 --- a/drivers/net/wireless/ath/ath9k/xmit.c +++ b/drivers/net/wireless/ath/ath9k/xmit.c | |||
@@ -125,24 +125,6 @@ static void ath_tx_queue_tid(struct ath_txq *txq, struct ath_atx_tid *tid) | |||
125 | list_add_tail(&ac->list, &txq->axq_acq); | 125 | list_add_tail(&ac->list, &txq->axq_acq); |
126 | } | 126 | } |
127 | 127 | ||
128 | static void ath_tx_resume_tid(struct ath_softc *sc, struct ath_atx_tid *tid) | ||
129 | { | ||
130 | struct ath_txq *txq = tid->ac->txq; | ||
131 | |||
132 | WARN_ON(!tid->paused); | ||
133 | |||
134 | ath_txq_lock(sc, txq); | ||
135 | tid->paused = false; | ||
136 | |||
137 | if (skb_queue_empty(&tid->buf_q)) | ||
138 | goto unlock; | ||
139 | |||
140 | ath_tx_queue_tid(txq, tid); | ||
141 | ath_txq_schedule(sc, txq); | ||
142 | unlock: | ||
143 | ath_txq_unlock_complete(sc, txq); | ||
144 | } | ||
145 | |||
146 | static struct ath_frame_info *get_frame_info(struct sk_buff *skb) | 128 | static struct ath_frame_info *get_frame_info(struct sk_buff *skb) |
147 | { | 129 | { |
148 | struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb); | 130 | struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb); |
@@ -164,20 +146,7 @@ static void ath_set_rates(struct ieee80211_vif *vif, struct ieee80211_sta *sta, | |||
164 | ARRAY_SIZE(bf->rates)); | 146 | ARRAY_SIZE(bf->rates)); |
165 | } | 147 | } |
166 | 148 | ||
167 | static void ath_tx_clear_tid(struct ath_softc *sc, struct ath_atx_tid *tid) | 149 | static void ath_tx_flush_tid(struct ath_softc *sc, struct ath_atx_tid *tid) |
168 | { | ||
169 | tid->state &= ~AGGR_ADDBA_COMPLETE; | ||
170 | tid->state &= ~AGGR_CLEANUP; | ||
171 | if (!tid->stop_cb) | ||
172 | return; | ||
173 | |||
174 | ieee80211_start_tx_ba_cb_irqsafe(tid->an->vif, tid->an->sta->addr, | ||
175 | tid->tidno); | ||
176 | tid->stop_cb = false; | ||
177 | } | ||
178 | |||
179 | static void ath_tx_flush_tid(struct ath_softc *sc, struct ath_atx_tid *tid, | ||
180 | bool flush_packets) | ||
181 | { | 150 | { |
182 | struct ath_txq *txq = tid->ac->txq; | 151 | struct ath_txq *txq = tid->ac->txq; |
183 | struct sk_buff *skb; | 152 | struct sk_buff *skb; |
@@ -194,15 +163,16 @@ static void ath_tx_flush_tid(struct ath_softc *sc, struct ath_atx_tid *tid, | |||
194 | while ((skb = __skb_dequeue(&tid->buf_q))) { | 163 | while ((skb = __skb_dequeue(&tid->buf_q))) { |
195 | fi = get_frame_info(skb); | 164 | fi = get_frame_info(skb); |
196 | bf = fi->bf; | 165 | bf = fi->bf; |
197 | if (!bf && !flush_packets) | ||
198 | bf = ath_tx_setup_buffer(sc, txq, tid, skb); | ||
199 | 166 | ||
200 | if (!bf) { | 167 | if (!bf) { |
201 | ieee80211_free_txskb(sc->hw, skb); | 168 | bf = ath_tx_setup_buffer(sc, txq, tid, skb); |
202 | continue; | 169 | if (!bf) { |
170 | ieee80211_free_txskb(sc->hw, skb); | ||
171 | continue; | ||
172 | } | ||
203 | } | 173 | } |
204 | 174 | ||
205 | if (fi->retries || flush_packets) { | 175 | if (fi->retries) { |
206 | list_add_tail(&bf->list, &bf_head); | 176 | list_add_tail(&bf->list, &bf_head); |
207 | ath_tx_update_baw(sc, tid, bf->bf_state.seqno); | 177 | ath_tx_update_baw(sc, tid, bf->bf_state.seqno); |
208 | ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0); | 178 | ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0); |
@@ -213,10 +183,7 @@ static void ath_tx_flush_tid(struct ath_softc *sc, struct ath_atx_tid *tid, | |||
213 | } | 183 | } |
214 | } | 184 | } |
215 | 185 | ||
216 | if (tid->baw_head == tid->baw_tail) | 186 | if (sendbar) { |
217 | ath_tx_clear_tid(sc, tid); | ||
218 | |||
219 | if (sendbar && !flush_packets) { | ||
220 | ath_txq_unlock(sc, txq); | 187 | ath_txq_unlock(sc, txq); |
221 | ath_send_bar(tid, tid->seq_start); | 188 | ath_send_bar(tid, tid->seq_start); |
222 | ath_txq_lock(sc, txq); | 189 | ath_txq_lock(sc, txq); |
@@ -499,19 +466,19 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq, | |||
499 | tx_info = IEEE80211_SKB_CB(skb); | 466 | tx_info = IEEE80211_SKB_CB(skb); |
500 | fi = get_frame_info(skb); | 467 | fi = get_frame_info(skb); |
501 | 468 | ||
502 | if (ATH_BA_ISSET(ba, ATH_BA_INDEX(seq_st, seqno))) { | 469 | if (!BAW_WITHIN(tid->seq_start, tid->baw_size, seqno)) { |
470 | /* | ||
471 | * Outside of the current BlockAck window, | ||
472 | * maybe part of a previous session | ||
473 | */ | ||
474 | txfail = 1; | ||
475 | } else if (ATH_BA_ISSET(ba, ATH_BA_INDEX(seq_st, seqno))) { | ||
503 | /* transmit completion, subframe is | 476 | /* transmit completion, subframe is |
504 | * acked by block ack */ | 477 | * acked by block ack */ |
505 | acked_cnt++; | 478 | acked_cnt++; |
506 | } else if (!isaggr && txok) { | 479 | } else if (!isaggr && txok) { |
507 | /* transmit completion */ | 480 | /* transmit completion */ |
508 | acked_cnt++; | 481 | acked_cnt++; |
509 | } else if (tid->state & AGGR_CLEANUP) { | ||
510 | /* | ||
511 | * cleanup in progress, just fail | ||
512 | * the un-acked sub-frames | ||
513 | */ | ||
514 | txfail = 1; | ||
515 | } else if (flush) { | 482 | } else if (flush) { |
516 | txpending = 1; | 483 | txpending = 1; |
517 | } else if (fi->retries < ATH_MAX_SW_RETRIES) { | 484 | } else if (fi->retries < ATH_MAX_SW_RETRIES) { |
@@ -535,7 +502,7 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq, | |||
535 | if (bf_next != NULL || !bf_last->bf_stale) | 502 | if (bf_next != NULL || !bf_last->bf_stale) |
536 | list_move_tail(&bf->list, &bf_head); | 503 | list_move_tail(&bf->list, &bf_head); |
537 | 504 | ||
538 | if (!txpending || (tid->state & AGGR_CLEANUP)) { | 505 | if (!txpending) { |
539 | /* | 506 | /* |
540 | * complete the acked-ones/xretried ones; update | 507 | * complete the acked-ones/xretried ones; update |
541 | * block-ack window | 508 | * block-ack window |
@@ -609,9 +576,6 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq, | |||
609 | ath_txq_lock(sc, txq); | 576 | ath_txq_lock(sc, txq); |
610 | } | 577 | } |
611 | 578 | ||
612 | if (tid->state & AGGR_CLEANUP) | ||
613 | ath_tx_flush_tid(sc, tid, false); | ||
614 | |||
615 | rcu_read_unlock(); | 579 | rcu_read_unlock(); |
616 | 580 | ||
617 | if (needreset) | 581 | if (needreset) |
@@ -1244,9 +1208,6 @@ int ath_tx_aggr_start(struct ath_softc *sc, struct ieee80211_sta *sta, | |||
1244 | an = (struct ath_node *)sta->drv_priv; | 1208 | an = (struct ath_node *)sta->drv_priv; |
1245 | txtid = ATH_AN_2_TID(an, tid); | 1209 | txtid = ATH_AN_2_TID(an, tid); |
1246 | 1210 | ||
1247 | if (txtid->state & (AGGR_CLEANUP | AGGR_ADDBA_COMPLETE)) | ||
1248 | return -EAGAIN; | ||
1249 | |||
1250 | /* update ampdu factor/density, they may have changed. This may happen | 1211 | /* update ampdu factor/density, they may have changed. This may happen |
1251 | * in HT IBSS when a beacon with HT-info is received after the station | 1212 | * in HT IBSS when a beacon with HT-info is received after the station |
1252 | * has already been added. | 1213 | * has already been added. |
@@ -1258,7 +1219,7 @@ int ath_tx_aggr_start(struct ath_softc *sc, struct ieee80211_sta *sta, | |||
1258 | an->mpdudensity = density; | 1219 | an->mpdudensity = density; |
1259 | } | 1220 | } |
1260 | 1221 | ||
1261 | txtid->state |= AGGR_ADDBA_PROGRESS; | 1222 | txtid->active = true; |
1262 | txtid->paused = true; | 1223 | txtid->paused = true; |
1263 | *ssn = txtid->seq_start = txtid->seq_next; | 1224 | *ssn = txtid->seq_start = txtid->seq_next; |
1264 | txtid->bar_index = -1; | 1225 | txtid->bar_index = -1; |
@@ -1269,45 +1230,17 @@ int ath_tx_aggr_start(struct ath_softc *sc, struct ieee80211_sta *sta, | |||
1269 | return 0; | 1230 | return 0; |
1270 | } | 1231 | } |
1271 | 1232 | ||
1272 | bool ath_tx_aggr_stop(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid, | 1233 | void ath_tx_aggr_stop(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid) |
1273 | bool flush) | ||
1274 | { | 1234 | { |
1275 | struct ath_node *an = (struct ath_node *)sta->drv_priv; | 1235 | struct ath_node *an = (struct ath_node *)sta->drv_priv; |
1276 | struct ath_atx_tid *txtid = ATH_AN_2_TID(an, tid); | 1236 | struct ath_atx_tid *txtid = ATH_AN_2_TID(an, tid); |
1277 | struct ath_txq *txq = txtid->ac->txq; | 1237 | struct ath_txq *txq = txtid->ac->txq; |
1278 | bool ret = !flush; | ||
1279 | |||
1280 | if (flush) | ||
1281 | txtid->stop_cb = false; | ||
1282 | |||
1283 | if (txtid->state & AGGR_CLEANUP) | ||
1284 | return false; | ||
1285 | |||
1286 | if (!(txtid->state & AGGR_ADDBA_COMPLETE)) { | ||
1287 | txtid->state &= ~AGGR_ADDBA_PROGRESS; | ||
1288 | return ret; | ||
1289 | } | ||
1290 | 1238 | ||
1291 | ath_txq_lock(sc, txq); | 1239 | ath_txq_lock(sc, txq); |
1240 | txtid->active = false; | ||
1292 | txtid->paused = true; | 1241 | txtid->paused = true; |
1293 | 1242 | ath_tx_flush_tid(sc, txtid); | |
1294 | /* | ||
1295 | * If frames are still being transmitted for this TID, they will be | ||
1296 | * cleaned up during tx completion. To prevent race conditions, this | ||
1297 | * TID can only be reused after all in-progress subframes have been | ||
1298 | * completed. | ||
1299 | */ | ||
1300 | if (txtid->baw_head != txtid->baw_tail) { | ||
1301 | txtid->state |= AGGR_CLEANUP; | ||
1302 | ret = false; | ||
1303 | txtid->stop_cb = !flush; | ||
1304 | } else { | ||
1305 | txtid->state &= ~AGGR_ADDBA_COMPLETE; | ||
1306 | } | ||
1307 | |||
1308 | ath_tx_flush_tid(sc, txtid, flush); | ||
1309 | ath_txq_unlock_complete(sc, txq); | 1243 | ath_txq_unlock_complete(sc, txq); |
1310 | return ret; | ||
1311 | } | 1244 | } |
1312 | 1245 | ||
1313 | void ath_tx_aggr_sleep(struct ieee80211_sta *sta, struct ath_softc *sc, | 1246 | void ath_tx_aggr_sleep(struct ieee80211_sta *sta, struct ath_softc *sc, |
@@ -1371,18 +1304,28 @@ void ath_tx_aggr_wakeup(struct ath_softc *sc, struct ath_node *an) | |||
1371 | } | 1304 | } |
1372 | } | 1305 | } |
1373 | 1306 | ||
1374 | void ath_tx_aggr_resume(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid) | 1307 | void ath_tx_aggr_resume(struct ath_softc *sc, struct ieee80211_sta *sta, |
1308 | u16 tidno) | ||
1375 | { | 1309 | { |
1376 | struct ath_atx_tid *txtid; | 1310 | struct ath_atx_tid *tid; |
1377 | struct ath_node *an; | 1311 | struct ath_node *an; |
1312 | struct ath_txq *txq; | ||
1378 | 1313 | ||
1379 | an = (struct ath_node *)sta->drv_priv; | 1314 | an = (struct ath_node *)sta->drv_priv; |
1315 | tid = ATH_AN_2_TID(an, tidno); | ||
1316 | txq = tid->ac->txq; | ||
1380 | 1317 | ||
1381 | txtid = ATH_AN_2_TID(an, tid); | 1318 | ath_txq_lock(sc, txq); |
1382 | txtid->baw_size = IEEE80211_MIN_AMPDU_BUF << sta->ht_cap.ampdu_factor; | 1319 | |
1383 | txtid->state |= AGGR_ADDBA_COMPLETE; | 1320 | tid->baw_size = IEEE80211_MIN_AMPDU_BUF << sta->ht_cap.ampdu_factor; |
1384 | txtid->state &= ~AGGR_ADDBA_PROGRESS; | 1321 | tid->paused = false; |
1385 | ath_tx_resume_tid(sc, txtid); | 1322 | |
1323 | if (!skb_queue_empty(&tid->buf_q)) { | ||
1324 | ath_tx_queue_tid(txq, tid); | ||
1325 | ath_txq_schedule(sc, txq); | ||
1326 | } | ||
1327 | |||
1328 | ath_txq_unlock_complete(sc, txq); | ||
1386 | } | 1329 | } |
1387 | 1330 | ||
1388 | /********************/ | 1331 | /********************/ |
@@ -2431,13 +2374,10 @@ void ath_tx_node_init(struct ath_softc *sc, struct ath_node *an) | |||
2431 | tid->baw_head = tid->baw_tail = 0; | 2374 | tid->baw_head = tid->baw_tail = 0; |
2432 | tid->sched = false; | 2375 | tid->sched = false; |
2433 | tid->paused = false; | 2376 | tid->paused = false; |
2434 | tid->state &= ~AGGR_CLEANUP; | 2377 | tid->active = false; |
2435 | __skb_queue_head_init(&tid->buf_q); | 2378 | __skb_queue_head_init(&tid->buf_q); |
2436 | acno = TID_TO_WME_AC(tidno); | 2379 | acno = TID_TO_WME_AC(tidno); |
2437 | tid->ac = &an->ac[acno]; | 2380 | tid->ac = &an->ac[acno]; |
2438 | tid->state &= ~AGGR_ADDBA_COMPLETE; | ||
2439 | tid->state &= ~AGGR_ADDBA_PROGRESS; | ||
2440 | tid->stop_cb = false; | ||
2441 | } | 2381 | } |
2442 | 2382 | ||
2443 | for (acno = 0, ac = &an->ac[acno]; | 2383 | for (acno = 0, ac = &an->ac[acno]; |
@@ -2474,7 +2414,7 @@ void ath_tx_node_cleanup(struct ath_softc *sc, struct ath_node *an) | |||
2474 | } | 2414 | } |
2475 | 2415 | ||
2476 | ath_tid_drain(sc, txq, tid); | 2416 | ath_tid_drain(sc, txq, tid); |
2477 | ath_tx_clear_tid(sc, tid); | 2417 | tid->active = false; |
2478 | 2418 | ||
2479 | ath_txq_unlock(sc, txq); | 2419 | ath_txq_unlock(sc, txq); |
2480 | } | 2420 | } |
diff --git a/drivers/net/wireless/atmel.c b/drivers/net/wireless/atmel.c index 830bb1d1f957..b827d51c30a3 100644 --- a/drivers/net/wireless/atmel.c +++ b/drivers/net/wireless/atmel.c | |||
@@ -1624,7 +1624,7 @@ struct net_device *init_atmel_card(unsigned short irq, unsigned long port, | |||
1624 | 1624 | ||
1625 | netif_carrier_off(dev); | 1625 | netif_carrier_off(dev); |
1626 | 1626 | ||
1627 | if (!proc_create_data("driver/atmel", 0, NULL, &atmel_proc_fops, priv)); | 1627 | if (!proc_create_data("driver/atmel", 0, NULL, &atmel_proc_fops, priv)) |
1628 | printk(KERN_WARNING "atmel: unable to create /proc entry.\n"); | 1628 | printk(KERN_WARNING "atmel: unable to create /proc entry.\n"); |
1629 | 1629 | ||
1630 | printk(KERN_INFO "%s: Atmel at76c50x. Version %d.%d. MAC %pM\n", | 1630 | printk(KERN_INFO "%s: Atmel at76c50x. Version %d.%d. MAC %pM\n", |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c b/drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c index be0787cab24f..9431af2465f3 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c | |||
@@ -27,7 +27,6 @@ | |||
27 | #include "tracepoint.h" | 27 | #include "tracepoint.h" |
28 | 28 | ||
29 | #define PKTFILTER_BUF_SIZE 128 | 29 | #define PKTFILTER_BUF_SIZE 128 |
30 | #define BRCMF_ARPOL_MODE 0xb /* agent|snoop|peer_autoreply */ | ||
31 | #define BRCMF_DEFAULT_BCN_TIMEOUT 3 | 30 | #define BRCMF_DEFAULT_BCN_TIMEOUT 3 |
32 | #define BRCMF_DEFAULT_SCAN_CHANNEL_TIME 40 | 31 | #define BRCMF_DEFAULT_SCAN_CHANNEL_TIME 40 |
33 | #define BRCMF_DEFAULT_SCAN_UNASSOC_TIME 40 | 32 | #define BRCMF_DEFAULT_SCAN_UNASSOC_TIME 40 |
@@ -338,23 +337,6 @@ int brcmf_c_preinit_dcmds(struct brcmf_if *ifp) | |||
338 | goto done; | 337 | goto done; |
339 | } | 338 | } |
340 | 339 | ||
341 | /* Try to set and enable ARP offload feature, this may fail */ | ||
342 | err = brcmf_fil_iovar_int_set(ifp, "arp_ol", BRCMF_ARPOL_MODE); | ||
343 | if (err) { | ||
344 | brcmf_dbg(TRACE, "failed to set ARP offload mode to 0x%x, err = %d\n", | ||
345 | BRCMF_ARPOL_MODE, err); | ||
346 | err = 0; | ||
347 | } else { | ||
348 | err = brcmf_fil_iovar_int_set(ifp, "arpoe", 1); | ||
349 | if (err) { | ||
350 | brcmf_dbg(TRACE, "failed to enable ARP offload err = %d\n", | ||
351 | err); | ||
352 | err = 0; | ||
353 | } else | ||
354 | brcmf_dbg(TRACE, "successfully enabled ARP offload to 0x%x\n", | ||
355 | BRCMF_ARPOL_MODE); | ||
356 | } | ||
357 | |||
358 | /* Setup packet filter */ | 340 | /* Setup packet filter */ |
359 | brcmf_c_pktfilter_offload_set(ifp, BRCMF_DEFAULT_PACKET_FILTER); | 341 | brcmf_c_pktfilter_offload_set(ifp, BRCMF_DEFAULT_PACKET_FILTER); |
360 | brcmf_c_pktfilter_offload_enable(ifp, BRCMF_DEFAULT_PACKET_FILTER, | 342 | brcmf_c_pktfilter_offload_enable(ifp, BRCMF_DEFAULT_PACKET_FILTER, |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c index 59c25463e428..b98f2235978e 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c | |||
@@ -653,10 +653,13 @@ int brcmf_net_attach(struct brcmf_if *ifp, bool rtnl_locked) | |||
653 | 653 | ||
654 | brcmf_dbg(INFO, "%s: Broadcom Dongle Host Driver\n", ndev->name); | 654 | brcmf_dbg(INFO, "%s: Broadcom Dongle Host Driver\n", ndev->name); |
655 | 655 | ||
656 | ndev->destructor = free_netdev; | ||
656 | return 0; | 657 | return 0; |
657 | 658 | ||
658 | fail: | 659 | fail: |
660 | drvr->iflist[ifp->bssidx] = NULL; | ||
659 | ndev->netdev_ops = NULL; | 661 | ndev->netdev_ops = NULL; |
662 | free_netdev(ndev); | ||
660 | return -EBADE; | 663 | return -EBADE; |
661 | } | 664 | } |
662 | 665 | ||
@@ -720,6 +723,9 @@ static int brcmf_net_p2p_attach(struct brcmf_if *ifp) | |||
720 | return 0; | 723 | return 0; |
721 | 724 | ||
722 | fail: | 725 | fail: |
726 | ifp->drvr->iflist[ifp->bssidx] = NULL; | ||
727 | ndev->netdev_ops = NULL; | ||
728 | free_netdev(ndev); | ||
723 | return -EBADE; | 729 | return -EBADE; |
724 | } | 730 | } |
725 | 731 | ||
@@ -788,6 +794,7 @@ void brcmf_del_if(struct brcmf_pub *drvr, s32 bssidx) | |||
788 | struct brcmf_if *ifp; | 794 | struct brcmf_if *ifp; |
789 | 795 | ||
790 | ifp = drvr->iflist[bssidx]; | 796 | ifp = drvr->iflist[bssidx]; |
797 | drvr->iflist[bssidx] = NULL; | ||
791 | if (!ifp) { | 798 | if (!ifp) { |
792 | brcmf_err("Null interface, idx=%d\n", bssidx); | 799 | brcmf_err("Null interface, idx=%d\n", bssidx); |
793 | return; | 800 | return; |
@@ -808,15 +815,13 @@ void brcmf_del_if(struct brcmf_pub *drvr, s32 bssidx) | |||
808 | cancel_work_sync(&ifp->setmacaddr_work); | 815 | cancel_work_sync(&ifp->setmacaddr_work); |
809 | cancel_work_sync(&ifp->multicast_work); | 816 | cancel_work_sync(&ifp->multicast_work); |
810 | } | 817 | } |
811 | 818 | /* unregister will take care of freeing it */ | |
812 | unregister_netdev(ifp->ndev); | 819 | unregister_netdev(ifp->ndev); |
813 | if (bssidx == 0) | 820 | if (bssidx == 0) |
814 | brcmf_cfg80211_detach(drvr->config); | 821 | brcmf_cfg80211_detach(drvr->config); |
815 | free_netdev(ifp->ndev); | ||
816 | } else { | 822 | } else { |
817 | kfree(ifp); | 823 | kfree(ifp); |
818 | } | 824 | } |
819 | drvr->iflist[bssidx] = NULL; | ||
820 | } | 825 | } |
821 | 826 | ||
822 | int brcmf_attach(uint bus_hdrlen, struct device *dev) | 827 | int brcmf_attach(uint bus_hdrlen, struct device *dev) |
@@ -925,8 +930,6 @@ fail: | |||
925 | brcmf_fws_del_interface(ifp); | 930 | brcmf_fws_del_interface(ifp); |
926 | brcmf_fws_deinit(drvr); | 931 | brcmf_fws_deinit(drvr); |
927 | } | 932 | } |
928 | free_netdev(ifp->ndev); | ||
929 | drvr->iflist[0] = NULL; | ||
930 | if (p2p_ifp) { | 933 | if (p2p_ifp) { |
931 | free_netdev(p2p_ifp->ndev); | 934 | free_netdev(p2p_ifp->ndev); |
932 | drvr->iflist[1] = NULL; | 935 | drvr->iflist[1] = NULL; |
@@ -934,7 +937,8 @@ fail: | |||
934 | return ret; | 937 | return ret; |
935 | } | 938 | } |
936 | if ((brcmf_p2p_enable) && (p2p_ifp)) | 939 | if ((brcmf_p2p_enable) && (p2p_ifp)) |
937 | brcmf_net_p2p_attach(p2p_ifp); | 940 | if (brcmf_net_p2p_attach(p2p_ifp) < 0) |
941 | brcmf_p2p_enable = 0; | ||
938 | 942 | ||
939 | return 0; | 943 | return 0; |
940 | } | 944 | } |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/fweh.c b/drivers/net/wireless/brcm80211/brcmfmac/fweh.c index 5a64280e6485..83ee53a7c76e 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/fweh.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/fweh.c | |||
@@ -202,7 +202,8 @@ static void brcmf_fweh_handle_if_event(struct brcmf_pub *drvr, | |||
202 | return; | 202 | return; |
203 | brcmf_fws_add_interface(ifp); | 203 | brcmf_fws_add_interface(ifp); |
204 | if (!drvr->fweh.evt_handler[BRCMF_E_IF]) | 204 | if (!drvr->fweh.evt_handler[BRCMF_E_IF]) |
205 | err = brcmf_net_attach(ifp, false); | 205 | if (brcmf_net_attach(ifp, false) < 0) |
206 | return; | ||
206 | } | 207 | } |
207 | 208 | ||
208 | if (ifevent->action == BRCMF_E_IF_CHANGE) | 209 | if (ifevent->action == BRCMF_E_IF_CHANGE) |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h b/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h index 0f2c83bc95dc..665ef69e974b 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h +++ b/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h | |||
@@ -23,6 +23,12 @@ | |||
23 | 23 | ||
24 | #define BRCMF_FIL_ACTION_FRAME_SIZE 1800 | 24 | #define BRCMF_FIL_ACTION_FRAME_SIZE 1800 |
25 | 25 | ||
26 | /* ARP Offload feature flags for arp_ol iovar */ | ||
27 | #define BRCMF_ARP_OL_AGENT 0x00000001 | ||
28 | #define BRCMF_ARP_OL_SNOOP 0x00000002 | ||
29 | #define BRCMF_ARP_OL_HOST_AUTO_REPLY 0x00000004 | ||
30 | #define BRCMF_ARP_OL_PEER_AUTO_REPLY 0x00000008 | ||
31 | |||
26 | 32 | ||
27 | enum brcmf_fil_p2p_if_types { | 33 | enum brcmf_fil_p2p_if_types { |
28 | BRCMF_FIL_P2P_IF_CLIENT, | 34 | BRCMF_FIL_P2P_IF_CLIENT, |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/p2p.c b/drivers/net/wireless/brcm80211/brcmfmac/p2p.c index e7a1a4770996..79555f006d53 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/p2p.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/p2p.c | |||
@@ -47,6 +47,7 @@ | |||
47 | #define IS_P2P_SOCIAL_CHANNEL(channel) ((channel == SOCIAL_CHAN_1) || \ | 47 | #define IS_P2P_SOCIAL_CHANNEL(channel) ((channel == SOCIAL_CHAN_1) || \ |
48 | (channel == SOCIAL_CHAN_2) || \ | 48 | (channel == SOCIAL_CHAN_2) || \ |
49 | (channel == SOCIAL_CHAN_3)) | 49 | (channel == SOCIAL_CHAN_3)) |
50 | #define BRCMF_P2P_TEMP_CHAN SOCIAL_CHAN_3 | ||
50 | #define SOCIAL_CHAN_CNT 3 | 51 | #define SOCIAL_CHAN_CNT 3 |
51 | #define AF_PEER_SEARCH_CNT 2 | 52 | #define AF_PEER_SEARCH_CNT 2 |
52 | 53 | ||
@@ -1954,21 +1955,21 @@ s32 brcmf_p2p_attach(struct brcmf_cfg80211_info *cfg) | |||
1954 | err = brcmf_fil_iovar_int_set(pri_ifp, "p2p_disc", 1); | 1955 | err = brcmf_fil_iovar_int_set(pri_ifp, "p2p_disc", 1); |
1955 | if (err < 0) { | 1956 | if (err < 0) { |
1956 | brcmf_err("set p2p_disc error\n"); | 1957 | brcmf_err("set p2p_disc error\n"); |
1957 | brcmf_free_vif(p2p_vif); | 1958 | brcmf_free_vif(cfg, p2p_vif); |
1958 | goto exit; | 1959 | goto exit; |
1959 | } | 1960 | } |
1960 | /* obtain bsscfg index for P2P discovery */ | 1961 | /* obtain bsscfg index for P2P discovery */ |
1961 | err = brcmf_fil_iovar_int_get(pri_ifp, "p2p_dev", &bssidx); | 1962 | err = brcmf_fil_iovar_int_get(pri_ifp, "p2p_dev", &bssidx); |
1962 | if (err < 0) { | 1963 | if (err < 0) { |
1963 | brcmf_err("retrieving discover bsscfg index failed\n"); | 1964 | brcmf_err("retrieving discover bsscfg index failed\n"); |
1964 | brcmf_free_vif(p2p_vif); | 1965 | brcmf_free_vif(cfg, p2p_vif); |
1965 | goto exit; | 1966 | goto exit; |
1966 | } | 1967 | } |
1967 | /* Verify that firmware uses same bssidx as driver !! */ | 1968 | /* Verify that firmware uses same bssidx as driver !! */ |
1968 | if (p2p_ifp->bssidx != bssidx) { | 1969 | if (p2p_ifp->bssidx != bssidx) { |
1969 | brcmf_err("Incorrect bssidx=%d, compared to p2p_ifp->bssidx=%d\n", | 1970 | brcmf_err("Incorrect bssidx=%d, compared to p2p_ifp->bssidx=%d\n", |
1970 | bssidx, p2p_ifp->bssidx); | 1971 | bssidx, p2p_ifp->bssidx); |
1971 | brcmf_free_vif(p2p_vif); | 1972 | brcmf_free_vif(cfg, p2p_vif); |
1972 | goto exit; | 1973 | goto exit; |
1973 | } | 1974 | } |
1974 | 1975 | ||
@@ -1996,7 +1997,7 @@ void brcmf_p2p_detach(struct brcmf_p2p_info *p2p) | |||
1996 | brcmf_p2p_cancel_remain_on_channel(vif->ifp); | 1997 | brcmf_p2p_cancel_remain_on_channel(vif->ifp); |
1997 | brcmf_p2p_deinit_discovery(p2p); | 1998 | brcmf_p2p_deinit_discovery(p2p); |
1998 | /* remove discovery interface */ | 1999 | /* remove discovery interface */ |
1999 | brcmf_free_vif(vif); | 2000 | brcmf_free_vif(p2p->cfg, vif); |
2000 | p2p->bss_idx[P2PAPI_BSSCFG_DEVICE].vif = NULL; | 2001 | p2p->bss_idx[P2PAPI_BSSCFG_DEVICE].vif = NULL; |
2001 | } | 2002 | } |
2002 | /* just set it all to zero */ | 2003 | /* just set it all to zero */ |
@@ -2013,17 +2014,30 @@ static void brcmf_p2p_get_current_chanspec(struct brcmf_p2p_info *p2p, | |||
2013 | u16 *chanspec) | 2014 | u16 *chanspec) |
2014 | { | 2015 | { |
2015 | struct brcmf_if *ifp; | 2016 | struct brcmf_if *ifp; |
2016 | struct brcmf_fil_chan_info_le ci; | 2017 | u8 mac_addr[ETH_ALEN]; |
2017 | struct brcmu_chan ch; | 2018 | struct brcmu_chan ch; |
2018 | s32 err; | 2019 | struct brcmf_bss_info_le *bi; |
2020 | u8 *buf; | ||
2019 | 2021 | ||
2020 | ifp = p2p->bss_idx[P2PAPI_BSSCFG_PRIMARY].vif->ifp; | 2022 | ifp = p2p->bss_idx[P2PAPI_BSSCFG_PRIMARY].vif->ifp; |
2021 | 2023 | ||
2022 | ch.chnum = 11; | 2024 | if (brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_BSSID, mac_addr, |
2023 | 2025 | ETH_ALEN) == 0) { | |
2024 | err = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_CHANNEL, &ci, sizeof(ci)); | 2026 | buf = kzalloc(WL_BSS_INFO_MAX, GFP_KERNEL); |
2025 | if (!err) | 2027 | if (buf != NULL) { |
2026 | ch.chnum = le32_to_cpu(ci.hw_channel); | 2028 | *(__le32 *)buf = cpu_to_le32(WL_BSS_INFO_MAX); |
2029 | if (brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_BSS_INFO, | ||
2030 | buf, WL_BSS_INFO_MAX) == 0) { | ||
2031 | bi = (struct brcmf_bss_info_le *)(buf + 4); | ||
2032 | *chanspec = le16_to_cpu(bi->chanspec); | ||
2033 | kfree(buf); | ||
2034 | return; | ||
2035 | } | ||
2036 | kfree(buf); | ||
2037 | } | ||
2038 | } | ||
2039 | /* Use default channel for P2P */ | ||
2040 | ch.chnum = BRCMF_P2P_TEMP_CHAN; | ||
2027 | ch.bw = BRCMU_CHAN_BW_20; | 2041 | ch.bw = BRCMU_CHAN_BW_20; |
2028 | p2p->cfg->d11inf.encchspec(&ch); | 2042 | p2p->cfg->d11inf.encchspec(&ch); |
2029 | *chanspec = ch.chspec; | 2043 | *chanspec = ch.chspec; |
@@ -2208,7 +2222,7 @@ static struct wireless_dev *brcmf_p2p_create_p2pdev(struct brcmf_p2p_info *p2p, | |||
2208 | return &p2p_vif->wdev; | 2222 | return &p2p_vif->wdev; |
2209 | 2223 | ||
2210 | fail: | 2224 | fail: |
2211 | brcmf_free_vif(p2p_vif); | 2225 | brcmf_free_vif(p2p->cfg, p2p_vif); |
2212 | return ERR_PTR(err); | 2226 | return ERR_PTR(err); |
2213 | } | 2227 | } |
2214 | 2228 | ||
@@ -2217,13 +2231,31 @@ fail: | |||
2217 | * | 2231 | * |
2218 | * @vif: virtual interface object to delete. | 2232 | * @vif: virtual interface object to delete. |
2219 | */ | 2233 | */ |
2220 | static void brcmf_p2p_delete_p2pdev(struct brcmf_cfg80211_vif *vif) | 2234 | static void brcmf_p2p_delete_p2pdev(struct brcmf_cfg80211_info *cfg, |
2235 | struct brcmf_cfg80211_vif *vif) | ||
2221 | { | 2236 | { |
2222 | struct brcmf_p2p_info *p2p = &vif->ifp->drvr->config->p2p; | ||
2223 | |||
2224 | cfg80211_unregister_wdev(&vif->wdev); | 2237 | cfg80211_unregister_wdev(&vif->wdev); |
2225 | p2p->bss_idx[P2PAPI_BSSCFG_DEVICE].vif = NULL; | 2238 | cfg->p2p.bss_idx[P2PAPI_BSSCFG_DEVICE].vif = NULL; |
2226 | brcmf_free_vif(vif); | 2239 | brcmf_free_vif(cfg, vif); |
2240 | } | ||
2241 | |||
2242 | /** | ||
2243 | * brcmf_p2p_free_p2p_if() - free up net device related data. | ||
2244 | * | ||
2245 | * @ndev: net device that needs to be freed. | ||
2246 | */ | ||
2247 | static void brcmf_p2p_free_p2p_if(struct net_device *ndev) | ||
2248 | { | ||
2249 | struct brcmf_cfg80211_info *cfg; | ||
2250 | struct brcmf_cfg80211_vif *vif; | ||
2251 | struct brcmf_if *ifp; | ||
2252 | |||
2253 | ifp = netdev_priv(ndev); | ||
2254 | cfg = ifp->drvr->config; | ||
2255 | vif = ifp->vif; | ||
2256 | |||
2257 | brcmf_free_vif(cfg, vif); | ||
2258 | free_netdev(ifp->ndev); | ||
2227 | } | 2259 | } |
2228 | 2260 | ||
2229 | /** | 2261 | /** |
@@ -2303,6 +2335,9 @@ struct wireless_dev *brcmf_p2p_add_vif(struct wiphy *wiphy, const char *name, | |||
2303 | brcmf_err("Registering netdevice failed\n"); | 2335 | brcmf_err("Registering netdevice failed\n"); |
2304 | goto fail; | 2336 | goto fail; |
2305 | } | 2337 | } |
2338 | /* override destructor */ | ||
2339 | ifp->ndev->destructor = brcmf_p2p_free_p2p_if; | ||
2340 | |||
2306 | cfg->p2p.bss_idx[P2PAPI_BSSCFG_CONNECTION].vif = vif; | 2341 | cfg->p2p.bss_idx[P2PAPI_BSSCFG_CONNECTION].vif = vif; |
2307 | /* Disable firmware roaming for P2P interface */ | 2342 | /* Disable firmware roaming for P2P interface */ |
2308 | brcmf_fil_iovar_int_set(ifp, "roam_off", 1); | 2343 | brcmf_fil_iovar_int_set(ifp, "roam_off", 1); |
@@ -2314,7 +2349,7 @@ struct wireless_dev *brcmf_p2p_add_vif(struct wiphy *wiphy, const char *name, | |||
2314 | return &ifp->vif->wdev; | 2349 | return &ifp->vif->wdev; |
2315 | 2350 | ||
2316 | fail: | 2351 | fail: |
2317 | brcmf_free_vif(vif); | 2352 | brcmf_free_vif(cfg, vif); |
2318 | return ERR_PTR(err); | 2353 | return ERR_PTR(err); |
2319 | } | 2354 | } |
2320 | 2355 | ||
@@ -2350,7 +2385,7 @@ int brcmf_p2p_del_vif(struct wiphy *wiphy, struct wireless_dev *wdev) | |||
2350 | break; | 2385 | break; |
2351 | 2386 | ||
2352 | case NL80211_IFTYPE_P2P_DEVICE: | 2387 | case NL80211_IFTYPE_P2P_DEVICE: |
2353 | brcmf_p2p_delete_p2pdev(vif); | 2388 | brcmf_p2p_delete_p2pdev(cfg, vif); |
2354 | return 0; | 2389 | return 0; |
2355 | default: | 2390 | default: |
2356 | return -ENOTSUPP; | 2391 | return -ENOTSUPP; |
@@ -2378,7 +2413,6 @@ int brcmf_p2p_del_vif(struct wiphy *wiphy, struct wireless_dev *wdev) | |||
2378 | err = 0; | 2413 | err = 0; |
2379 | } | 2414 | } |
2380 | brcmf_cfg80211_arm_vif_event(cfg, NULL); | 2415 | brcmf_cfg80211_arm_vif_event(cfg, NULL); |
2381 | brcmf_free_vif(vif); | ||
2382 | p2p->bss_idx[P2PAPI_BSSCFG_CONNECTION].vif = NULL; | 2416 | p2p->bss_idx[P2PAPI_BSSCFG_CONNECTION].vif = NULL; |
2383 | 2417 | ||
2384 | return err; | 2418 | return err; |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c index 761f501959a9..301e572e8923 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c | |||
@@ -459,6 +459,38 @@ send_key_to_dongle(struct net_device *ndev, struct brcmf_wsec_key *key) | |||
459 | return err; | 459 | return err; |
460 | } | 460 | } |
461 | 461 | ||
462 | static s32 | ||
463 | brcmf_configure_arp_offload(struct brcmf_if *ifp, bool enable) | ||
464 | { | ||
465 | s32 err; | ||
466 | u32 mode; | ||
467 | |||
468 | if (enable) | ||
469 | mode = BRCMF_ARP_OL_AGENT | BRCMF_ARP_OL_PEER_AUTO_REPLY; | ||
470 | else | ||
471 | mode = 0; | ||
472 | |||
473 | /* Try to set and enable ARP offload feature, this may fail, then it */ | ||
474 | /* is simply not supported and err 0 will be returned */ | ||
475 | err = brcmf_fil_iovar_int_set(ifp, "arp_ol", mode); | ||
476 | if (err) { | ||
477 | brcmf_dbg(TRACE, "failed to set ARP offload mode to 0x%x, err = %d\n", | ||
478 | mode, err); | ||
479 | err = 0; | ||
480 | } else { | ||
481 | err = brcmf_fil_iovar_int_set(ifp, "arpoe", enable); | ||
482 | if (err) { | ||
483 | brcmf_dbg(TRACE, "failed to configure (%d) ARP offload err = %d\n", | ||
484 | enable, err); | ||
485 | err = 0; | ||
486 | } else | ||
487 | brcmf_dbg(TRACE, "successfully configured (%d) ARP offload to 0x%x\n", | ||
488 | enable, mode); | ||
489 | } | ||
490 | |||
491 | return err; | ||
492 | } | ||
493 | |||
462 | static struct wireless_dev *brcmf_cfg80211_add_iface(struct wiphy *wiphy, | 494 | static struct wireless_dev *brcmf_cfg80211_add_iface(struct wiphy *wiphy, |
463 | const char *name, | 495 | const char *name, |
464 | enum nl80211_iftype type, | 496 | enum nl80211_iftype type, |
@@ -2216,6 +2248,11 @@ brcmf_cfg80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *ndev, | |||
2216 | } | 2248 | } |
2217 | 2249 | ||
2218 | pm = enabled ? PM_FAST : PM_OFF; | 2250 | pm = enabled ? PM_FAST : PM_OFF; |
2251 | /* Do not enable the power save after assoc if it is a p2p interface */ | ||
2252 | if (ifp->vif->wdev.iftype == NL80211_IFTYPE_P2P_CLIENT) { | ||
2253 | brcmf_dbg(INFO, "Do not enable power save for P2P clients\n"); | ||
2254 | pm = PM_OFF; | ||
2255 | } | ||
2219 | brcmf_dbg(INFO, "power save %s\n", (pm ? "enabled" : "disabled")); | 2256 | brcmf_dbg(INFO, "power save %s\n", (pm ? "enabled" : "disabled")); |
2220 | 2257 | ||
2221 | err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_PM, pm); | 2258 | err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_PM, pm); |
@@ -3640,10 +3677,28 @@ brcmf_config_ap_mgmt_ie(struct brcmf_cfg80211_vif *vif, | |||
3640 | } | 3677 | } |
3641 | 3678 | ||
3642 | static s32 | 3679 | static s32 |
3680 | brcmf_cfg80211_set_channel(struct brcmf_cfg80211_info *cfg, | ||
3681 | struct brcmf_if *ifp, | ||
3682 | struct ieee80211_channel *channel) | ||
3683 | { | ||
3684 | u16 chanspec; | ||
3685 | s32 err; | ||
3686 | |||
3687 | brcmf_dbg(TRACE, "band=%d, center_freq=%d\n", channel->band, | ||
3688 | channel->center_freq); | ||
3689 | |||
3690 | chanspec = channel_to_chanspec(&cfg->d11inf, channel); | ||
3691 | err = brcmf_fil_iovar_int_set(ifp, "chanspec", chanspec); | ||
3692 | |||
3693 | return err; | ||
3694 | } | ||
3695 | |||
3696 | static s32 | ||
3643 | brcmf_cfg80211_start_ap(struct wiphy *wiphy, struct net_device *ndev, | 3697 | brcmf_cfg80211_start_ap(struct wiphy *wiphy, struct net_device *ndev, |
3644 | struct cfg80211_ap_settings *settings) | 3698 | struct cfg80211_ap_settings *settings) |
3645 | { | 3699 | { |
3646 | s32 ie_offset; | 3700 | s32 ie_offset; |
3701 | struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); | ||
3647 | struct brcmf_if *ifp = netdev_priv(ndev); | 3702 | struct brcmf_if *ifp = netdev_priv(ndev); |
3648 | struct brcmf_tlv *ssid_ie; | 3703 | struct brcmf_tlv *ssid_ie; |
3649 | struct brcmf_ssid_le ssid_le; | 3704 | struct brcmf_ssid_le ssid_le; |
@@ -3683,6 +3738,7 @@ brcmf_cfg80211_start_ap(struct wiphy *wiphy, struct net_device *ndev, | |||
3683 | } | 3738 | } |
3684 | 3739 | ||
3685 | brcmf_set_mpc(ifp, 0); | 3740 | brcmf_set_mpc(ifp, 0); |
3741 | brcmf_configure_arp_offload(ifp, false); | ||
3686 | 3742 | ||
3687 | /* find the RSN_IE */ | 3743 | /* find the RSN_IE */ |
3688 | rsn_ie = brcmf_parse_tlvs((u8 *)settings->beacon.tail, | 3744 | rsn_ie = brcmf_parse_tlvs((u8 *)settings->beacon.tail, |
@@ -3713,6 +3769,12 @@ brcmf_cfg80211_start_ap(struct wiphy *wiphy, struct net_device *ndev, | |||
3713 | 3769 | ||
3714 | brcmf_config_ap_mgmt_ie(ifp->vif, &settings->beacon); | 3770 | brcmf_config_ap_mgmt_ie(ifp->vif, &settings->beacon); |
3715 | 3771 | ||
3772 | err = brcmf_cfg80211_set_channel(cfg, ifp, settings->chandef.chan); | ||
3773 | if (err < 0) { | ||
3774 | brcmf_err("Set Channel failed, %d\n", err); | ||
3775 | goto exit; | ||
3776 | } | ||
3777 | |||
3716 | if (settings->beacon_interval) { | 3778 | if (settings->beacon_interval) { |
3717 | err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_BCNPRD, | 3779 | err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_BCNPRD, |
3718 | settings->beacon_interval); | 3780 | settings->beacon_interval); |
@@ -3789,8 +3851,10 @@ brcmf_cfg80211_start_ap(struct wiphy *wiphy, struct net_device *ndev, | |||
3789 | set_bit(BRCMF_VIF_STATUS_AP_CREATED, &ifp->vif->sme_state); | 3851 | set_bit(BRCMF_VIF_STATUS_AP_CREATED, &ifp->vif->sme_state); |
3790 | 3852 | ||
3791 | exit: | 3853 | exit: |
3792 | if (err) | 3854 | if (err) { |
3793 | brcmf_set_mpc(ifp, 1); | 3855 | brcmf_set_mpc(ifp, 1); |
3856 | brcmf_configure_arp_offload(ifp, true); | ||
3857 | } | ||
3794 | return err; | 3858 | return err; |
3795 | } | 3859 | } |
3796 | 3860 | ||
@@ -3831,6 +3895,7 @@ static int brcmf_cfg80211_stop_ap(struct wiphy *wiphy, struct net_device *ndev) | |||
3831 | brcmf_err("bss_enable config failed %d\n", err); | 3895 | brcmf_err("bss_enable config failed %d\n", err); |
3832 | } | 3896 | } |
3833 | brcmf_set_mpc(ifp, 1); | 3897 | brcmf_set_mpc(ifp, 1); |
3898 | brcmf_configure_arp_offload(ifp, true); | ||
3834 | set_bit(BRCMF_VIF_STATUS_AP_CREATING, &ifp->vif->sme_state); | 3899 | set_bit(BRCMF_VIF_STATUS_AP_CREATING, &ifp->vif->sme_state); |
3835 | clear_bit(BRCMF_VIF_STATUS_AP_CREATED, &ifp->vif->sme_state); | 3900 | clear_bit(BRCMF_VIF_STATUS_AP_CREATED, &ifp->vif->sme_state); |
3836 | 3901 | ||
@@ -4148,7 +4213,7 @@ static const struct ieee80211_iface_limit brcmf_iface_limits[] = { | |||
4148 | static const struct ieee80211_iface_combination brcmf_iface_combos[] = { | 4213 | static const struct ieee80211_iface_combination brcmf_iface_combos[] = { |
4149 | { | 4214 | { |
4150 | .max_interfaces = BRCMF_IFACE_MAX_CNT, | 4215 | .max_interfaces = BRCMF_IFACE_MAX_CNT, |
4151 | .num_different_channels = 1, /* no multi-channel for now */ | 4216 | .num_different_channels = 2, |
4152 | .n_limits = ARRAY_SIZE(brcmf_iface_limits), | 4217 | .n_limits = ARRAY_SIZE(brcmf_iface_limits), |
4153 | .limits = brcmf_iface_limits | 4218 | .limits = brcmf_iface_limits |
4154 | } | 4219 | } |
@@ -4256,20 +4321,16 @@ struct brcmf_cfg80211_vif *brcmf_alloc_vif(struct brcmf_cfg80211_info *cfg, | |||
4256 | return vif; | 4321 | return vif; |
4257 | } | 4322 | } |
4258 | 4323 | ||
4259 | void brcmf_free_vif(struct brcmf_cfg80211_vif *vif) | 4324 | void brcmf_free_vif(struct brcmf_cfg80211_info *cfg, |
4325 | struct brcmf_cfg80211_vif *vif) | ||
4260 | { | 4326 | { |
4261 | struct brcmf_cfg80211_info *cfg; | ||
4262 | struct wiphy *wiphy; | ||
4263 | |||
4264 | wiphy = vif->wdev.wiphy; | ||
4265 | cfg = wiphy_priv(wiphy); | ||
4266 | list_del(&vif->list); | 4327 | list_del(&vif->list); |
4267 | cfg->vif_cnt--; | 4328 | cfg->vif_cnt--; |
4268 | 4329 | ||
4269 | kfree(vif); | 4330 | kfree(vif); |
4270 | if (!cfg->vif_cnt) { | 4331 | if (!cfg->vif_cnt) { |
4271 | wiphy_unregister(wiphy); | 4332 | wiphy_unregister(cfg->wiphy); |
4272 | wiphy_free(wiphy); | 4333 | wiphy_free(cfg->wiphy); |
4273 | } | 4334 | } |
4274 | } | 4335 | } |
4275 | 4336 | ||
@@ -4646,7 +4707,6 @@ static s32 brcmf_notify_vif_event(struct brcmf_if *ifp, | |||
4646 | return 0; | 4707 | return 0; |
4647 | 4708 | ||
4648 | case BRCMF_E_IF_DEL: | 4709 | case BRCMF_E_IF_DEL: |
4649 | ifp->vif = NULL; | ||
4650 | mutex_unlock(&event->vif_event_lock); | 4710 | mutex_unlock(&event->vif_event_lock); |
4651 | /* event may not be upon user request */ | 4711 | /* event may not be upon user request */ |
4652 | if (brcmf_cfg80211_vif_event_armed(cfg)) | 4712 | if (brcmf_cfg80211_vif_event_armed(cfg)) |
@@ -4852,8 +4912,7 @@ cfg80211_p2p_attach_out: | |||
4852 | wl_deinit_priv(cfg); | 4912 | wl_deinit_priv(cfg); |
4853 | 4913 | ||
4854 | cfg80211_attach_out: | 4914 | cfg80211_attach_out: |
4855 | brcmf_free_vif(vif); | 4915 | brcmf_free_vif(cfg, vif); |
4856 | wiphy_free(wiphy); | ||
4857 | return NULL; | 4916 | return NULL; |
4858 | } | 4917 | } |
4859 | 4918 | ||
@@ -4865,7 +4924,7 @@ void brcmf_cfg80211_detach(struct brcmf_cfg80211_info *cfg) | |||
4865 | wl_deinit_priv(cfg); | 4924 | wl_deinit_priv(cfg); |
4866 | brcmf_btcoex_detach(cfg); | 4925 | brcmf_btcoex_detach(cfg); |
4867 | list_for_each_entry_safe(vif, tmp, &cfg->vif_list, list) { | 4926 | list_for_each_entry_safe(vif, tmp, &cfg->vif_list, list) { |
4868 | brcmf_free_vif(vif); | 4927 | brcmf_free_vif(cfg, vif); |
4869 | } | 4928 | } |
4870 | } | 4929 | } |
4871 | 4930 | ||
@@ -5229,6 +5288,8 @@ static s32 brcmf_config_dongle(struct brcmf_cfg80211_info *cfg) | |||
5229 | if (err) | 5288 | if (err) |
5230 | goto default_conf_out; | 5289 | goto default_conf_out; |
5231 | 5290 | ||
5291 | brcmf_configure_arp_offload(ifp, true); | ||
5292 | |||
5232 | cfg->dongle_up = true; | 5293 | cfg->dongle_up = true; |
5233 | default_conf_out: | 5294 | default_conf_out: |
5234 | 5295 | ||
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.h b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.h index a71cff84cdcf..d9bdaf9a72d0 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.h +++ b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.h | |||
@@ -487,7 +487,8 @@ enum nl80211_iftype brcmf_cfg80211_get_iftype(struct brcmf_if *ifp); | |||
487 | struct brcmf_cfg80211_vif *brcmf_alloc_vif(struct brcmf_cfg80211_info *cfg, | 487 | struct brcmf_cfg80211_vif *brcmf_alloc_vif(struct brcmf_cfg80211_info *cfg, |
488 | enum nl80211_iftype type, | 488 | enum nl80211_iftype type, |
489 | bool pm_block); | 489 | bool pm_block); |
490 | void brcmf_free_vif(struct brcmf_cfg80211_vif *vif); | 490 | void brcmf_free_vif(struct brcmf_cfg80211_info *cfg, |
491 | struct brcmf_cfg80211_vif *vif); | ||
491 | 492 | ||
492 | s32 brcmf_vif_set_mgmt_ie(struct brcmf_cfg80211_vif *vif, s32 pktflag, | 493 | s32 brcmf_vif_set_mgmt_ie(struct brcmf_cfg80211_vif *vif, s32 pktflag, |
493 | const u8 *vndr_ie_buf, u32 vndr_ie_len); | 494 | const u8 *vndr_ie_buf, u32 vndr_ie_len); |
diff --git a/drivers/net/wireless/iwlwifi/dvm/sta.c b/drivers/net/wireless/iwlwifi/dvm/sta.c index db183b44e038..c3c13ce96eb0 100644 --- a/drivers/net/wireless/iwlwifi/dvm/sta.c +++ b/drivers/net/wireless/iwlwifi/dvm/sta.c | |||
@@ -735,7 +735,7 @@ void iwl_restore_stations(struct iwl_priv *priv, struct iwl_rxon_context *ctx) | |||
735 | memcpy(&lq, priv->stations[i].lq, | 735 | memcpy(&lq, priv->stations[i].lq, |
736 | sizeof(struct iwl_link_quality_cmd)); | 736 | sizeof(struct iwl_link_quality_cmd)); |
737 | 737 | ||
738 | if (!memcmp(&lq, &zero_lq, sizeof(lq))) | 738 | if (memcmp(&lq, &zero_lq, sizeof(lq))) |
739 | send_lq = true; | 739 | send_lq = true; |
740 | } | 740 | } |
741 | spin_unlock_bh(&priv->sta_lock); | 741 | spin_unlock_bh(&priv->sta_lock); |
diff --git a/drivers/nfc/Kconfig b/drivers/nfc/Kconfig index 4775d4e61b88..74a852e4e41f 100644 --- a/drivers/nfc/Kconfig +++ b/drivers/nfc/Kconfig | |||
@@ -28,7 +28,7 @@ config NFC_WILINK | |||
28 | 28 | ||
29 | config NFC_MEI_PHY | 29 | config NFC_MEI_PHY |
30 | tristate "MEI bus NFC device support" | 30 | tristate "MEI bus NFC device support" |
31 | depends on INTEL_MEI_BUS_NFC && NFC_HCI | 31 | depends on INTEL_MEI && NFC_HCI |
32 | help | 32 | help |
33 | This adds support to use an mei bus nfc device. Select this if you | 33 | This adds support to use an mei bus nfc device. Select this if you |
34 | will use an HCI NFC driver for an NFC chip connected behind an | 34 | will use an HCI NFC driver for an NFC chip connected behind an |
diff --git a/drivers/nfc/mei_phy.c b/drivers/nfc/mei_phy.c index b8f8abc422f0..1201bdbfb791 100644 --- a/drivers/nfc/mei_phy.c +++ b/drivers/nfc/mei_phy.c | |||
@@ -64,6 +64,15 @@ int nfc_mei_phy_enable(void *phy_id) | |||
64 | return r; | 64 | return r; |
65 | } | 65 | } |
66 | 66 | ||
67 | r = mei_cl_register_event_cb(phy->device, nfc_mei_event_cb, phy); | ||
68 | if (r) { | ||
69 | pr_err("MEY_PHY: Event cb registration failed\n"); | ||
70 | mei_cl_disable_device(phy->device); | ||
71 | phy->powered = 0; | ||
72 | |||
73 | return r; | ||
74 | } | ||
75 | |||
67 | phy->powered = 1; | 76 | phy->powered = 1; |
68 | 77 | ||
69 | return 0; | 78 | return 0; |
diff --git a/drivers/nfc/microread/mei.c b/drivers/nfc/microread/mei.c index 1ad044dce7b6..cdf1bc53b257 100644 --- a/drivers/nfc/microread/mei.c +++ b/drivers/nfc/microread/mei.c | |||
@@ -43,24 +43,16 @@ static int microread_mei_probe(struct mei_cl_device *device, | |||
43 | return -ENOMEM; | 43 | return -ENOMEM; |
44 | } | 44 | } |
45 | 45 | ||
46 | r = mei_cl_register_event_cb(device, nfc_mei_event_cb, phy); | ||
47 | if (r) { | ||
48 | pr_err(MICROREAD_DRIVER_NAME ": event cb registration failed\n"); | ||
49 | goto err_out; | ||
50 | } | ||
51 | |||
52 | r = microread_probe(phy, &mei_phy_ops, LLC_NOP_NAME, | 46 | r = microread_probe(phy, &mei_phy_ops, LLC_NOP_NAME, |
53 | MEI_NFC_HEADER_SIZE, 0, MEI_NFC_MAX_HCI_PAYLOAD, | 47 | MEI_NFC_HEADER_SIZE, 0, MEI_NFC_MAX_HCI_PAYLOAD, |
54 | &phy->hdev); | 48 | &phy->hdev); |
55 | if (r < 0) | 49 | if (r < 0) { |
56 | goto err_out; | 50 | nfc_mei_phy_free(phy); |
57 | |||
58 | return 0; | ||
59 | 51 | ||
60 | err_out: | 52 | return r; |
61 | nfc_mei_phy_free(phy); | 53 | } |
62 | 54 | ||
63 | return r; | 55 | return 0; |
64 | } | 56 | } |
65 | 57 | ||
66 | static int microread_mei_remove(struct mei_cl_device *device) | 58 | static int microread_mei_remove(struct mei_cl_device *device) |
@@ -71,8 +63,6 @@ static int microread_mei_remove(struct mei_cl_device *device) | |||
71 | 63 | ||
72 | microread_remove(phy->hdev); | 64 | microread_remove(phy->hdev); |
73 | 65 | ||
74 | nfc_mei_phy_disable(phy); | ||
75 | |||
76 | nfc_mei_phy_free(phy); | 66 | nfc_mei_phy_free(phy); |
77 | 67 | ||
78 | return 0; | 68 | return 0; |
diff --git a/drivers/nfc/pn544/mei.c b/drivers/nfc/pn544/mei.c index 1eb48848a35a..b5d3d18179eb 100644 --- a/drivers/nfc/pn544/mei.c +++ b/drivers/nfc/pn544/mei.c | |||
@@ -43,24 +43,16 @@ static int pn544_mei_probe(struct mei_cl_device *device, | |||
43 | return -ENOMEM; | 43 | return -ENOMEM; |
44 | } | 44 | } |
45 | 45 | ||
46 | r = mei_cl_register_event_cb(device, nfc_mei_event_cb, phy); | ||
47 | if (r) { | ||
48 | pr_err(PN544_DRIVER_NAME ": event cb registration failed\n"); | ||
49 | goto err_out; | ||
50 | } | ||
51 | |||
52 | r = pn544_hci_probe(phy, &mei_phy_ops, LLC_NOP_NAME, | 46 | r = pn544_hci_probe(phy, &mei_phy_ops, LLC_NOP_NAME, |
53 | MEI_NFC_HEADER_SIZE, 0, MEI_NFC_MAX_HCI_PAYLOAD, | 47 | MEI_NFC_HEADER_SIZE, 0, MEI_NFC_MAX_HCI_PAYLOAD, |
54 | &phy->hdev); | 48 | &phy->hdev); |
55 | if (r < 0) | 49 | if (r < 0) { |
56 | goto err_out; | 50 | nfc_mei_phy_free(phy); |
57 | |||
58 | return 0; | ||
59 | 51 | ||
60 | err_out: | 52 | return r; |
61 | nfc_mei_phy_free(phy); | 53 | } |
62 | 54 | ||
63 | return r; | 55 | return 0; |
64 | } | 56 | } |
65 | 57 | ||
66 | static int pn544_mei_remove(struct mei_cl_device *device) | 58 | static int pn544_mei_remove(struct mei_cl_device *device) |
@@ -71,8 +63,6 @@ static int pn544_mei_remove(struct mei_cl_device *device) | |||
71 | 63 | ||
72 | pn544_hci_remove(phy->hdev); | 64 | pn544_hci_remove(phy->hdev); |
73 | 65 | ||
74 | nfc_mei_phy_disable(phy); | ||
75 | |||
76 | nfc_mei_phy_free(phy); | 66 | nfc_mei_phy_free(phy); |
77 | 67 | ||
78 | return 0; | 68 | return 0; |
diff --git a/drivers/parisc/lba_pci.c b/drivers/parisc/lba_pci.c index 2ef7103270bb..1f05913ae677 100644 --- a/drivers/parisc/lba_pci.c +++ b/drivers/parisc/lba_pci.c | |||
@@ -668,7 +668,7 @@ lba_fixup_bus(struct pci_bus *bus) | |||
668 | BUG(); | 668 | BUG(); |
669 | } | 669 | } |
670 | 670 | ||
671 | if (ldev->hba.elmmio_space.start) { | 671 | if (ldev->hba.elmmio_space.flags) { |
672 | err = request_resource(&iomem_resource, | 672 | err = request_resource(&iomem_resource, |
673 | &(ldev->hba.elmmio_space)); | 673 | &(ldev->hba.elmmio_space)); |
674 | if (err < 0) { | 674 | if (err < 0) { |
@@ -993,7 +993,7 @@ lba_pat_resources(struct parisc_device *pa_dev, struct lba_device *lba_dev) | |||
993 | 993 | ||
994 | case PAT_LMMIO: | 994 | case PAT_LMMIO: |
995 | /* used to fix up pre-initialized MEM BARs */ | 995 | /* used to fix up pre-initialized MEM BARs */ |
996 | if (!lba_dev->hba.lmmio_space.start) { | 996 | if (!lba_dev->hba.lmmio_space.flags) { |
997 | sprintf(lba_dev->hba.lmmio_name, | 997 | sprintf(lba_dev->hba.lmmio_name, |
998 | "PCI%02x LMMIO", | 998 | "PCI%02x LMMIO", |
999 | (int)lba_dev->hba.bus_num.start); | 999 | (int)lba_dev->hba.bus_num.start); |
@@ -1001,7 +1001,7 @@ lba_pat_resources(struct parisc_device *pa_dev, struct lba_device *lba_dev) | |||
1001 | io->start; | 1001 | io->start; |
1002 | r = &lba_dev->hba.lmmio_space; | 1002 | r = &lba_dev->hba.lmmio_space; |
1003 | r->name = lba_dev->hba.lmmio_name; | 1003 | r->name = lba_dev->hba.lmmio_name; |
1004 | } else if (!lba_dev->hba.elmmio_space.start) { | 1004 | } else if (!lba_dev->hba.elmmio_space.flags) { |
1005 | sprintf(lba_dev->hba.elmmio_name, | 1005 | sprintf(lba_dev->hba.elmmio_name, |
1006 | "PCI%02x ELMMIO", | 1006 | "PCI%02x ELMMIO", |
1007 | (int)lba_dev->hba.bus_num.start); | 1007 | (int)lba_dev->hba.bus_num.start); |
@@ -1096,6 +1096,7 @@ lba_legacy_resources(struct parisc_device *pa_dev, struct lba_device *lba_dev) | |||
1096 | r->name = "LBA PCI Busses"; | 1096 | r->name = "LBA PCI Busses"; |
1097 | r->start = lba_num & 0xff; | 1097 | r->start = lba_num & 0xff; |
1098 | r->end = (lba_num>>8) & 0xff; | 1098 | r->end = (lba_num>>8) & 0xff; |
1099 | r->flags = IORESOURCE_BUS; | ||
1099 | 1100 | ||
1100 | /* Set up local PCI Bus resources - we don't need them for | 1101 | /* Set up local PCI Bus resources - we don't need them for |
1101 | ** Legacy boxes but it's nice to see in /proc/iomem. | 1102 | ** Legacy boxes but it's nice to see in /proc/iomem. |
@@ -1494,7 +1495,7 @@ lba_driver_probe(struct parisc_device *dev) | |||
1494 | 1495 | ||
1495 | pci_add_resource_offset(&resources, &lba_dev->hba.io_space, | 1496 | pci_add_resource_offset(&resources, &lba_dev->hba.io_space, |
1496 | HBA_PORT_BASE(lba_dev->hba.hba_num)); | 1497 | HBA_PORT_BASE(lba_dev->hba.hba_num)); |
1497 | if (lba_dev->hba.elmmio_space.start) | 1498 | if (lba_dev->hba.elmmio_space.flags) |
1498 | pci_add_resource_offset(&resources, &lba_dev->hba.elmmio_space, | 1499 | pci_add_resource_offset(&resources, &lba_dev->hba.elmmio_space, |
1499 | lba_dev->hba.lmmio_space_offset); | 1500 | lba_dev->hba.lmmio_space_offset); |
1500 | if (lba_dev->hba.lmmio_space.flags) | 1501 | if (lba_dev->hba.lmmio_space.flags) |
diff --git a/drivers/parisc/superio.c b/drivers/parisc/superio.c index ac6e8e7a02df..a042d065a0c7 100644 --- a/drivers/parisc/superio.c +++ b/drivers/parisc/superio.c | |||
@@ -494,15 +494,4 @@ static struct pci_driver superio_driver = { | |||
494 | .probe = superio_probe, | 494 | .probe = superio_probe, |
495 | }; | 495 | }; |
496 | 496 | ||
497 | static int __init superio_modinit(void) | 497 | module_pci_driver(superio_driver); |
498 | { | ||
499 | return pci_register_driver(&superio_driver); | ||
500 | } | ||
501 | |||
502 | static void __exit superio_exit(void) | ||
503 | { | ||
504 | pci_unregister_driver(&superio_driver); | ||
505 | } | ||
506 | |||
507 | module_init(superio_modinit); | ||
508 | module_exit(superio_exit); | ||
diff --git a/drivers/parport/Kconfig b/drivers/parport/Kconfig index 24e12d4d1769..a50576081b34 100644 --- a/drivers/parport/Kconfig +++ b/drivers/parport/Kconfig | |||
@@ -71,7 +71,7 @@ config PARPORT_PC_FIFO | |||
71 | 71 | ||
72 | config PARPORT_PC_SUPERIO | 72 | config PARPORT_PC_SUPERIO |
73 | bool "SuperIO chipset support" | 73 | bool "SuperIO chipset support" |
74 | depends on PARPORT_PC | 74 | depends on PARPORT_PC && !PARISC |
75 | help | 75 | help |
76 | Saying Y here enables some probes for Super-IO chipsets in order to | 76 | Saying Y here enables some probes for Super-IO chipsets in order to |
77 | find out things like base addresses, IRQ lines and DMA channels. It | 77 | find out things like base addresses, IRQ lines and DMA channels. It |
diff --git a/drivers/parport/parport_gsc.c b/drivers/parport/parport_gsc.c index a5251cb5fb0c..6e3a60c78873 100644 --- a/drivers/parport/parport_gsc.c +++ b/drivers/parport/parport_gsc.c | |||
@@ -234,7 +234,7 @@ static int parport_PS2_supported(struct parport *pb) | |||
234 | 234 | ||
235 | struct parport *parport_gsc_probe_port(unsigned long base, | 235 | struct parport *parport_gsc_probe_port(unsigned long base, |
236 | unsigned long base_hi, int irq, | 236 | unsigned long base_hi, int irq, |
237 | int dma, struct pci_dev *dev) | 237 | int dma, struct parisc_device *padev) |
238 | { | 238 | { |
239 | struct parport_gsc_private *priv; | 239 | struct parport_gsc_private *priv; |
240 | struct parport_operations *ops; | 240 | struct parport_operations *ops; |
@@ -258,7 +258,6 @@ struct parport *parport_gsc_probe_port(unsigned long base, | |||
258 | priv->ctr_writable = 0xff; | 258 | priv->ctr_writable = 0xff; |
259 | priv->dma_buf = 0; | 259 | priv->dma_buf = 0; |
260 | priv->dma_handle = 0; | 260 | priv->dma_handle = 0; |
261 | priv->dev = dev; | ||
262 | p->base = base; | 261 | p->base = base; |
263 | p->base_hi = base_hi; | 262 | p->base_hi = base_hi; |
264 | p->irq = irq; | 263 | p->irq = irq; |
@@ -282,6 +281,7 @@ struct parport *parport_gsc_probe_port(unsigned long base, | |||
282 | return NULL; | 281 | return NULL; |
283 | } | 282 | } |
284 | 283 | ||
284 | p->dev = &padev->dev; | ||
285 | p->base_hi = base_hi; | 285 | p->base_hi = base_hi; |
286 | p->modes = tmp.modes; | 286 | p->modes = tmp.modes; |
287 | p->size = (p->modes & PARPORT_MODE_EPP)?8:3; | 287 | p->size = (p->modes & PARPORT_MODE_EPP)?8:3; |
@@ -373,7 +373,7 @@ static int parport_init_chip(struct parisc_device *dev) | |||
373 | } | 373 | } |
374 | 374 | ||
375 | p = parport_gsc_probe_port(port, 0, dev->irq, | 375 | p = parport_gsc_probe_port(port, 0, dev->irq, |
376 | /* PARPORT_IRQ_NONE */ PARPORT_DMA_NONE, NULL); | 376 | /* PARPORT_IRQ_NONE */ PARPORT_DMA_NONE, dev); |
377 | if (p) | 377 | if (p) |
378 | parport_count++; | 378 | parport_count++; |
379 | dev_set_drvdata(&dev->dev, p); | 379 | dev_set_drvdata(&dev->dev, p); |
diff --git a/drivers/parport/parport_gsc.h b/drivers/parport/parport_gsc.h index fc9c37c54022..812214768d27 100644 --- a/drivers/parport/parport_gsc.h +++ b/drivers/parport/parport_gsc.h | |||
@@ -217,6 +217,6 @@ extern void parport_gsc_dec_use_count(void); | |||
217 | extern struct parport *parport_gsc_probe_port(unsigned long base, | 217 | extern struct parport *parport_gsc_probe_port(unsigned long base, |
218 | unsigned long base_hi, | 218 | unsigned long base_hi, |
219 | int irq, int dma, | 219 | int irq, int dma, |
220 | struct pci_dev *dev); | 220 | struct parisc_device *padev); |
221 | 221 | ||
222 | #endif /* __DRIVERS_PARPORT_PARPORT_GSC_H */ | 222 | #endif /* __DRIVERS_PARPORT_PARPORT_GSC_H */ |
diff --git a/drivers/pci/pcie/aer/aerdrv_core.c b/drivers/pci/pcie/aer/aerdrv_core.c index 8ec8b4f48560..0f4554e48cc5 100644 --- a/drivers/pci/pcie/aer/aerdrv_core.c +++ b/drivers/pci/pcie/aer/aerdrv_core.c | |||
@@ -580,6 +580,7 @@ struct aer_recover_entry | |||
580 | u8 devfn; | 580 | u8 devfn; |
581 | u16 domain; | 581 | u16 domain; |
582 | int severity; | 582 | int severity; |
583 | struct aer_capability_regs *regs; | ||
583 | }; | 584 | }; |
584 | 585 | ||
585 | static DEFINE_KFIFO(aer_recover_ring, struct aer_recover_entry, | 586 | static DEFINE_KFIFO(aer_recover_ring, struct aer_recover_entry, |
@@ -593,7 +594,7 @@ static DEFINE_SPINLOCK(aer_recover_ring_lock); | |||
593 | static DECLARE_WORK(aer_recover_work, aer_recover_work_func); | 594 | static DECLARE_WORK(aer_recover_work, aer_recover_work_func); |
594 | 595 | ||
595 | void aer_recover_queue(int domain, unsigned int bus, unsigned int devfn, | 596 | void aer_recover_queue(int domain, unsigned int bus, unsigned int devfn, |
596 | int severity) | 597 | int severity, struct aer_capability_regs *aer_regs) |
597 | { | 598 | { |
598 | unsigned long flags; | 599 | unsigned long flags; |
599 | struct aer_recover_entry entry = { | 600 | struct aer_recover_entry entry = { |
@@ -601,6 +602,7 @@ void aer_recover_queue(int domain, unsigned int bus, unsigned int devfn, | |||
601 | .devfn = devfn, | 602 | .devfn = devfn, |
602 | .domain = domain, | 603 | .domain = domain, |
603 | .severity = severity, | 604 | .severity = severity, |
605 | .regs = aer_regs, | ||
604 | }; | 606 | }; |
605 | 607 | ||
606 | spin_lock_irqsave(&aer_recover_ring_lock, flags); | 608 | spin_lock_irqsave(&aer_recover_ring_lock, flags); |
@@ -627,6 +629,7 @@ static void aer_recover_work_func(struct work_struct *work) | |||
627 | PCI_SLOT(entry.devfn), PCI_FUNC(entry.devfn)); | 629 | PCI_SLOT(entry.devfn), PCI_FUNC(entry.devfn)); |
628 | continue; | 630 | continue; |
629 | } | 631 | } |
632 | cper_print_aer(pdev, entry.severity, entry.regs); | ||
630 | do_recovery(pdev, entry.severity); | 633 | do_recovery(pdev, entry.severity); |
631 | pci_dev_put(pdev); | 634 | pci_dev_put(pdev); |
632 | } | 635 | } |
diff --git a/drivers/pci/pcie/aer/aerdrv_errprint.c b/drivers/pci/pcie/aer/aerdrv_errprint.c index 5ab14251839d..2c7c9f5f592c 100644 --- a/drivers/pci/pcie/aer/aerdrv_errprint.c +++ b/drivers/pci/pcie/aer/aerdrv_errprint.c | |||
@@ -220,7 +220,7 @@ int cper_severity_to_aer(int cper_severity) | |||
220 | } | 220 | } |
221 | EXPORT_SYMBOL_GPL(cper_severity_to_aer); | 221 | EXPORT_SYMBOL_GPL(cper_severity_to_aer); |
222 | 222 | ||
223 | void cper_print_aer(const char *prefix, struct pci_dev *dev, int cper_severity, | 223 | void cper_print_aer(struct pci_dev *dev, int cper_severity, |
224 | struct aer_capability_regs *aer) | 224 | struct aer_capability_regs *aer) |
225 | { | 225 | { |
226 | int aer_severity, layer, agent, status_strs_size, tlp_header_valid = 0; | 226 | int aer_severity, layer, agent, status_strs_size, tlp_header_valid = 0; |
@@ -244,7 +244,7 @@ void cper_print_aer(const char *prefix, struct pci_dev *dev, int cper_severity, | |||
244 | agent = AER_GET_AGENT(aer_severity, status); | 244 | agent = AER_GET_AGENT(aer_severity, status); |
245 | dev_err(&dev->dev, "aer_status: 0x%08x, aer_mask: 0x%08x\n", | 245 | dev_err(&dev->dev, "aer_status: 0x%08x, aer_mask: 0x%08x\n", |
246 | status, mask); | 246 | status, mask); |
247 | cper_print_bits(prefix, status, status_strs, status_strs_size); | 247 | cper_print_bits("", status, status_strs, status_strs_size); |
248 | dev_err(&dev->dev, "aer_layer=%s, aer_agent=%s\n", | 248 | dev_err(&dev->dev, "aer_layer=%s, aer_agent=%s\n", |
249 | aer_error_layer[layer], aer_agent_string[agent]); | 249 | aer_error_layer[layer], aer_agent_string[agent]); |
250 | if (aer_severity != AER_CORRECTABLE) | 250 | if (aer_severity != AER_CORRECTABLE) |
diff --git a/drivers/pinctrl/pinconf.c b/drivers/pinctrl/pinconf.c index c67c37e23dd7..694c3ace4520 100644 --- a/drivers/pinctrl/pinconf.c +++ b/drivers/pinctrl/pinconf.c | |||
@@ -610,7 +610,7 @@ static int pinconf_dbg_config_print(struct seq_file *s, void *d) | |||
610 | bool found = false; | 610 | bool found = false; |
611 | unsigned long config; | 611 | unsigned long config; |
612 | 612 | ||
613 | mutex_lock(&pctldev->mutex); | 613 | mutex_lock(&pinctrl_maps_mutex); |
614 | 614 | ||
615 | /* Parse the pinctrl map and look for the elected pin/state */ | 615 | /* Parse the pinctrl map and look for the elected pin/state */ |
616 | for_each_maps(maps_node, i, map) { | 616 | for_each_maps(maps_node, i, map) { |
@@ -659,7 +659,7 @@ static int pinconf_dbg_config_print(struct seq_file *s, void *d) | |||
659 | confops->pin_config_config_dbg_show(pctldev, s, config); | 659 | confops->pin_config_config_dbg_show(pctldev, s, config); |
660 | 660 | ||
661 | exit: | 661 | exit: |
662 | mutex_unlock(&pctldev->mutex); | 662 | mutex_unlock(&pinctrl_maps_mutex); |
663 | 663 | ||
664 | return 0; | 664 | return 0; |
665 | } | 665 | } |
diff --git a/drivers/pinctrl/pinctrl-coh901.c b/drivers/pinctrl/pinctrl-coh901.c index a67af419f531..d6b41747d687 100644 --- a/drivers/pinctrl/pinctrl-coh901.c +++ b/drivers/pinctrl/pinctrl-coh901.c | |||
@@ -830,7 +830,8 @@ static int __init u300_gpio_probe(struct platform_device *pdev) | |||
830 | return 0; | 830 | return 0; |
831 | 831 | ||
832 | err_no_range: | 832 | err_no_range: |
833 | err = gpiochip_remove(&gpio->chip); | 833 | if (gpiochip_remove(&gpio->chip)) |
834 | dev_err(&pdev->dev, "failed to remove gpio chip\n"); | ||
834 | err_no_chip: | 835 | err_no_chip: |
835 | err_no_domain: | 836 | err_no_domain: |
836 | err_no_port: | 837 | err_no_port: |
diff --git a/drivers/pinctrl/pinctrl-exynos.c b/drivers/pinctrl/pinctrl-exynos.c index ac742817ebce..2d76f66a2e0b 100644 --- a/drivers/pinctrl/pinctrl-exynos.c +++ b/drivers/pinctrl/pinctrl-exynos.c | |||
@@ -196,6 +196,12 @@ static irqreturn_t exynos_eint_gpio_irq(int irq, void *data) | |||
196 | return IRQ_HANDLED; | 196 | return IRQ_HANDLED; |
197 | } | 197 | } |
198 | 198 | ||
199 | struct exynos_eint_gpio_save { | ||
200 | u32 eint_con; | ||
201 | u32 eint_fltcon0; | ||
202 | u32 eint_fltcon1; | ||
203 | }; | ||
204 | |||
199 | /* | 205 | /* |
200 | * exynos_eint_gpio_init() - setup handling of external gpio interrupts. | 206 | * exynos_eint_gpio_init() - setup handling of external gpio interrupts. |
201 | * @d: driver data of samsung pinctrl driver. | 207 | * @d: driver data of samsung pinctrl driver. |
@@ -204,8 +210,8 @@ static int exynos_eint_gpio_init(struct samsung_pinctrl_drv_data *d) | |||
204 | { | 210 | { |
205 | struct samsung_pin_bank *bank; | 211 | struct samsung_pin_bank *bank; |
206 | struct device *dev = d->dev; | 212 | struct device *dev = d->dev; |
207 | unsigned int ret; | 213 | int ret; |
208 | unsigned int i; | 214 | int i; |
209 | 215 | ||
210 | if (!d->irq) { | 216 | if (!d->irq) { |
211 | dev_err(dev, "irq number not available\n"); | 217 | dev_err(dev, "irq number not available\n"); |
@@ -227,11 +233,29 @@ static int exynos_eint_gpio_init(struct samsung_pinctrl_drv_data *d) | |||
227 | bank->nr_pins, &exynos_gpio_irqd_ops, bank); | 233 | bank->nr_pins, &exynos_gpio_irqd_ops, bank); |
228 | if (!bank->irq_domain) { | 234 | if (!bank->irq_domain) { |
229 | dev_err(dev, "gpio irq domain add failed\n"); | 235 | dev_err(dev, "gpio irq domain add failed\n"); |
230 | return -ENXIO; | 236 | ret = -ENXIO; |
237 | goto err_domains; | ||
238 | } | ||
239 | |||
240 | bank->soc_priv = devm_kzalloc(d->dev, | ||
241 | sizeof(struct exynos_eint_gpio_save), GFP_KERNEL); | ||
242 | if (!bank->soc_priv) { | ||
243 | irq_domain_remove(bank->irq_domain); | ||
244 | ret = -ENOMEM; | ||
245 | goto err_domains; | ||
231 | } | 246 | } |
232 | } | 247 | } |
233 | 248 | ||
234 | return 0; | 249 | return 0; |
250 | |||
251 | err_domains: | ||
252 | for (--i, --bank; i >= 0; --i, --bank) { | ||
253 | if (bank->eint_type != EINT_TYPE_GPIO) | ||
254 | continue; | ||
255 | irq_domain_remove(bank->irq_domain); | ||
256 | } | ||
257 | |||
258 | return ret; | ||
235 | } | 259 | } |
236 | 260 | ||
237 | static void exynos_wkup_irq_unmask(struct irq_data *irqd) | 261 | static void exynos_wkup_irq_unmask(struct irq_data *irqd) |
@@ -326,6 +350,28 @@ static int exynos_wkup_irq_set_type(struct irq_data *irqd, unsigned int type) | |||
326 | return 0; | 350 | return 0; |
327 | } | 351 | } |
328 | 352 | ||
353 | static u32 exynos_eint_wake_mask = 0xffffffff; | ||
354 | |||
355 | u32 exynos_get_eint_wake_mask(void) | ||
356 | { | ||
357 | return exynos_eint_wake_mask; | ||
358 | } | ||
359 | |||
360 | static int exynos_wkup_irq_set_wake(struct irq_data *irqd, unsigned int on) | ||
361 | { | ||
362 | struct samsung_pin_bank *bank = irq_data_get_irq_chip_data(irqd); | ||
363 | unsigned long bit = 1UL << (2 * bank->eint_offset + irqd->hwirq); | ||
364 | |||
365 | pr_info("wake %s for irq %d\n", on ? "enabled" : "disabled", irqd->irq); | ||
366 | |||
367 | if (!on) | ||
368 | exynos_eint_wake_mask |= bit; | ||
369 | else | ||
370 | exynos_eint_wake_mask &= ~bit; | ||
371 | |||
372 | return 0; | ||
373 | } | ||
374 | |||
329 | /* | 375 | /* |
330 | * irq_chip for wakeup interrupts | 376 | * irq_chip for wakeup interrupts |
331 | */ | 377 | */ |
@@ -335,6 +381,7 @@ static struct irq_chip exynos_wkup_irq_chip = { | |||
335 | .irq_mask = exynos_wkup_irq_mask, | 381 | .irq_mask = exynos_wkup_irq_mask, |
336 | .irq_ack = exynos_wkup_irq_ack, | 382 | .irq_ack = exynos_wkup_irq_ack, |
337 | .irq_set_type = exynos_wkup_irq_set_type, | 383 | .irq_set_type = exynos_wkup_irq_set_type, |
384 | .irq_set_wake = exynos_wkup_irq_set_wake, | ||
338 | }; | 385 | }; |
339 | 386 | ||
340 | /* interrupt handler for wakeup interrupts 0..15 */ | 387 | /* interrupt handler for wakeup interrupts 0..15 */ |
@@ -505,6 +552,72 @@ static int exynos_eint_wkup_init(struct samsung_pinctrl_drv_data *d) | |||
505 | return 0; | 552 | return 0; |
506 | } | 553 | } |
507 | 554 | ||
555 | static void exynos_pinctrl_suspend_bank( | ||
556 | struct samsung_pinctrl_drv_data *drvdata, | ||
557 | struct samsung_pin_bank *bank) | ||
558 | { | ||
559 | struct exynos_eint_gpio_save *save = bank->soc_priv; | ||
560 | void __iomem *regs = drvdata->virt_base; | ||
561 | |||
562 | save->eint_con = readl(regs + EXYNOS_GPIO_ECON_OFFSET | ||
563 | + bank->eint_offset); | ||
564 | save->eint_fltcon0 = readl(regs + EXYNOS_GPIO_EFLTCON_OFFSET | ||
565 | + 2 * bank->eint_offset); | ||
566 | save->eint_fltcon1 = readl(regs + EXYNOS_GPIO_EFLTCON_OFFSET | ||
567 | + 2 * bank->eint_offset + 4); | ||
568 | |||
569 | pr_debug("%s: save con %#010x\n", bank->name, save->eint_con); | ||
570 | pr_debug("%s: save fltcon0 %#010x\n", bank->name, save->eint_fltcon0); | ||
571 | pr_debug("%s: save fltcon1 %#010x\n", bank->name, save->eint_fltcon1); | ||
572 | } | ||
573 | |||
574 | static void exynos_pinctrl_suspend(struct samsung_pinctrl_drv_data *drvdata) | ||
575 | { | ||
576 | struct samsung_pin_ctrl *ctrl = drvdata->ctrl; | ||
577 | struct samsung_pin_bank *bank = ctrl->pin_banks; | ||
578 | int i; | ||
579 | |||
580 | for (i = 0; i < ctrl->nr_banks; ++i, ++bank) | ||
581 | if (bank->eint_type == EINT_TYPE_GPIO) | ||
582 | exynos_pinctrl_suspend_bank(drvdata, bank); | ||
583 | } | ||
584 | |||
585 | static void exynos_pinctrl_resume_bank( | ||
586 | struct samsung_pinctrl_drv_data *drvdata, | ||
587 | struct samsung_pin_bank *bank) | ||
588 | { | ||
589 | struct exynos_eint_gpio_save *save = bank->soc_priv; | ||
590 | void __iomem *regs = drvdata->virt_base; | ||
591 | |||
592 | pr_debug("%s: con %#010x => %#010x\n", bank->name, | ||
593 | readl(regs + EXYNOS_GPIO_ECON_OFFSET | ||
594 | + bank->eint_offset), save->eint_con); | ||
595 | pr_debug("%s: fltcon0 %#010x => %#010x\n", bank->name, | ||
596 | readl(regs + EXYNOS_GPIO_EFLTCON_OFFSET | ||
597 | + 2 * bank->eint_offset), save->eint_fltcon0); | ||
598 | pr_debug("%s: fltcon1 %#010x => %#010x\n", bank->name, | ||
599 | readl(regs + EXYNOS_GPIO_EFLTCON_OFFSET | ||
600 | + 2 * bank->eint_offset + 4), save->eint_fltcon1); | ||
601 | |||
602 | writel(save->eint_con, regs + EXYNOS_GPIO_ECON_OFFSET | ||
603 | + bank->eint_offset); | ||
604 | writel(save->eint_fltcon0, regs + EXYNOS_GPIO_EFLTCON_OFFSET | ||
605 | + 2 * bank->eint_offset); | ||
606 | writel(save->eint_fltcon1, regs + EXYNOS_GPIO_EFLTCON_OFFSET | ||
607 | + 2 * bank->eint_offset + 4); | ||
608 | } | ||
609 | |||
610 | static void exynos_pinctrl_resume(struct samsung_pinctrl_drv_data *drvdata) | ||
611 | { | ||
612 | struct samsung_pin_ctrl *ctrl = drvdata->ctrl; | ||
613 | struct samsung_pin_bank *bank = ctrl->pin_banks; | ||
614 | int i; | ||
615 | |||
616 | for (i = 0; i < ctrl->nr_banks; ++i, ++bank) | ||
617 | if (bank->eint_type == EINT_TYPE_GPIO) | ||
618 | exynos_pinctrl_resume_bank(drvdata, bank); | ||
619 | } | ||
620 | |||
508 | /* pin banks of exynos4210 pin-controller 0 */ | 621 | /* pin banks of exynos4210 pin-controller 0 */ |
509 | static struct samsung_pin_bank exynos4210_pin_banks0[] = { | 622 | static struct samsung_pin_bank exynos4210_pin_banks0[] = { |
510 | EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00), | 623 | EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00), |
@@ -568,6 +681,8 @@ struct samsung_pin_ctrl exynos4210_pin_ctrl[] = { | |||
568 | .geint_pend = EXYNOS_GPIO_EPEND_OFFSET, | 681 | .geint_pend = EXYNOS_GPIO_EPEND_OFFSET, |
569 | .svc = EXYNOS_SVC_OFFSET, | 682 | .svc = EXYNOS_SVC_OFFSET, |
570 | .eint_gpio_init = exynos_eint_gpio_init, | 683 | .eint_gpio_init = exynos_eint_gpio_init, |
684 | .suspend = exynos_pinctrl_suspend, | ||
685 | .resume = exynos_pinctrl_resume, | ||
571 | .label = "exynos4210-gpio-ctrl0", | 686 | .label = "exynos4210-gpio-ctrl0", |
572 | }, { | 687 | }, { |
573 | /* pin-controller instance 1 data */ | 688 | /* pin-controller instance 1 data */ |
@@ -582,6 +697,8 @@ struct samsung_pin_ctrl exynos4210_pin_ctrl[] = { | |||
582 | .svc = EXYNOS_SVC_OFFSET, | 697 | .svc = EXYNOS_SVC_OFFSET, |
583 | .eint_gpio_init = exynos_eint_gpio_init, | 698 | .eint_gpio_init = exynos_eint_gpio_init, |
584 | .eint_wkup_init = exynos_eint_wkup_init, | 699 | .eint_wkup_init = exynos_eint_wkup_init, |
700 | .suspend = exynos_pinctrl_suspend, | ||
701 | .resume = exynos_pinctrl_resume, | ||
585 | .label = "exynos4210-gpio-ctrl1", | 702 | .label = "exynos4210-gpio-ctrl1", |
586 | }, { | 703 | }, { |
587 | /* pin-controller instance 2 data */ | 704 | /* pin-controller instance 2 data */ |
@@ -663,6 +780,8 @@ struct samsung_pin_ctrl exynos4x12_pin_ctrl[] = { | |||
663 | .geint_pend = EXYNOS_GPIO_EPEND_OFFSET, | 780 | .geint_pend = EXYNOS_GPIO_EPEND_OFFSET, |
664 | .svc = EXYNOS_SVC_OFFSET, | 781 | .svc = EXYNOS_SVC_OFFSET, |
665 | .eint_gpio_init = exynos_eint_gpio_init, | 782 | .eint_gpio_init = exynos_eint_gpio_init, |
783 | .suspend = exynos_pinctrl_suspend, | ||
784 | .resume = exynos_pinctrl_resume, | ||
666 | .label = "exynos4x12-gpio-ctrl0", | 785 | .label = "exynos4x12-gpio-ctrl0", |
667 | }, { | 786 | }, { |
668 | /* pin-controller instance 1 data */ | 787 | /* pin-controller instance 1 data */ |
@@ -677,6 +796,8 @@ struct samsung_pin_ctrl exynos4x12_pin_ctrl[] = { | |||
677 | .svc = EXYNOS_SVC_OFFSET, | 796 | .svc = EXYNOS_SVC_OFFSET, |
678 | .eint_gpio_init = exynos_eint_gpio_init, | 797 | .eint_gpio_init = exynos_eint_gpio_init, |
679 | .eint_wkup_init = exynos_eint_wkup_init, | 798 | .eint_wkup_init = exynos_eint_wkup_init, |
799 | .suspend = exynos_pinctrl_suspend, | ||
800 | .resume = exynos_pinctrl_resume, | ||
680 | .label = "exynos4x12-gpio-ctrl1", | 801 | .label = "exynos4x12-gpio-ctrl1", |
681 | }, { | 802 | }, { |
682 | /* pin-controller instance 2 data */ | 803 | /* pin-controller instance 2 data */ |
@@ -687,6 +808,8 @@ struct samsung_pin_ctrl exynos4x12_pin_ctrl[] = { | |||
687 | .geint_pend = EXYNOS_GPIO_EPEND_OFFSET, | 808 | .geint_pend = EXYNOS_GPIO_EPEND_OFFSET, |
688 | .svc = EXYNOS_SVC_OFFSET, | 809 | .svc = EXYNOS_SVC_OFFSET, |
689 | .eint_gpio_init = exynos_eint_gpio_init, | 810 | .eint_gpio_init = exynos_eint_gpio_init, |
811 | .suspend = exynos_pinctrl_suspend, | ||
812 | .resume = exynos_pinctrl_resume, | ||
690 | .label = "exynos4x12-gpio-ctrl2", | 813 | .label = "exynos4x12-gpio-ctrl2", |
691 | }, { | 814 | }, { |
692 | /* pin-controller instance 3 data */ | 815 | /* pin-controller instance 3 data */ |
@@ -697,6 +820,8 @@ struct samsung_pin_ctrl exynos4x12_pin_ctrl[] = { | |||
697 | .geint_pend = EXYNOS_GPIO_EPEND_OFFSET, | 820 | .geint_pend = EXYNOS_GPIO_EPEND_OFFSET, |
698 | .svc = EXYNOS_SVC_OFFSET, | 821 | .svc = EXYNOS_SVC_OFFSET, |
699 | .eint_gpio_init = exynos_eint_gpio_init, | 822 | .eint_gpio_init = exynos_eint_gpio_init, |
823 | .suspend = exynos_pinctrl_suspend, | ||
824 | .resume = exynos_pinctrl_resume, | ||
700 | .label = "exynos4x12-gpio-ctrl3", | 825 | .label = "exynos4x12-gpio-ctrl3", |
701 | }, | 826 | }, |
702 | }; | 827 | }; |
@@ -775,6 +900,8 @@ struct samsung_pin_ctrl exynos5250_pin_ctrl[] = { | |||
775 | .svc = EXYNOS_SVC_OFFSET, | 900 | .svc = EXYNOS_SVC_OFFSET, |
776 | .eint_gpio_init = exynos_eint_gpio_init, | 901 | .eint_gpio_init = exynos_eint_gpio_init, |
777 | .eint_wkup_init = exynos_eint_wkup_init, | 902 | .eint_wkup_init = exynos_eint_wkup_init, |
903 | .suspend = exynos_pinctrl_suspend, | ||
904 | .resume = exynos_pinctrl_resume, | ||
778 | .label = "exynos5250-gpio-ctrl0", | 905 | .label = "exynos5250-gpio-ctrl0", |
779 | }, { | 906 | }, { |
780 | /* pin-controller instance 1 data */ | 907 | /* pin-controller instance 1 data */ |
@@ -785,6 +912,8 @@ struct samsung_pin_ctrl exynos5250_pin_ctrl[] = { | |||
785 | .geint_pend = EXYNOS_GPIO_EPEND_OFFSET, | 912 | .geint_pend = EXYNOS_GPIO_EPEND_OFFSET, |
786 | .svc = EXYNOS_SVC_OFFSET, | 913 | .svc = EXYNOS_SVC_OFFSET, |
787 | .eint_gpio_init = exynos_eint_gpio_init, | 914 | .eint_gpio_init = exynos_eint_gpio_init, |
915 | .suspend = exynos_pinctrl_suspend, | ||
916 | .resume = exynos_pinctrl_resume, | ||
788 | .label = "exynos5250-gpio-ctrl1", | 917 | .label = "exynos5250-gpio-ctrl1", |
789 | }, { | 918 | }, { |
790 | /* pin-controller instance 2 data */ | 919 | /* pin-controller instance 2 data */ |
@@ -795,6 +924,8 @@ struct samsung_pin_ctrl exynos5250_pin_ctrl[] = { | |||
795 | .geint_pend = EXYNOS_GPIO_EPEND_OFFSET, | 924 | .geint_pend = EXYNOS_GPIO_EPEND_OFFSET, |
796 | .svc = EXYNOS_SVC_OFFSET, | 925 | .svc = EXYNOS_SVC_OFFSET, |
797 | .eint_gpio_init = exynos_eint_gpio_init, | 926 | .eint_gpio_init = exynos_eint_gpio_init, |
927 | .suspend = exynos_pinctrl_suspend, | ||
928 | .resume = exynos_pinctrl_resume, | ||
798 | .label = "exynos5250-gpio-ctrl2", | 929 | .label = "exynos5250-gpio-ctrl2", |
799 | }, { | 930 | }, { |
800 | /* pin-controller instance 3 data */ | 931 | /* pin-controller instance 3 data */ |
@@ -805,6 +936,8 @@ struct samsung_pin_ctrl exynos5250_pin_ctrl[] = { | |||
805 | .geint_pend = EXYNOS_GPIO_EPEND_OFFSET, | 936 | .geint_pend = EXYNOS_GPIO_EPEND_OFFSET, |
806 | .svc = EXYNOS_SVC_OFFSET, | 937 | .svc = EXYNOS_SVC_OFFSET, |
807 | .eint_gpio_init = exynos_eint_gpio_init, | 938 | .eint_gpio_init = exynos_eint_gpio_init, |
939 | .suspend = exynos_pinctrl_suspend, | ||
940 | .resume = exynos_pinctrl_resume, | ||
808 | .label = "exynos5250-gpio-ctrl3", | 941 | .label = "exynos5250-gpio-ctrl3", |
809 | }, | 942 | }, |
810 | }; | 943 | }; |
diff --git a/drivers/pinctrl/pinctrl-exynos.h b/drivers/pinctrl/pinctrl-exynos.h index 9b1f77a5bf0f..3c91c357792f 100644 --- a/drivers/pinctrl/pinctrl-exynos.h +++ b/drivers/pinctrl/pinctrl-exynos.h | |||
@@ -19,6 +19,7 @@ | |||
19 | 19 | ||
20 | /* External GPIO and wakeup interrupt related definitions */ | 20 | /* External GPIO and wakeup interrupt related definitions */ |
21 | #define EXYNOS_GPIO_ECON_OFFSET 0x700 | 21 | #define EXYNOS_GPIO_ECON_OFFSET 0x700 |
22 | #define EXYNOS_GPIO_EFLTCON_OFFSET 0x800 | ||
22 | #define EXYNOS_GPIO_EMASK_OFFSET 0x900 | 23 | #define EXYNOS_GPIO_EMASK_OFFSET 0x900 |
23 | #define EXYNOS_GPIO_EPEND_OFFSET 0xA00 | 24 | #define EXYNOS_GPIO_EPEND_OFFSET 0xA00 |
24 | #define EXYNOS_WKUP_ECON_OFFSET 0xE00 | 25 | #define EXYNOS_WKUP_ECON_OFFSET 0xE00 |
diff --git a/drivers/pinctrl/pinctrl-samsung.c b/drivers/pinctrl/pinctrl-samsung.c index 055d0162098b..63ac22e89678 100644 --- a/drivers/pinctrl/pinctrl-samsung.c +++ b/drivers/pinctrl/pinctrl-samsung.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <linux/gpio.h> | 28 | #include <linux/gpio.h> |
29 | #include <linux/irqdomain.h> | 29 | #include <linux/irqdomain.h> |
30 | #include <linux/spinlock.h> | 30 | #include <linux/spinlock.h> |
31 | #include <linux/syscore_ops.h> | ||
31 | 32 | ||
32 | #include "core.h" | 33 | #include "core.h" |
33 | #include "pinctrl-samsung.h" | 34 | #include "pinctrl-samsung.h" |
@@ -48,6 +49,9 @@ static struct pin_config { | |||
48 | { "samsung,pin-pud-pdn", PINCFG_TYPE_PUD_PDN }, | 49 | { "samsung,pin-pud-pdn", PINCFG_TYPE_PUD_PDN }, |
49 | }; | 50 | }; |
50 | 51 | ||
52 | /* Global list of devices (struct samsung_pinctrl_drv_data) */ | ||
53 | LIST_HEAD(drvdata_list); | ||
54 | |||
51 | static unsigned int pin_base; | 55 | static unsigned int pin_base; |
52 | 56 | ||
53 | static inline struct samsung_pin_bank *gc_to_pin_bank(struct gpio_chip *gc) | 57 | static inline struct samsung_pin_bank *gc_to_pin_bank(struct gpio_chip *gc) |
@@ -956,9 +960,151 @@ static int samsung_pinctrl_probe(struct platform_device *pdev) | |||
956 | ctrl->eint_wkup_init(drvdata); | 960 | ctrl->eint_wkup_init(drvdata); |
957 | 961 | ||
958 | platform_set_drvdata(pdev, drvdata); | 962 | platform_set_drvdata(pdev, drvdata); |
963 | |||
964 | /* Add to the global list */ | ||
965 | list_add_tail(&drvdata->node, &drvdata_list); | ||
966 | |||
959 | return 0; | 967 | return 0; |
960 | } | 968 | } |
961 | 969 | ||
970 | #ifdef CONFIG_PM | ||
971 | |||
972 | /** | ||
973 | * samsung_pinctrl_suspend_dev - save pinctrl state for suspend for a device | ||
974 | * | ||
975 | * Save data for all banks handled by this device. | ||
976 | */ | ||
977 | static void samsung_pinctrl_suspend_dev( | ||
978 | struct samsung_pinctrl_drv_data *drvdata) | ||
979 | { | ||
980 | struct samsung_pin_ctrl *ctrl = drvdata->ctrl; | ||
981 | void __iomem *virt_base = drvdata->virt_base; | ||
982 | int i; | ||
983 | |||
984 | for (i = 0; i < ctrl->nr_banks; i++) { | ||
985 | struct samsung_pin_bank *bank = &ctrl->pin_banks[i]; | ||
986 | void __iomem *reg = virt_base + bank->pctl_offset; | ||
987 | |||
988 | u8 *offs = bank->type->reg_offset; | ||
989 | u8 *widths = bank->type->fld_width; | ||
990 | enum pincfg_type type; | ||
991 | |||
992 | /* Registers without a powerdown config aren't lost */ | ||
993 | if (!widths[PINCFG_TYPE_CON_PDN]) | ||
994 | continue; | ||
995 | |||
996 | for (type = 0; type < PINCFG_TYPE_NUM; type++) | ||
997 | if (widths[type]) | ||
998 | bank->pm_save[type] = readl(reg + offs[type]); | ||
999 | |||
1000 | if (widths[PINCFG_TYPE_FUNC] * bank->nr_pins > 32) { | ||
1001 | /* Some banks have two config registers */ | ||
1002 | bank->pm_save[PINCFG_TYPE_NUM] = | ||
1003 | readl(reg + offs[PINCFG_TYPE_FUNC] + 4); | ||
1004 | pr_debug("Save %s @ %p (con %#010x %08x)\n", | ||
1005 | bank->name, reg, | ||
1006 | bank->pm_save[PINCFG_TYPE_FUNC], | ||
1007 | bank->pm_save[PINCFG_TYPE_NUM]); | ||
1008 | } else { | ||
1009 | pr_debug("Save %s @ %p (con %#010x)\n", bank->name, | ||
1010 | reg, bank->pm_save[PINCFG_TYPE_FUNC]); | ||
1011 | } | ||
1012 | } | ||
1013 | |||
1014 | if (ctrl->suspend) | ||
1015 | ctrl->suspend(drvdata); | ||
1016 | } | ||
1017 | |||
1018 | /** | ||
1019 | * samsung_pinctrl_resume_dev - restore pinctrl state from suspend for a device | ||
1020 | * | ||
1021 | * Restore one of the banks that was saved during suspend. | ||
1022 | * | ||
1023 | * We don't bother doing anything complicated to avoid glitching lines since | ||
1024 | * we're called before pad retention is turned off. | ||
1025 | */ | ||
1026 | static void samsung_pinctrl_resume_dev(struct samsung_pinctrl_drv_data *drvdata) | ||
1027 | { | ||
1028 | struct samsung_pin_ctrl *ctrl = drvdata->ctrl; | ||
1029 | void __iomem *virt_base = drvdata->virt_base; | ||
1030 | int i; | ||
1031 | |||
1032 | if (ctrl->resume) | ||
1033 | ctrl->resume(drvdata); | ||
1034 | |||
1035 | for (i = 0; i < ctrl->nr_banks; i++) { | ||
1036 | struct samsung_pin_bank *bank = &ctrl->pin_banks[i]; | ||
1037 | void __iomem *reg = virt_base + bank->pctl_offset; | ||
1038 | |||
1039 | u8 *offs = bank->type->reg_offset; | ||
1040 | u8 *widths = bank->type->fld_width; | ||
1041 | enum pincfg_type type; | ||
1042 | |||
1043 | /* Registers without a powerdown config aren't lost */ | ||
1044 | if (!widths[PINCFG_TYPE_CON_PDN]) | ||
1045 | continue; | ||
1046 | |||
1047 | if (widths[PINCFG_TYPE_FUNC] * bank->nr_pins > 32) { | ||
1048 | /* Some banks have two config registers */ | ||
1049 | pr_debug("%s @ %p (con %#010x %08x => %#010x %08x)\n", | ||
1050 | bank->name, reg, | ||
1051 | readl(reg + offs[PINCFG_TYPE_FUNC]), | ||
1052 | readl(reg + offs[PINCFG_TYPE_FUNC] + 4), | ||
1053 | bank->pm_save[PINCFG_TYPE_FUNC], | ||
1054 | bank->pm_save[PINCFG_TYPE_NUM]); | ||
1055 | writel(bank->pm_save[PINCFG_TYPE_NUM], | ||
1056 | reg + offs[PINCFG_TYPE_FUNC] + 4); | ||
1057 | } else { | ||
1058 | pr_debug("%s @ %p (con %#010x => %#010x)\n", bank->name, | ||
1059 | reg, readl(reg + offs[PINCFG_TYPE_FUNC]), | ||
1060 | bank->pm_save[PINCFG_TYPE_FUNC]); | ||
1061 | } | ||
1062 | for (type = 0; type < PINCFG_TYPE_NUM; type++) | ||
1063 | if (widths[type]) | ||
1064 | writel(bank->pm_save[type], reg + offs[type]); | ||
1065 | } | ||
1066 | } | ||
1067 | |||
1068 | /** | ||
1069 | * samsung_pinctrl_suspend - save pinctrl state for suspend | ||
1070 | * | ||
1071 | * Save data for all banks across all devices. | ||
1072 | */ | ||
1073 | static int samsung_pinctrl_suspend(void) | ||
1074 | { | ||
1075 | struct samsung_pinctrl_drv_data *drvdata; | ||
1076 | |||
1077 | list_for_each_entry(drvdata, &drvdata_list, node) { | ||
1078 | samsung_pinctrl_suspend_dev(drvdata); | ||
1079 | } | ||
1080 | |||
1081 | return 0; | ||
1082 | } | ||
1083 | |||
1084 | /** | ||
1085 | * samsung_pinctrl_resume - restore pinctrl state for suspend | ||
1086 | * | ||
1087 | * Restore data for all banks across all devices. | ||
1088 | */ | ||
1089 | static void samsung_pinctrl_resume(void) | ||
1090 | { | ||
1091 | struct samsung_pinctrl_drv_data *drvdata; | ||
1092 | |||
1093 | list_for_each_entry_reverse(drvdata, &drvdata_list, node) { | ||
1094 | samsung_pinctrl_resume_dev(drvdata); | ||
1095 | } | ||
1096 | } | ||
1097 | |||
1098 | #else | ||
1099 | #define samsung_pinctrl_suspend NULL | ||
1100 | #define samsung_pinctrl_resume NULL | ||
1101 | #endif | ||
1102 | |||
1103 | static struct syscore_ops samsung_pinctrl_syscore_ops = { | ||
1104 | .suspend = samsung_pinctrl_suspend, | ||
1105 | .resume = samsung_pinctrl_resume, | ||
1106 | }; | ||
1107 | |||
962 | static const struct of_device_id samsung_pinctrl_dt_match[] = { | 1108 | static const struct of_device_id samsung_pinctrl_dt_match[] = { |
963 | #ifdef CONFIG_PINCTRL_EXYNOS | 1109 | #ifdef CONFIG_PINCTRL_EXYNOS |
964 | { .compatible = "samsung,exynos4210-pinctrl", | 1110 | { .compatible = "samsung,exynos4210-pinctrl", |
@@ -987,6 +1133,14 @@ static struct platform_driver samsung_pinctrl_driver = { | |||
987 | 1133 | ||
988 | static int __init samsung_pinctrl_drv_register(void) | 1134 | static int __init samsung_pinctrl_drv_register(void) |
989 | { | 1135 | { |
1136 | /* | ||
1137 | * Register syscore ops for save/restore of registers across suspend. | ||
1138 | * It's important to ensure that this driver is running at an earlier | ||
1139 | * initcall level than any arch-specific init calls that install syscore | ||
1140 | * ops that turn off pad retention (like exynos_pm_resume). | ||
1141 | */ | ||
1142 | register_syscore_ops(&samsung_pinctrl_syscore_ops); | ||
1143 | |||
990 | return platform_driver_register(&samsung_pinctrl_driver); | 1144 | return platform_driver_register(&samsung_pinctrl_driver); |
991 | } | 1145 | } |
992 | postcore_initcall(samsung_pinctrl_drv_register); | 1146 | postcore_initcall(samsung_pinctrl_drv_register); |
diff --git a/drivers/pinctrl/pinctrl-samsung.h b/drivers/pinctrl/pinctrl-samsung.h index 7c7f9ebcd05b..26d3519240c9 100644 --- a/drivers/pinctrl/pinctrl-samsung.h +++ b/drivers/pinctrl/pinctrl-samsung.h | |||
@@ -127,6 +127,7 @@ struct samsung_pin_bank_type { | |||
127 | * @gpio_chip: GPIO chip of the bank. | 127 | * @gpio_chip: GPIO chip of the bank. |
128 | * @grange: linux gpio pin range supported by this bank. | 128 | * @grange: linux gpio pin range supported by this bank. |
129 | * @slock: spinlock protecting bank registers | 129 | * @slock: spinlock protecting bank registers |
130 | * @pm_save: saved register values during suspend | ||
130 | */ | 131 | */ |
131 | struct samsung_pin_bank { | 132 | struct samsung_pin_bank { |
132 | struct samsung_pin_bank_type *type; | 133 | struct samsung_pin_bank_type *type; |
@@ -138,12 +139,15 @@ struct samsung_pin_bank { | |||
138 | u32 eint_mask; | 139 | u32 eint_mask; |
139 | u32 eint_offset; | 140 | u32 eint_offset; |
140 | char *name; | 141 | char *name; |
142 | void *soc_priv; | ||
141 | struct device_node *of_node; | 143 | struct device_node *of_node; |
142 | struct samsung_pinctrl_drv_data *drvdata; | 144 | struct samsung_pinctrl_drv_data *drvdata; |
143 | struct irq_domain *irq_domain; | 145 | struct irq_domain *irq_domain; |
144 | struct gpio_chip gpio_chip; | 146 | struct gpio_chip gpio_chip; |
145 | struct pinctrl_gpio_range grange; | 147 | struct pinctrl_gpio_range grange; |
146 | spinlock_t slock; | 148 | spinlock_t slock; |
149 | |||
150 | u32 pm_save[PINCFG_TYPE_NUM + 1]; /* +1 to handle double CON registers*/ | ||
147 | }; | 151 | }; |
148 | 152 | ||
149 | /** | 153 | /** |
@@ -184,11 +188,15 @@ struct samsung_pin_ctrl { | |||
184 | 188 | ||
185 | int (*eint_gpio_init)(struct samsung_pinctrl_drv_data *); | 189 | int (*eint_gpio_init)(struct samsung_pinctrl_drv_data *); |
186 | int (*eint_wkup_init)(struct samsung_pinctrl_drv_data *); | 190 | int (*eint_wkup_init)(struct samsung_pinctrl_drv_data *); |
191 | void (*suspend)(struct samsung_pinctrl_drv_data *); | ||
192 | void (*resume)(struct samsung_pinctrl_drv_data *); | ||
193 | |||
187 | char *label; | 194 | char *label; |
188 | }; | 195 | }; |
189 | 196 | ||
190 | /** | 197 | /** |
191 | * struct samsung_pinctrl_drv_data: wrapper for holding driver data together. | 198 | * struct samsung_pinctrl_drv_data: wrapper for holding driver data together. |
199 | * @node: global list node | ||
192 | * @virt_base: register base address of the controller. | 200 | * @virt_base: register base address of the controller. |
193 | * @dev: device instance representing the controller. | 201 | * @dev: device instance representing the controller. |
194 | * @irq: interrpt number used by the controller to notify gpio interrupts. | 202 | * @irq: interrpt number used by the controller to notify gpio interrupts. |
@@ -201,6 +209,7 @@ struct samsung_pin_ctrl { | |||
201 | * @nr_function: number of such pin functions. | 209 | * @nr_function: number of such pin functions. |
202 | */ | 210 | */ |
203 | struct samsung_pinctrl_drv_data { | 211 | struct samsung_pinctrl_drv_data { |
212 | struct list_head node; | ||
204 | void __iomem *virt_base; | 213 | void __iomem *virt_base; |
205 | struct device *dev; | 214 | struct device *dev; |
206 | int irq; | 215 | int irq; |
diff --git a/drivers/pinctrl/pinctrl-sunxi.c b/drivers/pinctrl/pinctrl-sunxi.c index c52fc2c08732..b7d8c890514c 100644 --- a/drivers/pinctrl/pinctrl-sunxi.c +++ b/drivers/pinctrl/pinctrl-sunxi.c | |||
@@ -1990,8 +1990,10 @@ static int sunxi_pinctrl_probe(struct platform_device *pdev) | |||
1990 | } | 1990 | } |
1991 | 1991 | ||
1992 | clk = devm_clk_get(&pdev->dev, NULL); | 1992 | clk = devm_clk_get(&pdev->dev, NULL); |
1993 | if (IS_ERR(clk)) | 1993 | if (IS_ERR(clk)) { |
1994 | ret = PTR_ERR(clk); | ||
1994 | goto gpiochip_error; | 1995 | goto gpiochip_error; |
1996 | } | ||
1995 | 1997 | ||
1996 | clk_prepare_enable(clk); | 1998 | clk_prepare_enable(clk); |
1997 | 1999 | ||
@@ -2000,7 +2002,8 @@ static int sunxi_pinctrl_probe(struct platform_device *pdev) | |||
2000 | return 0; | 2002 | return 0; |
2001 | 2003 | ||
2002 | gpiochip_error: | 2004 | gpiochip_error: |
2003 | ret = gpiochip_remove(pctl->chip); | 2005 | if (gpiochip_remove(pctl->chip)) |
2006 | dev_err(&pdev->dev, "failed to remove gpio chip\n"); | ||
2004 | pinctrl_error: | 2007 | pinctrl_error: |
2005 | pinctrl_unregister(pctl->pctl_dev); | 2008 | pinctrl_unregister(pctl->pctl_dev); |
2006 | return ret; | 2009 | return ret; |
diff --git a/drivers/pinctrl/vt8500/pinctrl-wmt.c b/drivers/pinctrl/vt8500/pinctrl-wmt.c index ab63104e8dc9..70d986e04afb 100644 --- a/drivers/pinctrl/vt8500/pinctrl-wmt.c +++ b/drivers/pinctrl/vt8500/pinctrl-wmt.c | |||
@@ -609,8 +609,7 @@ int wmt_pinctrl_probe(struct platform_device *pdev, | |||
609 | return 0; | 609 | return 0; |
610 | 610 | ||
611 | fail_range: | 611 | fail_range: |
612 | err = gpiochip_remove(&data->gpio_chip); | 612 | if (gpiochip_remove(&data->gpio_chip)) |
613 | if (err) | ||
614 | dev_err(&pdev->dev, "failed to remove gpio chip\n"); | 613 | dev_err(&pdev->dev, "failed to remove gpio chip\n"); |
615 | fail_gpio: | 614 | fail_gpio: |
616 | pinctrl_unregister(data->pctl_dev); | 615 | pinctrl_unregister(data->pctl_dev); |
diff --git a/drivers/power/Kconfig b/drivers/power/Kconfig index 0d0b5d7d19d0..7b8979c63f48 100644 --- a/drivers/power/Kconfig +++ b/drivers/power/Kconfig | |||
@@ -152,6 +152,7 @@ config BATTERY_SBS | |||
152 | 152 | ||
153 | config BATTERY_BQ27x00 | 153 | config BATTERY_BQ27x00 |
154 | tristate "BQ27x00 battery driver" | 154 | tristate "BQ27x00 battery driver" |
155 | depends on I2C || I2C=n | ||
155 | help | 156 | help |
156 | Say Y here to enable support for batteries with BQ27x00 (I2C/HDQ) chips. | 157 | Say Y here to enable support for batteries with BQ27x00 (I2C/HDQ) chips. |
157 | 158 | ||
@@ -284,6 +285,7 @@ config CHARGER_LP8788 | |||
284 | tristate "TI LP8788 charger driver" | 285 | tristate "TI LP8788 charger driver" |
285 | depends on MFD_LP8788 | 286 | depends on MFD_LP8788 |
286 | depends on LP8788_ADC | 287 | depends on LP8788_ADC |
288 | depends on IIO | ||
287 | help | 289 | help |
288 | Say Y to enable support for the LP8788 linear charger. | 290 | Say Y to enable support for the LP8788 linear charger. |
289 | 291 | ||
diff --git a/drivers/power/pm2301_charger.c b/drivers/power/pm2301_charger.c index a44175139bbf..fef56e2041b3 100644 --- a/drivers/power/pm2301_charger.c +++ b/drivers/power/pm2301_charger.c | |||
@@ -1269,5 +1269,5 @@ module_exit(pm2xxx_charger_exit); | |||
1269 | 1269 | ||
1270 | MODULE_LICENSE("GPL v2"); | 1270 | MODULE_LICENSE("GPL v2"); |
1271 | MODULE_AUTHOR("Rajkumar kasirajan, Olivier Launay"); | 1271 | MODULE_AUTHOR("Rajkumar kasirajan, Olivier Launay"); |
1272 | MODULE_ALIAS("platform:pm2xxx-charger"); | 1272 | MODULE_ALIAS("i2c:pm2xxx-charger"); |
1273 | MODULE_DESCRIPTION("PM2xxx charger management driver"); | 1273 | MODULE_DESCRIPTION("PM2xxx charger management driver"); |
diff --git a/drivers/power/wm831x_backup.c b/drivers/power/wm831x_backup.c index 58cbb009b74f..56fb509f4be0 100644 --- a/drivers/power/wm831x_backup.c +++ b/drivers/power/wm831x_backup.c | |||
@@ -207,7 +207,6 @@ static int wm831x_backup_remove(struct platform_device *pdev) | |||
207 | struct wm831x_backup *devdata = platform_get_drvdata(pdev); | 207 | struct wm831x_backup *devdata = platform_get_drvdata(pdev); |
208 | 208 | ||
209 | power_supply_unregister(&devdata->backup); | 209 | power_supply_unregister(&devdata->backup); |
210 | kfree(devdata->backup.name); | ||
211 | 210 | ||
212 | return 0; | 211 | return 0; |
213 | } | 212 | } |
diff --git a/drivers/ptp/ptp_pch.c b/drivers/ptp/ptp_pch.c index bea94510ad2d..71a2559278d7 100644 --- a/drivers/ptp/ptp_pch.c +++ b/drivers/ptp/ptp_pch.c | |||
@@ -628,9 +628,10 @@ pch_probe(struct pci_dev *pdev, const struct pci_device_id *id) | |||
628 | 628 | ||
629 | chip->caps = ptp_pch_caps; | 629 | chip->caps = ptp_pch_caps; |
630 | chip->ptp_clock = ptp_clock_register(&chip->caps, &pdev->dev); | 630 | chip->ptp_clock = ptp_clock_register(&chip->caps, &pdev->dev); |
631 | 631 | if (IS_ERR(chip->ptp_clock)) { | |
632 | if (IS_ERR(chip->ptp_clock)) | 632 | ret = PTR_ERR(chip->ptp_clock); |
633 | return PTR_ERR(chip->ptp_clock); | 633 | goto err_ptp_clock_reg; |
634 | } | ||
634 | 635 | ||
635 | spin_lock_init(&chip->register_lock); | 636 | spin_lock_init(&chip->register_lock); |
636 | 637 | ||
@@ -669,6 +670,7 @@ pch_probe(struct pci_dev *pdev, const struct pci_device_id *id) | |||
669 | 670 | ||
670 | err_req_irq: | 671 | err_req_irq: |
671 | ptp_clock_unregister(chip->ptp_clock); | 672 | ptp_clock_unregister(chip->ptp_clock); |
673 | err_ptp_clock_reg: | ||
672 | iounmap(chip->regs); | 674 | iounmap(chip->regs); |
673 | chip->regs = NULL; | 675 | chip->regs = NULL; |
674 | 676 | ||
diff --git a/drivers/rapidio/Kconfig b/drivers/rapidio/Kconfig index 6194d35ebb97..5ab056494bbe 100644 --- a/drivers/rapidio/Kconfig +++ b/drivers/rapidio/Kconfig | |||
@@ -47,4 +47,24 @@ config RAPIDIO_DEBUG | |||
47 | 47 | ||
48 | If you are unsure about this, say N here. | 48 | If you are unsure about this, say N here. |
49 | 49 | ||
50 | choice | ||
51 | prompt "Enumeration method" | ||
52 | depends on RAPIDIO | ||
53 | default RAPIDIO_ENUM_BASIC | ||
54 | help | ||
55 | There are different enumeration and discovery mechanisms offered | ||
56 | for RapidIO subsystem. You may select single built-in method or | ||
57 | or any number of methods to be built as modules. | ||
58 | Selecting a built-in method disables use of loadable methods. | ||
59 | |||
60 | If unsure, select Basic built-in. | ||
61 | |||
62 | config RAPIDIO_ENUM_BASIC | ||
63 | tristate "Basic" | ||
64 | help | ||
65 | This option includes basic RapidIO fabric enumeration and discovery | ||
66 | mechanism similar to one described in RapidIO specification Annex 1. | ||
67 | |||
68 | endchoice | ||
69 | |||
50 | source "drivers/rapidio/switches/Kconfig" | 70 | source "drivers/rapidio/switches/Kconfig" |
diff --git a/drivers/rapidio/Makefile b/drivers/rapidio/Makefile index ec3fb8121004..3036702ffe8b 100644 --- a/drivers/rapidio/Makefile +++ b/drivers/rapidio/Makefile | |||
@@ -1,7 +1,8 @@ | |||
1 | # | 1 | # |
2 | # Makefile for RapidIO interconnect services | 2 | # Makefile for RapidIO interconnect services |
3 | # | 3 | # |
4 | obj-y += rio.o rio-access.o rio-driver.o rio-scan.o rio-sysfs.o | 4 | obj-y += rio.o rio-access.o rio-driver.o rio-sysfs.o |
5 | obj-$(CONFIG_RAPIDIO_ENUM_BASIC) += rio-scan.o | ||
5 | 6 | ||
6 | obj-$(CONFIG_RAPIDIO) += switches/ | 7 | obj-$(CONFIG_RAPIDIO) += switches/ |
7 | obj-$(CONFIG_RAPIDIO) += devices/ | 8 | obj-$(CONFIG_RAPIDIO) += devices/ |
diff --git a/drivers/rapidio/devices/tsi721.c b/drivers/rapidio/devices/tsi721.c index 6faba406b6e9..a8b2c23a7ef4 100644 --- a/drivers/rapidio/devices/tsi721.c +++ b/drivers/rapidio/devices/tsi721.c | |||
@@ -471,6 +471,10 @@ static irqreturn_t tsi721_irqhandler(int irq, void *ptr) | |||
471 | u32 intval; | 471 | u32 intval; |
472 | u32 ch_inte; | 472 | u32 ch_inte; |
473 | 473 | ||
474 | /* For MSI mode disable all device-level interrupts */ | ||
475 | if (priv->flags & TSI721_USING_MSI) | ||
476 | iowrite32(0, priv->regs + TSI721_DEV_INTE); | ||
477 | |||
474 | dev_int = ioread32(priv->regs + TSI721_DEV_INT); | 478 | dev_int = ioread32(priv->regs + TSI721_DEV_INT); |
475 | if (!dev_int) | 479 | if (!dev_int) |
476 | return IRQ_NONE; | 480 | return IRQ_NONE; |
@@ -560,6 +564,14 @@ static irqreturn_t tsi721_irqhandler(int irq, void *ptr) | |||
560 | } | 564 | } |
561 | } | 565 | } |
562 | #endif | 566 | #endif |
567 | |||
568 | /* For MSI mode re-enable device-level interrupts */ | ||
569 | if (priv->flags & TSI721_USING_MSI) { | ||
570 | dev_int = TSI721_DEV_INT_SR2PC_CH | TSI721_DEV_INT_SRIO | | ||
571 | TSI721_DEV_INT_SMSG_CH | TSI721_DEV_INT_BDMA_CH; | ||
572 | iowrite32(dev_int, priv->regs + TSI721_DEV_INTE); | ||
573 | } | ||
574 | |||
563 | return IRQ_HANDLED; | 575 | return IRQ_HANDLED; |
564 | } | 576 | } |
565 | 577 | ||
diff --git a/drivers/rapidio/rio-driver.c b/drivers/rapidio/rio-driver.c index 0f4a53bdaa3c..a0c875563d76 100644 --- a/drivers/rapidio/rio-driver.c +++ b/drivers/rapidio/rio-driver.c | |||
@@ -164,6 +164,13 @@ void rio_unregister_driver(struct rio_driver *rdrv) | |||
164 | driver_unregister(&rdrv->driver); | 164 | driver_unregister(&rdrv->driver); |
165 | } | 165 | } |
166 | 166 | ||
167 | void rio_attach_device(struct rio_dev *rdev) | ||
168 | { | ||
169 | rdev->dev.bus = &rio_bus_type; | ||
170 | rdev->dev.parent = &rio_bus; | ||
171 | } | ||
172 | EXPORT_SYMBOL_GPL(rio_attach_device); | ||
173 | |||
167 | /** | 174 | /** |
168 | * rio_match_bus - Tell if a RIO device structure has a matching RIO driver device id structure | 175 | * rio_match_bus - Tell if a RIO device structure has a matching RIO driver device id structure |
169 | * @dev: the standard device structure to match against | 176 | * @dev: the standard device structure to match against |
@@ -200,6 +207,7 @@ struct bus_type rio_bus_type = { | |||
200 | .name = "rapidio", | 207 | .name = "rapidio", |
201 | .match = rio_match_bus, | 208 | .match = rio_match_bus, |
202 | .dev_attrs = rio_dev_attrs, | 209 | .dev_attrs = rio_dev_attrs, |
210 | .bus_attrs = rio_bus_attrs, | ||
203 | .probe = rio_device_probe, | 211 | .probe = rio_device_probe, |
204 | .remove = rio_device_remove, | 212 | .remove = rio_device_remove, |
205 | }; | 213 | }; |
diff --git a/drivers/rapidio/rio-scan.c b/drivers/rapidio/rio-scan.c index a965acd3c0e4..4c15dbf81087 100644 --- a/drivers/rapidio/rio-scan.c +++ b/drivers/rapidio/rio-scan.c | |||
@@ -37,12 +37,8 @@ | |||
37 | 37 | ||
38 | #include "rio.h" | 38 | #include "rio.h" |
39 | 39 | ||
40 | LIST_HEAD(rio_devices); | ||
41 | |||
42 | static void rio_init_em(struct rio_dev *rdev); | 40 | static void rio_init_em(struct rio_dev *rdev); |
43 | 41 | ||
44 | DEFINE_SPINLOCK(rio_global_list_lock); | ||
45 | |||
46 | static int next_destid = 0; | 42 | static int next_destid = 0; |
47 | static int next_comptag = 1; | 43 | static int next_comptag = 1; |
48 | 44 | ||
@@ -327,127 +323,6 @@ static int rio_is_switch(struct rio_dev *rdev) | |||
327 | } | 323 | } |
328 | 324 | ||
329 | /** | 325 | /** |
330 | * rio_switch_init - Sets switch operations for a particular vendor switch | ||
331 | * @rdev: RIO device | ||
332 | * @do_enum: Enumeration/Discovery mode flag | ||
333 | * | ||
334 | * Searches the RIO switch ops table for known switch types. If the vid | ||
335 | * and did match a switch table entry, then call switch initialization | ||
336 | * routine to setup switch-specific routines. | ||
337 | */ | ||
338 | static void rio_switch_init(struct rio_dev *rdev, int do_enum) | ||
339 | { | ||
340 | struct rio_switch_ops *cur = __start_rio_switch_ops; | ||
341 | struct rio_switch_ops *end = __end_rio_switch_ops; | ||
342 | |||
343 | while (cur < end) { | ||
344 | if ((cur->vid == rdev->vid) && (cur->did == rdev->did)) { | ||
345 | pr_debug("RIO: calling init routine for %s\n", | ||
346 | rio_name(rdev)); | ||
347 | cur->init_hook(rdev, do_enum); | ||
348 | break; | ||
349 | } | ||
350 | cur++; | ||
351 | } | ||
352 | |||
353 | if ((cur >= end) && (rdev->pef & RIO_PEF_STD_RT)) { | ||
354 | pr_debug("RIO: adding STD routing ops for %s\n", | ||
355 | rio_name(rdev)); | ||
356 | rdev->rswitch->add_entry = rio_std_route_add_entry; | ||
357 | rdev->rswitch->get_entry = rio_std_route_get_entry; | ||
358 | rdev->rswitch->clr_table = rio_std_route_clr_table; | ||
359 | } | ||
360 | |||
361 | if (!rdev->rswitch->add_entry || !rdev->rswitch->get_entry) | ||
362 | printk(KERN_ERR "RIO: missing routing ops for %s\n", | ||
363 | rio_name(rdev)); | ||
364 | } | ||
365 | |||
366 | /** | ||
367 | * rio_add_device- Adds a RIO device to the device model | ||
368 | * @rdev: RIO device | ||
369 | * | ||
370 | * Adds the RIO device to the global device list and adds the RIO | ||
371 | * device to the RIO device list. Creates the generic sysfs nodes | ||
372 | * for an RIO device. | ||
373 | */ | ||
374 | static int rio_add_device(struct rio_dev *rdev) | ||
375 | { | ||
376 | int err; | ||
377 | |||
378 | err = device_add(&rdev->dev); | ||
379 | if (err) | ||
380 | return err; | ||
381 | |||
382 | spin_lock(&rio_global_list_lock); | ||
383 | list_add_tail(&rdev->global_list, &rio_devices); | ||
384 | spin_unlock(&rio_global_list_lock); | ||
385 | |||
386 | rio_create_sysfs_dev_files(rdev); | ||
387 | |||
388 | return 0; | ||
389 | } | ||
390 | |||
391 | /** | ||
392 | * rio_enable_rx_tx_port - enable input receiver and output transmitter of | ||
393 | * given port | ||
394 | * @port: Master port associated with the RIO network | ||
395 | * @local: local=1 select local port otherwise a far device is reached | ||
396 | * @destid: Destination ID of the device to check host bit | ||
397 | * @hopcount: Number of hops to reach the target | ||
398 | * @port_num: Port (-number on switch) to enable on a far end device | ||
399 | * | ||
400 | * Returns 0 or 1 from on General Control Command and Status Register | ||
401 | * (EXT_PTR+0x3C) | ||
402 | */ | ||
403 | inline int rio_enable_rx_tx_port(struct rio_mport *port, | ||
404 | int local, u16 destid, | ||
405 | u8 hopcount, u8 port_num) { | ||
406 | #ifdef CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS | ||
407 | u32 regval; | ||
408 | u32 ext_ftr_ptr; | ||
409 | |||
410 | /* | ||
411 | * enable rx input tx output port | ||
412 | */ | ||
413 | pr_debug("rio_enable_rx_tx_port(local = %d, destid = %d, hopcount = " | ||
414 | "%d, port_num = %d)\n", local, destid, hopcount, port_num); | ||
415 | |||
416 | ext_ftr_ptr = rio_mport_get_physefb(port, local, destid, hopcount); | ||
417 | |||
418 | if (local) { | ||
419 | rio_local_read_config_32(port, ext_ftr_ptr + | ||
420 | RIO_PORT_N_CTL_CSR(0), | ||
421 | ®val); | ||
422 | } else { | ||
423 | if (rio_mport_read_config_32(port, destid, hopcount, | ||
424 | ext_ftr_ptr + RIO_PORT_N_CTL_CSR(port_num), ®val) < 0) | ||
425 | return -EIO; | ||
426 | } | ||
427 | |||
428 | if (regval & RIO_PORT_N_CTL_P_TYP_SER) { | ||
429 | /* serial */ | ||
430 | regval = regval | RIO_PORT_N_CTL_EN_RX_SER | ||
431 | | RIO_PORT_N_CTL_EN_TX_SER; | ||
432 | } else { | ||
433 | /* parallel */ | ||
434 | regval = regval | RIO_PORT_N_CTL_EN_RX_PAR | ||
435 | | RIO_PORT_N_CTL_EN_TX_PAR; | ||
436 | } | ||
437 | |||
438 | if (local) { | ||
439 | rio_local_write_config_32(port, ext_ftr_ptr + | ||
440 | RIO_PORT_N_CTL_CSR(0), regval); | ||
441 | } else { | ||
442 | if (rio_mport_write_config_32(port, destid, hopcount, | ||
443 | ext_ftr_ptr + RIO_PORT_N_CTL_CSR(port_num), regval) < 0) | ||
444 | return -EIO; | ||
445 | } | ||
446 | #endif | ||
447 | return 0; | ||
448 | } | ||
449 | |||
450 | /** | ||
451 | * rio_setup_device- Allocates and sets up a RIO device | 326 | * rio_setup_device- Allocates and sets up a RIO device |
452 | * @net: RIO network | 327 | * @net: RIO network |
453 | * @port: Master port to send transactions | 328 | * @port: Master port to send transactions |
@@ -587,8 +462,7 @@ static struct rio_dev *rio_setup_device(struct rio_net *net, | |||
587 | rdev->destid); | 462 | rdev->destid); |
588 | } | 463 | } |
589 | 464 | ||
590 | rdev->dev.bus = &rio_bus_type; | 465 | rio_attach_device(rdev); |
591 | rdev->dev.parent = &rio_bus; | ||
592 | 466 | ||
593 | device_initialize(&rdev->dev); | 467 | device_initialize(&rdev->dev); |
594 | rdev->dev.release = rio_release_dev; | 468 | rdev->dev.release = rio_release_dev; |
@@ -1260,19 +1134,30 @@ static void rio_pw_enable(struct rio_mport *port, int enable) | |||
1260 | /** | 1134 | /** |
1261 | * rio_enum_mport- Start enumeration through a master port | 1135 | * rio_enum_mport- Start enumeration through a master port |
1262 | * @mport: Master port to send transactions | 1136 | * @mport: Master port to send transactions |
1137 | * @flags: Enumeration control flags | ||
1263 | * | 1138 | * |
1264 | * Starts the enumeration process. If somebody has enumerated our | 1139 | * Starts the enumeration process. If somebody has enumerated our |
1265 | * master port device, then give up. If not and we have an active | 1140 | * master port device, then give up. If not and we have an active |
1266 | * link, then start recursive peer enumeration. Returns %0 if | 1141 | * link, then start recursive peer enumeration. Returns %0 if |
1267 | * enumeration succeeds or %-EBUSY if enumeration fails. | 1142 | * enumeration succeeds or %-EBUSY if enumeration fails. |
1268 | */ | 1143 | */ |
1269 | int rio_enum_mport(struct rio_mport *mport) | 1144 | int rio_enum_mport(struct rio_mport *mport, u32 flags) |
1270 | { | 1145 | { |
1271 | struct rio_net *net = NULL; | 1146 | struct rio_net *net = NULL; |
1272 | int rc = 0; | 1147 | int rc = 0; |
1273 | 1148 | ||
1274 | printk(KERN_INFO "RIO: enumerate master port %d, %s\n", mport->id, | 1149 | printk(KERN_INFO "RIO: enumerate master port %d, %s\n", mport->id, |
1275 | mport->name); | 1150 | mport->name); |
1151 | |||
1152 | /* | ||
1153 | * To avoid multiple start requests (repeat enumeration is not supported | ||
1154 | * by this method) check if enumeration/discovery was performed for this | ||
1155 | * mport: if mport was added into the list of mports for a net exit | ||
1156 | * with error. | ||
1157 | */ | ||
1158 | if (mport->nnode.next || mport->nnode.prev) | ||
1159 | return -EBUSY; | ||
1160 | |||
1276 | /* If somebody else enumerated our master port device, bail. */ | 1161 | /* If somebody else enumerated our master port device, bail. */ |
1277 | if (rio_enum_host(mport) < 0) { | 1162 | if (rio_enum_host(mport) < 0) { |
1278 | printk(KERN_INFO | 1163 | printk(KERN_INFO |
@@ -1362,14 +1247,16 @@ static void rio_build_route_tables(struct rio_net *net) | |||
1362 | /** | 1247 | /** |
1363 | * rio_disc_mport- Start discovery through a master port | 1248 | * rio_disc_mport- Start discovery through a master port |
1364 | * @mport: Master port to send transactions | 1249 | * @mport: Master port to send transactions |
1250 | * @flags: discovery control flags | ||
1365 | * | 1251 | * |
1366 | * Starts the discovery process. If we have an active link, | 1252 | * Starts the discovery process. If we have an active link, |
1367 | * then wait for the signal that enumeration is complete. | 1253 | * then wait for the signal that enumeration is complete (if wait |
1254 | * is allowed). | ||
1368 | * When enumeration completion is signaled, start recursive | 1255 | * When enumeration completion is signaled, start recursive |
1369 | * peer discovery. Returns %0 if discovery succeeds or %-EBUSY | 1256 | * peer discovery. Returns %0 if discovery succeeds or %-EBUSY |
1370 | * on failure. | 1257 | * on failure. |
1371 | */ | 1258 | */ |
1372 | int rio_disc_mport(struct rio_mport *mport) | 1259 | int rio_disc_mport(struct rio_mport *mport, u32 flags) |
1373 | { | 1260 | { |
1374 | struct rio_net *net = NULL; | 1261 | struct rio_net *net = NULL; |
1375 | unsigned long to_end; | 1262 | unsigned long to_end; |
@@ -1379,6 +1266,11 @@ int rio_disc_mport(struct rio_mport *mport) | |||
1379 | 1266 | ||
1380 | /* If master port has an active link, allocate net and discover peers */ | 1267 | /* If master port has an active link, allocate net and discover peers */ |
1381 | if (rio_mport_is_active(mport)) { | 1268 | if (rio_mport_is_active(mport)) { |
1269 | if (rio_enum_complete(mport)) | ||
1270 | goto enum_done; | ||
1271 | else if (flags & RIO_SCAN_ENUM_NO_WAIT) | ||
1272 | return -EAGAIN; | ||
1273 | |||
1382 | pr_debug("RIO: wait for enumeration to complete...\n"); | 1274 | pr_debug("RIO: wait for enumeration to complete...\n"); |
1383 | 1275 | ||
1384 | to_end = jiffies + CONFIG_RAPIDIO_DISC_TIMEOUT * HZ; | 1276 | to_end = jiffies + CONFIG_RAPIDIO_DISC_TIMEOUT * HZ; |
@@ -1421,3 +1313,41 @@ enum_done: | |||
1421 | bail: | 1313 | bail: |
1422 | return -EBUSY; | 1314 | return -EBUSY; |
1423 | } | 1315 | } |
1316 | |||
1317 | static struct rio_scan rio_scan_ops = { | ||
1318 | .enumerate = rio_enum_mport, | ||
1319 | .discover = rio_disc_mport, | ||
1320 | }; | ||
1321 | |||
1322 | static bool scan; | ||
1323 | module_param(scan, bool, 0); | ||
1324 | MODULE_PARM_DESC(scan, "Start RapidIO network enumeration/discovery " | ||
1325 | "(default = 0)"); | ||
1326 | |||
1327 | /** | ||
1328 | * rio_basic_attach: | ||
1329 | * | ||
1330 | * When this enumeration/discovery method is loaded as a module this function | ||
1331 | * registers its specific enumeration and discover routines for all available | ||
1332 | * RapidIO mport devices. The "scan" command line parameter controls ability of | ||
1333 | * the module to start RapidIO enumeration/discovery automatically. | ||
1334 | * | ||
1335 | * Returns 0 for success or -EIO if unable to register itself. | ||
1336 | * | ||
1337 | * This enumeration/discovery method cannot be unloaded and therefore does not | ||
1338 | * provide a matching cleanup_module routine. | ||
1339 | */ | ||
1340 | |||
1341 | static int __init rio_basic_attach(void) | ||
1342 | { | ||
1343 | if (rio_register_scan(RIO_MPORT_ANY, &rio_scan_ops)) | ||
1344 | return -EIO; | ||
1345 | if (scan) | ||
1346 | rio_init_mports(); | ||
1347 | return 0; | ||
1348 | } | ||
1349 | |||
1350 | late_initcall(rio_basic_attach); | ||
1351 | |||
1352 | MODULE_DESCRIPTION("Basic RapidIO enumeration/discovery"); | ||
1353 | MODULE_LICENSE("GPL"); | ||
diff --git a/drivers/rapidio/rio-sysfs.c b/drivers/rapidio/rio-sysfs.c index 4dbe360989be..66d4acd5e18f 100644 --- a/drivers/rapidio/rio-sysfs.c +++ b/drivers/rapidio/rio-sysfs.c | |||
@@ -285,3 +285,48 @@ void rio_remove_sysfs_dev_files(struct rio_dev *rdev) | |||
285 | rdev->rswitch->sw_sysfs(rdev, RIO_SW_SYSFS_REMOVE); | 285 | rdev->rswitch->sw_sysfs(rdev, RIO_SW_SYSFS_REMOVE); |
286 | } | 286 | } |
287 | } | 287 | } |
288 | |||
289 | static ssize_t bus_scan_store(struct bus_type *bus, const char *buf, | ||
290 | size_t count) | ||
291 | { | ||
292 | long val; | ||
293 | struct rio_mport *port = NULL; | ||
294 | int rc; | ||
295 | |||
296 | if (kstrtol(buf, 0, &val) < 0) | ||
297 | return -EINVAL; | ||
298 | |||
299 | if (val == RIO_MPORT_ANY) { | ||
300 | rc = rio_init_mports(); | ||
301 | goto exit; | ||
302 | } | ||
303 | |||
304 | if (val < 0 || val >= RIO_MAX_MPORTS) | ||
305 | return -EINVAL; | ||
306 | |||
307 | port = rio_find_mport((int)val); | ||
308 | |||
309 | if (!port) { | ||
310 | pr_debug("RIO: %s: mport_%d not available\n", | ||
311 | __func__, (int)val); | ||
312 | return -EINVAL; | ||
313 | } | ||
314 | |||
315 | if (!port->nscan) | ||
316 | return -EINVAL; | ||
317 | |||
318 | if (port->host_deviceid >= 0) | ||
319 | rc = port->nscan->enumerate(port, 0); | ||
320 | else | ||
321 | rc = port->nscan->discover(port, RIO_SCAN_ENUM_NO_WAIT); | ||
322 | exit: | ||
323 | if (!rc) | ||
324 | rc = count; | ||
325 | |||
326 | return rc; | ||
327 | } | ||
328 | |||
329 | struct bus_attribute rio_bus_attrs[] = { | ||
330 | __ATTR(scan, (S_IWUSR|S_IWGRP), NULL, bus_scan_store), | ||
331 | __ATTR_NULL | ||
332 | }; | ||
diff --git a/drivers/rapidio/rio.c b/drivers/rapidio/rio.c index d553b5d13722..cb1c08996fbb 100644 --- a/drivers/rapidio/rio.c +++ b/drivers/rapidio/rio.c | |||
@@ -31,7 +31,11 @@ | |||
31 | 31 | ||
32 | #include "rio.h" | 32 | #include "rio.h" |
33 | 33 | ||
34 | static LIST_HEAD(rio_devices); | ||
35 | static DEFINE_SPINLOCK(rio_global_list_lock); | ||
36 | |||
34 | static LIST_HEAD(rio_mports); | 37 | static LIST_HEAD(rio_mports); |
38 | static DEFINE_MUTEX(rio_mport_list_lock); | ||
35 | static unsigned char next_portid; | 39 | static unsigned char next_portid; |
36 | static DEFINE_SPINLOCK(rio_mmap_lock); | 40 | static DEFINE_SPINLOCK(rio_mmap_lock); |
37 | 41 | ||
@@ -53,6 +57,32 @@ u16 rio_local_get_device_id(struct rio_mport *port) | |||
53 | } | 57 | } |
54 | 58 | ||
55 | /** | 59 | /** |
60 | * rio_add_device- Adds a RIO device to the device model | ||
61 | * @rdev: RIO device | ||
62 | * | ||
63 | * Adds the RIO device to the global device list and adds the RIO | ||
64 | * device to the RIO device list. Creates the generic sysfs nodes | ||
65 | * for an RIO device. | ||
66 | */ | ||
67 | int rio_add_device(struct rio_dev *rdev) | ||
68 | { | ||
69 | int err; | ||
70 | |||
71 | err = device_add(&rdev->dev); | ||
72 | if (err) | ||
73 | return err; | ||
74 | |||
75 | spin_lock(&rio_global_list_lock); | ||
76 | list_add_tail(&rdev->global_list, &rio_devices); | ||
77 | spin_unlock(&rio_global_list_lock); | ||
78 | |||
79 | rio_create_sysfs_dev_files(rdev); | ||
80 | |||
81 | return 0; | ||
82 | } | ||
83 | EXPORT_SYMBOL_GPL(rio_add_device); | ||
84 | |||
85 | /** | ||
56 | * rio_request_inb_mbox - request inbound mailbox service | 86 | * rio_request_inb_mbox - request inbound mailbox service |
57 | * @mport: RIO master port from which to allocate the mailbox resource | 87 | * @mport: RIO master port from which to allocate the mailbox resource |
58 | * @dev_id: Device specific pointer to pass on event | 88 | * @dev_id: Device specific pointer to pass on event |
@@ -489,6 +519,7 @@ rio_mport_get_physefb(struct rio_mport *port, int local, | |||
489 | 519 | ||
490 | return ext_ftr_ptr; | 520 | return ext_ftr_ptr; |
491 | } | 521 | } |
522 | EXPORT_SYMBOL_GPL(rio_mport_get_physefb); | ||
492 | 523 | ||
493 | /** | 524 | /** |
494 | * rio_get_comptag - Begin or continue searching for a RIO device by component tag | 525 | * rio_get_comptag - Begin or continue searching for a RIO device by component tag |
@@ -521,6 +552,7 @@ exit: | |||
521 | spin_unlock(&rio_global_list_lock); | 552 | spin_unlock(&rio_global_list_lock); |
522 | return rdev; | 553 | return rdev; |
523 | } | 554 | } |
555 | EXPORT_SYMBOL_GPL(rio_get_comptag); | ||
524 | 556 | ||
525 | /** | 557 | /** |
526 | * rio_set_port_lockout - Sets/clears LOCKOUT bit (RIO EM 1.3) for a switch port. | 558 | * rio_set_port_lockout - Sets/clears LOCKOUT bit (RIO EM 1.3) for a switch port. |
@@ -545,6 +577,107 @@ int rio_set_port_lockout(struct rio_dev *rdev, u32 pnum, int lock) | |||
545 | regval); | 577 | regval); |
546 | return 0; | 578 | return 0; |
547 | } | 579 | } |
580 | EXPORT_SYMBOL_GPL(rio_set_port_lockout); | ||
581 | |||
582 | /** | ||
583 | * rio_switch_init - Sets switch operations for a particular vendor switch | ||
584 | * @rdev: RIO device | ||
585 | * @do_enum: Enumeration/Discovery mode flag | ||
586 | * | ||
587 | * Searches the RIO switch ops table for known switch types. If the vid | ||
588 | * and did match a switch table entry, then call switch initialization | ||
589 | * routine to setup switch-specific routines. | ||
590 | */ | ||
591 | void rio_switch_init(struct rio_dev *rdev, int do_enum) | ||
592 | { | ||
593 | struct rio_switch_ops *cur = __start_rio_switch_ops; | ||
594 | struct rio_switch_ops *end = __end_rio_switch_ops; | ||
595 | |||
596 | while (cur < end) { | ||
597 | if ((cur->vid == rdev->vid) && (cur->did == rdev->did)) { | ||
598 | pr_debug("RIO: calling init routine for %s\n", | ||
599 | rio_name(rdev)); | ||
600 | cur->init_hook(rdev, do_enum); | ||
601 | break; | ||
602 | } | ||
603 | cur++; | ||
604 | } | ||
605 | |||
606 | if ((cur >= end) && (rdev->pef & RIO_PEF_STD_RT)) { | ||
607 | pr_debug("RIO: adding STD routing ops for %s\n", | ||
608 | rio_name(rdev)); | ||
609 | rdev->rswitch->add_entry = rio_std_route_add_entry; | ||
610 | rdev->rswitch->get_entry = rio_std_route_get_entry; | ||
611 | rdev->rswitch->clr_table = rio_std_route_clr_table; | ||
612 | } | ||
613 | |||
614 | if (!rdev->rswitch->add_entry || !rdev->rswitch->get_entry) | ||
615 | printk(KERN_ERR "RIO: missing routing ops for %s\n", | ||
616 | rio_name(rdev)); | ||
617 | } | ||
618 | EXPORT_SYMBOL_GPL(rio_switch_init); | ||
619 | |||
620 | /** | ||
621 | * rio_enable_rx_tx_port - enable input receiver and output transmitter of | ||
622 | * given port | ||
623 | * @port: Master port associated with the RIO network | ||
624 | * @local: local=1 select local port otherwise a far device is reached | ||
625 | * @destid: Destination ID of the device to check host bit | ||
626 | * @hopcount: Number of hops to reach the target | ||
627 | * @port_num: Port (-number on switch) to enable on a far end device | ||
628 | * | ||
629 | * Returns 0 or 1 from on General Control Command and Status Register | ||
630 | * (EXT_PTR+0x3C) | ||
631 | */ | ||
632 | int rio_enable_rx_tx_port(struct rio_mport *port, | ||
633 | int local, u16 destid, | ||
634 | u8 hopcount, u8 port_num) | ||
635 | { | ||
636 | #ifdef CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS | ||
637 | u32 regval; | ||
638 | u32 ext_ftr_ptr; | ||
639 | |||
640 | /* | ||
641 | * enable rx input tx output port | ||
642 | */ | ||
643 | pr_debug("rio_enable_rx_tx_port(local = %d, destid = %d, hopcount = " | ||
644 | "%d, port_num = %d)\n", local, destid, hopcount, port_num); | ||
645 | |||
646 | ext_ftr_ptr = rio_mport_get_physefb(port, local, destid, hopcount); | ||
647 | |||
648 | if (local) { | ||
649 | rio_local_read_config_32(port, ext_ftr_ptr + | ||
650 | RIO_PORT_N_CTL_CSR(0), | ||
651 | ®val); | ||
652 | } else { | ||
653 | if (rio_mport_read_config_32(port, destid, hopcount, | ||
654 | ext_ftr_ptr + RIO_PORT_N_CTL_CSR(port_num), ®val) < 0) | ||
655 | return -EIO; | ||
656 | } | ||
657 | |||
658 | if (regval & RIO_PORT_N_CTL_P_TYP_SER) { | ||
659 | /* serial */ | ||
660 | regval = regval | RIO_PORT_N_CTL_EN_RX_SER | ||
661 | | RIO_PORT_N_CTL_EN_TX_SER; | ||
662 | } else { | ||
663 | /* parallel */ | ||
664 | regval = regval | RIO_PORT_N_CTL_EN_RX_PAR | ||
665 | | RIO_PORT_N_CTL_EN_TX_PAR; | ||
666 | } | ||
667 | |||
668 | if (local) { | ||
669 | rio_local_write_config_32(port, ext_ftr_ptr + | ||
670 | RIO_PORT_N_CTL_CSR(0), regval); | ||
671 | } else { | ||
672 | if (rio_mport_write_config_32(port, destid, hopcount, | ||
673 | ext_ftr_ptr + RIO_PORT_N_CTL_CSR(port_num), regval) < 0) | ||
674 | return -EIO; | ||
675 | } | ||
676 | #endif | ||
677 | return 0; | ||
678 | } | ||
679 | EXPORT_SYMBOL_GPL(rio_enable_rx_tx_port); | ||
680 | |||
548 | 681 | ||
549 | /** | 682 | /** |
550 | * rio_chk_dev_route - Validate route to the specified device. | 683 | * rio_chk_dev_route - Validate route to the specified device. |
@@ -610,6 +743,7 @@ rio_mport_chk_dev_access(struct rio_mport *mport, u16 destid, u8 hopcount) | |||
610 | 743 | ||
611 | return 0; | 744 | return 0; |
612 | } | 745 | } |
746 | EXPORT_SYMBOL_GPL(rio_mport_chk_dev_access); | ||
613 | 747 | ||
614 | /** | 748 | /** |
615 | * rio_chk_dev_access - Validate access to the specified device. | 749 | * rio_chk_dev_access - Validate access to the specified device. |
@@ -941,6 +1075,7 @@ rio_mport_get_efb(struct rio_mport *port, int local, u16 destid, | |||
941 | return RIO_GET_BLOCK_ID(reg_val); | 1075 | return RIO_GET_BLOCK_ID(reg_val); |
942 | } | 1076 | } |
943 | } | 1077 | } |
1078 | EXPORT_SYMBOL_GPL(rio_mport_get_efb); | ||
944 | 1079 | ||
945 | /** | 1080 | /** |
946 | * rio_mport_get_feature - query for devices' extended features | 1081 | * rio_mport_get_feature - query for devices' extended features |
@@ -997,6 +1132,7 @@ rio_mport_get_feature(struct rio_mport * port, int local, u16 destid, | |||
997 | 1132 | ||
998 | return 0; | 1133 | return 0; |
999 | } | 1134 | } |
1135 | EXPORT_SYMBOL_GPL(rio_mport_get_feature); | ||
1000 | 1136 | ||
1001 | /** | 1137 | /** |
1002 | * rio_get_asm - Begin or continue searching for a RIO device by vid/did/asm_vid/asm_did | 1138 | * rio_get_asm - Begin or continue searching for a RIO device by vid/did/asm_vid/asm_did |
@@ -1246,6 +1382,95 @@ EXPORT_SYMBOL_GPL(rio_dma_prep_slave_sg); | |||
1246 | 1382 | ||
1247 | #endif /* CONFIG_RAPIDIO_DMA_ENGINE */ | 1383 | #endif /* CONFIG_RAPIDIO_DMA_ENGINE */ |
1248 | 1384 | ||
1385 | /** | ||
1386 | * rio_find_mport - find RIO mport by its ID | ||
1387 | * @mport_id: number (ID) of mport device | ||
1388 | * | ||
1389 | * Given a RIO mport number, the desired mport is located | ||
1390 | * in the global list of mports. If the mport is found, a pointer to its | ||
1391 | * data structure is returned. If no mport is found, %NULL is returned. | ||
1392 | */ | ||
1393 | struct rio_mport *rio_find_mport(int mport_id) | ||
1394 | { | ||
1395 | struct rio_mport *port; | ||
1396 | |||
1397 | mutex_lock(&rio_mport_list_lock); | ||
1398 | list_for_each_entry(port, &rio_mports, node) { | ||
1399 | if (port->id == mport_id) | ||
1400 | goto found; | ||
1401 | } | ||
1402 | port = NULL; | ||
1403 | found: | ||
1404 | mutex_unlock(&rio_mport_list_lock); | ||
1405 | |||
1406 | return port; | ||
1407 | } | ||
1408 | |||
1409 | /** | ||
1410 | * rio_register_scan - enumeration/discovery method registration interface | ||
1411 | * @mport_id: mport device ID for which fabric scan routine has to be set | ||
1412 | * (RIO_MPORT_ANY = set for all available mports) | ||
1413 | * @scan_ops: enumeration/discovery control structure | ||
1414 | * | ||
1415 | * Assigns enumeration or discovery method to the specified mport device (or all | ||
1416 | * available mports if RIO_MPORT_ANY is specified). | ||
1417 | * Returns error if the mport already has an enumerator attached to it. | ||
1418 | * In case of RIO_MPORT_ANY ignores ports with valid scan routines and returns | ||
1419 | * an error if was unable to find at least one available mport. | ||
1420 | */ | ||
1421 | int rio_register_scan(int mport_id, struct rio_scan *scan_ops) | ||
1422 | { | ||
1423 | struct rio_mport *port; | ||
1424 | int rc = -EBUSY; | ||
1425 | |||
1426 | mutex_lock(&rio_mport_list_lock); | ||
1427 | list_for_each_entry(port, &rio_mports, node) { | ||
1428 | if (port->id == mport_id || mport_id == RIO_MPORT_ANY) { | ||
1429 | if (port->nscan && mport_id == RIO_MPORT_ANY) | ||
1430 | continue; | ||
1431 | else if (port->nscan) | ||
1432 | break; | ||
1433 | |||
1434 | port->nscan = scan_ops; | ||
1435 | rc = 0; | ||
1436 | |||
1437 | if (mport_id != RIO_MPORT_ANY) | ||
1438 | break; | ||
1439 | } | ||
1440 | } | ||
1441 | mutex_unlock(&rio_mport_list_lock); | ||
1442 | |||
1443 | return rc; | ||
1444 | } | ||
1445 | EXPORT_SYMBOL_GPL(rio_register_scan); | ||
1446 | |||
1447 | /** | ||
1448 | * rio_unregister_scan - removes enumeration/discovery method from mport | ||
1449 | * @mport_id: mport device ID for which fabric scan routine has to be | ||
1450 | * unregistered (RIO_MPORT_ANY = set for all available mports) | ||
1451 | * | ||
1452 | * Removes enumeration or discovery method assigned to the specified mport | ||
1453 | * device (or all available mports if RIO_MPORT_ANY is specified). | ||
1454 | */ | ||
1455 | int rio_unregister_scan(int mport_id) | ||
1456 | { | ||
1457 | struct rio_mport *port; | ||
1458 | |||
1459 | mutex_lock(&rio_mport_list_lock); | ||
1460 | list_for_each_entry(port, &rio_mports, node) { | ||
1461 | if (port->id == mport_id || mport_id == RIO_MPORT_ANY) { | ||
1462 | if (port->nscan) | ||
1463 | port->nscan = NULL; | ||
1464 | if (mport_id != RIO_MPORT_ANY) | ||
1465 | break; | ||
1466 | } | ||
1467 | } | ||
1468 | mutex_unlock(&rio_mport_list_lock); | ||
1469 | |||
1470 | return 0; | ||
1471 | } | ||
1472 | EXPORT_SYMBOL_GPL(rio_unregister_scan); | ||
1473 | |||
1249 | static void rio_fixup_device(struct rio_dev *dev) | 1474 | static void rio_fixup_device(struct rio_dev *dev) |
1250 | { | 1475 | { |
1251 | } | 1476 | } |
@@ -1274,7 +1499,7 @@ static void disc_work_handler(struct work_struct *_work) | |||
1274 | work = container_of(_work, struct rio_disc_work, work); | 1499 | work = container_of(_work, struct rio_disc_work, work); |
1275 | pr_debug("RIO: discovery work for mport %d %s\n", | 1500 | pr_debug("RIO: discovery work for mport %d %s\n", |
1276 | work->mport->id, work->mport->name); | 1501 | work->mport->id, work->mport->name); |
1277 | rio_disc_mport(work->mport); | 1502 | work->mport->nscan->discover(work->mport, 0); |
1278 | } | 1503 | } |
1279 | 1504 | ||
1280 | int rio_init_mports(void) | 1505 | int rio_init_mports(void) |
@@ -1290,12 +1515,15 @@ int rio_init_mports(void) | |||
1290 | * First, run enumerations and check if we need to perform discovery | 1515 | * First, run enumerations and check if we need to perform discovery |
1291 | * on any of the registered mports. | 1516 | * on any of the registered mports. |
1292 | */ | 1517 | */ |
1518 | mutex_lock(&rio_mport_list_lock); | ||
1293 | list_for_each_entry(port, &rio_mports, node) { | 1519 | list_for_each_entry(port, &rio_mports, node) { |
1294 | if (port->host_deviceid >= 0) | 1520 | if (port->host_deviceid >= 0) { |
1295 | rio_enum_mport(port); | 1521 | if (port->nscan) |
1296 | else | 1522 | port->nscan->enumerate(port, 0); |
1523 | } else | ||
1297 | n++; | 1524 | n++; |
1298 | } | 1525 | } |
1526 | mutex_unlock(&rio_mport_list_lock); | ||
1299 | 1527 | ||
1300 | if (!n) | 1528 | if (!n) |
1301 | goto no_disc; | 1529 | goto no_disc; |
@@ -1322,14 +1550,16 @@ int rio_init_mports(void) | |||
1322 | } | 1550 | } |
1323 | 1551 | ||
1324 | n = 0; | 1552 | n = 0; |
1553 | mutex_lock(&rio_mport_list_lock); | ||
1325 | list_for_each_entry(port, &rio_mports, node) { | 1554 | list_for_each_entry(port, &rio_mports, node) { |
1326 | if (port->host_deviceid < 0) { | 1555 | if (port->host_deviceid < 0 && port->nscan) { |
1327 | work[n].mport = port; | 1556 | work[n].mport = port; |
1328 | INIT_WORK(&work[n].work, disc_work_handler); | 1557 | INIT_WORK(&work[n].work, disc_work_handler); |
1329 | queue_work(rio_wq, &work[n].work); | 1558 | queue_work(rio_wq, &work[n].work); |
1330 | n++; | 1559 | n++; |
1331 | } | 1560 | } |
1332 | } | 1561 | } |
1562 | mutex_unlock(&rio_mport_list_lock); | ||
1333 | 1563 | ||
1334 | flush_workqueue(rio_wq); | 1564 | flush_workqueue(rio_wq); |
1335 | pr_debug("RIO: destroy discovery workqueue\n"); | 1565 | pr_debug("RIO: destroy discovery workqueue\n"); |
@@ -1342,8 +1572,6 @@ no_disc: | |||
1342 | return 0; | 1572 | return 0; |
1343 | } | 1573 | } |
1344 | 1574 | ||
1345 | device_initcall_sync(rio_init_mports); | ||
1346 | |||
1347 | static int hdids[RIO_MAX_MPORTS + 1]; | 1575 | static int hdids[RIO_MAX_MPORTS + 1]; |
1348 | 1576 | ||
1349 | static int rio_get_hdid(int index) | 1577 | static int rio_get_hdid(int index) |
@@ -1371,7 +1599,10 @@ int rio_register_mport(struct rio_mport *port) | |||
1371 | 1599 | ||
1372 | port->id = next_portid++; | 1600 | port->id = next_portid++; |
1373 | port->host_deviceid = rio_get_hdid(port->id); | 1601 | port->host_deviceid = rio_get_hdid(port->id); |
1602 | port->nscan = NULL; | ||
1603 | mutex_lock(&rio_mport_list_lock); | ||
1374 | list_add_tail(&port->node, &rio_mports); | 1604 | list_add_tail(&port->node, &rio_mports); |
1605 | mutex_unlock(&rio_mport_list_lock); | ||
1375 | return 0; | 1606 | return 0; |
1376 | } | 1607 | } |
1377 | 1608 | ||
@@ -1386,3 +1617,4 @@ EXPORT_SYMBOL_GPL(rio_request_inb_mbox); | |||
1386 | EXPORT_SYMBOL_GPL(rio_release_inb_mbox); | 1617 | EXPORT_SYMBOL_GPL(rio_release_inb_mbox); |
1387 | EXPORT_SYMBOL_GPL(rio_request_outb_mbox); | 1618 | EXPORT_SYMBOL_GPL(rio_request_outb_mbox); |
1388 | EXPORT_SYMBOL_GPL(rio_release_outb_mbox); | 1619 | EXPORT_SYMBOL_GPL(rio_release_outb_mbox); |
1620 | EXPORT_SYMBOL_GPL(rio_init_mports); | ||
diff --git a/drivers/rapidio/rio.h b/drivers/rapidio/rio.h index b1af414f15e6..c14f864dea5c 100644 --- a/drivers/rapidio/rio.h +++ b/drivers/rapidio/rio.h | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/rio.h> | 15 | #include <linux/rio.h> |
16 | 16 | ||
17 | #define RIO_MAX_CHK_RETRY 3 | 17 | #define RIO_MAX_CHK_RETRY 3 |
18 | #define RIO_MPORT_ANY (-1) | ||
18 | 19 | ||
19 | /* Functions internal to the RIO core code */ | 20 | /* Functions internal to the RIO core code */ |
20 | 21 | ||
@@ -27,8 +28,6 @@ extern u32 rio_mport_get_efb(struct rio_mport *port, int local, u16 destid, | |||
27 | extern int rio_mport_chk_dev_access(struct rio_mport *mport, u16 destid, | 28 | extern int rio_mport_chk_dev_access(struct rio_mport *mport, u16 destid, |
28 | u8 hopcount); | 29 | u8 hopcount); |
29 | extern int rio_create_sysfs_dev_files(struct rio_dev *rdev); | 30 | extern int rio_create_sysfs_dev_files(struct rio_dev *rdev); |
30 | extern int rio_enum_mport(struct rio_mport *mport); | ||
31 | extern int rio_disc_mport(struct rio_mport *mport); | ||
32 | extern int rio_std_route_add_entry(struct rio_mport *mport, u16 destid, | 31 | extern int rio_std_route_add_entry(struct rio_mport *mport, u16 destid, |
33 | u8 hopcount, u16 table, u16 route_destid, | 32 | u8 hopcount, u16 table, u16 route_destid, |
34 | u8 route_port); | 33 | u8 route_port); |
@@ -39,10 +38,18 @@ extern int rio_std_route_clr_table(struct rio_mport *mport, u16 destid, | |||
39 | u8 hopcount, u16 table); | 38 | u8 hopcount, u16 table); |
40 | extern int rio_set_port_lockout(struct rio_dev *rdev, u32 pnum, int lock); | 39 | extern int rio_set_port_lockout(struct rio_dev *rdev, u32 pnum, int lock); |
41 | extern struct rio_dev *rio_get_comptag(u32 comp_tag, struct rio_dev *from); | 40 | extern struct rio_dev *rio_get_comptag(u32 comp_tag, struct rio_dev *from); |
41 | extern int rio_add_device(struct rio_dev *rdev); | ||
42 | extern void rio_switch_init(struct rio_dev *rdev, int do_enum); | ||
43 | extern int rio_enable_rx_tx_port(struct rio_mport *port, int local, u16 destid, | ||
44 | u8 hopcount, u8 port_num); | ||
45 | extern int rio_register_scan(int mport_id, struct rio_scan *scan_ops); | ||
46 | extern int rio_unregister_scan(int mport_id); | ||
47 | extern void rio_attach_device(struct rio_dev *rdev); | ||
48 | extern struct rio_mport *rio_find_mport(int mport_id); | ||
42 | 49 | ||
43 | /* Structures internal to the RIO core code */ | 50 | /* Structures internal to the RIO core code */ |
44 | extern struct device_attribute rio_dev_attrs[]; | 51 | extern struct device_attribute rio_dev_attrs[]; |
45 | extern spinlock_t rio_global_list_lock; | 52 | extern struct bus_attribute rio_bus_attrs[]; |
46 | 53 | ||
47 | extern struct rio_switch_ops __start_rio_switch_ops[]; | 54 | extern struct rio_switch_ops __start_rio_switch_ops[]; |
48 | extern struct rio_switch_ops __end_rio_switch_ops[]; | 55 | extern struct rio_switch_ops __end_rio_switch_ops[]; |
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 6e5017841582..815d6df8bd5f 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c | |||
@@ -1539,7 +1539,10 @@ static void regulator_ena_gpio_free(struct regulator_dev *rdev) | |||
1539 | } | 1539 | } |
1540 | 1540 | ||
1541 | /** | 1541 | /** |
1542 | * Balance enable_count of each GPIO and actual GPIO pin control. | 1542 | * regulator_ena_gpio_ctrl - balance enable_count of each GPIO and actual GPIO pin control |
1543 | * @rdev: regulator_dev structure | ||
1544 | * @enable: enable GPIO at initial use? | ||
1545 | * | ||
1543 | * GPIO is enabled in case of initial use. (enable_count is 0) | 1546 | * GPIO is enabled in case of initial use. (enable_count is 0) |
1544 | * GPIO is disabled when it is not shared any more. (enable_count <= 1) | 1547 | * GPIO is disabled when it is not shared any more. (enable_count <= 1) |
1545 | */ | 1548 | */ |
@@ -2702,7 +2705,7 @@ EXPORT_SYMBOL_GPL(regulator_get_voltage); | |||
2702 | /** | 2705 | /** |
2703 | * regulator_set_current_limit - set regulator output current limit | 2706 | * regulator_set_current_limit - set regulator output current limit |
2704 | * @regulator: regulator source | 2707 | * @regulator: regulator source |
2705 | * @min_uA: Minimuum supported current in uA | 2708 | * @min_uA: Minimum supported current in uA |
2706 | * @max_uA: Maximum supported current in uA | 2709 | * @max_uA: Maximum supported current in uA |
2707 | * | 2710 | * |
2708 | * Sets current sink to the desired output current. This can be set during | 2711 | * Sets current sink to the desired output current. This can be set during |
diff --git a/drivers/regulator/dbx500-prcmu.c b/drivers/regulator/dbx500-prcmu.c index 89bd2faaef8c..ce89f7848a57 100644 --- a/drivers/regulator/dbx500-prcmu.c +++ b/drivers/regulator/dbx500-prcmu.c | |||
@@ -24,18 +24,6 @@ | |||
24 | static int power_state_active_cnt; /* will initialize to zero */ | 24 | static int power_state_active_cnt; /* will initialize to zero */ |
25 | static DEFINE_SPINLOCK(power_state_active_lock); | 25 | static DEFINE_SPINLOCK(power_state_active_lock); |
26 | 26 | ||
27 | int power_state_active_get(void) | ||
28 | { | ||
29 | unsigned long flags; | ||
30 | int cnt; | ||
31 | |||
32 | spin_lock_irqsave(&power_state_active_lock, flags); | ||
33 | cnt = power_state_active_cnt; | ||
34 | spin_unlock_irqrestore(&power_state_active_lock, flags); | ||
35 | |||
36 | return cnt; | ||
37 | } | ||
38 | |||
39 | void power_state_active_enable(void) | 27 | void power_state_active_enable(void) |
40 | { | 28 | { |
41 | unsigned long flags; | 29 | unsigned long flags; |
@@ -65,6 +53,18 @@ out: | |||
65 | 53 | ||
66 | #ifdef CONFIG_REGULATOR_DEBUG | 54 | #ifdef CONFIG_REGULATOR_DEBUG |
67 | 55 | ||
56 | static int power_state_active_get(void) | ||
57 | { | ||
58 | unsigned long flags; | ||
59 | int cnt; | ||
60 | |||
61 | spin_lock_irqsave(&power_state_active_lock, flags); | ||
62 | cnt = power_state_active_cnt; | ||
63 | spin_unlock_irqrestore(&power_state_active_lock, flags); | ||
64 | |||
65 | return cnt; | ||
66 | } | ||
67 | |||
68 | static struct ux500_regulator_debug { | 68 | static struct ux500_regulator_debug { |
69 | struct dentry *dir; | 69 | struct dentry *dir; |
70 | struct dentry *status_file; | 70 | struct dentry *status_file; |
diff --git a/drivers/regulator/palmas-regulator.c b/drivers/regulator/palmas-regulator.c index 92ceed0fc65e..3ae44ac12a94 100644 --- a/drivers/regulator/palmas-regulator.c +++ b/drivers/regulator/palmas-regulator.c | |||
@@ -840,7 +840,7 @@ static int palmas_regulators_probe(struct platform_device *pdev) | |||
840 | break; | 840 | break; |
841 | } | 841 | } |
842 | 842 | ||
843 | if ((id == PALMAS_REG_SMPS6) && (id == PALMAS_REG_SMPS8)) | 843 | if ((id == PALMAS_REG_SMPS6) || (id == PALMAS_REG_SMPS8)) |
844 | ramp_delay_support = true; | 844 | ramp_delay_support = true; |
845 | 845 | ||
846 | if (ramp_delay_support) { | 846 | if (ramp_delay_support) { |
@@ -878,7 +878,7 @@ static int palmas_regulators_probe(struct platform_device *pdev) | |||
878 | pmic->desc[id].vsel_mask = SMPS10_VSEL; | 878 | pmic->desc[id].vsel_mask = SMPS10_VSEL; |
879 | pmic->desc[id].enable_reg = | 879 | pmic->desc[id].enable_reg = |
880 | PALMAS_BASE_TO_REG(PALMAS_SMPS_BASE, | 880 | PALMAS_BASE_TO_REG(PALMAS_SMPS_BASE, |
881 | PALMAS_SMPS10_STATUS); | 881 | PALMAS_SMPS10_CTRL); |
882 | pmic->desc[id].enable_mask = SMPS10_BOOST_EN; | 882 | pmic->desc[id].enable_mask = SMPS10_BOOST_EN; |
883 | pmic->desc[id].min_uV = 3750000; | 883 | pmic->desc[id].min_uV = 3750000; |
884 | pmic->desc[id].uV_step = 1250000; | 884 | pmic->desc[id].uV_step = 1250000; |
diff --git a/drivers/rtc/rtc-max8998.c b/drivers/rtc/rtc-max8998.c index 48b6612fae7f..d5af7baa48b5 100644 --- a/drivers/rtc/rtc-max8998.c +++ b/drivers/rtc/rtc-max8998.c | |||
@@ -285,7 +285,7 @@ static int max8998_rtc_probe(struct platform_device *pdev) | |||
285 | info->irq, ret); | 285 | info->irq, ret); |
286 | 286 | ||
287 | dev_info(&pdev->dev, "RTC CHIP NAME: %s\n", pdev->id_entry->name); | 287 | dev_info(&pdev->dev, "RTC CHIP NAME: %s\n", pdev->id_entry->name); |
288 | if (pdata->rtc_delay) { | 288 | if (pdata && pdata->rtc_delay) { |
289 | info->lp3974_bug_workaround = true; | 289 | info->lp3974_bug_workaround = true; |
290 | dev_warn(&pdev->dev, "LP3974 with RTC REGERR option." | 290 | dev_warn(&pdev->dev, "LP3974 with RTC REGERR option." |
291 | " RTC updates will be extremely slow.\n"); | 291 | " RTC updates will be extremely slow.\n"); |
diff --git a/drivers/rtc/rtc-pl031.c b/drivers/rtc/rtc-pl031.c index 8900ea784817..0f0609b1aa2c 100644 --- a/drivers/rtc/rtc-pl031.c +++ b/drivers/rtc/rtc-pl031.c | |||
@@ -306,7 +306,7 @@ static int pl031_remove(struct amba_device *adev) | |||
306 | struct pl031_local *ldata = dev_get_drvdata(&adev->dev); | 306 | struct pl031_local *ldata = dev_get_drvdata(&adev->dev); |
307 | 307 | ||
308 | amba_set_drvdata(adev, NULL); | 308 | amba_set_drvdata(adev, NULL); |
309 | free_irq(adev->irq[0], ldata->rtc); | 309 | free_irq(adev->irq[0], ldata); |
310 | rtc_device_unregister(ldata->rtc); | 310 | rtc_device_unregister(ldata->rtc); |
311 | iounmap(ldata->base); | 311 | iounmap(ldata->base); |
312 | kfree(ldata); | 312 | kfree(ldata); |
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c index 4361d9772c42..d72a9216ee2e 100644 --- a/drivers/s390/block/dasd.c +++ b/drivers/s390/block/dasd.c | |||
@@ -3440,8 +3440,16 @@ void dasd_generic_path_event(struct ccw_device *cdev, int *path_event) | |||
3440 | device->path_data.opm &= ~eventlpm; | 3440 | device->path_data.opm &= ~eventlpm; |
3441 | device->path_data.ppm &= ~eventlpm; | 3441 | device->path_data.ppm &= ~eventlpm; |
3442 | device->path_data.npm &= ~eventlpm; | 3442 | device->path_data.npm &= ~eventlpm; |
3443 | if (oldopm && !device->path_data.opm) | 3443 | if (oldopm && !device->path_data.opm) { |
3444 | dasd_generic_last_path_gone(device); | 3444 | dev_warn(&device->cdev->dev, |
3445 | "No verified channel paths remain " | ||
3446 | "for the device\n"); | ||
3447 | DBF_DEV_EVENT(DBF_WARNING, device, | ||
3448 | "%s", "last verified path gone"); | ||
3449 | dasd_eer_write(device, NULL, DASD_EER_NOPATH); | ||
3450 | dasd_device_set_stop_bits(device, | ||
3451 | DASD_STOPPED_DC_WAIT); | ||
3452 | } | ||
3445 | } | 3453 | } |
3446 | if (path_event[chp] & PE_PATH_AVAILABLE) { | 3454 | if (path_event[chp] & PE_PATH_AVAILABLE) { |
3447 | device->path_data.opm &= ~eventlpm; | 3455 | device->path_data.opm &= ~eventlpm; |
diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c b/drivers/scsi/qla2xxx/tcm_qla2xxx.c index d182c96e17ea..7a3870f385f6 100644 --- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c +++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c | |||
@@ -1370,7 +1370,7 @@ static void tcm_qla2xxx_free_session(struct qla_tgt_sess *sess) | |||
1370 | dump_stack(); | 1370 | dump_stack(); |
1371 | return; | 1371 | return; |
1372 | } | 1372 | } |
1373 | target_wait_for_sess_cmds(se_sess, 0); | 1373 | target_wait_for_sess_cmds(se_sess); |
1374 | 1374 | ||
1375 | transport_deregister_session_configfs(sess->se_sess); | 1375 | transport_deregister_session_configfs(sess->se_sess); |
1376 | transport_deregister_session(sess->se_sess); | 1376 | transport_deregister_session(sess->se_sess); |
diff --git a/drivers/scsi/scsi_proc.c b/drivers/scsi/scsi_proc.c index db66357211ed..86f0c5d5c116 100644 --- a/drivers/scsi/scsi_proc.c +++ b/drivers/scsi/scsi_proc.c | |||
@@ -84,6 +84,7 @@ static int proc_scsi_host_open(struct inode *inode, struct file *file) | |||
84 | 84 | ||
85 | static const struct file_operations proc_scsi_fops = { | 85 | static const struct file_operations proc_scsi_fops = { |
86 | .open = proc_scsi_host_open, | 86 | .open = proc_scsi_host_open, |
87 | .release = single_release, | ||
87 | .read = seq_read, | 88 | .read = seq_read, |
88 | .llseek = seq_lseek, | 89 | .llseek = seq_lseek, |
89 | .write = proc_scsi_host_write | 90 | .write = proc_scsi_host_write |
diff --git a/drivers/staging/imx-drm/ipuv3-crtc.c b/drivers/staging/imx-drm/ipuv3-crtc.c index ea61c869110f..ff5c63350932 100644 --- a/drivers/staging/imx-drm/ipuv3-crtc.c +++ b/drivers/staging/imx-drm/ipuv3-crtc.c | |||
@@ -316,31 +316,14 @@ static int ipu_crtc_mode_set(struct drm_crtc *crtc, | |||
316 | 316 | ||
317 | static void ipu_crtc_handle_pageflip(struct ipu_crtc *ipu_crtc) | 317 | static void ipu_crtc_handle_pageflip(struct ipu_crtc *ipu_crtc) |
318 | { | 318 | { |
319 | struct drm_pending_vblank_event *e; | ||
320 | struct timeval now; | ||
321 | unsigned long flags; | 319 | unsigned long flags; |
322 | struct drm_device *drm = ipu_crtc->base.dev; | 320 | struct drm_device *drm = ipu_crtc->base.dev; |
323 | 321 | ||
324 | spin_lock_irqsave(&drm->event_lock, flags); | 322 | spin_lock_irqsave(&drm->event_lock, flags); |
325 | 323 | if (ipu_crtc->page_flip_event) | |
326 | e = ipu_crtc->page_flip_event; | 324 | drm_send_vblank_event(drm, -1, ipu_crtc->page_flip_event); |
327 | if (!e) { | ||
328 | spin_unlock_irqrestore(&drm->event_lock, flags); | ||
329 | return; | ||
330 | } | ||
331 | |||
332 | do_gettimeofday(&now); | ||
333 | e->event.sequence = 0; | ||
334 | e->event.tv_sec = now.tv_sec; | ||
335 | e->event.tv_usec = now.tv_usec; | ||
336 | ipu_crtc->page_flip_event = NULL; | 325 | ipu_crtc->page_flip_event = NULL; |
337 | |||
338 | imx_drm_crtc_vblank_put(ipu_crtc->imx_crtc); | 326 | imx_drm_crtc_vblank_put(ipu_crtc->imx_crtc); |
339 | |||
340 | list_add_tail(&e->base.link, &e->base.file_priv->event_list); | ||
341 | |||
342 | wake_up_interruptible(&e->base.file_priv->event_wait); | ||
343 | |||
344 | spin_unlock_irqrestore(&drm->event_lock, flags); | 327 | spin_unlock_irqrestore(&drm->event_lock, flags); |
345 | } | 328 | } |
346 | 329 | ||
diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c index 262ef1f23b38..d7705e5824fb 100644 --- a/drivers/target/iscsi/iscsi_target.c +++ b/drivers/target/iscsi/iscsi_target.c | |||
@@ -651,7 +651,7 @@ static int iscsit_add_reject( | |||
651 | cmd->buf_ptr = kmemdup(buf, ISCSI_HDR_LEN, GFP_KERNEL); | 651 | cmd->buf_ptr = kmemdup(buf, ISCSI_HDR_LEN, GFP_KERNEL); |
652 | if (!cmd->buf_ptr) { | 652 | if (!cmd->buf_ptr) { |
653 | pr_err("Unable to allocate memory for cmd->buf_ptr\n"); | 653 | pr_err("Unable to allocate memory for cmd->buf_ptr\n"); |
654 | iscsit_release_cmd(cmd); | 654 | iscsit_free_cmd(cmd, false); |
655 | return -1; | 655 | return -1; |
656 | } | 656 | } |
657 | 657 | ||
@@ -697,7 +697,7 @@ int iscsit_add_reject_from_cmd( | |||
697 | cmd->buf_ptr = kmemdup(buf, ISCSI_HDR_LEN, GFP_KERNEL); | 697 | cmd->buf_ptr = kmemdup(buf, ISCSI_HDR_LEN, GFP_KERNEL); |
698 | if (!cmd->buf_ptr) { | 698 | if (!cmd->buf_ptr) { |
699 | pr_err("Unable to allocate memory for cmd->buf_ptr\n"); | 699 | pr_err("Unable to allocate memory for cmd->buf_ptr\n"); |
700 | iscsit_release_cmd(cmd); | 700 | iscsit_free_cmd(cmd, false); |
701 | return -1; | 701 | return -1; |
702 | } | 702 | } |
703 | 703 | ||
@@ -1743,7 +1743,7 @@ int iscsit_handle_nop_out(struct iscsi_conn *conn, struct iscsi_cmd *cmd, | |||
1743 | return 0; | 1743 | return 0; |
1744 | out: | 1744 | out: |
1745 | if (cmd) | 1745 | if (cmd) |
1746 | iscsit_release_cmd(cmd); | 1746 | iscsit_free_cmd(cmd, false); |
1747 | ping_out: | 1747 | ping_out: |
1748 | kfree(ping_data); | 1748 | kfree(ping_data); |
1749 | return ret; | 1749 | return ret; |
@@ -2251,7 +2251,7 @@ iscsit_handle_logout_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, | |||
2251 | if (conn->conn_state != TARG_CONN_STATE_LOGGED_IN) { | 2251 | if (conn->conn_state != TARG_CONN_STATE_LOGGED_IN) { |
2252 | pr_err("Received logout request on connection that" | 2252 | pr_err("Received logout request on connection that" |
2253 | " is not in logged in state, ignoring request.\n"); | 2253 | " is not in logged in state, ignoring request.\n"); |
2254 | iscsit_release_cmd(cmd); | 2254 | iscsit_free_cmd(cmd, false); |
2255 | return 0; | 2255 | return 0; |
2256 | } | 2256 | } |
2257 | 2257 | ||
@@ -3665,7 +3665,7 @@ iscsit_immediate_queue(struct iscsi_conn *conn, struct iscsi_cmd *cmd, int state | |||
3665 | list_del(&cmd->i_conn_node); | 3665 | list_del(&cmd->i_conn_node); |
3666 | spin_unlock_bh(&conn->cmd_lock); | 3666 | spin_unlock_bh(&conn->cmd_lock); |
3667 | 3667 | ||
3668 | iscsit_free_cmd(cmd); | 3668 | iscsit_free_cmd(cmd, false); |
3669 | break; | 3669 | break; |
3670 | case ISTATE_SEND_NOPIN_WANT_RESPONSE: | 3670 | case ISTATE_SEND_NOPIN_WANT_RESPONSE: |
3671 | iscsit_mod_nopin_response_timer(conn); | 3671 | iscsit_mod_nopin_response_timer(conn); |
@@ -4122,7 +4122,7 @@ static void iscsit_release_commands_from_conn(struct iscsi_conn *conn) | |||
4122 | 4122 | ||
4123 | iscsit_increment_maxcmdsn(cmd, sess); | 4123 | iscsit_increment_maxcmdsn(cmd, sess); |
4124 | 4124 | ||
4125 | iscsit_free_cmd(cmd); | 4125 | iscsit_free_cmd(cmd, true); |
4126 | 4126 | ||
4127 | spin_lock_bh(&conn->cmd_lock); | 4127 | spin_lock_bh(&conn->cmd_lock); |
4128 | } | 4128 | } |
diff --git a/drivers/target/iscsi/iscsi_target_erl2.c b/drivers/target/iscsi/iscsi_target_erl2.c index ba6091bf93fc..45a5afd5ea13 100644 --- a/drivers/target/iscsi/iscsi_target_erl2.c +++ b/drivers/target/iscsi/iscsi_target_erl2.c | |||
@@ -143,7 +143,7 @@ void iscsit_free_connection_recovery_entires(struct iscsi_session *sess) | |||
143 | list_del(&cmd->i_conn_node); | 143 | list_del(&cmd->i_conn_node); |
144 | cmd->conn = NULL; | 144 | cmd->conn = NULL; |
145 | spin_unlock(&cr->conn_recovery_cmd_lock); | 145 | spin_unlock(&cr->conn_recovery_cmd_lock); |
146 | iscsit_free_cmd(cmd); | 146 | iscsit_free_cmd(cmd, true); |
147 | spin_lock(&cr->conn_recovery_cmd_lock); | 147 | spin_lock(&cr->conn_recovery_cmd_lock); |
148 | } | 148 | } |
149 | spin_unlock(&cr->conn_recovery_cmd_lock); | 149 | spin_unlock(&cr->conn_recovery_cmd_lock); |
@@ -165,7 +165,7 @@ void iscsit_free_connection_recovery_entires(struct iscsi_session *sess) | |||
165 | list_del(&cmd->i_conn_node); | 165 | list_del(&cmd->i_conn_node); |
166 | cmd->conn = NULL; | 166 | cmd->conn = NULL; |
167 | spin_unlock(&cr->conn_recovery_cmd_lock); | 167 | spin_unlock(&cr->conn_recovery_cmd_lock); |
168 | iscsit_free_cmd(cmd); | 168 | iscsit_free_cmd(cmd, true); |
169 | spin_lock(&cr->conn_recovery_cmd_lock); | 169 | spin_lock(&cr->conn_recovery_cmd_lock); |
170 | } | 170 | } |
171 | spin_unlock(&cr->conn_recovery_cmd_lock); | 171 | spin_unlock(&cr->conn_recovery_cmd_lock); |
@@ -248,7 +248,7 @@ void iscsit_discard_cr_cmds_by_expstatsn( | |||
248 | iscsit_remove_cmd_from_connection_recovery(cmd, sess); | 248 | iscsit_remove_cmd_from_connection_recovery(cmd, sess); |
249 | 249 | ||
250 | spin_unlock(&cr->conn_recovery_cmd_lock); | 250 | spin_unlock(&cr->conn_recovery_cmd_lock); |
251 | iscsit_free_cmd(cmd); | 251 | iscsit_free_cmd(cmd, true); |
252 | spin_lock(&cr->conn_recovery_cmd_lock); | 252 | spin_lock(&cr->conn_recovery_cmd_lock); |
253 | } | 253 | } |
254 | spin_unlock(&cr->conn_recovery_cmd_lock); | 254 | spin_unlock(&cr->conn_recovery_cmd_lock); |
@@ -302,7 +302,7 @@ int iscsit_discard_unacknowledged_ooo_cmdsns_for_conn(struct iscsi_conn *conn) | |||
302 | list_del(&cmd->i_conn_node); | 302 | list_del(&cmd->i_conn_node); |
303 | 303 | ||
304 | spin_unlock_bh(&conn->cmd_lock); | 304 | spin_unlock_bh(&conn->cmd_lock); |
305 | iscsit_free_cmd(cmd); | 305 | iscsit_free_cmd(cmd, true); |
306 | spin_lock_bh(&conn->cmd_lock); | 306 | spin_lock_bh(&conn->cmd_lock); |
307 | } | 307 | } |
308 | spin_unlock_bh(&conn->cmd_lock); | 308 | spin_unlock_bh(&conn->cmd_lock); |
@@ -355,7 +355,7 @@ int iscsit_prepare_cmds_for_realligance(struct iscsi_conn *conn) | |||
355 | 355 | ||
356 | list_del(&cmd->i_conn_node); | 356 | list_del(&cmd->i_conn_node); |
357 | spin_unlock_bh(&conn->cmd_lock); | 357 | spin_unlock_bh(&conn->cmd_lock); |
358 | iscsit_free_cmd(cmd); | 358 | iscsit_free_cmd(cmd, true); |
359 | spin_lock_bh(&conn->cmd_lock); | 359 | spin_lock_bh(&conn->cmd_lock); |
360 | continue; | 360 | continue; |
361 | } | 361 | } |
@@ -375,7 +375,7 @@ int iscsit_prepare_cmds_for_realligance(struct iscsi_conn *conn) | |||
375 | iscsi_sna_gte(cmd->cmd_sn, conn->sess->exp_cmd_sn)) { | 375 | iscsi_sna_gte(cmd->cmd_sn, conn->sess->exp_cmd_sn)) { |
376 | list_del(&cmd->i_conn_node); | 376 | list_del(&cmd->i_conn_node); |
377 | spin_unlock_bh(&conn->cmd_lock); | 377 | spin_unlock_bh(&conn->cmd_lock); |
378 | iscsit_free_cmd(cmd); | 378 | iscsit_free_cmd(cmd, true); |
379 | spin_lock_bh(&conn->cmd_lock); | 379 | spin_lock_bh(&conn->cmd_lock); |
380 | continue; | 380 | continue; |
381 | } | 381 | } |
diff --git a/drivers/target/iscsi/iscsi_target_parameters.c b/drivers/target/iscsi/iscsi_target_parameters.c index c2185fc31136..e38222191a33 100644 --- a/drivers/target/iscsi/iscsi_target_parameters.c +++ b/drivers/target/iscsi/iscsi_target_parameters.c | |||
@@ -758,9 +758,9 @@ static int iscsi_add_notunderstood_response( | |||
758 | } | 758 | } |
759 | INIT_LIST_HEAD(&extra_response->er_list); | 759 | INIT_LIST_HEAD(&extra_response->er_list); |
760 | 760 | ||
761 | strncpy(extra_response->key, key, strlen(key) + 1); | 761 | strlcpy(extra_response->key, key, sizeof(extra_response->key)); |
762 | strncpy(extra_response->value, NOTUNDERSTOOD, | 762 | strlcpy(extra_response->value, NOTUNDERSTOOD, |
763 | strlen(NOTUNDERSTOOD) + 1); | 763 | sizeof(extra_response->value)); |
764 | 764 | ||
765 | list_add_tail(&extra_response->er_list, | 765 | list_add_tail(&extra_response->er_list, |
766 | ¶m_list->extra_response_list); | 766 | ¶m_list->extra_response_list); |
@@ -1629,8 +1629,6 @@ int iscsi_decode_text_input( | |||
1629 | 1629 | ||
1630 | if (phase & PHASE_SECURITY) { | 1630 | if (phase & PHASE_SECURITY) { |
1631 | if (iscsi_check_for_auth_key(key) > 0) { | 1631 | if (iscsi_check_for_auth_key(key) > 0) { |
1632 | char *tmpptr = key + strlen(key); | ||
1633 | *tmpptr = '='; | ||
1634 | kfree(tmpbuf); | 1632 | kfree(tmpbuf); |
1635 | return 1; | 1633 | return 1; |
1636 | } | 1634 | } |
diff --git a/drivers/target/iscsi/iscsi_target_parameters.h b/drivers/target/iscsi/iscsi_target_parameters.h index 915b06798505..a47046a752aa 100644 --- a/drivers/target/iscsi/iscsi_target_parameters.h +++ b/drivers/target/iscsi/iscsi_target_parameters.h | |||
@@ -1,8 +1,10 @@ | |||
1 | #ifndef ISCSI_PARAMETERS_H | 1 | #ifndef ISCSI_PARAMETERS_H |
2 | #define ISCSI_PARAMETERS_H | 2 | #define ISCSI_PARAMETERS_H |
3 | 3 | ||
4 | #include <scsi/iscsi_proto.h> | ||
5 | |||
4 | struct iscsi_extra_response { | 6 | struct iscsi_extra_response { |
5 | char key[64]; | 7 | char key[KEY_MAXLEN]; |
6 | char value[32]; | 8 | char value[32]; |
7 | struct list_head er_list; | 9 | struct list_head er_list; |
8 | } ____cacheline_aligned; | 10 | } ____cacheline_aligned; |
diff --git a/drivers/target/iscsi/iscsi_target_util.c b/drivers/target/iscsi/iscsi_target_util.c index 2cc6c9a3ffb8..08a3bacef0c5 100644 --- a/drivers/target/iscsi/iscsi_target_util.c +++ b/drivers/target/iscsi/iscsi_target_util.c | |||
@@ -676,40 +676,56 @@ void iscsit_free_queue_reqs_for_conn(struct iscsi_conn *conn) | |||
676 | 676 | ||
677 | void iscsit_release_cmd(struct iscsi_cmd *cmd) | 677 | void iscsit_release_cmd(struct iscsi_cmd *cmd) |
678 | { | 678 | { |
679 | struct iscsi_conn *conn = cmd->conn; | ||
680 | |||
681 | iscsit_free_r2ts_from_list(cmd); | ||
682 | iscsit_free_all_datain_reqs(cmd); | ||
683 | |||
684 | kfree(cmd->buf_ptr); | 679 | kfree(cmd->buf_ptr); |
685 | kfree(cmd->pdu_list); | 680 | kfree(cmd->pdu_list); |
686 | kfree(cmd->seq_list); | 681 | kfree(cmd->seq_list); |
687 | kfree(cmd->tmr_req); | 682 | kfree(cmd->tmr_req); |
688 | kfree(cmd->iov_data); | 683 | kfree(cmd->iov_data); |
689 | 684 | ||
690 | if (conn) { | 685 | kmem_cache_free(lio_cmd_cache, cmd); |
686 | } | ||
687 | |||
688 | static void __iscsit_free_cmd(struct iscsi_cmd *cmd, bool scsi_cmd, | ||
689 | bool check_queues) | ||
690 | { | ||
691 | struct iscsi_conn *conn = cmd->conn; | ||
692 | |||
693 | if (scsi_cmd) { | ||
694 | if (cmd->data_direction == DMA_TO_DEVICE) { | ||
695 | iscsit_stop_dataout_timer(cmd); | ||
696 | iscsit_free_r2ts_from_list(cmd); | ||
697 | } | ||
698 | if (cmd->data_direction == DMA_FROM_DEVICE) | ||
699 | iscsit_free_all_datain_reqs(cmd); | ||
700 | } | ||
701 | |||
702 | if (conn && check_queues) { | ||
691 | iscsit_remove_cmd_from_immediate_queue(cmd, conn); | 703 | iscsit_remove_cmd_from_immediate_queue(cmd, conn); |
692 | iscsit_remove_cmd_from_response_queue(cmd, conn); | 704 | iscsit_remove_cmd_from_response_queue(cmd, conn); |
693 | } | 705 | } |
694 | |||
695 | kmem_cache_free(lio_cmd_cache, cmd); | ||
696 | } | 706 | } |
697 | 707 | ||
698 | void iscsit_free_cmd(struct iscsi_cmd *cmd) | 708 | void iscsit_free_cmd(struct iscsi_cmd *cmd, bool shutdown) |
699 | { | 709 | { |
710 | struct se_cmd *se_cmd = NULL; | ||
711 | int rc; | ||
700 | /* | 712 | /* |
701 | * Determine if a struct se_cmd is associated with | 713 | * Determine if a struct se_cmd is associated with |
702 | * this struct iscsi_cmd. | 714 | * this struct iscsi_cmd. |
703 | */ | 715 | */ |
704 | switch (cmd->iscsi_opcode) { | 716 | switch (cmd->iscsi_opcode) { |
705 | case ISCSI_OP_SCSI_CMD: | 717 | case ISCSI_OP_SCSI_CMD: |
706 | if (cmd->data_direction == DMA_TO_DEVICE) | 718 | se_cmd = &cmd->se_cmd; |
707 | iscsit_stop_dataout_timer(cmd); | 719 | __iscsit_free_cmd(cmd, true, shutdown); |
708 | /* | 720 | /* |
709 | * Fallthrough | 721 | * Fallthrough |
710 | */ | 722 | */ |
711 | case ISCSI_OP_SCSI_TMFUNC: | 723 | case ISCSI_OP_SCSI_TMFUNC: |
712 | transport_generic_free_cmd(&cmd->se_cmd, 1); | 724 | rc = transport_generic_free_cmd(&cmd->se_cmd, 1); |
725 | if (!rc && shutdown && se_cmd && se_cmd->se_sess) { | ||
726 | __iscsit_free_cmd(cmd, true, shutdown); | ||
727 | target_put_sess_cmd(se_cmd->se_sess, se_cmd); | ||
728 | } | ||
713 | break; | 729 | break; |
714 | case ISCSI_OP_REJECT: | 730 | case ISCSI_OP_REJECT: |
715 | /* | 731 | /* |
@@ -718,11 +734,19 @@ void iscsit_free_cmd(struct iscsi_cmd *cmd) | |||
718 | * associated cmd->se_cmd needs to be released. | 734 | * associated cmd->se_cmd needs to be released. |
719 | */ | 735 | */ |
720 | if (cmd->se_cmd.se_tfo != NULL) { | 736 | if (cmd->se_cmd.se_tfo != NULL) { |
721 | transport_generic_free_cmd(&cmd->se_cmd, 1); | 737 | se_cmd = &cmd->se_cmd; |
738 | __iscsit_free_cmd(cmd, true, shutdown); | ||
739 | |||
740 | rc = transport_generic_free_cmd(&cmd->se_cmd, 1); | ||
741 | if (!rc && shutdown && se_cmd->se_sess) { | ||
742 | __iscsit_free_cmd(cmd, true, shutdown); | ||
743 | target_put_sess_cmd(se_cmd->se_sess, se_cmd); | ||
744 | } | ||
722 | break; | 745 | break; |
723 | } | 746 | } |
724 | /* Fall-through */ | 747 | /* Fall-through */ |
725 | default: | 748 | default: |
749 | __iscsit_free_cmd(cmd, false, shutdown); | ||
726 | cmd->release_cmd(cmd); | 750 | cmd->release_cmd(cmd); |
727 | break; | 751 | break; |
728 | } | 752 | } |
diff --git a/drivers/target/iscsi/iscsi_target_util.h b/drivers/target/iscsi/iscsi_target_util.h index 4f8e01a47081..a4422659d049 100644 --- a/drivers/target/iscsi/iscsi_target_util.h +++ b/drivers/target/iscsi/iscsi_target_util.h | |||
@@ -29,7 +29,7 @@ extern void iscsit_remove_cmd_from_tx_queues(struct iscsi_cmd *, struct iscsi_co | |||
29 | extern bool iscsit_conn_all_queues_empty(struct iscsi_conn *); | 29 | extern bool iscsit_conn_all_queues_empty(struct iscsi_conn *); |
30 | extern void iscsit_free_queue_reqs_for_conn(struct iscsi_conn *); | 30 | extern void iscsit_free_queue_reqs_for_conn(struct iscsi_conn *); |
31 | extern void iscsit_release_cmd(struct iscsi_cmd *); | 31 | extern void iscsit_release_cmd(struct iscsi_cmd *); |
32 | extern void iscsit_free_cmd(struct iscsi_cmd *); | 32 | extern void iscsit_free_cmd(struct iscsi_cmd *, bool); |
33 | extern int iscsit_check_session_usage_count(struct iscsi_session *); | 33 | extern int iscsit_check_session_usage_count(struct iscsi_session *); |
34 | extern void iscsit_dec_session_usage_count(struct iscsi_session *); | 34 | extern void iscsit_dec_session_usage_count(struct iscsi_session *); |
35 | extern void iscsit_inc_session_usage_count(struct iscsi_session *); | 35 | extern void iscsit_inc_session_usage_count(struct iscsi_session *); |
diff --git a/drivers/target/target_core_file.c b/drivers/target/target_core_file.c index 1b1d544e927a..b11890d85120 100644 --- a/drivers/target/target_core_file.c +++ b/drivers/target/target_core_file.c | |||
@@ -153,6 +153,7 @@ static int fd_configure_device(struct se_device *dev) | |||
153 | struct request_queue *q = bdev_get_queue(inode->i_bdev); | 153 | struct request_queue *q = bdev_get_queue(inode->i_bdev); |
154 | unsigned long long dev_size; | 154 | unsigned long long dev_size; |
155 | 155 | ||
156 | fd_dev->fd_block_size = bdev_logical_block_size(inode->i_bdev); | ||
156 | /* | 157 | /* |
157 | * Determine the number of bytes from i_size_read() minus | 158 | * Determine the number of bytes from i_size_read() minus |
158 | * one (1) logical sector from underlying struct block_device | 159 | * one (1) logical sector from underlying struct block_device |
@@ -199,6 +200,7 @@ static int fd_configure_device(struct se_device *dev) | |||
199 | goto fail; | 200 | goto fail; |
200 | } | 201 | } |
201 | 202 | ||
203 | fd_dev->fd_block_size = FD_BLOCKSIZE; | ||
202 | /* | 204 | /* |
203 | * Limit UNMAP emulation to 8k Number of LBAs (NoLB) | 205 | * Limit UNMAP emulation to 8k Number of LBAs (NoLB) |
204 | */ | 206 | */ |
@@ -217,9 +219,7 @@ static int fd_configure_device(struct se_device *dev) | |||
217 | dev->dev_attrib.max_write_same_len = 0x1000; | 219 | dev->dev_attrib.max_write_same_len = 0x1000; |
218 | } | 220 | } |
219 | 221 | ||
220 | fd_dev->fd_block_size = dev->dev_attrib.hw_block_size; | 222 | dev->dev_attrib.hw_block_size = fd_dev->fd_block_size; |
221 | |||
222 | dev->dev_attrib.hw_block_size = FD_BLOCKSIZE; | ||
223 | dev->dev_attrib.hw_max_sectors = FD_MAX_SECTORS; | 223 | dev->dev_attrib.hw_max_sectors = FD_MAX_SECTORS; |
224 | dev->dev_attrib.hw_queue_depth = FD_MAX_DEVICE_QUEUE_DEPTH; | 224 | dev->dev_attrib.hw_queue_depth = FD_MAX_DEVICE_QUEUE_DEPTH; |
225 | 225 | ||
@@ -694,11 +694,12 @@ static sector_t fd_get_blocks(struct se_device *dev) | |||
694 | * to handle underlying block_device resize operations. | 694 | * to handle underlying block_device resize operations. |
695 | */ | 695 | */ |
696 | if (S_ISBLK(i->i_mode)) | 696 | if (S_ISBLK(i->i_mode)) |
697 | dev_size = (i_size_read(i) - fd_dev->fd_block_size); | 697 | dev_size = i_size_read(i); |
698 | else | 698 | else |
699 | dev_size = fd_dev->fd_dev_size; | 699 | dev_size = fd_dev->fd_dev_size; |
700 | 700 | ||
701 | return div_u64(dev_size, dev->dev_attrib.block_size); | 701 | return div_u64(dev_size - dev->dev_attrib.block_size, |
702 | dev->dev_attrib.block_size); | ||
702 | } | 703 | } |
703 | 704 | ||
704 | static struct sbc_ops fd_sbc_ops = { | 705 | static struct sbc_ops fd_sbc_ops = { |
diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c index 4a793362309d..21e315874a54 100644 --- a/drivers/target/target_core_transport.c +++ b/drivers/target/target_core_transport.c | |||
@@ -65,7 +65,7 @@ static void transport_complete_task_attr(struct se_cmd *cmd); | |||
65 | static void transport_handle_queue_full(struct se_cmd *cmd, | 65 | static void transport_handle_queue_full(struct se_cmd *cmd, |
66 | struct se_device *dev); | 66 | struct se_device *dev); |
67 | static int transport_generic_get_mem(struct se_cmd *cmd); | 67 | static int transport_generic_get_mem(struct se_cmd *cmd); |
68 | static void transport_put_cmd(struct se_cmd *cmd); | 68 | static int transport_put_cmd(struct se_cmd *cmd); |
69 | static void target_complete_ok_work(struct work_struct *work); | 69 | static void target_complete_ok_work(struct work_struct *work); |
70 | 70 | ||
71 | int init_se_kmem_caches(void) | 71 | int init_se_kmem_caches(void) |
@@ -221,6 +221,7 @@ struct se_session *transport_init_session(void) | |||
221 | INIT_LIST_HEAD(&se_sess->sess_list); | 221 | INIT_LIST_HEAD(&se_sess->sess_list); |
222 | INIT_LIST_HEAD(&se_sess->sess_acl_list); | 222 | INIT_LIST_HEAD(&se_sess->sess_acl_list); |
223 | INIT_LIST_HEAD(&se_sess->sess_cmd_list); | 223 | INIT_LIST_HEAD(&se_sess->sess_cmd_list); |
224 | INIT_LIST_HEAD(&se_sess->sess_wait_list); | ||
224 | spin_lock_init(&se_sess->sess_cmd_lock); | 225 | spin_lock_init(&se_sess->sess_cmd_lock); |
225 | kref_init(&se_sess->sess_kref); | 226 | kref_init(&se_sess->sess_kref); |
226 | 227 | ||
@@ -1943,7 +1944,7 @@ static inline void transport_free_pages(struct se_cmd *cmd) | |||
1943 | * This routine unconditionally frees a command, and reference counting | 1944 | * This routine unconditionally frees a command, and reference counting |
1944 | * or list removal must be done in the caller. | 1945 | * or list removal must be done in the caller. |
1945 | */ | 1946 | */ |
1946 | static void transport_release_cmd(struct se_cmd *cmd) | 1947 | static int transport_release_cmd(struct se_cmd *cmd) |
1947 | { | 1948 | { |
1948 | BUG_ON(!cmd->se_tfo); | 1949 | BUG_ON(!cmd->se_tfo); |
1949 | 1950 | ||
@@ -1955,11 +1956,11 @@ static void transport_release_cmd(struct se_cmd *cmd) | |||
1955 | * If this cmd has been setup with target_get_sess_cmd(), drop | 1956 | * If this cmd has been setup with target_get_sess_cmd(), drop |
1956 | * the kref and call ->release_cmd() in kref callback. | 1957 | * the kref and call ->release_cmd() in kref callback. |
1957 | */ | 1958 | */ |
1958 | if (cmd->check_release != 0) { | 1959 | if (cmd->check_release != 0) |
1959 | target_put_sess_cmd(cmd->se_sess, cmd); | 1960 | return target_put_sess_cmd(cmd->se_sess, cmd); |
1960 | return; | 1961 | |
1961 | } | ||
1962 | cmd->se_tfo->release_cmd(cmd); | 1962 | cmd->se_tfo->release_cmd(cmd); |
1963 | return 1; | ||
1963 | } | 1964 | } |
1964 | 1965 | ||
1965 | /** | 1966 | /** |
@@ -1968,7 +1969,7 @@ static void transport_release_cmd(struct se_cmd *cmd) | |||
1968 | * | 1969 | * |
1969 | * This routine releases our reference to the command and frees it if possible. | 1970 | * This routine releases our reference to the command and frees it if possible. |
1970 | */ | 1971 | */ |
1971 | static void transport_put_cmd(struct se_cmd *cmd) | 1972 | static int transport_put_cmd(struct se_cmd *cmd) |
1972 | { | 1973 | { |
1973 | unsigned long flags; | 1974 | unsigned long flags; |
1974 | 1975 | ||
@@ -1976,7 +1977,7 @@ static void transport_put_cmd(struct se_cmd *cmd) | |||
1976 | if (atomic_read(&cmd->t_fe_count) && | 1977 | if (atomic_read(&cmd->t_fe_count) && |
1977 | !atomic_dec_and_test(&cmd->t_fe_count)) { | 1978 | !atomic_dec_and_test(&cmd->t_fe_count)) { |
1978 | spin_unlock_irqrestore(&cmd->t_state_lock, flags); | 1979 | spin_unlock_irqrestore(&cmd->t_state_lock, flags); |
1979 | return; | 1980 | return 0; |
1980 | } | 1981 | } |
1981 | 1982 | ||
1982 | if (cmd->transport_state & CMD_T_DEV_ACTIVE) { | 1983 | if (cmd->transport_state & CMD_T_DEV_ACTIVE) { |
@@ -1986,8 +1987,7 @@ static void transport_put_cmd(struct se_cmd *cmd) | |||
1986 | spin_unlock_irqrestore(&cmd->t_state_lock, flags); | 1987 | spin_unlock_irqrestore(&cmd->t_state_lock, flags); |
1987 | 1988 | ||
1988 | transport_free_pages(cmd); | 1989 | transport_free_pages(cmd); |
1989 | transport_release_cmd(cmd); | 1990 | return transport_release_cmd(cmd); |
1990 | return; | ||
1991 | } | 1991 | } |
1992 | 1992 | ||
1993 | void *transport_kmap_data_sg(struct se_cmd *cmd) | 1993 | void *transport_kmap_data_sg(struct se_cmd *cmd) |
@@ -2152,13 +2152,15 @@ static void transport_write_pending_qf(struct se_cmd *cmd) | |||
2152 | } | 2152 | } |
2153 | } | 2153 | } |
2154 | 2154 | ||
2155 | void transport_generic_free_cmd(struct se_cmd *cmd, int wait_for_tasks) | 2155 | int transport_generic_free_cmd(struct se_cmd *cmd, int wait_for_tasks) |
2156 | { | 2156 | { |
2157 | int ret = 0; | ||
2158 | |||
2157 | if (!(cmd->se_cmd_flags & SCF_SE_LUN_CMD)) { | 2159 | if (!(cmd->se_cmd_flags & SCF_SE_LUN_CMD)) { |
2158 | if (wait_for_tasks && (cmd->se_cmd_flags & SCF_SCSI_TMR_CDB)) | 2160 | if (wait_for_tasks && (cmd->se_cmd_flags & SCF_SCSI_TMR_CDB)) |
2159 | transport_wait_for_tasks(cmd); | 2161 | transport_wait_for_tasks(cmd); |
2160 | 2162 | ||
2161 | transport_release_cmd(cmd); | 2163 | ret = transport_release_cmd(cmd); |
2162 | } else { | 2164 | } else { |
2163 | if (wait_for_tasks) | 2165 | if (wait_for_tasks) |
2164 | transport_wait_for_tasks(cmd); | 2166 | transport_wait_for_tasks(cmd); |
@@ -2166,8 +2168,9 @@ void transport_generic_free_cmd(struct se_cmd *cmd, int wait_for_tasks) | |||
2166 | if (cmd->se_lun) | 2168 | if (cmd->se_lun) |
2167 | transport_lun_remove_cmd(cmd); | 2169 | transport_lun_remove_cmd(cmd); |
2168 | 2170 | ||
2169 | transport_put_cmd(cmd); | 2171 | ret = transport_put_cmd(cmd); |
2170 | } | 2172 | } |
2173 | return ret; | ||
2171 | } | 2174 | } |
2172 | EXPORT_SYMBOL(transport_generic_free_cmd); | 2175 | EXPORT_SYMBOL(transport_generic_free_cmd); |
2173 | 2176 | ||
@@ -2250,11 +2253,14 @@ void target_sess_cmd_list_set_waiting(struct se_session *se_sess) | |||
2250 | unsigned long flags; | 2253 | unsigned long flags; |
2251 | 2254 | ||
2252 | spin_lock_irqsave(&se_sess->sess_cmd_lock, flags); | 2255 | spin_lock_irqsave(&se_sess->sess_cmd_lock, flags); |
2253 | 2256 | if (se_sess->sess_tearing_down) { | |
2254 | WARN_ON(se_sess->sess_tearing_down); | 2257 | spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags); |
2258 | return; | ||
2259 | } | ||
2255 | se_sess->sess_tearing_down = 1; | 2260 | se_sess->sess_tearing_down = 1; |
2261 | list_splice_init(&se_sess->sess_cmd_list, &se_sess->sess_wait_list); | ||
2256 | 2262 | ||
2257 | list_for_each_entry(se_cmd, &se_sess->sess_cmd_list, se_cmd_list) | 2263 | list_for_each_entry(se_cmd, &se_sess->sess_wait_list, se_cmd_list) |
2258 | se_cmd->cmd_wait_set = 1; | 2264 | se_cmd->cmd_wait_set = 1; |
2259 | 2265 | ||
2260 | spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags); | 2266 | spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags); |
@@ -2263,44 +2269,32 @@ EXPORT_SYMBOL(target_sess_cmd_list_set_waiting); | |||
2263 | 2269 | ||
2264 | /* target_wait_for_sess_cmds - Wait for outstanding descriptors | 2270 | /* target_wait_for_sess_cmds - Wait for outstanding descriptors |
2265 | * @se_sess: session to wait for active I/O | 2271 | * @se_sess: session to wait for active I/O |
2266 | * @wait_for_tasks: Make extra transport_wait_for_tasks call | ||
2267 | */ | 2272 | */ |
2268 | void target_wait_for_sess_cmds( | 2273 | void target_wait_for_sess_cmds(struct se_session *se_sess) |
2269 | struct se_session *se_sess, | ||
2270 | int wait_for_tasks) | ||
2271 | { | 2274 | { |
2272 | struct se_cmd *se_cmd, *tmp_cmd; | 2275 | struct se_cmd *se_cmd, *tmp_cmd; |
2273 | bool rc = false; | 2276 | unsigned long flags; |
2274 | 2277 | ||
2275 | list_for_each_entry_safe(se_cmd, tmp_cmd, | 2278 | list_for_each_entry_safe(se_cmd, tmp_cmd, |
2276 | &se_sess->sess_cmd_list, se_cmd_list) { | 2279 | &se_sess->sess_wait_list, se_cmd_list) { |
2277 | list_del(&se_cmd->se_cmd_list); | 2280 | list_del(&se_cmd->se_cmd_list); |
2278 | 2281 | ||
2279 | pr_debug("Waiting for se_cmd: %p t_state: %d, fabric state:" | 2282 | pr_debug("Waiting for se_cmd: %p t_state: %d, fabric state:" |
2280 | " %d\n", se_cmd, se_cmd->t_state, | 2283 | " %d\n", se_cmd, se_cmd->t_state, |
2281 | se_cmd->se_tfo->get_cmd_state(se_cmd)); | 2284 | se_cmd->se_tfo->get_cmd_state(se_cmd)); |
2282 | 2285 | ||
2283 | if (wait_for_tasks) { | 2286 | wait_for_completion(&se_cmd->cmd_wait_comp); |
2284 | pr_debug("Calling transport_wait_for_tasks se_cmd: %p t_state: %d," | 2287 | pr_debug("After cmd_wait_comp: se_cmd: %p t_state: %d" |
2285 | " fabric state: %d\n", se_cmd, se_cmd->t_state, | 2288 | " fabric state: %d\n", se_cmd, se_cmd->t_state, |
2286 | se_cmd->se_tfo->get_cmd_state(se_cmd)); | 2289 | se_cmd->se_tfo->get_cmd_state(se_cmd)); |
2287 | |||
2288 | rc = transport_wait_for_tasks(se_cmd); | ||
2289 | |||
2290 | pr_debug("After transport_wait_for_tasks se_cmd: %p t_state: %d," | ||
2291 | " fabric state: %d\n", se_cmd, se_cmd->t_state, | ||
2292 | se_cmd->se_tfo->get_cmd_state(se_cmd)); | ||
2293 | } | ||
2294 | |||
2295 | if (!rc) { | ||
2296 | wait_for_completion(&se_cmd->cmd_wait_comp); | ||
2297 | pr_debug("After cmd_wait_comp: se_cmd: %p t_state: %d" | ||
2298 | " fabric state: %d\n", se_cmd, se_cmd->t_state, | ||
2299 | se_cmd->se_tfo->get_cmd_state(se_cmd)); | ||
2300 | } | ||
2301 | 2290 | ||
2302 | se_cmd->se_tfo->release_cmd(se_cmd); | 2291 | se_cmd->se_tfo->release_cmd(se_cmd); |
2303 | } | 2292 | } |
2293 | |||
2294 | spin_lock_irqsave(&se_sess->sess_cmd_lock, flags); | ||
2295 | WARN_ON(!list_empty(&se_sess->sess_cmd_list)); | ||
2296 | spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags); | ||
2297 | |||
2304 | } | 2298 | } |
2305 | EXPORT_SYMBOL(target_wait_for_sess_cmds); | 2299 | EXPORT_SYMBOL(target_wait_for_sess_cmds); |
2306 | 2300 | ||
diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c index 30d4f7a783cd..f0b9f6b52b32 100644 --- a/drivers/tty/serial/omap-serial.c +++ b/drivers/tty/serial/omap-serial.c | |||
@@ -202,26 +202,6 @@ static int serial_omap_get_context_loss_count(struct uart_omap_port *up) | |||
202 | return pdata->get_context_loss_count(up->dev); | 202 | return pdata->get_context_loss_count(up->dev); |
203 | } | 203 | } |
204 | 204 | ||
205 | static void serial_omap_set_forceidle(struct uart_omap_port *up) | ||
206 | { | ||
207 | struct omap_uart_port_info *pdata = up->dev->platform_data; | ||
208 | |||
209 | if (!pdata || !pdata->set_forceidle) | ||
210 | return; | ||
211 | |||
212 | pdata->set_forceidle(up->dev); | ||
213 | } | ||
214 | |||
215 | static void serial_omap_set_noidle(struct uart_omap_port *up) | ||
216 | { | ||
217 | struct omap_uart_port_info *pdata = up->dev->platform_data; | ||
218 | |||
219 | if (!pdata || !pdata->set_noidle) | ||
220 | return; | ||
221 | |||
222 | pdata->set_noidle(up->dev); | ||
223 | } | ||
224 | |||
225 | static void serial_omap_enable_wakeup(struct uart_omap_port *up, bool enable) | 205 | static void serial_omap_enable_wakeup(struct uart_omap_port *up, bool enable) |
226 | { | 206 | { |
227 | struct omap_uart_port_info *pdata = up->dev->platform_data; | 207 | struct omap_uart_port_info *pdata = up->dev->platform_data; |
@@ -298,8 +278,6 @@ static void serial_omap_stop_tx(struct uart_port *port) | |||
298 | serial_out(up, UART_IER, up->ier); | 278 | serial_out(up, UART_IER, up->ier); |
299 | } | 279 | } |
300 | 280 | ||
301 | serial_omap_set_forceidle(up); | ||
302 | |||
303 | pm_runtime_mark_last_busy(up->dev); | 281 | pm_runtime_mark_last_busy(up->dev); |
304 | pm_runtime_put_autosuspend(up->dev); | 282 | pm_runtime_put_autosuspend(up->dev); |
305 | } | 283 | } |
@@ -364,7 +342,6 @@ static void serial_omap_start_tx(struct uart_port *port) | |||
364 | 342 | ||
365 | pm_runtime_get_sync(up->dev); | 343 | pm_runtime_get_sync(up->dev); |
366 | serial_omap_enable_ier_thri(up); | 344 | serial_omap_enable_ier_thri(up); |
367 | serial_omap_set_noidle(up); | ||
368 | pm_runtime_mark_last_busy(up->dev); | 345 | pm_runtime_mark_last_busy(up->dev); |
369 | pm_runtime_put_autosuspend(up->dev); | 346 | pm_runtime_put_autosuspend(up->dev); |
370 | } | 347 | } |
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig index d71d60f94fc1..2e937bdace6f 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig | |||
@@ -2199,7 +2199,7 @@ config FB_XILINX | |||
2199 | 2199 | ||
2200 | config FB_GOLDFISH | 2200 | config FB_GOLDFISH |
2201 | tristate "Goldfish Framebuffer" | 2201 | tristate "Goldfish Framebuffer" |
2202 | depends on FB | 2202 | depends on FB && HAS_DMA |
2203 | select FB_CFB_FILLRECT | 2203 | select FB_CFB_FILLRECT |
2204 | select FB_CFB_COPYAREA | 2204 | select FB_CFB_COPYAREA |
2205 | select FB_CFB_IMAGEBLIT | 2205 | select FB_CFB_IMAGEBLIT |
@@ -2453,6 +2453,23 @@ config FB_HYPERV | |||
2453 | help | 2453 | help |
2454 | This framebuffer driver supports Microsoft Hyper-V Synthetic Video. | 2454 | This framebuffer driver supports Microsoft Hyper-V Synthetic Video. |
2455 | 2455 | ||
2456 | config FB_SIMPLE | ||
2457 | bool "Simple framebuffer support" | ||
2458 | depends on (FB = y) && OF | ||
2459 | select FB_CFB_FILLRECT | ||
2460 | select FB_CFB_COPYAREA | ||
2461 | select FB_CFB_IMAGEBLIT | ||
2462 | help | ||
2463 | Say Y if you want support for a simple frame-buffer. | ||
2464 | |||
2465 | This driver assumes that the display hardware has been initialized | ||
2466 | before the kernel boots, and the kernel will simply render to the | ||
2467 | pre-allocated frame buffer surface. | ||
2468 | |||
2469 | Configuration re: surface address, size, and format must be provided | ||
2470 | through device tree, or potentially plain old platform data in the | ||
2471 | future. | ||
2472 | |||
2456 | source "drivers/video/omap/Kconfig" | 2473 | source "drivers/video/omap/Kconfig" |
2457 | source "drivers/video/omap2/Kconfig" | 2474 | source "drivers/video/omap2/Kconfig" |
2458 | source "drivers/video/exynos/Kconfig" | 2475 | source "drivers/video/exynos/Kconfig" |
diff --git a/drivers/video/Makefile b/drivers/video/Makefile index 7234e4a959e8..e8bae8dd4804 100644 --- a/drivers/video/Makefile +++ b/drivers/video/Makefile | |||
@@ -166,6 +166,7 @@ obj-$(CONFIG_FB_MX3) += mx3fb.o | |||
166 | obj-$(CONFIG_FB_DA8XX) += da8xx-fb.o | 166 | obj-$(CONFIG_FB_DA8XX) += da8xx-fb.o |
167 | obj-$(CONFIG_FB_MXS) += mxsfb.o | 167 | obj-$(CONFIG_FB_MXS) += mxsfb.o |
168 | obj-$(CONFIG_FB_SSD1307) += ssd1307fb.o | 168 | obj-$(CONFIG_FB_SSD1307) += ssd1307fb.o |
169 | obj-$(CONFIG_FB_SIMPLE) += simplefb.o | ||
169 | 170 | ||
170 | # the test framebuffer is last | 171 | # the test framebuffer is last |
171 | obj-$(CONFIG_FB_VIRTUAL) += vfb.o | 172 | obj-$(CONFIG_FB_VIRTUAL) += vfb.o |
diff --git a/drivers/video/atmel_lcdfb.c b/drivers/video/atmel_lcdfb.c index 540909de6247..effdb373b8db 100644 --- a/drivers/video/atmel_lcdfb.c +++ b/drivers/video/atmel_lcdfb.c | |||
@@ -223,8 +223,14 @@ static void init_backlight(struct atmel_lcdfb_info *sinfo) | |||
223 | 223 | ||
224 | static void exit_backlight(struct atmel_lcdfb_info *sinfo) | 224 | static void exit_backlight(struct atmel_lcdfb_info *sinfo) |
225 | { | 225 | { |
226 | if (sinfo->backlight) | 226 | if (!sinfo->backlight) |
227 | backlight_device_unregister(sinfo->backlight); | 227 | return; |
228 | |||
229 | if (sinfo->backlight->ops) { | ||
230 | sinfo->backlight->props.power = FB_BLANK_POWERDOWN; | ||
231 | sinfo->backlight->ops->update_status(sinfo->backlight); | ||
232 | } | ||
233 | backlight_device_unregister(sinfo->backlight); | ||
228 | } | 234 | } |
229 | 235 | ||
230 | #else | 236 | #else |
@@ -461,8 +467,11 @@ static int atmel_lcdfb_check_var(struct fb_var_screeninfo *var, | |||
461 | if (info->fix.smem_len) { | 467 | if (info->fix.smem_len) { |
462 | unsigned int smem_len = (var->xres_virtual * var->yres_virtual | 468 | unsigned int smem_len = (var->xres_virtual * var->yres_virtual |
463 | * ((var->bits_per_pixel + 7) / 8)); | 469 | * ((var->bits_per_pixel + 7) / 8)); |
464 | if (smem_len > info->fix.smem_len) | 470 | if (smem_len > info->fix.smem_len) { |
471 | dev_err(dev, "Frame buffer is too small (%u) for screen size (need at least %u)\n", | ||
472 | info->fix.smem_len, smem_len); | ||
465 | return -EINVAL; | 473 | return -EINVAL; |
474 | } | ||
466 | } | 475 | } |
467 | 476 | ||
468 | /* Saturate vertical and horizontal timings at maximum values */ | 477 | /* Saturate vertical and horizontal timings at maximum values */ |
diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c index 60cc6fee6548..c9c2252e3719 100644 --- a/drivers/video/omap2/dss/core.c +++ b/drivers/video/omap2/dss/core.c | |||
@@ -53,6 +53,8 @@ static char *def_disp_name; | |||
53 | module_param_named(def_disp, def_disp_name, charp, 0); | 53 | module_param_named(def_disp, def_disp_name, charp, 0); |
54 | MODULE_PARM_DESC(def_disp, "default display name"); | 54 | MODULE_PARM_DESC(def_disp, "default display name"); |
55 | 55 | ||
56 | static bool dss_initialized; | ||
57 | |||
56 | const char *omapdss_get_default_display_name(void) | 58 | const char *omapdss_get_default_display_name(void) |
57 | { | 59 | { |
58 | return core.default_display_name; | 60 | return core.default_display_name; |
@@ -66,6 +68,12 @@ enum omapdss_version omapdss_get_version(void) | |||
66 | } | 68 | } |
67 | EXPORT_SYMBOL(omapdss_get_version); | 69 | EXPORT_SYMBOL(omapdss_get_version); |
68 | 70 | ||
71 | bool omapdss_is_initialized(void) | ||
72 | { | ||
73 | return dss_initialized; | ||
74 | } | ||
75 | EXPORT_SYMBOL(omapdss_is_initialized); | ||
76 | |||
69 | struct platform_device *dss_get_core_pdev(void) | 77 | struct platform_device *dss_get_core_pdev(void) |
70 | { | 78 | { |
71 | return core.pdev; | 79 | return core.pdev; |
@@ -603,6 +611,8 @@ static int __init omap_dss_init(void) | |||
603 | return r; | 611 | return r; |
604 | } | 612 | } |
605 | 613 | ||
614 | dss_initialized = true; | ||
615 | |||
606 | return 0; | 616 | return 0; |
607 | } | 617 | } |
608 | 618 | ||
@@ -633,7 +643,15 @@ static int __init omap_dss_init(void) | |||
633 | 643 | ||
634 | static int __init omap_dss_init2(void) | 644 | static int __init omap_dss_init2(void) |
635 | { | 645 | { |
636 | return omap_dss_register_drivers(); | 646 | int r; |
647 | |||
648 | r = omap_dss_register_drivers(); | ||
649 | if (r) | ||
650 | return r; | ||
651 | |||
652 | dss_initialized = true; | ||
653 | |||
654 | return 0; | ||
637 | } | 655 | } |
638 | 656 | ||
639 | core_initcall(omap_dss_init); | 657 | core_initcall(omap_dss_init); |
diff --git a/drivers/video/omap2/omapfb/omapfb-main.c b/drivers/video/omap2/omapfb/omapfb-main.c index c84bb8a4d0c4..856917b33616 100644 --- a/drivers/video/omap2/omapfb/omapfb-main.c +++ b/drivers/video/omap2/omapfb/omapfb-main.c | |||
@@ -2416,6 +2416,9 @@ static int omapfb_probe(struct platform_device *pdev) | |||
2416 | 2416 | ||
2417 | DBG("omapfb_probe\n"); | 2417 | DBG("omapfb_probe\n"); |
2418 | 2418 | ||
2419 | if (omapdss_is_initialized() == false) | ||
2420 | return -EPROBE_DEFER; | ||
2421 | |||
2419 | if (pdev->num_resources != 0) { | 2422 | if (pdev->num_resources != 0) { |
2420 | dev_err(&pdev->dev, "probed for an unknown device\n"); | 2423 | dev_err(&pdev->dev, "probed for an unknown device\n"); |
2421 | r = -ENODEV; | 2424 | r = -ENODEV; |
diff --git a/drivers/video/ps3fb.c b/drivers/video/ps3fb.c index d9f08c653d62..dbfe2c18a434 100644 --- a/drivers/video/ps3fb.c +++ b/drivers/video/ps3fb.c | |||
@@ -710,7 +710,7 @@ static int ps3fb_mmap(struct fb_info *info, struct vm_area_struct *vma) | |||
710 | r = vm_iomap_memory(vma, info->fix.smem_start, info->fix.smem_len); | 710 | r = vm_iomap_memory(vma, info->fix.smem_start, info->fix.smem_len); |
711 | 711 | ||
712 | dev_dbg(info->device, "ps3fb: mmap framebuffer P(%lx)->V(%lx)\n", | 712 | dev_dbg(info->device, "ps3fb: mmap framebuffer P(%lx)->V(%lx)\n", |
713 | info->fix.smem_start + vma->vm_pgoff << PAGE_SHIFT, | 713 | info->fix.smem_start + (vma->vm_pgoff << PAGE_SHIFT), |
714 | vma->vm_start); | 714 | vma->vm_start); |
715 | 715 | ||
716 | return r; | 716 | return r; |
diff --git a/drivers/video/simplefb.c b/drivers/video/simplefb.c new file mode 100644 index 000000000000..e2e9e3e61b72 --- /dev/null +++ b/drivers/video/simplefb.c | |||
@@ -0,0 +1,234 @@ | |||
1 | /* | ||
2 | * Simplest possible simple frame-buffer driver, as a platform device | ||
3 | * | ||
4 | * Copyright (c) 2013, Stephen Warren | ||
5 | * | ||
6 | * Based on q40fb.c, which was: | ||
7 | * Copyright (C) 2001 Richard Zidlicky <rz@linux-m68k.org> | ||
8 | * | ||
9 | * Also based on offb.c, which was: | ||
10 | * Copyright (C) 1997 Geert Uytterhoeven | ||
11 | * Copyright (C) 1996 Paul Mackerras | ||
12 | * | ||
13 | * This program is free software; you can redistribute it and/or modify it | ||
14 | * under the terms and conditions of the GNU General Public License, | ||
15 | * version 2, as published by the Free Software Foundation. | ||
16 | * | ||
17 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
18 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
19 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
20 | * more details. | ||
21 | */ | ||
22 | |||
23 | #include <linux/errno.h> | ||
24 | #include <linux/fb.h> | ||
25 | #include <linux/io.h> | ||
26 | #include <linux/module.h> | ||
27 | #include <linux/platform_device.h> | ||
28 | |||
29 | static struct fb_fix_screeninfo simplefb_fix = { | ||
30 | .id = "simple", | ||
31 | .type = FB_TYPE_PACKED_PIXELS, | ||
32 | .visual = FB_VISUAL_TRUECOLOR, | ||
33 | .accel = FB_ACCEL_NONE, | ||
34 | }; | ||
35 | |||
36 | static struct fb_var_screeninfo simplefb_var = { | ||
37 | .height = -1, | ||
38 | .width = -1, | ||
39 | .activate = FB_ACTIVATE_NOW, | ||
40 | .vmode = FB_VMODE_NONINTERLACED, | ||
41 | }; | ||
42 | |||
43 | static int simplefb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, | ||
44 | u_int transp, struct fb_info *info) | ||
45 | { | ||
46 | u32 *pal = info->pseudo_palette; | ||
47 | u32 cr = red >> (16 - info->var.red.length); | ||
48 | u32 cg = green >> (16 - info->var.green.length); | ||
49 | u32 cb = blue >> (16 - info->var.blue.length); | ||
50 | u32 value; | ||
51 | |||
52 | if (regno >= 16) | ||
53 | return -EINVAL; | ||
54 | |||
55 | value = (cr << info->var.red.offset) | | ||
56 | (cg << info->var.green.offset) | | ||
57 | (cb << info->var.blue.offset); | ||
58 | if (info->var.transp.length > 0) { | ||
59 | u32 mask = (1 << info->var.transp.length) - 1; | ||
60 | mask <<= info->var.transp.offset; | ||
61 | value |= mask; | ||
62 | } | ||
63 | pal[regno] = value; | ||
64 | |||
65 | return 0; | ||
66 | } | ||
67 | |||
68 | static struct fb_ops simplefb_ops = { | ||
69 | .owner = THIS_MODULE, | ||
70 | .fb_setcolreg = simplefb_setcolreg, | ||
71 | .fb_fillrect = cfb_fillrect, | ||
72 | .fb_copyarea = cfb_copyarea, | ||
73 | .fb_imageblit = cfb_imageblit, | ||
74 | }; | ||
75 | |||
76 | struct simplefb_format { | ||
77 | const char *name; | ||
78 | u32 bits_per_pixel; | ||
79 | struct fb_bitfield red; | ||
80 | struct fb_bitfield green; | ||
81 | struct fb_bitfield blue; | ||
82 | struct fb_bitfield transp; | ||
83 | }; | ||
84 | |||
85 | static struct simplefb_format simplefb_formats[] = { | ||
86 | { "r5g6b5", 16, {11, 5}, {5, 6}, {0, 5}, {0, 0} }, | ||
87 | }; | ||
88 | |||
89 | struct simplefb_params { | ||
90 | u32 width; | ||
91 | u32 height; | ||
92 | u32 stride; | ||
93 | struct simplefb_format *format; | ||
94 | }; | ||
95 | |||
96 | static int simplefb_parse_dt(struct platform_device *pdev, | ||
97 | struct simplefb_params *params) | ||
98 | { | ||
99 | struct device_node *np = pdev->dev.of_node; | ||
100 | int ret; | ||
101 | const char *format; | ||
102 | int i; | ||
103 | |||
104 | ret = of_property_read_u32(np, "width", ¶ms->width); | ||
105 | if (ret) { | ||
106 | dev_err(&pdev->dev, "Can't parse width property\n"); | ||
107 | return ret; | ||
108 | } | ||
109 | |||
110 | ret = of_property_read_u32(np, "height", ¶ms->height); | ||
111 | if (ret) { | ||
112 | dev_err(&pdev->dev, "Can't parse height property\n"); | ||
113 | return ret; | ||
114 | } | ||
115 | |||
116 | ret = of_property_read_u32(np, "stride", ¶ms->stride); | ||
117 | if (ret) { | ||
118 | dev_err(&pdev->dev, "Can't parse stride property\n"); | ||
119 | return ret; | ||
120 | } | ||
121 | |||
122 | ret = of_property_read_string(np, "format", &format); | ||
123 | if (ret) { | ||
124 | dev_err(&pdev->dev, "Can't parse format property\n"); | ||
125 | return ret; | ||
126 | } | ||
127 | params->format = NULL; | ||
128 | for (i = 0; i < ARRAY_SIZE(simplefb_formats); i++) { | ||
129 | if (strcmp(format, simplefb_formats[i].name)) | ||
130 | continue; | ||
131 | params->format = &simplefb_formats[i]; | ||
132 | break; | ||
133 | } | ||
134 | if (!params->format) { | ||
135 | dev_err(&pdev->dev, "Invalid format value\n"); | ||
136 | return -EINVAL; | ||
137 | } | ||
138 | |||
139 | return 0; | ||
140 | } | ||
141 | |||
142 | static int simplefb_probe(struct platform_device *pdev) | ||
143 | { | ||
144 | int ret; | ||
145 | struct simplefb_params params; | ||
146 | struct fb_info *info; | ||
147 | struct resource *mem; | ||
148 | |||
149 | if (fb_get_options("simplefb", NULL)) | ||
150 | return -ENODEV; | ||
151 | |||
152 | ret = simplefb_parse_dt(pdev, ¶ms); | ||
153 | if (ret) | ||
154 | return ret; | ||
155 | |||
156 | mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
157 | if (!mem) { | ||
158 | dev_err(&pdev->dev, "No memory resource\n"); | ||
159 | return -EINVAL; | ||
160 | } | ||
161 | |||
162 | info = framebuffer_alloc(sizeof(u32) * 16, &pdev->dev); | ||
163 | if (!info) | ||
164 | return -ENOMEM; | ||
165 | platform_set_drvdata(pdev, info); | ||
166 | |||
167 | info->fix = simplefb_fix; | ||
168 | info->fix.smem_start = mem->start; | ||
169 | info->fix.smem_len = resource_size(mem); | ||
170 | info->fix.line_length = params.stride; | ||
171 | |||
172 | info->var = simplefb_var; | ||
173 | info->var.xres = params.width; | ||
174 | info->var.yres = params.height; | ||
175 | info->var.xres_virtual = params.width; | ||
176 | info->var.yres_virtual = params.height; | ||
177 | info->var.bits_per_pixel = params.format->bits_per_pixel; | ||
178 | info->var.red = params.format->red; | ||
179 | info->var.green = params.format->green; | ||
180 | info->var.blue = params.format->blue; | ||
181 | info->var.transp = params.format->transp; | ||
182 | |||
183 | info->fbops = &simplefb_ops; | ||
184 | info->flags = FBINFO_DEFAULT; | ||
185 | info->screen_base = devm_ioremap(&pdev->dev, info->fix.smem_start, | ||
186 | info->fix.smem_len); | ||
187 | if (!info->screen_base) { | ||
188 | framebuffer_release(info); | ||
189 | return -ENODEV; | ||
190 | } | ||
191 | info->pseudo_palette = (void *)(info + 1); | ||
192 | |||
193 | ret = register_framebuffer(info); | ||
194 | if (ret < 0) { | ||
195 | dev_err(&pdev->dev, "Unable to register simplefb: %d\n", ret); | ||
196 | framebuffer_release(info); | ||
197 | return ret; | ||
198 | } | ||
199 | |||
200 | dev_info(&pdev->dev, "fb%d: simplefb registered!\n", info->node); | ||
201 | |||
202 | return 0; | ||
203 | } | ||
204 | |||
205 | static int simplefb_remove(struct platform_device *pdev) | ||
206 | { | ||
207 | struct fb_info *info = platform_get_drvdata(pdev); | ||
208 | |||
209 | unregister_framebuffer(info); | ||
210 | framebuffer_release(info); | ||
211 | |||
212 | return 0; | ||
213 | } | ||
214 | |||
215 | static const struct of_device_id simplefb_of_match[] = { | ||
216 | { .compatible = "simple-framebuffer", }, | ||
217 | { }, | ||
218 | }; | ||
219 | MODULE_DEVICE_TABLE(of, simplefb_of_match); | ||
220 | |||
221 | static struct platform_driver simplefb_driver = { | ||
222 | .driver = { | ||
223 | .name = "simple-framebuffer", | ||
224 | .owner = THIS_MODULE, | ||
225 | .of_match_table = simplefb_of_match, | ||
226 | }, | ||
227 | .probe = simplefb_probe, | ||
228 | .remove = simplefb_remove, | ||
229 | }; | ||
230 | module_platform_driver(simplefb_driver); | ||
231 | |||
232 | MODULE_AUTHOR("Stephen Warren <swarren@wwwdotorg.org>"); | ||
233 | MODULE_DESCRIPTION("Simple framebuffer driver"); | ||
234 | MODULE_LICENSE("GPL v2"); | ||
diff --git a/drivers/xen/tmem.c b/drivers/xen/tmem.c index 18e8bd8fa947..cc072c66c766 100644 --- a/drivers/xen/tmem.c +++ b/drivers/xen/tmem.c | |||
@@ -41,6 +41,8 @@ module_param(selfballooning, bool, S_IRUGO); | |||
41 | #ifdef CONFIG_FRONTSWAP | 41 | #ifdef CONFIG_FRONTSWAP |
42 | static bool frontswap __read_mostly = true; | 42 | static bool frontswap __read_mostly = true; |
43 | module_param(frontswap, bool, S_IRUGO); | 43 | module_param(frontswap, bool, S_IRUGO); |
44 | #else /* CONFIG_FRONTSWAP */ | ||
45 | #define frontswap (0) | ||
44 | #endif /* CONFIG_FRONTSWAP */ | 46 | #endif /* CONFIG_FRONTSWAP */ |
45 | 47 | ||
46 | #ifdef CONFIG_XEN_SELFBALLOONING | 48 | #ifdef CONFIG_XEN_SELFBALLOONING |
diff --git a/drivers/xen/xen-pciback/pci_stub.c b/drivers/xen/xen-pciback/pci_stub.c index a2278ba7fb27..4e8ba38aa0c9 100644 --- a/drivers/xen/xen-pciback/pci_stub.c +++ b/drivers/xen/xen-pciback/pci_stub.c | |||
@@ -106,7 +106,7 @@ static void pcistub_device_release(struct kref *kref) | |||
106 | else | 106 | else |
107 | pci_restore_state(dev); | 107 | pci_restore_state(dev); |
108 | 108 | ||
109 | if (pci_find_capability(dev, PCI_CAP_ID_MSIX)) { | 109 | if (dev->msix_cap) { |
110 | struct physdev_pci_device ppdev = { | 110 | struct physdev_pci_device ppdev = { |
111 | .seg = pci_domain_nr(dev->bus), | 111 | .seg = pci_domain_nr(dev->bus), |
112 | .bus = dev->bus->number, | 112 | .bus = dev->bus->number, |
@@ -371,7 +371,7 @@ static int pcistub_init_device(struct pci_dev *dev) | |||
371 | if (err) | 371 | if (err) |
372 | goto config_release; | 372 | goto config_release; |
373 | 373 | ||
374 | if (pci_find_capability(dev, PCI_CAP_ID_MSIX)) { | 374 | if (dev->msix_cap) { |
375 | struct physdev_pci_device ppdev = { | 375 | struct physdev_pci_device ppdev = { |
376 | .seg = pci_domain_nr(dev->bus), | 376 | .seg = pci_domain_nr(dev->bus), |
377 | .bus = dev->bus->number, | 377 | .bus = dev->bus->number, |
diff --git a/drivers/xen/xenbus/xenbus_client.c b/drivers/xen/xenbus/xenbus_client.c index 61786be9138b..ec097d6f964d 100644 --- a/drivers/xen/xenbus/xenbus_client.c +++ b/drivers/xen/xenbus/xenbus_client.c | |||
@@ -534,7 +534,7 @@ static int xenbus_map_ring_valloc_hvm(struct xenbus_device *dev, | |||
534 | 534 | ||
535 | err = xenbus_map_ring(dev, gnt_ref, &node->handle, addr); | 535 | err = xenbus_map_ring(dev, gnt_ref, &node->handle, addr); |
536 | if (err) | 536 | if (err) |
537 | goto out_err; | 537 | goto out_err_free_ballooned_pages; |
538 | 538 | ||
539 | spin_lock(&xenbus_valloc_lock); | 539 | spin_lock(&xenbus_valloc_lock); |
540 | list_add(&node->next, &xenbus_valloc_pages); | 540 | list_add(&node->next, &xenbus_valloc_pages); |
@@ -543,8 +543,9 @@ static int xenbus_map_ring_valloc_hvm(struct xenbus_device *dev, | |||
543 | *vaddr = addr; | 543 | *vaddr = addr; |
544 | return 0; | 544 | return 0; |
545 | 545 | ||
546 | out_err: | 546 | out_err_free_ballooned_pages: |
547 | free_xenballooned_pages(1, &node->page); | 547 | free_xenballooned_pages(1, &node->page); |
548 | out_err: | ||
548 | kfree(node); | 549 | kfree(node); |
549 | return err; | 550 | return err; |
550 | } | 551 | } |
diff --git a/drivers/xen/xenbus/xenbus_comms.h b/drivers/xen/xenbus/xenbus_comms.h index c8abd3b8a6c4..e74f9c1fbd80 100644 --- a/drivers/xen/xenbus/xenbus_comms.h +++ b/drivers/xen/xenbus/xenbus_comms.h | |||
@@ -45,6 +45,7 @@ int xb_wait_for_data_to_read(void); | |||
45 | int xs_input_avail(void); | 45 | int xs_input_avail(void); |
46 | extern struct xenstore_domain_interface *xen_store_interface; | 46 | extern struct xenstore_domain_interface *xen_store_interface; |
47 | extern int xen_store_evtchn; | 47 | extern int xen_store_evtchn; |
48 | extern enum xenstore_init xen_store_domain_type; | ||
48 | 49 | ||
49 | extern const struct file_operations xen_xenbus_fops; | 50 | extern const struct file_operations xen_xenbus_fops; |
50 | 51 | ||
diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c index 3325884c693f..56cfaaa9d006 100644 --- a/drivers/xen/xenbus/xenbus_probe.c +++ b/drivers/xen/xenbus/xenbus_probe.c | |||
@@ -69,6 +69,9 @@ EXPORT_SYMBOL_GPL(xen_store_evtchn); | |||
69 | struct xenstore_domain_interface *xen_store_interface; | 69 | struct xenstore_domain_interface *xen_store_interface; |
70 | EXPORT_SYMBOL_GPL(xen_store_interface); | 70 | EXPORT_SYMBOL_GPL(xen_store_interface); |
71 | 71 | ||
72 | enum xenstore_init xen_store_domain_type; | ||
73 | EXPORT_SYMBOL_GPL(xen_store_domain_type); | ||
74 | |||
72 | static unsigned long xen_store_mfn; | 75 | static unsigned long xen_store_mfn; |
73 | 76 | ||
74 | static BLOCKING_NOTIFIER_HEAD(xenstore_chain); | 77 | static BLOCKING_NOTIFIER_HEAD(xenstore_chain); |
@@ -719,17 +722,11 @@ static int __init xenstored_local_init(void) | |||
719 | return err; | 722 | return err; |
720 | } | 723 | } |
721 | 724 | ||
722 | enum xenstore_init { | ||
723 | UNKNOWN, | ||
724 | PV, | ||
725 | HVM, | ||
726 | LOCAL, | ||
727 | }; | ||
728 | static int __init xenbus_init(void) | 725 | static int __init xenbus_init(void) |
729 | { | 726 | { |
730 | int err = 0; | 727 | int err = 0; |
731 | enum xenstore_init usage = UNKNOWN; | ||
732 | uint64_t v = 0; | 728 | uint64_t v = 0; |
729 | xen_store_domain_type = XS_UNKNOWN; | ||
733 | 730 | ||
734 | if (!xen_domain()) | 731 | if (!xen_domain()) |
735 | return -ENODEV; | 732 | return -ENODEV; |
@@ -737,29 +734,29 @@ static int __init xenbus_init(void) | |||
737 | xenbus_ring_ops_init(); | 734 | xenbus_ring_ops_init(); |
738 | 735 | ||
739 | if (xen_pv_domain()) | 736 | if (xen_pv_domain()) |
740 | usage = PV; | 737 | xen_store_domain_type = XS_PV; |
741 | if (xen_hvm_domain()) | 738 | if (xen_hvm_domain()) |
742 | usage = HVM; | 739 | xen_store_domain_type = XS_HVM; |
743 | if (xen_hvm_domain() && xen_initial_domain()) | 740 | if (xen_hvm_domain() && xen_initial_domain()) |
744 | usage = LOCAL; | 741 | xen_store_domain_type = XS_LOCAL; |
745 | if (xen_pv_domain() && !xen_start_info->store_evtchn) | 742 | if (xen_pv_domain() && !xen_start_info->store_evtchn) |
746 | usage = LOCAL; | 743 | xen_store_domain_type = XS_LOCAL; |
747 | if (xen_pv_domain() && xen_start_info->store_evtchn) | 744 | if (xen_pv_domain() && xen_start_info->store_evtchn) |
748 | xenstored_ready = 1; | 745 | xenstored_ready = 1; |
749 | 746 | ||
750 | switch (usage) { | 747 | switch (xen_store_domain_type) { |
751 | case LOCAL: | 748 | case XS_LOCAL: |
752 | err = xenstored_local_init(); | 749 | err = xenstored_local_init(); |
753 | if (err) | 750 | if (err) |
754 | goto out_error; | 751 | goto out_error; |
755 | xen_store_interface = mfn_to_virt(xen_store_mfn); | 752 | xen_store_interface = mfn_to_virt(xen_store_mfn); |
756 | break; | 753 | break; |
757 | case PV: | 754 | case XS_PV: |
758 | xen_store_evtchn = xen_start_info->store_evtchn; | 755 | xen_store_evtchn = xen_start_info->store_evtchn; |
759 | xen_store_mfn = xen_start_info->store_mfn; | 756 | xen_store_mfn = xen_start_info->store_mfn; |
760 | xen_store_interface = mfn_to_virt(xen_store_mfn); | 757 | xen_store_interface = mfn_to_virt(xen_store_mfn); |
761 | break; | 758 | break; |
762 | case HVM: | 759 | case XS_HVM: |
763 | err = hvm_get_parameter(HVM_PARAM_STORE_EVTCHN, &v); | 760 | err = hvm_get_parameter(HVM_PARAM_STORE_EVTCHN, &v); |
764 | if (err) | 761 | if (err) |
765 | goto out_error; | 762 | goto out_error; |
diff --git a/drivers/xen/xenbus/xenbus_probe.h b/drivers/xen/xenbus/xenbus_probe.h index bb4f92ed8730..146f857a36f8 100644 --- a/drivers/xen/xenbus/xenbus_probe.h +++ b/drivers/xen/xenbus/xenbus_probe.h | |||
@@ -47,6 +47,13 @@ struct xen_bus_type { | |||
47 | struct bus_type bus; | 47 | struct bus_type bus; |
48 | }; | 48 | }; |
49 | 49 | ||
50 | enum xenstore_init { | ||
51 | XS_UNKNOWN, | ||
52 | XS_PV, | ||
53 | XS_HVM, | ||
54 | XS_LOCAL, | ||
55 | }; | ||
56 | |||
50 | extern struct device_attribute xenbus_dev_attrs[]; | 57 | extern struct device_attribute xenbus_dev_attrs[]; |
51 | 58 | ||
52 | extern int xenbus_match(struct device *_dev, struct device_driver *_drv); | 59 | extern int xenbus_match(struct device *_dev, struct device_driver *_drv); |
diff --git a/drivers/xen/xenbus/xenbus_probe_frontend.c b/drivers/xen/xenbus/xenbus_probe_frontend.c index 3159a37d966d..a7e25073de19 100644 --- a/drivers/xen/xenbus/xenbus_probe_frontend.c +++ b/drivers/xen/xenbus/xenbus_probe_frontend.c | |||
@@ -29,6 +29,8 @@ | |||
29 | #include "xenbus_probe.h" | 29 | #include "xenbus_probe.h" |
30 | 30 | ||
31 | 31 | ||
32 | static struct workqueue_struct *xenbus_frontend_wq; | ||
33 | |||
32 | /* device/<type>/<id> => <type>-<id> */ | 34 | /* device/<type>/<id> => <type>-<id> */ |
33 | static int frontend_bus_id(char bus_id[XEN_BUS_ID_SIZE], const char *nodename) | 35 | static int frontend_bus_id(char bus_id[XEN_BUS_ID_SIZE], const char *nodename) |
34 | { | 36 | { |
@@ -89,9 +91,40 @@ static void backend_changed(struct xenbus_watch *watch, | |||
89 | xenbus_otherend_changed(watch, vec, len, 1); | 91 | xenbus_otherend_changed(watch, vec, len, 1); |
90 | } | 92 | } |
91 | 93 | ||
94 | static void xenbus_frontend_delayed_resume(struct work_struct *w) | ||
95 | { | ||
96 | struct xenbus_device *xdev = container_of(w, struct xenbus_device, work); | ||
97 | |||
98 | xenbus_dev_resume(&xdev->dev); | ||
99 | } | ||
100 | |||
101 | static int xenbus_frontend_dev_resume(struct device *dev) | ||
102 | { | ||
103 | /* | ||
104 | * If xenstored is running in this domain, we cannot access the backend | ||
105 | * state at the moment, so we need to defer xenbus_dev_resume | ||
106 | */ | ||
107 | if (xen_store_domain_type == XS_LOCAL) { | ||
108 | struct xenbus_device *xdev = to_xenbus_device(dev); | ||
109 | |||
110 | if (!xenbus_frontend_wq) { | ||
111 | pr_err("%s: no workqueue to process delayed resume\n", | ||
112 | xdev->nodename); | ||
113 | return -EFAULT; | ||
114 | } | ||
115 | |||
116 | INIT_WORK(&xdev->work, xenbus_frontend_delayed_resume); | ||
117 | queue_work(xenbus_frontend_wq, &xdev->work); | ||
118 | |||
119 | return 0; | ||
120 | } | ||
121 | |||
122 | return xenbus_dev_resume(dev); | ||
123 | } | ||
124 | |||
92 | static const struct dev_pm_ops xenbus_pm_ops = { | 125 | static const struct dev_pm_ops xenbus_pm_ops = { |
93 | .suspend = xenbus_dev_suspend, | 126 | .suspend = xenbus_dev_suspend, |
94 | .resume = xenbus_dev_resume, | 127 | .resume = xenbus_frontend_dev_resume, |
95 | .freeze = xenbus_dev_suspend, | 128 | .freeze = xenbus_dev_suspend, |
96 | .thaw = xenbus_dev_cancel, | 129 | .thaw = xenbus_dev_cancel, |
97 | .restore = xenbus_dev_resume, | 130 | .restore = xenbus_dev_resume, |
@@ -440,6 +473,8 @@ static int __init xenbus_probe_frontend_init(void) | |||
440 | 473 | ||
441 | register_xenstore_notifier(&xenstore_notifier); | 474 | register_xenstore_notifier(&xenstore_notifier); |
442 | 475 | ||
476 | xenbus_frontend_wq = create_workqueue("xenbus_frontend"); | ||
477 | |||
443 | return 0; | 478 | return 0; |
444 | } | 479 | } |
445 | subsys_initcall(xenbus_probe_frontend_init); | 480 | subsys_initcall(xenbus_probe_frontend_init); |
@@ -307,7 +307,9 @@ static void free_ioctx(struct kioctx *ctx) | |||
307 | kunmap_atomic(ring); | 307 | kunmap_atomic(ring); |
308 | 308 | ||
309 | while (atomic_read(&ctx->reqs_active) > 0) { | 309 | while (atomic_read(&ctx->reqs_active) > 0) { |
310 | wait_event(ctx->wait, head != ctx->tail); | 310 | wait_event(ctx->wait, |
311 | head != ctx->tail || | ||
312 | atomic_read(&ctx->reqs_active) <= 0); | ||
311 | 313 | ||
312 | avail = (head <= ctx->tail ? ctx->tail : ctx->nr_events) - head; | 314 | avail = (head <= ctx->tail ? ctx->tail : ctx->nr_events) - head; |
313 | 315 | ||
@@ -1299,8 +1301,7 @@ SYSCALL_DEFINE3(io_cancel, aio_context_t, ctx_id, struct iocb __user *, iocb, | |||
1299 | * < min_nr if the timeout specified by timeout has elapsed | 1301 | * < min_nr if the timeout specified by timeout has elapsed |
1300 | * before sufficient events are available, where timeout == NULL | 1302 | * before sufficient events are available, where timeout == NULL |
1301 | * specifies an infinite timeout. Note that the timeout pointed to by | 1303 | * specifies an infinite timeout. Note that the timeout pointed to by |
1302 | * timeout is relative and will be updated if not NULL and the | 1304 | * timeout is relative. Will fail with -ENOSYS if not implemented. |
1303 | * operation blocks. Will fail with -ENOSYS if not implemented. | ||
1304 | */ | 1305 | */ |
1305 | SYSCALL_DEFINE5(io_getevents, aio_context_t, ctx_id, | 1306 | SYSCALL_DEFINE5(io_getevents, aio_context_t, ctx_id, |
1306 | long, min_nr, | 1307 | long, min_nr, |
diff --git a/fs/befs/linuxvfs.c b/fs/befs/linuxvfs.c index 8615ee89ab55..f95dddced968 100644 --- a/fs/befs/linuxvfs.c +++ b/fs/befs/linuxvfs.c | |||
@@ -265,8 +265,8 @@ befs_readdir(struct file *filp, void *dirent, filldir_t filldir) | |||
265 | result = filldir(dirent, keybuf, keysize, filp->f_pos, | 265 | result = filldir(dirent, keybuf, keysize, filp->f_pos, |
266 | (ino_t) value, d_type); | 266 | (ino_t) value, d_type); |
267 | } | 267 | } |
268 | 268 | if (!result) | |
269 | filp->f_pos++; | 269 | filp->f_pos++; |
270 | 270 | ||
271 | befs_debug(sb, "<--- befs_readdir() filp->f_pos %Ld", filp->f_pos); | 271 | befs_debug(sb, "<--- befs_readdir() filp->f_pos %Ld", filp->f_pos); |
272 | 272 | ||
diff --git a/fs/cifs/cifs_dfs_ref.c b/fs/cifs/cifs_dfs_ref.c index 8e33ec65847b..58df174deb10 100644 --- a/fs/cifs/cifs_dfs_ref.c +++ b/fs/cifs/cifs_dfs_ref.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/slab.h> | 18 | #include <linux/slab.h> |
19 | #include <linux/vfs.h> | 19 | #include <linux/vfs.h> |
20 | #include <linux/fs.h> | 20 | #include <linux/fs.h> |
21 | #include <linux/inet.h> | ||
21 | #include "cifsglob.h" | 22 | #include "cifsglob.h" |
22 | #include "cifsproto.h" | 23 | #include "cifsproto.h" |
23 | #include "cifsfs.h" | 24 | #include "cifsfs.h" |
@@ -48,58 +49,74 @@ void cifs_dfs_release_automount_timer(void) | |||
48 | } | 49 | } |
49 | 50 | ||
50 | /** | 51 | /** |
51 | * cifs_get_share_name - extracts share name from UNC | 52 | * cifs_build_devname - build a devicename from a UNC and optional prepath |
52 | * @node_name: pointer to UNC string | 53 | * @nodename: pointer to UNC string |
54 | * @prepath: pointer to prefixpath (or NULL if there isn't one) | ||
53 | * | 55 | * |
54 | * Extracts sharename form full UNC. | 56 | * Build a new cifs devicename after chasing a DFS referral. Allocate a buffer |
55 | * i.e. strips from UNC trailing path that is not part of share | 57 | * big enough to hold the final thing. Copy the UNC from the nodename, and |
56 | * name and fixup missing '\' in the beginning of DFS node refferal | 58 | * concatenate the prepath onto the end of it if there is one. |
57 | * if necessary. | 59 | * |
58 | * Returns pointer to share name on success or ERR_PTR on error. | 60 | * Returns pointer to the built string, or a ERR_PTR. Caller is responsible |
59 | * Caller is responsible for freeing returned string. | 61 | * for freeing the returned string. |
60 | */ | 62 | */ |
61 | static char *cifs_get_share_name(const char *node_name) | 63 | static char * |
64 | cifs_build_devname(char *nodename, const char *prepath) | ||
62 | { | 65 | { |
63 | int len; | 66 | size_t pplen; |
64 | char *UNC; | 67 | size_t unclen; |
65 | char *pSep; | 68 | char *dev; |
66 | 69 | char *pos; | |
67 | len = strlen(node_name); | 70 | |
68 | UNC = kmalloc(len+2 /*for term null and additional \ if it's missed */, | 71 | /* skip over any preceding delimiters */ |
69 | GFP_KERNEL); | 72 | nodename += strspn(nodename, "\\"); |
70 | if (!UNC) | 73 | if (!*nodename) |
71 | return ERR_PTR(-ENOMEM); | 74 | return ERR_PTR(-EINVAL); |
72 | 75 | ||
73 | /* get share name and server name */ | 76 | /* get length of UNC and set pos to last char */ |
74 | if (node_name[1] != '\\') { | 77 | unclen = strlen(nodename); |
75 | UNC[0] = '\\'; | 78 | pos = nodename + unclen - 1; |
76 | strncpy(UNC+1, node_name, len); | ||
77 | len++; | ||
78 | UNC[len] = 0; | ||
79 | } else { | ||
80 | strncpy(UNC, node_name, len); | ||
81 | UNC[len] = 0; | ||
82 | } | ||
83 | 79 | ||
84 | /* find server name end */ | 80 | /* trim off any trailing delimiters */ |
85 | pSep = memchr(UNC+2, '\\', len-2); | 81 | while (*pos == '\\') { |
86 | if (!pSep) { | 82 | --pos; |
87 | cifs_dbg(VFS, "%s: no server name end in node name: %s\n", | 83 | --unclen; |
88 | __func__, node_name); | ||
89 | kfree(UNC); | ||
90 | return ERR_PTR(-EINVAL); | ||
91 | } | 84 | } |
92 | 85 | ||
93 | /* find sharename end */ | 86 | /* allocate a buffer: |
94 | pSep++; | 87 | * +2 for preceding "//" |
95 | pSep = memchr(UNC+(pSep-UNC), '\\', len-(pSep-UNC)); | 88 | * +1 for delimiter between UNC and prepath |
96 | if (pSep) { | 89 | * +1 for trailing NULL |
97 | /* trim path up to sharename end | 90 | */ |
98 | * now we have share name in UNC */ | 91 | pplen = prepath ? strlen(prepath) : 0; |
99 | *pSep = 0; | 92 | dev = kmalloc(2 + unclen + 1 + pplen + 1, GFP_KERNEL); |
93 | if (!dev) | ||
94 | return ERR_PTR(-ENOMEM); | ||
95 | |||
96 | pos = dev; | ||
97 | /* add the initial "//" */ | ||
98 | *pos = '/'; | ||
99 | ++pos; | ||
100 | *pos = '/'; | ||
101 | ++pos; | ||
102 | |||
103 | /* copy in the UNC portion from referral */ | ||
104 | memcpy(pos, nodename, unclen); | ||
105 | pos += unclen; | ||
106 | |||
107 | /* copy the prefixpath remainder (if there is one) */ | ||
108 | if (pplen) { | ||
109 | *pos = '/'; | ||
110 | ++pos; | ||
111 | memcpy(pos, prepath, pplen); | ||
112 | pos += pplen; | ||
100 | } | 113 | } |
101 | 114 | ||
102 | return UNC; | 115 | /* NULL terminator */ |
116 | *pos = '\0'; | ||
117 | |||
118 | convert_delimiter(dev, '/'); | ||
119 | return dev; | ||
103 | } | 120 | } |
104 | 121 | ||
105 | 122 | ||
@@ -123,6 +140,7 @@ char *cifs_compose_mount_options(const char *sb_mountdata, | |||
123 | { | 140 | { |
124 | int rc; | 141 | int rc; |
125 | char *mountdata = NULL; | 142 | char *mountdata = NULL; |
143 | const char *prepath = NULL; | ||
126 | int md_len; | 144 | int md_len; |
127 | char *tkn_e; | 145 | char *tkn_e; |
128 | char *srvIP = NULL; | 146 | char *srvIP = NULL; |
@@ -132,7 +150,10 @@ char *cifs_compose_mount_options(const char *sb_mountdata, | |||
132 | if (sb_mountdata == NULL) | 150 | if (sb_mountdata == NULL) |
133 | return ERR_PTR(-EINVAL); | 151 | return ERR_PTR(-EINVAL); |
134 | 152 | ||
135 | *devname = cifs_get_share_name(ref->node_name); | 153 | if (strlen(fullpath) - ref->path_consumed) |
154 | prepath = fullpath + ref->path_consumed; | ||
155 | |||
156 | *devname = cifs_build_devname(ref->node_name, prepath); | ||
136 | if (IS_ERR(*devname)) { | 157 | if (IS_ERR(*devname)) { |
137 | rc = PTR_ERR(*devname); | 158 | rc = PTR_ERR(*devname); |
138 | *devname = NULL; | 159 | *devname = NULL; |
@@ -146,12 +167,14 @@ char *cifs_compose_mount_options(const char *sb_mountdata, | |||
146 | goto compose_mount_options_err; | 167 | goto compose_mount_options_err; |
147 | } | 168 | } |
148 | 169 | ||
149 | /* md_len = strlen(...) + 12 for 'sep+prefixpath=' | 170 | /* |
150 | * assuming that we have 'unc=' and 'ip=' in | 171 | * In most cases, we'll be building a shorter string than the original, |
151 | * the original sb_mountdata | 172 | * but we do have to assume that the address in the ip= option may be |
173 | * much longer than the original. Add the max length of an address | ||
174 | * string to the length of the original string to allow for worst case. | ||
152 | */ | 175 | */ |
153 | md_len = strlen(sb_mountdata) + rc + strlen(ref->node_name) + 12; | 176 | md_len = strlen(sb_mountdata) + INET6_ADDRSTRLEN; |
154 | mountdata = kzalloc(md_len+1, GFP_KERNEL); | 177 | mountdata = kzalloc(md_len + 1, GFP_KERNEL); |
155 | if (mountdata == NULL) { | 178 | if (mountdata == NULL) { |
156 | rc = -ENOMEM; | 179 | rc = -ENOMEM; |
157 | goto compose_mount_options_err; | 180 | goto compose_mount_options_err; |
@@ -195,26 +218,6 @@ char *cifs_compose_mount_options(const char *sb_mountdata, | |||
195 | strncat(mountdata, &sep, 1); | 218 | strncat(mountdata, &sep, 1); |
196 | strcat(mountdata, "ip="); | 219 | strcat(mountdata, "ip="); |
197 | strcat(mountdata, srvIP); | 220 | strcat(mountdata, srvIP); |
198 | strncat(mountdata, &sep, 1); | ||
199 | strcat(mountdata, "unc="); | ||
200 | strcat(mountdata, *devname); | ||
201 | |||
202 | /* find & copy prefixpath */ | ||
203 | tkn_e = strchr(ref->node_name + 2, '\\'); | ||
204 | if (tkn_e == NULL) { | ||
205 | /* invalid unc, missing share name*/ | ||
206 | rc = -EINVAL; | ||
207 | goto compose_mount_options_err; | ||
208 | } | ||
209 | |||
210 | tkn_e = strchr(tkn_e + 1, '\\'); | ||
211 | if (tkn_e || (strlen(fullpath) - ref->path_consumed)) { | ||
212 | strncat(mountdata, &sep, 1); | ||
213 | strcat(mountdata, "prefixpath="); | ||
214 | if (tkn_e) | ||
215 | strcat(mountdata, tkn_e + 1); | ||
216 | strcat(mountdata, fullpath + ref->path_consumed); | ||
217 | } | ||
218 | 221 | ||
219 | /*cifs_dbg(FYI, "%s: parent mountdata: %s\n", __func__, sb_mountdata);*/ | 222 | /*cifs_dbg(FYI, "%s: parent mountdata: %s\n", __func__, sb_mountdata);*/ |
220 | /*cifs_dbg(FYI, "%s: submount mountdata: %s\n", __func__, mountdata );*/ | 223 | /*cifs_dbg(FYI, "%s: submount mountdata: %s\n", __func__, mountdata );*/ |
diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c index 72e4efee1389..3752b9f6d9e4 100644 --- a/fs/cifs/cifsfs.c +++ b/fs/cifs/cifsfs.c | |||
@@ -372,9 +372,6 @@ cifs_show_options(struct seq_file *s, struct dentry *root) | |||
372 | cifs_show_security(s, tcon->ses->server); | 372 | cifs_show_security(s, tcon->ses->server); |
373 | cifs_show_cache_flavor(s, cifs_sb); | 373 | cifs_show_cache_flavor(s, cifs_sb); |
374 | 374 | ||
375 | seq_printf(s, ",unc="); | ||
376 | seq_escape(s, tcon->treeName, " \t\n\\"); | ||
377 | |||
378 | if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER) | 375 | if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER) |
379 | seq_printf(s, ",multiuser"); | 376 | seq_printf(s, ",multiuser"); |
380 | else if (tcon->ses->user_name) | 377 | else if (tcon->ses->user_name) |
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index 99eeaa17ee00..5b97e56ddbca 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c | |||
@@ -1061,6 +1061,7 @@ static int cifs_parse_security_flavors(char *value, | |||
1061 | #endif | 1061 | #endif |
1062 | case Opt_sec_none: | 1062 | case Opt_sec_none: |
1063 | vol->nullauth = 1; | 1063 | vol->nullauth = 1; |
1064 | vol->secFlg |= CIFSSEC_MAY_NTLM; | ||
1064 | break; | 1065 | break; |
1065 | default: | 1066 | default: |
1066 | cifs_dbg(VFS, "bad security option: %s\n", value); | 1067 | cifs_dbg(VFS, "bad security option: %s\n", value); |
@@ -1257,14 +1258,18 @@ cifs_parse_mount_options(const char *mountdata, const char *devname, | |||
1257 | vol->backupuid_specified = false; /* no backup intent for a user */ | 1258 | vol->backupuid_specified = false; /* no backup intent for a user */ |
1258 | vol->backupgid_specified = false; /* no backup intent for a group */ | 1259 | vol->backupgid_specified = false; /* no backup intent for a group */ |
1259 | 1260 | ||
1260 | /* | 1261 | switch (cifs_parse_devname(devname, vol)) { |
1261 | * For now, we ignore -EINVAL errors under the assumption that the | 1262 | case 0: |
1262 | * unc= and prefixpath= options will be usable. | 1263 | break; |
1263 | */ | 1264 | case -ENOMEM: |
1264 | if (cifs_parse_devname(devname, vol) == -ENOMEM) { | 1265 | cifs_dbg(VFS, "Unable to allocate memory for devname.\n"); |
1265 | printk(KERN_ERR "CIFS: Unable to allocate memory to parse " | 1266 | goto cifs_parse_mount_err; |
1266 | "device string.\n"); | 1267 | case -EINVAL: |
1267 | goto out_nomem; | 1268 | cifs_dbg(VFS, "Malformed UNC in devname.\n"); |
1269 | goto cifs_parse_mount_err; | ||
1270 | default: | ||
1271 | cifs_dbg(VFS, "Unknown error parsing devname.\n"); | ||
1272 | goto cifs_parse_mount_err; | ||
1268 | } | 1273 | } |
1269 | 1274 | ||
1270 | while ((data = strsep(&options, separator)) != NULL) { | 1275 | while ((data = strsep(&options, separator)) != NULL) { |
@@ -1826,7 +1831,7 @@ cifs_parse_mount_options(const char *mountdata, const char *devname, | |||
1826 | } | 1831 | } |
1827 | #endif | 1832 | #endif |
1828 | if (!vol->UNC) { | 1833 | if (!vol->UNC) { |
1829 | cifs_dbg(VFS, "CIFS mount error: No usable UNC path provided in device string or in unc= option!\n"); | 1834 | cifs_dbg(VFS, "CIFS mount error: No usable UNC path provided in device string!\n"); |
1830 | goto cifs_parse_mount_err; | 1835 | goto cifs_parse_mount_err; |
1831 | } | 1836 | } |
1832 | 1837 | ||
diff --git a/fs/cifs/dns_resolve.c b/fs/cifs/dns_resolve.c index e7512e497611..7ede7306599f 100644 --- a/fs/cifs/dns_resolve.c +++ b/fs/cifs/dns_resolve.c | |||
@@ -34,7 +34,7 @@ | |||
34 | 34 | ||
35 | /** | 35 | /** |
36 | * dns_resolve_server_name_to_ip - Resolve UNC server name to ip address. | 36 | * dns_resolve_server_name_to_ip - Resolve UNC server name to ip address. |
37 | * @unc: UNC path specifying the server | 37 | * @unc: UNC path specifying the server (with '/' as delimiter) |
38 | * @ip_addr: Where to return the IP address. | 38 | * @ip_addr: Where to return the IP address. |
39 | * | 39 | * |
40 | * The IP address will be returned in string form, and the caller is | 40 | * The IP address will be returned in string form, and the caller is |
@@ -64,7 +64,7 @@ dns_resolve_server_name_to_ip(const char *unc, char **ip_addr) | |||
64 | hostname = unc + 2; | 64 | hostname = unc + 2; |
65 | 65 | ||
66 | /* Search for server name delimiter */ | 66 | /* Search for server name delimiter */ |
67 | sep = memchr(hostname, '\\', len); | 67 | sep = memchr(hostname, '/', len); |
68 | if (sep) | 68 | if (sep) |
69 | len = sep - hostname; | 69 | len = sep - hostname; |
70 | else | 70 | else |
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c index fc3025199cb3..20efd81266c6 100644 --- a/fs/cifs/inode.c +++ b/fs/cifs/inode.c | |||
@@ -171,7 +171,8 @@ cifs_fattr_to_inode(struct inode *inode, struct cifs_fattr *fattr) | |||
171 | 171 | ||
172 | if (fattr->cf_flags & CIFS_FATTR_DFS_REFERRAL) | 172 | if (fattr->cf_flags & CIFS_FATTR_DFS_REFERRAL) |
173 | inode->i_flags |= S_AUTOMOUNT; | 173 | inode->i_flags |= S_AUTOMOUNT; |
174 | cifs_set_ops(inode); | 174 | if (inode->i_state & I_NEW) |
175 | cifs_set_ops(inode); | ||
175 | } | 176 | } |
176 | 177 | ||
177 | void | 178 | void |
diff --git a/fs/efivarfs/file.c b/fs/efivarfs/file.c index bfb531564319..8dd524f32284 100644 --- a/fs/efivarfs/file.c +++ b/fs/efivarfs/file.c | |||
@@ -44,8 +44,11 @@ static ssize_t efivarfs_file_write(struct file *file, | |||
44 | 44 | ||
45 | bytes = efivar_entry_set_get_size(var, attributes, &datasize, | 45 | bytes = efivar_entry_set_get_size(var, attributes, &datasize, |
46 | data, &set); | 46 | data, &set); |
47 | if (!set && bytes) | 47 | if (!set && bytes) { |
48 | if (bytes == -ENOENT) | ||
49 | bytes = -EIO; | ||
48 | goto out; | 50 | goto out; |
51 | } | ||
49 | 52 | ||
50 | if (bytes == -ENOENT) { | 53 | if (bytes == -ENOENT) { |
51 | drop_nlink(inode); | 54 | drop_nlink(inode); |
@@ -76,7 +79,14 @@ static ssize_t efivarfs_file_read(struct file *file, char __user *userbuf, | |||
76 | int err; | 79 | int err; |
77 | 80 | ||
78 | err = efivar_entry_size(var, &datasize); | 81 | err = efivar_entry_size(var, &datasize); |
79 | if (err) | 82 | |
83 | /* | ||
84 | * efivarfs represents uncommitted variables with | ||
85 | * zero-length files. Reading them should return EOF. | ||
86 | */ | ||
87 | if (err == -ENOENT) | ||
88 | return 0; | ||
89 | else if (err) | ||
80 | return err; | 90 | return err; |
81 | 91 | ||
82 | data = kmalloc(datasize + sizeof(attributes), GFP_KERNEL); | 92 | data = kmalloc(datasize + sizeof(attributes), GFP_KERNEL); |
diff --git a/fs/fat/inode.c b/fs/fat/inode.c index dfce656ddb33..5d4513cb1b3c 100644 --- a/fs/fat/inode.c +++ b/fs/fat/inode.c | |||
@@ -1229,6 +1229,19 @@ static int fat_read_root(struct inode *inode) | |||
1229 | return 0; | 1229 | return 0; |
1230 | } | 1230 | } |
1231 | 1231 | ||
1232 | static unsigned long calc_fat_clusters(struct super_block *sb) | ||
1233 | { | ||
1234 | struct msdos_sb_info *sbi = MSDOS_SB(sb); | ||
1235 | |||
1236 | /* Divide first to avoid overflow */ | ||
1237 | if (sbi->fat_bits != 12) { | ||
1238 | unsigned long ent_per_sec = sb->s_blocksize * 8 / sbi->fat_bits; | ||
1239 | return ent_per_sec * sbi->fat_length; | ||
1240 | } | ||
1241 | |||
1242 | return sbi->fat_length * sb->s_blocksize * 8 / sbi->fat_bits; | ||
1243 | } | ||
1244 | |||
1232 | /* | 1245 | /* |
1233 | * Read the super block of an MS-DOS FS. | 1246 | * Read the super block of an MS-DOS FS. |
1234 | */ | 1247 | */ |
@@ -1434,7 +1447,7 @@ int fat_fill_super(struct super_block *sb, void *data, int silent, int isvfat, | |||
1434 | sbi->dirty = b->fat16.state & FAT_STATE_DIRTY; | 1447 | sbi->dirty = b->fat16.state & FAT_STATE_DIRTY; |
1435 | 1448 | ||
1436 | /* check that FAT table does not overflow */ | 1449 | /* check that FAT table does not overflow */ |
1437 | fat_clusters = sbi->fat_length * sb->s_blocksize * 8 / sbi->fat_bits; | 1450 | fat_clusters = calc_fat_clusters(sb); |
1438 | total_clusters = min(total_clusters, fat_clusters - FAT_START_ENT); | 1451 | total_clusters = min(total_clusters, fat_clusters - FAT_START_ENT); |
1439 | if (total_clusters > MAX_FAT(sb)) { | 1452 | if (total_clusters > MAX_FAT(sb)) { |
1440 | if (!silent) | 1453 | if (!silent) |
diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c index 254df56b847b..f3f783dc4f75 100644 --- a/fs/fuse/dir.c +++ b/fs/fuse/dir.c | |||
@@ -180,6 +180,8 @@ u64 fuse_get_attr_version(struct fuse_conn *fc) | |||
180 | static int fuse_dentry_revalidate(struct dentry *entry, unsigned int flags) | 180 | static int fuse_dentry_revalidate(struct dentry *entry, unsigned int flags) |
181 | { | 181 | { |
182 | struct inode *inode; | 182 | struct inode *inode; |
183 | struct dentry *parent; | ||
184 | struct fuse_conn *fc; | ||
183 | 185 | ||
184 | inode = ACCESS_ONCE(entry->d_inode); | 186 | inode = ACCESS_ONCE(entry->d_inode); |
185 | if (inode && is_bad_inode(inode)) | 187 | if (inode && is_bad_inode(inode)) |
@@ -187,10 +189,8 @@ static int fuse_dentry_revalidate(struct dentry *entry, unsigned int flags) | |||
187 | else if (fuse_dentry_time(entry) < get_jiffies_64()) { | 189 | else if (fuse_dentry_time(entry) < get_jiffies_64()) { |
188 | int err; | 190 | int err; |
189 | struct fuse_entry_out outarg; | 191 | struct fuse_entry_out outarg; |
190 | struct fuse_conn *fc; | ||
191 | struct fuse_req *req; | 192 | struct fuse_req *req; |
192 | struct fuse_forget_link *forget; | 193 | struct fuse_forget_link *forget; |
193 | struct dentry *parent; | ||
194 | u64 attr_version; | 194 | u64 attr_version; |
195 | 195 | ||
196 | /* For negative dentries, always do a fresh lookup */ | 196 | /* For negative dentries, always do a fresh lookup */ |
@@ -241,8 +241,14 @@ static int fuse_dentry_revalidate(struct dentry *entry, unsigned int flags) | |||
241 | entry_attr_timeout(&outarg), | 241 | entry_attr_timeout(&outarg), |
242 | attr_version); | 242 | attr_version); |
243 | fuse_change_entry_timeout(entry, &outarg); | 243 | fuse_change_entry_timeout(entry, &outarg); |
244 | } else if (inode) { | ||
245 | fc = get_fuse_conn(inode); | ||
246 | if (fc->readdirplus_auto) { | ||
247 | parent = dget_parent(entry); | ||
248 | fuse_advise_use_readdirplus(parent->d_inode); | ||
249 | dput(parent); | ||
250 | } | ||
244 | } | 251 | } |
245 | fuse_advise_use_readdirplus(inode); | ||
246 | return 1; | 252 | return 1; |
247 | } | 253 | } |
248 | 254 | ||
diff --git a/fs/fuse/file.c b/fs/fuse/file.c index d1c9b85b3f58..e570081f9f76 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/compat.h> | 16 | #include <linux/compat.h> |
17 | #include <linux/swap.h> | 17 | #include <linux/swap.h> |
18 | #include <linux/aio.h> | 18 | #include <linux/aio.h> |
19 | #include <linux/falloc.h> | ||
19 | 20 | ||
20 | static const struct file_operations fuse_direct_io_file_operations; | 21 | static const struct file_operations fuse_direct_io_file_operations; |
21 | 22 | ||
@@ -1278,7 +1279,10 @@ ssize_t fuse_direct_io(struct fuse_io_priv *io, const struct iovec *iov, | |||
1278 | 1279 | ||
1279 | iov_iter_init(&ii, iov, nr_segs, count, 0); | 1280 | iov_iter_init(&ii, iov, nr_segs, count, 0); |
1280 | 1281 | ||
1281 | req = fuse_get_req(fc, fuse_iter_npages(&ii)); | 1282 | if (io->async) |
1283 | req = fuse_get_req_for_background(fc, fuse_iter_npages(&ii)); | ||
1284 | else | ||
1285 | req = fuse_get_req(fc, fuse_iter_npages(&ii)); | ||
1282 | if (IS_ERR(req)) | 1286 | if (IS_ERR(req)) |
1283 | return PTR_ERR(req); | 1287 | return PTR_ERR(req); |
1284 | 1288 | ||
@@ -1314,7 +1318,11 @@ ssize_t fuse_direct_io(struct fuse_io_priv *io, const struct iovec *iov, | |||
1314 | break; | 1318 | break; |
1315 | if (count) { | 1319 | if (count) { |
1316 | fuse_put_request(fc, req); | 1320 | fuse_put_request(fc, req); |
1317 | req = fuse_get_req(fc, fuse_iter_npages(&ii)); | 1321 | if (io->async) |
1322 | req = fuse_get_req_for_background(fc, | ||
1323 | fuse_iter_npages(&ii)); | ||
1324 | else | ||
1325 | req = fuse_get_req(fc, fuse_iter_npages(&ii)); | ||
1318 | if (IS_ERR(req)) | 1326 | if (IS_ERR(req)) |
1319 | break; | 1327 | break; |
1320 | } | 1328 | } |
@@ -2365,6 +2373,11 @@ static void fuse_do_truncate(struct file *file) | |||
2365 | fuse_do_setattr(inode, &attr, file); | 2373 | fuse_do_setattr(inode, &attr, file); |
2366 | } | 2374 | } |
2367 | 2375 | ||
2376 | static inline loff_t fuse_round_up(loff_t off) | ||
2377 | { | ||
2378 | return round_up(off, FUSE_MAX_PAGES_PER_REQ << PAGE_SHIFT); | ||
2379 | } | ||
2380 | |||
2368 | static ssize_t | 2381 | static ssize_t |
2369 | fuse_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov, | 2382 | fuse_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov, |
2370 | loff_t offset, unsigned long nr_segs) | 2383 | loff_t offset, unsigned long nr_segs) |
@@ -2372,6 +2385,7 @@ fuse_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov, | |||
2372 | ssize_t ret = 0; | 2385 | ssize_t ret = 0; |
2373 | struct file *file = iocb->ki_filp; | 2386 | struct file *file = iocb->ki_filp; |
2374 | struct fuse_file *ff = file->private_data; | 2387 | struct fuse_file *ff = file->private_data; |
2388 | bool async_dio = ff->fc->async_dio; | ||
2375 | loff_t pos = 0; | 2389 | loff_t pos = 0; |
2376 | struct inode *inode; | 2390 | struct inode *inode; |
2377 | loff_t i_size; | 2391 | loff_t i_size; |
@@ -2383,10 +2397,10 @@ fuse_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov, | |||
2383 | i_size = i_size_read(inode); | 2397 | i_size = i_size_read(inode); |
2384 | 2398 | ||
2385 | /* optimization for short read */ | 2399 | /* optimization for short read */ |
2386 | if (rw != WRITE && offset + count > i_size) { | 2400 | if (async_dio && rw != WRITE && offset + count > i_size) { |
2387 | if (offset >= i_size) | 2401 | if (offset >= i_size) |
2388 | return 0; | 2402 | return 0; |
2389 | count = i_size - offset; | 2403 | count = min_t(loff_t, count, fuse_round_up(i_size - offset)); |
2390 | } | 2404 | } |
2391 | 2405 | ||
2392 | io = kmalloc(sizeof(struct fuse_io_priv), GFP_KERNEL); | 2406 | io = kmalloc(sizeof(struct fuse_io_priv), GFP_KERNEL); |
@@ -2404,7 +2418,7 @@ fuse_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov, | |||
2404 | * By default, we want to optimize all I/Os with async request | 2418 | * By default, we want to optimize all I/Os with async request |
2405 | * submission to the client filesystem if supported. | 2419 | * submission to the client filesystem if supported. |
2406 | */ | 2420 | */ |
2407 | io->async = ff->fc->async_dio; | 2421 | io->async = async_dio; |
2408 | io->iocb = iocb; | 2422 | io->iocb = iocb; |
2409 | 2423 | ||
2410 | /* | 2424 | /* |
@@ -2412,7 +2426,7 @@ fuse_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov, | |||
2412 | * to wait on real async I/O requests, so we must submit this request | 2426 | * to wait on real async I/O requests, so we must submit this request |
2413 | * synchronously. | 2427 | * synchronously. |
2414 | */ | 2428 | */ |
2415 | if (!is_sync_kiocb(iocb) && (offset + count > i_size)) | 2429 | if (!is_sync_kiocb(iocb) && (offset + count > i_size) && rw == WRITE) |
2416 | io->async = false; | 2430 | io->async = false; |
2417 | 2431 | ||
2418 | if (rw == WRITE) | 2432 | if (rw == WRITE) |
@@ -2424,7 +2438,7 @@ fuse_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov, | |||
2424 | fuse_aio_complete(io, ret < 0 ? ret : 0, -1); | 2438 | fuse_aio_complete(io, ret < 0 ? ret : 0, -1); |
2425 | 2439 | ||
2426 | /* we have a non-extending, async request, so return */ | 2440 | /* we have a non-extending, async request, so return */ |
2427 | if (ret > 0 && !is_sync_kiocb(iocb)) | 2441 | if (!is_sync_kiocb(iocb)) |
2428 | return -EIOCBQUEUED; | 2442 | return -EIOCBQUEUED; |
2429 | 2443 | ||
2430 | ret = wait_on_sync_kiocb(iocb); | 2444 | ret = wait_on_sync_kiocb(iocb); |
@@ -2446,6 +2460,7 @@ static long fuse_file_fallocate(struct file *file, int mode, loff_t offset, | |||
2446 | loff_t length) | 2460 | loff_t length) |
2447 | { | 2461 | { |
2448 | struct fuse_file *ff = file->private_data; | 2462 | struct fuse_file *ff = file->private_data; |
2463 | struct inode *inode = file->f_inode; | ||
2449 | struct fuse_conn *fc = ff->fc; | 2464 | struct fuse_conn *fc = ff->fc; |
2450 | struct fuse_req *req; | 2465 | struct fuse_req *req; |
2451 | struct fuse_fallocate_in inarg = { | 2466 | struct fuse_fallocate_in inarg = { |
@@ -2459,9 +2474,16 @@ static long fuse_file_fallocate(struct file *file, int mode, loff_t offset, | |||
2459 | if (fc->no_fallocate) | 2474 | if (fc->no_fallocate) |
2460 | return -EOPNOTSUPP; | 2475 | return -EOPNOTSUPP; |
2461 | 2476 | ||
2477 | if (mode & FALLOC_FL_PUNCH_HOLE) { | ||
2478 | mutex_lock(&inode->i_mutex); | ||
2479 | fuse_set_nowrite(inode); | ||
2480 | } | ||
2481 | |||
2462 | req = fuse_get_req_nopages(fc); | 2482 | req = fuse_get_req_nopages(fc); |
2463 | if (IS_ERR(req)) | 2483 | if (IS_ERR(req)) { |
2464 | return PTR_ERR(req); | 2484 | err = PTR_ERR(req); |
2485 | goto out; | ||
2486 | } | ||
2465 | 2487 | ||
2466 | req->in.h.opcode = FUSE_FALLOCATE; | 2488 | req->in.h.opcode = FUSE_FALLOCATE; |
2467 | req->in.h.nodeid = ff->nodeid; | 2489 | req->in.h.nodeid = ff->nodeid; |
@@ -2476,6 +2498,24 @@ static long fuse_file_fallocate(struct file *file, int mode, loff_t offset, | |||
2476 | } | 2498 | } |
2477 | fuse_put_request(fc, req); | 2499 | fuse_put_request(fc, req); |
2478 | 2500 | ||
2501 | if (err) | ||
2502 | goto out; | ||
2503 | |||
2504 | /* we could have extended the file */ | ||
2505 | if (!(mode & FALLOC_FL_KEEP_SIZE)) | ||
2506 | fuse_write_update_size(inode, offset + length); | ||
2507 | |||
2508 | if (mode & FALLOC_FL_PUNCH_HOLE) | ||
2509 | truncate_pagecache_range(inode, offset, offset + length - 1); | ||
2510 | |||
2511 | fuse_invalidate_attr(inode); | ||
2512 | |||
2513 | out: | ||
2514 | if (mode & FALLOC_FL_PUNCH_HOLE) { | ||
2515 | fuse_release_nowrite(inode); | ||
2516 | mutex_unlock(&inode->i_mutex); | ||
2517 | } | ||
2518 | |||
2479 | return err; | 2519 | return err; |
2480 | } | 2520 | } |
2481 | 2521 | ||
diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index 6201f81e4d3a..9a0cdde14a08 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c | |||
@@ -867,10 +867,11 @@ static void process_init_reply(struct fuse_conn *fc, struct fuse_req *req) | |||
867 | fc->dont_mask = 1; | 867 | fc->dont_mask = 1; |
868 | if (arg->flags & FUSE_AUTO_INVAL_DATA) | 868 | if (arg->flags & FUSE_AUTO_INVAL_DATA) |
869 | fc->auto_inval_data = 1; | 869 | fc->auto_inval_data = 1; |
870 | if (arg->flags & FUSE_DO_READDIRPLUS) | 870 | if (arg->flags & FUSE_DO_READDIRPLUS) { |
871 | fc->do_readdirplus = 1; | 871 | fc->do_readdirplus = 1; |
872 | if (arg->flags & FUSE_READDIRPLUS_AUTO) | 872 | if (arg->flags & FUSE_READDIRPLUS_AUTO) |
873 | fc->readdirplus_auto = 1; | 873 | fc->readdirplus_auto = 1; |
874 | } | ||
874 | if (arg->flags & FUSE_ASYNC_DIO) | 875 | if (arg->flags & FUSE_ASYNC_DIO) |
875 | fc->async_dio = 1; | 876 | fc->async_dio = 1; |
876 | } else { | 877 | } else { |
diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c index 1dc9a13ce6bb..93b5809c20bb 100644 --- a/fs/gfs2/bmap.c +++ b/fs/gfs2/bmap.c | |||
@@ -1286,17 +1286,26 @@ int gfs2_setattr_size(struct inode *inode, u64 newsize) | |||
1286 | if (ret) | 1286 | if (ret) |
1287 | return ret; | 1287 | return ret; |
1288 | 1288 | ||
1289 | ret = get_write_access(inode); | ||
1290 | if (ret) | ||
1291 | return ret; | ||
1292 | |||
1289 | inode_dio_wait(inode); | 1293 | inode_dio_wait(inode); |
1290 | 1294 | ||
1291 | ret = gfs2_rs_alloc(GFS2_I(inode)); | 1295 | ret = gfs2_rs_alloc(GFS2_I(inode)); |
1292 | if (ret) | 1296 | if (ret) |
1293 | return ret; | 1297 | goto out; |
1294 | 1298 | ||
1295 | oldsize = inode->i_size; | 1299 | oldsize = inode->i_size; |
1296 | if (newsize >= oldsize) | 1300 | if (newsize >= oldsize) { |
1297 | return do_grow(inode, newsize); | 1301 | ret = do_grow(inode, newsize); |
1302 | goto out; | ||
1303 | } | ||
1298 | 1304 | ||
1299 | return do_shrink(inode, oldsize, newsize); | 1305 | ret = do_shrink(inode, oldsize, newsize); |
1306 | out: | ||
1307 | put_write_access(inode); | ||
1308 | return ret; | ||
1300 | } | 1309 | } |
1301 | 1310 | ||
1302 | int gfs2_truncatei_resume(struct gfs2_inode *ip) | 1311 | int gfs2_truncatei_resume(struct gfs2_inode *ip) |
diff --git a/fs/gfs2/dir.c b/fs/gfs2/dir.c index c3e82bd23179..b631c9043460 100644 --- a/fs/gfs2/dir.c +++ b/fs/gfs2/dir.c | |||
@@ -354,22 +354,31 @@ static __be64 *gfs2_dir_get_hash_table(struct gfs2_inode *ip) | |||
354 | return ERR_PTR(-EIO); | 354 | return ERR_PTR(-EIO); |
355 | } | 355 | } |
356 | 356 | ||
357 | hc = kmalloc(hsize, GFP_NOFS); | 357 | hc = kmalloc(hsize, GFP_NOFS | __GFP_NOWARN); |
358 | ret = -ENOMEM; | 358 | if (hc == NULL) |
359 | hc = __vmalloc(hsize, GFP_NOFS, PAGE_KERNEL); | ||
360 | |||
359 | if (hc == NULL) | 361 | if (hc == NULL) |
360 | return ERR_PTR(-ENOMEM); | 362 | return ERR_PTR(-ENOMEM); |
361 | 363 | ||
362 | ret = gfs2_dir_read_data(ip, hc, hsize); | 364 | ret = gfs2_dir_read_data(ip, hc, hsize); |
363 | if (ret < 0) { | 365 | if (ret < 0) { |
364 | kfree(hc); | 366 | if (is_vmalloc_addr(hc)) |
367 | vfree(hc); | ||
368 | else | ||
369 | kfree(hc); | ||
365 | return ERR_PTR(ret); | 370 | return ERR_PTR(ret); |
366 | } | 371 | } |
367 | 372 | ||
368 | spin_lock(&inode->i_lock); | 373 | spin_lock(&inode->i_lock); |
369 | if (ip->i_hash_cache) | 374 | if (ip->i_hash_cache) { |
370 | kfree(hc); | 375 | if (is_vmalloc_addr(hc)) |
371 | else | 376 | vfree(hc); |
377 | else | ||
378 | kfree(hc); | ||
379 | } else { | ||
372 | ip->i_hash_cache = hc; | 380 | ip->i_hash_cache = hc; |
381 | } | ||
373 | spin_unlock(&inode->i_lock); | 382 | spin_unlock(&inode->i_lock); |
374 | 383 | ||
375 | return ip->i_hash_cache; | 384 | return ip->i_hash_cache; |
@@ -385,7 +394,10 @@ void gfs2_dir_hash_inval(struct gfs2_inode *ip) | |||
385 | { | 394 | { |
386 | __be64 *hc = ip->i_hash_cache; | 395 | __be64 *hc = ip->i_hash_cache; |
387 | ip->i_hash_cache = NULL; | 396 | ip->i_hash_cache = NULL; |
388 | kfree(hc); | 397 | if (is_vmalloc_addr(hc)) |
398 | vfree(hc); | ||
399 | else | ||
400 | kfree(hc); | ||
389 | } | 401 | } |
390 | 402 | ||
391 | static inline int gfs2_dirent_sentinel(const struct gfs2_dirent *dent) | 403 | static inline int gfs2_dirent_sentinel(const struct gfs2_dirent *dent) |
@@ -1113,7 +1125,10 @@ static int dir_double_exhash(struct gfs2_inode *dip) | |||
1113 | if (IS_ERR(hc)) | 1125 | if (IS_ERR(hc)) |
1114 | return PTR_ERR(hc); | 1126 | return PTR_ERR(hc); |
1115 | 1127 | ||
1116 | h = hc2 = kmalloc(hsize_bytes * 2, GFP_NOFS); | 1128 | h = hc2 = kmalloc(hsize_bytes * 2, GFP_NOFS | __GFP_NOWARN); |
1129 | if (hc2 == NULL) | ||
1130 | hc2 = __vmalloc(hsize_bytes * 2, GFP_NOFS, PAGE_KERNEL); | ||
1131 | |||
1117 | if (!hc2) | 1132 | if (!hc2) |
1118 | return -ENOMEM; | 1133 | return -ENOMEM; |
1119 | 1134 | ||
@@ -1145,7 +1160,10 @@ fail: | |||
1145 | gfs2_dinode_out(dip, dibh->b_data); | 1160 | gfs2_dinode_out(dip, dibh->b_data); |
1146 | brelse(dibh); | 1161 | brelse(dibh); |
1147 | out_kfree: | 1162 | out_kfree: |
1148 | kfree(hc2); | 1163 | if (is_vmalloc_addr(hc2)) |
1164 | vfree(hc2); | ||
1165 | else | ||
1166 | kfree(hc2); | ||
1149 | return error; | 1167 | return error; |
1150 | } | 1168 | } |
1151 | 1169 | ||
@@ -1846,6 +1864,8 @@ static int leaf_dealloc(struct gfs2_inode *dip, u32 index, u32 len, | |||
1846 | memset(&rlist, 0, sizeof(struct gfs2_rgrp_list)); | 1864 | memset(&rlist, 0, sizeof(struct gfs2_rgrp_list)); |
1847 | 1865 | ||
1848 | ht = kzalloc(size, GFP_NOFS); | 1866 | ht = kzalloc(size, GFP_NOFS); |
1867 | if (ht == NULL) | ||
1868 | ht = vzalloc(size); | ||
1849 | if (!ht) | 1869 | if (!ht) |
1850 | return -ENOMEM; | 1870 | return -ENOMEM; |
1851 | 1871 | ||
@@ -1933,7 +1953,10 @@ out_rlist: | |||
1933 | gfs2_rlist_free(&rlist); | 1953 | gfs2_rlist_free(&rlist); |
1934 | gfs2_quota_unhold(dip); | 1954 | gfs2_quota_unhold(dip); |
1935 | out: | 1955 | out: |
1936 | kfree(ht); | 1956 | if (is_vmalloc_addr(ht)) |
1957 | vfree(ht); | ||
1958 | else | ||
1959 | kfree(ht); | ||
1937 | return error; | 1960 | return error; |
1938 | } | 1961 | } |
1939 | 1962 | ||
diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c index acd16764b133..ad0dc38d87ab 100644 --- a/fs/gfs2/file.c +++ b/fs/gfs2/file.c | |||
@@ -402,16 +402,20 @@ static int gfs2_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) | |||
402 | /* Update file times before taking page lock */ | 402 | /* Update file times before taking page lock */ |
403 | file_update_time(vma->vm_file); | 403 | file_update_time(vma->vm_file); |
404 | 404 | ||
405 | ret = get_write_access(inode); | ||
406 | if (ret) | ||
407 | goto out; | ||
408 | |||
405 | ret = gfs2_rs_alloc(ip); | 409 | ret = gfs2_rs_alloc(ip); |
406 | if (ret) | 410 | if (ret) |
407 | return ret; | 411 | goto out_write_access; |
408 | 412 | ||
409 | gfs2_size_hint(vma->vm_file, pos, PAGE_CACHE_SIZE); | 413 | gfs2_size_hint(vma->vm_file, pos, PAGE_CACHE_SIZE); |
410 | 414 | ||
411 | gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh); | 415 | gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh); |
412 | ret = gfs2_glock_nq(&gh); | 416 | ret = gfs2_glock_nq(&gh); |
413 | if (ret) | 417 | if (ret) |
414 | goto out; | 418 | goto out_uninit; |
415 | 419 | ||
416 | set_bit(GLF_DIRTY, &ip->i_gl->gl_flags); | 420 | set_bit(GLF_DIRTY, &ip->i_gl->gl_flags); |
417 | set_bit(GIF_SW_PAGED, &ip->i_flags); | 421 | set_bit(GIF_SW_PAGED, &ip->i_flags); |
@@ -480,12 +484,15 @@ out_quota_unlock: | |||
480 | gfs2_quota_unlock(ip); | 484 | gfs2_quota_unlock(ip); |
481 | out_unlock: | 485 | out_unlock: |
482 | gfs2_glock_dq(&gh); | 486 | gfs2_glock_dq(&gh); |
483 | out: | 487 | out_uninit: |
484 | gfs2_holder_uninit(&gh); | 488 | gfs2_holder_uninit(&gh); |
485 | if (ret == 0) { | 489 | if (ret == 0) { |
486 | set_page_dirty(page); | 490 | set_page_dirty(page); |
487 | wait_for_stable_page(page); | 491 | wait_for_stable_page(page); |
488 | } | 492 | } |
493 | out_write_access: | ||
494 | put_write_access(inode); | ||
495 | out: | ||
489 | sb_end_pagefault(inode->i_sb); | 496 | sb_end_pagefault(inode->i_sb); |
490 | return block_page_mkwrite_return(ret); | 497 | return block_page_mkwrite_return(ret); |
491 | } | 498 | } |
@@ -594,10 +601,10 @@ static int gfs2_release(struct inode *inode, struct file *file) | |||
594 | kfree(file->private_data); | 601 | kfree(file->private_data); |
595 | file->private_data = NULL; | 602 | file->private_data = NULL; |
596 | 603 | ||
597 | if ((file->f_mode & FMODE_WRITE) && | 604 | if (!(file->f_mode & FMODE_WRITE)) |
598 | (atomic_read(&inode->i_writecount) == 1)) | 605 | return 0; |
599 | gfs2_rs_delete(ip); | ||
600 | 606 | ||
607 | gfs2_rs_delete(ip); | ||
601 | return 0; | 608 | return 0; |
602 | } | 609 | } |
603 | 610 | ||
diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c index 8833a4f264e3..62b484e4a9e4 100644 --- a/fs/gfs2/inode.c +++ b/fs/gfs2/inode.c | |||
@@ -189,6 +189,7 @@ struct inode *gfs2_inode_lookup(struct super_block *sb, unsigned int type, | |||
189 | return inode; | 189 | return inode; |
190 | 190 | ||
191 | fail_refresh: | 191 | fail_refresh: |
192 | ip->i_iopen_gh.gh_flags |= GL_NOCACHE; | ||
192 | ip->i_iopen_gh.gh_gl->gl_object = NULL; | 193 | ip->i_iopen_gh.gh_gl->gl_object = NULL; |
193 | gfs2_glock_dq_uninit(&ip->i_iopen_gh); | 194 | gfs2_glock_dq_uninit(&ip->i_iopen_gh); |
194 | fail_iopen: | 195 | fail_iopen: |
diff --git a/fs/gfs2/lops.c b/fs/gfs2/lops.c index 68b4c8f1fce8..6c33d7b6e0c4 100644 --- a/fs/gfs2/lops.c +++ b/fs/gfs2/lops.c | |||
@@ -419,7 +419,9 @@ static void gfs2_before_commit(struct gfs2_sbd *sdp, unsigned int limit, | |||
419 | if (total > limit) | 419 | if (total > limit) |
420 | num = limit; | 420 | num = limit; |
421 | gfs2_log_unlock(sdp); | 421 | gfs2_log_unlock(sdp); |
422 | page = gfs2_get_log_desc(sdp, GFS2_LOG_DESC_METADATA, num + 1, num); | 422 | page = gfs2_get_log_desc(sdp, |
423 | is_databuf ? GFS2_LOG_DESC_JDATA : | ||
424 | GFS2_LOG_DESC_METADATA, num + 1, num); | ||
423 | ld = page_address(page); | 425 | ld = page_address(page); |
424 | gfs2_log_lock(sdp); | 426 | gfs2_log_lock(sdp); |
425 | ptr = (__be64 *)(ld + 1); | 427 | ptr = (__be64 *)(ld + 1); |
diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c index 5232525934ae..9809156e3d04 100644 --- a/fs/gfs2/rgrp.c +++ b/fs/gfs2/rgrp.c | |||
@@ -638,8 +638,10 @@ void gfs2_rs_deltree(struct gfs2_blkreserv *rs) | |||
638 | */ | 638 | */ |
639 | void gfs2_rs_delete(struct gfs2_inode *ip) | 639 | void gfs2_rs_delete(struct gfs2_inode *ip) |
640 | { | 640 | { |
641 | struct inode *inode = &ip->i_inode; | ||
642 | |||
641 | down_write(&ip->i_rw_mutex); | 643 | down_write(&ip->i_rw_mutex); |
642 | if (ip->i_res) { | 644 | if (ip->i_res && atomic_read(&inode->i_writecount) <= 1) { |
643 | gfs2_rs_deltree(ip->i_res); | 645 | gfs2_rs_deltree(ip->i_res); |
644 | BUG_ON(ip->i_res->rs_free); | 646 | BUG_ON(ip->i_res->rs_free); |
645 | kmem_cache_free(gfs2_rsrv_cachep, ip->i_res); | 647 | kmem_cache_free(gfs2_rsrv_cachep, ip->i_res); |
diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c index 917c8e1eb4ae..e5639dec66c4 100644 --- a/fs/gfs2/super.c +++ b/fs/gfs2/super.c | |||
@@ -1444,6 +1444,7 @@ static void gfs2_evict_inode(struct inode *inode) | |||
1444 | /* Must not read inode block until block type has been verified */ | 1444 | /* Must not read inode block until block type has been verified */ |
1445 | error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, GL_SKIP, &gh); | 1445 | error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, GL_SKIP, &gh); |
1446 | if (unlikely(error)) { | 1446 | if (unlikely(error)) { |
1447 | ip->i_iopen_gh.gh_flags |= GL_NOCACHE; | ||
1447 | gfs2_glock_dq_uninit(&ip->i_iopen_gh); | 1448 | gfs2_glock_dq_uninit(&ip->i_iopen_gh); |
1448 | goto out; | 1449 | goto out; |
1449 | } | 1450 | } |
@@ -1514,8 +1515,10 @@ out_unlock: | |||
1514 | if (gfs2_rs_active(ip->i_res)) | 1515 | if (gfs2_rs_active(ip->i_res)) |
1515 | gfs2_rs_deltree(ip->i_res); | 1516 | gfs2_rs_deltree(ip->i_res); |
1516 | 1517 | ||
1517 | if (test_bit(HIF_HOLDER, &ip->i_iopen_gh.gh_iflags)) | 1518 | if (test_bit(HIF_HOLDER, &ip->i_iopen_gh.gh_iflags)) { |
1519 | ip->i_iopen_gh.gh_flags |= GL_NOCACHE; | ||
1518 | gfs2_glock_dq(&ip->i_iopen_gh); | 1520 | gfs2_glock_dq(&ip->i_iopen_gh); |
1521 | } | ||
1519 | gfs2_holder_uninit(&ip->i_iopen_gh); | 1522 | gfs2_holder_uninit(&ip->i_iopen_gh); |
1520 | gfs2_glock_dq_uninit(&gh); | 1523 | gfs2_glock_dq_uninit(&gh); |
1521 | if (error && error != GLR_TRYFAILED && error != -EROFS) | 1524 | if (error && error != GLR_TRYFAILED && error != -EROFS) |
@@ -1534,6 +1537,7 @@ out: | |||
1534 | ip->i_gl = NULL; | 1537 | ip->i_gl = NULL; |
1535 | if (ip->i_iopen_gh.gh_gl) { | 1538 | if (ip->i_iopen_gh.gh_gl) { |
1536 | ip->i_iopen_gh.gh_gl->gl_object = NULL; | 1539 | ip->i_iopen_gh.gh_gl->gl_object = NULL; |
1540 | ip->i_iopen_gh.gh_flags |= GL_NOCACHE; | ||
1537 | gfs2_glock_dq_uninit(&ip->i_iopen_gh); | 1541 | gfs2_glock_dq_uninit(&ip->i_iopen_gh); |
1538 | } | 1542 | } |
1539 | } | 1543 | } |
diff --git a/fs/hfs/bnode.c b/fs/hfs/bnode.c index f3b1a15ccd59..d3fa6bd9503e 100644 --- a/fs/hfs/bnode.c +++ b/fs/hfs/bnode.c | |||
@@ -415,7 +415,11 @@ struct hfs_bnode *hfs_bnode_create(struct hfs_btree *tree, u32 num) | |||
415 | spin_lock(&tree->hash_lock); | 415 | spin_lock(&tree->hash_lock); |
416 | node = hfs_bnode_findhash(tree, num); | 416 | node = hfs_bnode_findhash(tree, num); |
417 | spin_unlock(&tree->hash_lock); | 417 | spin_unlock(&tree->hash_lock); |
418 | BUG_ON(node); | 418 | if (node) { |
419 | pr_crit("new node %u already hashed?\n", num); | ||
420 | WARN_ON(1); | ||
421 | return node; | ||
422 | } | ||
419 | node = __hfs_bnode_create(tree, num); | 423 | node = __hfs_bnode_create(tree, num); |
420 | if (!node) | 424 | if (!node) |
421 | return ERR_PTR(-ENOMEM); | 425 | return ERR_PTR(-ENOMEM); |
diff --git a/fs/hpfs/dir.c b/fs/hpfs/dir.c index 546f6d39713a..834ac13c04b7 100644 --- a/fs/hpfs/dir.c +++ b/fs/hpfs/dir.c | |||
@@ -33,25 +33,27 @@ static loff_t hpfs_dir_lseek(struct file *filp, loff_t off, int whence) | |||
33 | if (whence == SEEK_DATA || whence == SEEK_HOLE) | 33 | if (whence == SEEK_DATA || whence == SEEK_HOLE) |
34 | return -EINVAL; | 34 | return -EINVAL; |
35 | 35 | ||
36 | mutex_lock(&i->i_mutex); | ||
36 | hpfs_lock(s); | 37 | hpfs_lock(s); |
37 | 38 | ||
38 | /*printk("dir lseek\n");*/ | 39 | /*printk("dir lseek\n");*/ |
39 | if (new_off == 0 || new_off == 1 || new_off == 11 || new_off == 12 || new_off == 13) goto ok; | 40 | if (new_off == 0 || new_off == 1 || new_off == 11 || new_off == 12 || new_off == 13) goto ok; |
40 | mutex_lock(&i->i_mutex); | ||
41 | pos = ((loff_t) hpfs_de_as_down_as_possible(s, hpfs_inode->i_dno) << 4) + 1; | 41 | pos = ((loff_t) hpfs_de_as_down_as_possible(s, hpfs_inode->i_dno) << 4) + 1; |
42 | while (pos != new_off) { | 42 | while (pos != new_off) { |
43 | if (map_pos_dirent(i, &pos, &qbh)) hpfs_brelse4(&qbh); | 43 | if (map_pos_dirent(i, &pos, &qbh)) hpfs_brelse4(&qbh); |
44 | else goto fail; | 44 | else goto fail; |
45 | if (pos == 12) goto fail; | 45 | if (pos == 12) goto fail; |
46 | } | 46 | } |
47 | mutex_unlock(&i->i_mutex); | 47 | hpfs_add_pos(i, &filp->f_pos); |
48 | ok: | 48 | ok: |
49 | filp->f_pos = new_off; | ||
49 | hpfs_unlock(s); | 50 | hpfs_unlock(s); |
50 | return filp->f_pos = new_off; | ||
51 | fail: | ||
52 | mutex_unlock(&i->i_mutex); | 51 | mutex_unlock(&i->i_mutex); |
52 | return new_off; | ||
53 | fail: | ||
53 | /*printk("illegal lseek: %016llx\n", new_off);*/ | 54 | /*printk("illegal lseek: %016llx\n", new_off);*/ |
54 | hpfs_unlock(s); | 55 | hpfs_unlock(s); |
56 | mutex_unlock(&i->i_mutex); | ||
55 | return -ESPIPE; | 57 | return -ESPIPE; |
56 | } | 58 | } |
57 | 59 | ||
diff --git a/fs/jfs/jfs_logmgr.c b/fs/jfs/jfs_logmgr.c index c57499dca89c..360d27c48887 100644 --- a/fs/jfs/jfs_logmgr.c +++ b/fs/jfs/jfs_logmgr.c | |||
@@ -2009,7 +2009,13 @@ static int lbmRead(struct jfs_log * log, int pn, struct lbuf ** bpp) | |||
2009 | 2009 | ||
2010 | bio->bi_end_io = lbmIODone; | 2010 | bio->bi_end_io = lbmIODone; |
2011 | bio->bi_private = bp; | 2011 | bio->bi_private = bp; |
2012 | submit_bio(READ_SYNC, bio); | 2012 | /*check if journaling to disk has been disabled*/ |
2013 | if (log->no_integrity) { | ||
2014 | bio->bi_size = 0; | ||
2015 | lbmIODone(bio, 0); | ||
2016 | } else { | ||
2017 | submit_bio(READ_SYNC, bio); | ||
2018 | } | ||
2013 | 2019 | ||
2014 | wait_event(bp->l_ioevent, (bp->l_flag != lbmREAD)); | 2020 | wait_event(bp->l_ioevent, (bp->l_flag != lbmREAD)); |
2015 | 2021 | ||
diff --git a/fs/jfs/super.c b/fs/jfs/super.c index 2003e830ed1c..788e0a9c1fb0 100644 --- a/fs/jfs/super.c +++ b/fs/jfs/super.c | |||
@@ -611,11 +611,28 @@ static int jfs_freeze(struct super_block *sb) | |||
611 | { | 611 | { |
612 | struct jfs_sb_info *sbi = JFS_SBI(sb); | 612 | struct jfs_sb_info *sbi = JFS_SBI(sb); |
613 | struct jfs_log *log = sbi->log; | 613 | struct jfs_log *log = sbi->log; |
614 | int rc = 0; | ||
614 | 615 | ||
615 | if (!(sb->s_flags & MS_RDONLY)) { | 616 | if (!(sb->s_flags & MS_RDONLY)) { |
616 | txQuiesce(sb); | 617 | txQuiesce(sb); |
617 | lmLogShutdown(log); | 618 | rc = lmLogShutdown(log); |
618 | updateSuper(sb, FM_CLEAN); | 619 | if (rc) { |
620 | jfs_error(sb, "jfs_freeze: lmLogShutdown failed"); | ||
621 | |||
622 | /* let operations fail rather than hang */ | ||
623 | txResume(sb); | ||
624 | |||
625 | return rc; | ||
626 | } | ||
627 | rc = updateSuper(sb, FM_CLEAN); | ||
628 | if (rc) { | ||
629 | jfs_err("jfs_freeze: updateSuper failed\n"); | ||
630 | /* | ||
631 | * Don't fail here. Everything succeeded except | ||
632 | * marking the superblock clean, so there's really | ||
633 | * no harm in leaving it frozen for now. | ||
634 | */ | ||
635 | } | ||
619 | } | 636 | } |
620 | return 0; | 637 | return 0; |
621 | } | 638 | } |
@@ -627,13 +644,18 @@ static int jfs_unfreeze(struct super_block *sb) | |||
627 | int rc = 0; | 644 | int rc = 0; |
628 | 645 | ||
629 | if (!(sb->s_flags & MS_RDONLY)) { | 646 | if (!(sb->s_flags & MS_RDONLY)) { |
630 | updateSuper(sb, FM_MOUNT); | 647 | rc = updateSuper(sb, FM_MOUNT); |
631 | if ((rc = lmLogInit(log))) | 648 | if (rc) { |
632 | jfs_err("jfs_unlock failed with return code %d", rc); | 649 | jfs_error(sb, "jfs_unfreeze: updateSuper failed"); |
633 | else | 650 | goto out; |
634 | txResume(sb); | 651 | } |
652 | rc = lmLogInit(log); | ||
653 | if (rc) | ||
654 | jfs_error(sb, "jfs_unfreeze: lmLogInit failed"); | ||
655 | out: | ||
656 | txResume(sb); | ||
635 | } | 657 | } |
636 | return 0; | 658 | return rc; |
637 | } | 659 | } |
638 | 660 | ||
639 | static struct dentry *jfs_do_mount(struct file_system_type *fs_type, | 661 | static struct dentry *jfs_do_mount(struct file_system_type *fs_type, |
diff --git a/fs/nfs/callback_proc.c b/fs/nfs/callback_proc.c index a13d26ede254..0bc27684ebfa 100644 --- a/fs/nfs/callback_proc.c +++ b/fs/nfs/callback_proc.c | |||
@@ -414,7 +414,7 @@ __be32 nfs4_callback_sequence(struct cb_sequenceargs *args, | |||
414 | 414 | ||
415 | spin_lock(&tbl->slot_tbl_lock); | 415 | spin_lock(&tbl->slot_tbl_lock); |
416 | /* state manager is resetting the session */ | 416 | /* state manager is resetting the session */ |
417 | if (test_bit(NFS4_SESSION_DRAINING, &clp->cl_session->session_state)) { | 417 | if (test_bit(NFS4_SLOT_TBL_DRAINING, &tbl->slot_tbl_state)) { |
418 | spin_unlock(&tbl->slot_tbl_lock); | 418 | spin_unlock(&tbl->slot_tbl_lock); |
419 | status = htonl(NFS4ERR_DELAY); | 419 | status = htonl(NFS4ERR_DELAY); |
420 | /* Return NFS4ERR_BADSESSION if we're draining the session | 420 | /* Return NFS4ERR_BADSESSION if we're draining the session |
diff --git a/fs/nfs/callback_xdr.c b/fs/nfs/callback_xdr.c index 59461c957d9d..a35582c9d444 100644 --- a/fs/nfs/callback_xdr.c +++ b/fs/nfs/callback_xdr.c | |||
@@ -763,7 +763,7 @@ static void nfs4_callback_free_slot(struct nfs4_session *session) | |||
763 | * A single slot, so highest used slotid is either 0 or -1 | 763 | * A single slot, so highest used slotid is either 0 or -1 |
764 | */ | 764 | */ |
765 | tbl->highest_used_slotid = NFS4_NO_SLOT; | 765 | tbl->highest_used_slotid = NFS4_NO_SLOT; |
766 | nfs4_session_drain_complete(session, tbl); | 766 | nfs4_slot_tbl_drain_complete(tbl); |
767 | spin_unlock(&tbl->slot_tbl_lock); | 767 | spin_unlock(&tbl->slot_tbl_lock); |
768 | } | 768 | } |
769 | 769 | ||
diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c index 947b0c908aa9..4cbad5d6b276 100644 --- a/fs/nfs/nfs4client.c +++ b/fs/nfs/nfs4client.c | |||
@@ -203,7 +203,7 @@ struct nfs_client *nfs4_init_client(struct nfs_client *clp, | |||
203 | __set_bit(NFS_CS_DISCRTRY, &clp->cl_flags); | 203 | __set_bit(NFS_CS_DISCRTRY, &clp->cl_flags); |
204 | error = nfs_create_rpc_client(clp, timeparms, RPC_AUTH_GSS_KRB5I); | 204 | error = nfs_create_rpc_client(clp, timeparms, RPC_AUTH_GSS_KRB5I); |
205 | if (error == -EINVAL) | 205 | if (error == -EINVAL) |
206 | error = nfs_create_rpc_client(clp, timeparms, RPC_AUTH_NULL); | 206 | error = nfs_create_rpc_client(clp, timeparms, RPC_AUTH_UNIX); |
207 | if (error < 0) | 207 | if (error < 0) |
208 | goto error; | 208 | goto error; |
209 | 209 | ||
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 8fbc10054115..d7ba5616989c 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c | |||
@@ -572,7 +572,7 @@ int nfs41_setup_sequence(struct nfs4_session *session, | |||
572 | task->tk_timeout = 0; | 572 | task->tk_timeout = 0; |
573 | 573 | ||
574 | spin_lock(&tbl->slot_tbl_lock); | 574 | spin_lock(&tbl->slot_tbl_lock); |
575 | if (test_bit(NFS4_SESSION_DRAINING, &session->session_state) && | 575 | if (test_bit(NFS4_SLOT_TBL_DRAINING, &tbl->slot_tbl_state) && |
576 | !args->sa_privileged) { | 576 | !args->sa_privileged) { |
577 | /* The state manager will wait until the slot table is empty */ | 577 | /* The state manager will wait until the slot table is empty */ |
578 | dprintk("%s session is draining\n", __func__); | 578 | dprintk("%s session is draining\n", __func__); |
@@ -1078,7 +1078,7 @@ static struct nfs4_state *nfs4_try_open_cached(struct nfs4_opendata *opendata) | |||
1078 | struct nfs4_state *state = opendata->state; | 1078 | struct nfs4_state *state = opendata->state; |
1079 | struct nfs_inode *nfsi = NFS_I(state->inode); | 1079 | struct nfs_inode *nfsi = NFS_I(state->inode); |
1080 | struct nfs_delegation *delegation; | 1080 | struct nfs_delegation *delegation; |
1081 | int open_mode = opendata->o_arg.open_flags & (O_EXCL|O_TRUNC); | 1081 | int open_mode = opendata->o_arg.open_flags; |
1082 | fmode_t fmode = opendata->o_arg.fmode; | 1082 | fmode_t fmode = opendata->o_arg.fmode; |
1083 | nfs4_stateid stateid; | 1083 | nfs4_stateid stateid; |
1084 | int ret = -EAGAIN; | 1084 | int ret = -EAGAIN; |
diff --git a/fs/nfs/nfs4session.c b/fs/nfs/nfs4session.c index ebda5f4a031b..c4e225e4a9af 100644 --- a/fs/nfs/nfs4session.c +++ b/fs/nfs/nfs4session.c | |||
@@ -73,7 +73,7 @@ void nfs4_free_slot(struct nfs4_slot_table *tbl, struct nfs4_slot *slot) | |||
73 | tbl->highest_used_slotid = new_max; | 73 | tbl->highest_used_slotid = new_max; |
74 | else { | 74 | else { |
75 | tbl->highest_used_slotid = NFS4_NO_SLOT; | 75 | tbl->highest_used_slotid = NFS4_NO_SLOT; |
76 | nfs4_session_drain_complete(tbl->session, tbl); | 76 | nfs4_slot_tbl_drain_complete(tbl); |
77 | } | 77 | } |
78 | } | 78 | } |
79 | dprintk("%s: slotid %u highest_used_slotid %d\n", __func__, | 79 | dprintk("%s: slotid %u highest_used_slotid %d\n", __func__, |
@@ -226,7 +226,7 @@ static bool nfs41_assign_slot(struct rpc_task *task, void *pslot) | |||
226 | struct nfs4_slot *slot = pslot; | 226 | struct nfs4_slot *slot = pslot; |
227 | struct nfs4_slot_table *tbl = slot->table; | 227 | struct nfs4_slot_table *tbl = slot->table; |
228 | 228 | ||
229 | if (nfs4_session_draining(tbl->session) && !args->sa_privileged) | 229 | if (nfs4_slot_tbl_draining(tbl) && !args->sa_privileged) |
230 | return false; | 230 | return false; |
231 | slot->generation = tbl->generation; | 231 | slot->generation = tbl->generation; |
232 | args->sa_slot = slot; | 232 | args->sa_slot = slot; |
diff --git a/fs/nfs/nfs4session.h b/fs/nfs/nfs4session.h index 6f3cb39386d4..ff7d9f0f8a65 100644 --- a/fs/nfs/nfs4session.h +++ b/fs/nfs/nfs4session.h | |||
@@ -25,6 +25,10 @@ struct nfs4_slot { | |||
25 | }; | 25 | }; |
26 | 26 | ||
27 | /* Sessions */ | 27 | /* Sessions */ |
28 | enum nfs4_slot_tbl_state { | ||
29 | NFS4_SLOT_TBL_DRAINING, | ||
30 | }; | ||
31 | |||
28 | #define SLOT_TABLE_SZ DIV_ROUND_UP(NFS4_MAX_SLOT_TABLE, 8*sizeof(long)) | 32 | #define SLOT_TABLE_SZ DIV_ROUND_UP(NFS4_MAX_SLOT_TABLE, 8*sizeof(long)) |
29 | struct nfs4_slot_table { | 33 | struct nfs4_slot_table { |
30 | struct nfs4_session *session; /* Parent session */ | 34 | struct nfs4_session *session; /* Parent session */ |
@@ -43,6 +47,7 @@ struct nfs4_slot_table { | |||
43 | unsigned long generation; /* Generation counter for | 47 | unsigned long generation; /* Generation counter for |
44 | target_highest_slotid */ | 48 | target_highest_slotid */ |
45 | struct completion complete; | 49 | struct completion complete; |
50 | unsigned long slot_tbl_state; | ||
46 | }; | 51 | }; |
47 | 52 | ||
48 | /* | 53 | /* |
@@ -68,7 +73,6 @@ struct nfs4_session { | |||
68 | 73 | ||
69 | enum nfs4_session_state { | 74 | enum nfs4_session_state { |
70 | NFS4_SESSION_INITING, | 75 | NFS4_SESSION_INITING, |
71 | NFS4_SESSION_DRAINING, | ||
72 | }; | 76 | }; |
73 | 77 | ||
74 | #if defined(CONFIG_NFS_V4_1) | 78 | #if defined(CONFIG_NFS_V4_1) |
@@ -88,12 +92,11 @@ extern void nfs4_destroy_session(struct nfs4_session *session); | |||
88 | extern int nfs4_init_session(struct nfs_server *server); | 92 | extern int nfs4_init_session(struct nfs_server *server); |
89 | extern int nfs4_init_ds_session(struct nfs_client *, unsigned long); | 93 | extern int nfs4_init_ds_session(struct nfs_client *, unsigned long); |
90 | 94 | ||
91 | extern void nfs4_session_drain_complete(struct nfs4_session *session, | 95 | extern void nfs4_slot_tbl_drain_complete(struct nfs4_slot_table *tbl); |
92 | struct nfs4_slot_table *tbl); | ||
93 | 96 | ||
94 | static inline bool nfs4_session_draining(struct nfs4_session *session) | 97 | static inline bool nfs4_slot_tbl_draining(struct nfs4_slot_table *tbl) |
95 | { | 98 | { |
96 | return !!test_bit(NFS4_SESSION_DRAINING, &session->session_state); | 99 | return !!test_bit(NFS4_SLOT_TBL_DRAINING, &tbl->slot_tbl_state); |
97 | } | 100 | } |
98 | 101 | ||
99 | bool nfs41_wake_and_assign_slot(struct nfs4_slot_table *tbl, | 102 | bool nfs41_wake_and_assign_slot(struct nfs4_slot_table *tbl, |
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c index 300d17d85c0e..1fab140764c4 100644 --- a/fs/nfs/nfs4state.c +++ b/fs/nfs/nfs4state.c | |||
@@ -241,7 +241,7 @@ static void nfs4_end_drain_session(struct nfs_client *clp) | |||
241 | if (ses == NULL) | 241 | if (ses == NULL) |
242 | return; | 242 | return; |
243 | tbl = &ses->fc_slot_table; | 243 | tbl = &ses->fc_slot_table; |
244 | if (test_and_clear_bit(NFS4_SESSION_DRAINING, &ses->session_state)) { | 244 | if (test_and_clear_bit(NFS4_SLOT_TBL_DRAINING, &tbl->slot_tbl_state)) { |
245 | spin_lock(&tbl->slot_tbl_lock); | 245 | spin_lock(&tbl->slot_tbl_lock); |
246 | nfs41_wake_slot_table(tbl); | 246 | nfs41_wake_slot_table(tbl); |
247 | spin_unlock(&tbl->slot_tbl_lock); | 247 | spin_unlock(&tbl->slot_tbl_lock); |
@@ -251,15 +251,15 @@ static void nfs4_end_drain_session(struct nfs_client *clp) | |||
251 | /* | 251 | /* |
252 | * Signal state manager thread if session fore channel is drained | 252 | * Signal state manager thread if session fore channel is drained |
253 | */ | 253 | */ |
254 | void nfs4_session_drain_complete(struct nfs4_session *session, | 254 | void nfs4_slot_tbl_drain_complete(struct nfs4_slot_table *tbl) |
255 | struct nfs4_slot_table *tbl) | ||
256 | { | 255 | { |
257 | if (nfs4_session_draining(session)) | 256 | if (nfs4_slot_tbl_draining(tbl)) |
258 | complete(&tbl->complete); | 257 | complete(&tbl->complete); |
259 | } | 258 | } |
260 | 259 | ||
261 | static int nfs4_wait_on_slot_tbl(struct nfs4_slot_table *tbl) | 260 | static int nfs4_drain_slot_tbl(struct nfs4_slot_table *tbl) |
262 | { | 261 | { |
262 | set_bit(NFS4_SLOT_TBL_DRAINING, &tbl->slot_tbl_state); | ||
263 | spin_lock(&tbl->slot_tbl_lock); | 263 | spin_lock(&tbl->slot_tbl_lock); |
264 | if (tbl->highest_used_slotid != NFS4_NO_SLOT) { | 264 | if (tbl->highest_used_slotid != NFS4_NO_SLOT) { |
265 | INIT_COMPLETION(tbl->complete); | 265 | INIT_COMPLETION(tbl->complete); |
@@ -275,13 +275,12 @@ static int nfs4_begin_drain_session(struct nfs_client *clp) | |||
275 | struct nfs4_session *ses = clp->cl_session; | 275 | struct nfs4_session *ses = clp->cl_session; |
276 | int ret = 0; | 276 | int ret = 0; |
277 | 277 | ||
278 | set_bit(NFS4_SESSION_DRAINING, &ses->session_state); | ||
279 | /* back channel */ | 278 | /* back channel */ |
280 | ret = nfs4_wait_on_slot_tbl(&ses->bc_slot_table); | 279 | ret = nfs4_drain_slot_tbl(&ses->bc_slot_table); |
281 | if (ret) | 280 | if (ret) |
282 | return ret; | 281 | return ret; |
283 | /* fore channel */ | 282 | /* fore channel */ |
284 | return nfs4_wait_on_slot_tbl(&ses->fc_slot_table); | 283 | return nfs4_drain_slot_tbl(&ses->fc_slot_table); |
285 | } | 284 | } |
286 | 285 | ||
287 | static void nfs41_finish_session_reset(struct nfs_client *clp) | 286 | static void nfs41_finish_session_reset(struct nfs_client *clp) |
diff --git a/fs/nfs/super.c b/fs/nfs/super.c index a366107a7331..2d7525fbcf25 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c | |||
@@ -1942,6 +1942,7 @@ static int nfs23_validate_mount_data(void *options, | |||
1942 | args->namlen = data->namlen; | 1942 | args->namlen = data->namlen; |
1943 | args->bsize = data->bsize; | 1943 | args->bsize = data->bsize; |
1944 | 1944 | ||
1945 | args->auth_flavors[0] = RPC_AUTH_UNIX; | ||
1945 | if (data->flags & NFS_MOUNT_SECFLAVOUR) | 1946 | if (data->flags & NFS_MOUNT_SECFLAVOUR) |
1946 | args->auth_flavors[0] = data->pseudoflavor; | 1947 | args->auth_flavors[0] = data->pseudoflavor; |
1947 | if (!args->nfs_server.hostname) | 1948 | if (!args->nfs_server.hostname) |
@@ -2637,6 +2638,7 @@ static int nfs4_validate_mount_data(void *options, | |||
2637 | goto out_no_address; | 2638 | goto out_no_address; |
2638 | args->nfs_server.port = ntohs(((struct sockaddr_in *)sap)->sin_port); | 2639 | args->nfs_server.port = ntohs(((struct sockaddr_in *)sap)->sin_port); |
2639 | 2640 | ||
2641 | args->auth_flavors[0] = RPC_AUTH_UNIX; | ||
2640 | if (data->auth_flavourlen) { | 2642 | if (data->auth_flavourlen) { |
2641 | if (data->auth_flavourlen > 1) | 2643 | if (data->auth_flavourlen > 1) |
2642 | goto out_inval_auth; | 2644 | goto out_inval_auth; |
diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c index 689fb608648e..bccfec8343c5 100644 --- a/fs/nilfs2/inode.c +++ b/fs/nilfs2/inode.c | |||
@@ -219,13 +219,32 @@ static int nilfs_writepage(struct page *page, struct writeback_control *wbc) | |||
219 | 219 | ||
220 | static int nilfs_set_page_dirty(struct page *page) | 220 | static int nilfs_set_page_dirty(struct page *page) |
221 | { | 221 | { |
222 | int ret = __set_page_dirty_buffers(page); | 222 | int ret = __set_page_dirty_nobuffers(page); |
223 | 223 | ||
224 | if (ret) { | 224 | if (page_has_buffers(page)) { |
225 | struct inode *inode = page->mapping->host; | 225 | struct inode *inode = page->mapping->host; |
226 | unsigned nr_dirty = 1 << (PAGE_SHIFT - inode->i_blkbits); | 226 | unsigned nr_dirty = 0; |
227 | struct buffer_head *bh, *head; | ||
227 | 228 | ||
228 | nilfs_set_file_dirty(inode, nr_dirty); | 229 | /* |
230 | * This page is locked by callers, and no other thread | ||
231 | * concurrently marks its buffers dirty since they are | ||
232 | * only dirtied through routines in fs/buffer.c in | ||
233 | * which call sites of mark_buffer_dirty are protected | ||
234 | * by page lock. | ||
235 | */ | ||
236 | bh = head = page_buffers(page); | ||
237 | do { | ||
238 | /* Do not mark hole blocks dirty */ | ||
239 | if (buffer_dirty(bh) || !buffer_mapped(bh)) | ||
240 | continue; | ||
241 | |||
242 | set_buffer_dirty(bh); | ||
243 | nr_dirty++; | ||
244 | } while (bh = bh->b_this_page, bh != head); | ||
245 | |||
246 | if (nr_dirty) | ||
247 | nilfs_set_file_dirty(inode, nr_dirty); | ||
229 | } | 248 | } |
230 | return ret; | 249 | return ret; |
231 | } | 250 | } |
diff --git a/fs/ocfs2/extent_map.c b/fs/ocfs2/extent_map.c index 1c39efb71bab..2487116d0d33 100644 --- a/fs/ocfs2/extent_map.c +++ b/fs/ocfs2/extent_map.c | |||
@@ -790,7 +790,7 @@ int ocfs2_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, | |||
790 | &hole_size, &rec, &is_last); | 790 | &hole_size, &rec, &is_last); |
791 | if (ret) { | 791 | if (ret) { |
792 | mlog_errno(ret); | 792 | mlog_errno(ret); |
793 | goto out; | 793 | goto out_unlock; |
794 | } | 794 | } |
795 | 795 | ||
796 | if (rec.e_blkno == 0ULL) { | 796 | if (rec.e_blkno == 0ULL) { |
diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c index 8a7509f9e6f5..ff54014a24ec 100644 --- a/fs/ocfs2/file.c +++ b/fs/ocfs2/file.c | |||
@@ -2288,7 +2288,7 @@ relock: | |||
2288 | ret = ocfs2_inode_lock(inode, NULL, 1); | 2288 | ret = ocfs2_inode_lock(inode, NULL, 1); |
2289 | if (ret < 0) { | 2289 | if (ret < 0) { |
2290 | mlog_errno(ret); | 2290 | mlog_errno(ret); |
2291 | goto out_sems; | 2291 | goto out; |
2292 | } | 2292 | } |
2293 | 2293 | ||
2294 | ocfs2_inode_unlock(inode, 1); | 2294 | ocfs2_inode_unlock(inode, 1); |
diff --git a/fs/pnode.c b/fs/pnode.c index 3d2a7141b87a..9af0df15256e 100644 --- a/fs/pnode.c +++ b/fs/pnode.c | |||
@@ -83,7 +83,8 @@ static int do_make_slave(struct mount *mnt) | |||
83 | if (peer_mnt == mnt) | 83 | if (peer_mnt == mnt) |
84 | peer_mnt = NULL; | 84 | peer_mnt = NULL; |
85 | } | 85 | } |
86 | if (IS_MNT_SHARED(mnt) && list_empty(&mnt->mnt_share)) | 86 | if (mnt->mnt_group_id && IS_MNT_SHARED(mnt) && |
87 | list_empty(&mnt->mnt_share)) | ||
87 | mnt_release_group_id(mnt); | 88 | mnt_release_group_id(mnt); |
88 | 89 | ||
89 | list_del_init(&mnt->mnt_share); | 90 | list_del_init(&mnt->mnt_share); |
diff --git a/fs/qnx6/dir.c b/fs/qnx6/dir.c index 8798d065e400..afa6be6fc397 100644 --- a/fs/qnx6/dir.c +++ b/fs/qnx6/dir.c | |||
@@ -120,7 +120,7 @@ static int qnx6_readdir(struct file *filp, void *dirent, filldir_t filldir) | |||
120 | struct inode *inode = file_inode(filp); | 120 | struct inode *inode = file_inode(filp); |
121 | struct super_block *s = inode->i_sb; | 121 | struct super_block *s = inode->i_sb; |
122 | struct qnx6_sb_info *sbi = QNX6_SB(s); | 122 | struct qnx6_sb_info *sbi = QNX6_SB(s); |
123 | loff_t pos = filp->f_pos & (QNX6_DIR_ENTRY_SIZE - 1); | 123 | loff_t pos = filp->f_pos & ~(QNX6_DIR_ENTRY_SIZE - 1); |
124 | unsigned long npages = dir_pages(inode); | 124 | unsigned long npages = dir_pages(inode); |
125 | unsigned long n = pos >> PAGE_CACHE_SHIFT; | 125 | unsigned long n = pos >> PAGE_CACHE_SHIFT; |
126 | unsigned start = (pos & ~PAGE_CACHE_MASK) / QNX6_DIR_ENTRY_SIZE; | 126 | unsigned start = (pos & ~PAGE_CACHE_MASK) / QNX6_DIR_ENTRY_SIZE; |
diff --git a/fs/reiserfs/dir.c b/fs/reiserfs/dir.c index 66c53b642a88..6c2d136561cb 100644 --- a/fs/reiserfs/dir.c +++ b/fs/reiserfs/dir.c | |||
@@ -204,6 +204,8 @@ int reiserfs_readdir_dentry(struct dentry *dentry, void *dirent, | |||
204 | next_pos = deh_offset(deh) + 1; | 204 | next_pos = deh_offset(deh) + 1; |
205 | 205 | ||
206 | if (item_moved(&tmp_ih, &path_to_entry)) { | 206 | if (item_moved(&tmp_ih, &path_to_entry)) { |
207 | set_cpu_key_k_offset(&pos_key, | ||
208 | next_pos); | ||
207 | goto research; | 209 | goto research; |
208 | } | 210 | } |
209 | } /* for */ | 211 | } /* for */ |
diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c index 77d6d47abc83..f844533792ee 100644 --- a/fs/reiserfs/inode.c +++ b/fs/reiserfs/inode.c | |||
@@ -1811,11 +1811,16 @@ int reiserfs_new_inode(struct reiserfs_transaction_handle *th, | |||
1811 | TYPE_STAT_DATA, SD_SIZE, MAX_US_INT); | 1811 | TYPE_STAT_DATA, SD_SIZE, MAX_US_INT); |
1812 | memcpy(INODE_PKEY(inode), &(ih.ih_key), KEY_SIZE); | 1812 | memcpy(INODE_PKEY(inode), &(ih.ih_key), KEY_SIZE); |
1813 | args.dirid = le32_to_cpu(ih.ih_key.k_dir_id); | 1813 | args.dirid = le32_to_cpu(ih.ih_key.k_dir_id); |
1814 | if (insert_inode_locked4(inode, args.objectid, | 1814 | |
1815 | reiserfs_find_actor, &args) < 0) { | 1815 | reiserfs_write_unlock(inode->i_sb); |
1816 | err = insert_inode_locked4(inode, args.objectid, | ||
1817 | reiserfs_find_actor, &args); | ||
1818 | reiserfs_write_lock(inode->i_sb); | ||
1819 | if (err) { | ||
1816 | err = -EINVAL; | 1820 | err = -EINVAL; |
1817 | goto out_bad_inode; | 1821 | goto out_bad_inode; |
1818 | } | 1822 | } |
1823 | |||
1819 | if (old_format_only(sb)) | 1824 | if (old_format_only(sb)) |
1820 | /* not a perfect generation count, as object ids can be reused, but | 1825 | /* not a perfect generation count, as object ids can be reused, but |
1821 | ** this is as good as reiserfs can do right now. | 1826 | ** this is as good as reiserfs can do right now. |
diff --git a/fs/reiserfs/xattr.c b/fs/reiserfs/xattr.c index 4cce1d9552fb..821bcf70e467 100644 --- a/fs/reiserfs/xattr.c +++ b/fs/reiserfs/xattr.c | |||
@@ -318,7 +318,19 @@ static int delete_one_xattr(struct dentry *dentry, void *data) | |||
318 | static int chown_one_xattr(struct dentry *dentry, void *data) | 318 | static int chown_one_xattr(struct dentry *dentry, void *data) |
319 | { | 319 | { |
320 | struct iattr *attrs = data; | 320 | struct iattr *attrs = data; |
321 | return reiserfs_setattr(dentry, attrs); | 321 | int ia_valid = attrs->ia_valid; |
322 | int err; | ||
323 | |||
324 | /* | ||
325 | * We only want the ownership bits. Otherwise, we'll do | ||
326 | * things like change a directory to a regular file if | ||
327 | * ATTR_MODE is set. | ||
328 | */ | ||
329 | attrs->ia_valid &= (ATTR_UID|ATTR_GID); | ||
330 | err = reiserfs_setattr(dentry, attrs); | ||
331 | attrs->ia_valid = ia_valid; | ||
332 | |||
333 | return err; | ||
322 | } | 334 | } |
323 | 335 | ||
324 | /* No i_mutex, but the inode is unconnected. */ | 336 | /* No i_mutex, but the inode is unconnected. */ |
diff --git a/fs/reiserfs/xattr_acl.c b/fs/reiserfs/xattr_acl.c index d7c01ef64eda..6c8767fdfc6a 100644 --- a/fs/reiserfs/xattr_acl.c +++ b/fs/reiserfs/xattr_acl.c | |||
@@ -443,6 +443,9 @@ int reiserfs_acl_chmod(struct inode *inode) | |||
443 | int depth; | 443 | int depth; |
444 | int error; | 444 | int error; |
445 | 445 | ||
446 | if (IS_PRIVATE(inode)) | ||
447 | return 0; | ||
448 | |||
446 | if (S_ISLNK(inode->i_mode)) | 449 | if (S_ISLNK(inode->i_mode)) |
447 | return -EOPNOTSUPP; | 450 | return -EOPNOTSUPP; |
448 | 451 | ||
diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c index 2b2691b73428..41a695048be7 100644 --- a/fs/xfs/xfs_aops.c +++ b/fs/xfs/xfs_aops.c | |||
@@ -725,6 +725,25 @@ xfs_convert_page( | |||
725 | (xfs_off_t)(page->index + 1) << PAGE_CACHE_SHIFT, | 725 | (xfs_off_t)(page->index + 1) << PAGE_CACHE_SHIFT, |
726 | i_size_read(inode)); | 726 | i_size_read(inode)); |
727 | 727 | ||
728 | /* | ||
729 | * If the current map does not span the entire page we are about to try | ||
730 | * to write, then give up. The only way we can write a page that spans | ||
731 | * multiple mappings in a single writeback iteration is via the | ||
732 | * xfs_vm_writepage() function. Data integrity writeback requires the | ||
733 | * entire page to be written in a single attempt, otherwise the part of | ||
734 | * the page we don't write here doesn't get written as part of the data | ||
735 | * integrity sync. | ||
736 | * | ||
737 | * For normal writeback, we also don't attempt to write partial pages | ||
738 | * here as it simply means that write_cache_pages() will see it under | ||
739 | * writeback and ignore the page until some point in the future, at | ||
740 | * which time this will be the only page in the file that needs | ||
741 | * writeback. Hence for more optimal IO patterns, we should always | ||
742 | * avoid partial page writeback due to multiple mappings on a page here. | ||
743 | */ | ||
744 | if (!xfs_imap_valid(inode, imap, end_offset)) | ||
745 | goto fail_unlock_page; | ||
746 | |||
728 | len = 1 << inode->i_blkbits; | 747 | len = 1 << inode->i_blkbits; |
729 | p_offset = min_t(unsigned long, end_offset & (PAGE_CACHE_SIZE - 1), | 748 | p_offset = min_t(unsigned long, end_offset & (PAGE_CACHE_SIZE - 1), |
730 | PAGE_CACHE_SIZE); | 749 | PAGE_CACHE_SIZE); |
diff --git a/fs/xfs/xfs_attr_leaf.c b/fs/xfs/xfs_attr_leaf.c index 08d5457c948e..d788302e506a 100644 --- a/fs/xfs/xfs_attr_leaf.c +++ b/fs/xfs/xfs_attr_leaf.c | |||
@@ -931,20 +931,22 @@ xfs_attr_shortform_list(xfs_attr_list_context_t *context) | |||
931 | */ | 931 | */ |
932 | int | 932 | int |
933 | xfs_attr_shortform_allfit( | 933 | xfs_attr_shortform_allfit( |
934 | struct xfs_buf *bp, | 934 | struct xfs_buf *bp, |
935 | struct xfs_inode *dp) | 935 | struct xfs_inode *dp) |
936 | { | 936 | { |
937 | xfs_attr_leafblock_t *leaf; | 937 | struct xfs_attr_leafblock *leaf; |
938 | xfs_attr_leaf_entry_t *entry; | 938 | struct xfs_attr_leaf_entry *entry; |
939 | xfs_attr_leaf_name_local_t *name_loc; | 939 | xfs_attr_leaf_name_local_t *name_loc; |
940 | int bytes, i; | 940 | struct xfs_attr3_icleaf_hdr leafhdr; |
941 | int bytes; | ||
942 | int i; | ||
941 | 943 | ||
942 | leaf = bp->b_addr; | 944 | leaf = bp->b_addr; |
943 | ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)); | 945 | xfs_attr3_leaf_hdr_from_disk(&leafhdr, leaf); |
946 | entry = xfs_attr3_leaf_entryp(leaf); | ||
944 | 947 | ||
945 | entry = &leaf->entries[0]; | ||
946 | bytes = sizeof(struct xfs_attr_sf_hdr); | 948 | bytes = sizeof(struct xfs_attr_sf_hdr); |
947 | for (i = 0; i < be16_to_cpu(leaf->hdr.count); entry++, i++) { | 949 | for (i = 0; i < leafhdr.count; entry++, i++) { |
948 | if (entry->flags & XFS_ATTR_INCOMPLETE) | 950 | if (entry->flags & XFS_ATTR_INCOMPLETE) |
949 | continue; /* don't copy partial entries */ | 951 | continue; /* don't copy partial entries */ |
950 | if (!(entry->flags & XFS_ATTR_LOCAL)) | 952 | if (!(entry->flags & XFS_ATTR_LOCAL)) |
@@ -954,15 +956,15 @@ xfs_attr_shortform_allfit( | |||
954 | return(0); | 956 | return(0); |
955 | if (be16_to_cpu(name_loc->valuelen) >= XFS_ATTR_SF_ENTSIZE_MAX) | 957 | if (be16_to_cpu(name_loc->valuelen) >= XFS_ATTR_SF_ENTSIZE_MAX) |
956 | return(0); | 958 | return(0); |
957 | bytes += sizeof(struct xfs_attr_sf_entry)-1 | 959 | bytes += sizeof(struct xfs_attr_sf_entry) - 1 |
958 | + name_loc->namelen | 960 | + name_loc->namelen |
959 | + be16_to_cpu(name_loc->valuelen); | 961 | + be16_to_cpu(name_loc->valuelen); |
960 | } | 962 | } |
961 | if ((dp->i_mount->m_flags & XFS_MOUNT_ATTR2) && | 963 | if ((dp->i_mount->m_flags & XFS_MOUNT_ATTR2) && |
962 | (dp->i_d.di_format != XFS_DINODE_FMT_BTREE) && | 964 | (dp->i_d.di_format != XFS_DINODE_FMT_BTREE) && |
963 | (bytes == sizeof(struct xfs_attr_sf_hdr))) | 965 | (bytes == sizeof(struct xfs_attr_sf_hdr))) |
964 | return(-1); | 966 | return -1; |
965 | return(xfs_attr_shortform_bytesfit(dp, bytes)); | 967 | return xfs_attr_shortform_bytesfit(dp, bytes); |
966 | } | 968 | } |
967 | 969 | ||
968 | /* | 970 | /* |
@@ -1410,7 +1412,7 @@ xfs_attr3_leaf_add_work( | |||
1410 | name_rmt->valuelen = 0; | 1412 | name_rmt->valuelen = 0; |
1411 | name_rmt->valueblk = 0; | 1413 | name_rmt->valueblk = 0; |
1412 | args->rmtblkno = 1; | 1414 | args->rmtblkno = 1; |
1413 | args->rmtblkcnt = XFS_B_TO_FSB(mp, args->valuelen); | 1415 | args->rmtblkcnt = xfs_attr3_rmt_blocks(mp, args->valuelen); |
1414 | } | 1416 | } |
1415 | xfs_trans_log_buf(args->trans, bp, | 1417 | xfs_trans_log_buf(args->trans, bp, |
1416 | XFS_DA_LOGRANGE(leaf, xfs_attr3_leaf_name(leaf, args->index), | 1418 | XFS_DA_LOGRANGE(leaf, xfs_attr3_leaf_name(leaf, args->index), |
@@ -1443,11 +1445,12 @@ xfs_attr3_leaf_add_work( | |||
1443 | STATIC void | 1445 | STATIC void |
1444 | xfs_attr3_leaf_compact( | 1446 | xfs_attr3_leaf_compact( |
1445 | struct xfs_da_args *args, | 1447 | struct xfs_da_args *args, |
1446 | struct xfs_attr3_icleaf_hdr *ichdr_d, | 1448 | struct xfs_attr3_icleaf_hdr *ichdr_dst, |
1447 | struct xfs_buf *bp) | 1449 | struct xfs_buf *bp) |
1448 | { | 1450 | { |
1449 | xfs_attr_leafblock_t *leaf_s, *leaf_d; | 1451 | struct xfs_attr_leafblock *leaf_src; |
1450 | struct xfs_attr3_icleaf_hdr ichdr_s; | 1452 | struct xfs_attr_leafblock *leaf_dst; |
1453 | struct xfs_attr3_icleaf_hdr ichdr_src; | ||
1451 | struct xfs_trans *trans = args->trans; | 1454 | struct xfs_trans *trans = args->trans; |
1452 | struct xfs_mount *mp = trans->t_mountp; | 1455 | struct xfs_mount *mp = trans->t_mountp; |
1453 | char *tmpbuffer; | 1456 | char *tmpbuffer; |
@@ -1455,29 +1458,38 @@ xfs_attr3_leaf_compact( | |||
1455 | trace_xfs_attr_leaf_compact(args); | 1458 | trace_xfs_attr_leaf_compact(args); |
1456 | 1459 | ||
1457 | tmpbuffer = kmem_alloc(XFS_LBSIZE(mp), KM_SLEEP); | 1460 | tmpbuffer = kmem_alloc(XFS_LBSIZE(mp), KM_SLEEP); |
1458 | ASSERT(tmpbuffer != NULL); | ||
1459 | memcpy(tmpbuffer, bp->b_addr, XFS_LBSIZE(mp)); | 1461 | memcpy(tmpbuffer, bp->b_addr, XFS_LBSIZE(mp)); |
1460 | memset(bp->b_addr, 0, XFS_LBSIZE(mp)); | 1462 | memset(bp->b_addr, 0, XFS_LBSIZE(mp)); |
1463 | leaf_src = (xfs_attr_leafblock_t *)tmpbuffer; | ||
1464 | leaf_dst = bp->b_addr; | ||
1461 | 1465 | ||
1462 | /* | 1466 | /* |
1463 | * Copy basic information | 1467 | * Copy the on-disk header back into the destination buffer to ensure |
1468 | * all the information in the header that is not part of the incore | ||
1469 | * header structure is preserved. | ||
1464 | */ | 1470 | */ |
1465 | leaf_s = (xfs_attr_leafblock_t *)tmpbuffer; | 1471 | memcpy(bp->b_addr, tmpbuffer, xfs_attr3_leaf_hdr_size(leaf_src)); |
1466 | leaf_d = bp->b_addr; | 1472 | |
1467 | ichdr_s = *ichdr_d; /* struct copy */ | 1473 | /* Initialise the incore headers */ |
1468 | ichdr_d->firstused = XFS_LBSIZE(mp); | 1474 | ichdr_src = *ichdr_dst; /* struct copy */ |
1469 | ichdr_d->usedbytes = 0; | 1475 | ichdr_dst->firstused = XFS_LBSIZE(mp); |
1470 | ichdr_d->count = 0; | 1476 | ichdr_dst->usedbytes = 0; |
1471 | ichdr_d->holes = 0; | 1477 | ichdr_dst->count = 0; |
1472 | ichdr_d->freemap[0].base = xfs_attr3_leaf_hdr_size(leaf_s); | 1478 | ichdr_dst->holes = 0; |
1473 | ichdr_d->freemap[0].size = ichdr_d->firstused - ichdr_d->freemap[0].base; | 1479 | ichdr_dst->freemap[0].base = xfs_attr3_leaf_hdr_size(leaf_src); |
1480 | ichdr_dst->freemap[0].size = ichdr_dst->firstused - | ||
1481 | ichdr_dst->freemap[0].base; | ||
1482 | |||
1483 | |||
1484 | /* write the header back to initialise the underlying buffer */ | ||
1485 | xfs_attr3_leaf_hdr_to_disk(leaf_dst, ichdr_dst); | ||
1474 | 1486 | ||
1475 | /* | 1487 | /* |
1476 | * Copy all entry's in the same (sorted) order, | 1488 | * Copy all entry's in the same (sorted) order, |
1477 | * but allocate name/value pairs packed and in sequence. | 1489 | * but allocate name/value pairs packed and in sequence. |
1478 | */ | 1490 | */ |
1479 | xfs_attr3_leaf_moveents(leaf_s, &ichdr_s, 0, leaf_d, ichdr_d, 0, | 1491 | xfs_attr3_leaf_moveents(leaf_src, &ichdr_src, 0, leaf_dst, ichdr_dst, 0, |
1480 | ichdr_s.count, mp); | 1492 | ichdr_src.count, mp); |
1481 | /* | 1493 | /* |
1482 | * this logs the entire buffer, but the caller must write the header | 1494 | * this logs the entire buffer, but the caller must write the header |
1483 | * back to the buffer when it is finished modifying it. | 1495 | * back to the buffer when it is finished modifying it. |
@@ -2179,14 +2191,24 @@ xfs_attr3_leaf_unbalance( | |||
2179 | struct xfs_attr_leafblock *tmp_leaf; | 2191 | struct xfs_attr_leafblock *tmp_leaf; |
2180 | struct xfs_attr3_icleaf_hdr tmphdr; | 2192 | struct xfs_attr3_icleaf_hdr tmphdr; |
2181 | 2193 | ||
2182 | tmp_leaf = kmem_alloc(state->blocksize, KM_SLEEP); | 2194 | tmp_leaf = kmem_zalloc(state->blocksize, KM_SLEEP); |
2183 | memset(tmp_leaf, 0, state->blocksize); | 2195 | |
2184 | memset(&tmphdr, 0, sizeof(tmphdr)); | 2196 | /* |
2197 | * Copy the header into the temp leaf so that all the stuff | ||
2198 | * not in the incore header is present and gets copied back in | ||
2199 | * once we've moved all the entries. | ||
2200 | */ | ||
2201 | memcpy(tmp_leaf, save_leaf, xfs_attr3_leaf_hdr_size(save_leaf)); | ||
2185 | 2202 | ||
2203 | memset(&tmphdr, 0, sizeof(tmphdr)); | ||
2186 | tmphdr.magic = savehdr.magic; | 2204 | tmphdr.magic = savehdr.magic; |
2187 | tmphdr.forw = savehdr.forw; | 2205 | tmphdr.forw = savehdr.forw; |
2188 | tmphdr.back = savehdr.back; | 2206 | tmphdr.back = savehdr.back; |
2189 | tmphdr.firstused = state->blocksize; | 2207 | tmphdr.firstused = state->blocksize; |
2208 | |||
2209 | /* write the header to the temp buffer to initialise it */ | ||
2210 | xfs_attr3_leaf_hdr_to_disk(tmp_leaf, &tmphdr); | ||
2211 | |||
2190 | if (xfs_attr3_leaf_order(save_blk->bp, &savehdr, | 2212 | if (xfs_attr3_leaf_order(save_blk->bp, &savehdr, |
2191 | drop_blk->bp, &drophdr)) { | 2213 | drop_blk->bp, &drophdr)) { |
2192 | xfs_attr3_leaf_moveents(drop_leaf, &drophdr, 0, | 2214 | xfs_attr3_leaf_moveents(drop_leaf, &drophdr, 0, |
@@ -2330,9 +2352,11 @@ xfs_attr3_leaf_lookup_int( | |||
2330 | if (!xfs_attr_namesp_match(args->flags, entry->flags)) | 2352 | if (!xfs_attr_namesp_match(args->flags, entry->flags)) |
2331 | continue; | 2353 | continue; |
2332 | args->index = probe; | 2354 | args->index = probe; |
2355 | args->valuelen = be32_to_cpu(name_rmt->valuelen); | ||
2333 | args->rmtblkno = be32_to_cpu(name_rmt->valueblk); | 2356 | args->rmtblkno = be32_to_cpu(name_rmt->valueblk); |
2334 | args->rmtblkcnt = XFS_B_TO_FSB(args->dp->i_mount, | 2357 | args->rmtblkcnt = xfs_attr3_rmt_blocks( |
2335 | be32_to_cpu(name_rmt->valuelen)); | 2358 | args->dp->i_mount, |
2359 | args->valuelen); | ||
2336 | return XFS_ERROR(EEXIST); | 2360 | return XFS_ERROR(EEXIST); |
2337 | } | 2361 | } |
2338 | } | 2362 | } |
@@ -2383,7 +2407,8 @@ xfs_attr3_leaf_getvalue( | |||
2383 | ASSERT(memcmp(args->name, name_rmt->name, args->namelen) == 0); | 2407 | ASSERT(memcmp(args->name, name_rmt->name, args->namelen) == 0); |
2384 | valuelen = be32_to_cpu(name_rmt->valuelen); | 2408 | valuelen = be32_to_cpu(name_rmt->valuelen); |
2385 | args->rmtblkno = be32_to_cpu(name_rmt->valueblk); | 2409 | args->rmtblkno = be32_to_cpu(name_rmt->valueblk); |
2386 | args->rmtblkcnt = XFS_B_TO_FSB(args->dp->i_mount, valuelen); | 2410 | args->rmtblkcnt = xfs_attr3_rmt_blocks(args->dp->i_mount, |
2411 | valuelen); | ||
2387 | if (args->flags & ATTR_KERNOVAL) { | 2412 | if (args->flags & ATTR_KERNOVAL) { |
2388 | args->valuelen = valuelen; | 2413 | args->valuelen = valuelen; |
2389 | return 0; | 2414 | return 0; |
@@ -2709,7 +2734,8 @@ xfs_attr3_leaf_list_int( | |||
2709 | args.valuelen = valuelen; | 2734 | args.valuelen = valuelen; |
2710 | args.value = kmem_alloc(valuelen, KM_SLEEP | KM_NOFS); | 2735 | args.value = kmem_alloc(valuelen, KM_SLEEP | KM_NOFS); |
2711 | args.rmtblkno = be32_to_cpu(name_rmt->valueblk); | 2736 | args.rmtblkno = be32_to_cpu(name_rmt->valueblk); |
2712 | args.rmtblkcnt = XFS_B_TO_FSB(args.dp->i_mount, valuelen); | 2737 | args.rmtblkcnt = xfs_attr3_rmt_blocks( |
2738 | args.dp->i_mount, valuelen); | ||
2713 | retval = xfs_attr_rmtval_get(&args); | 2739 | retval = xfs_attr_rmtval_get(&args); |
2714 | if (retval) | 2740 | if (retval) |
2715 | return retval; | 2741 | return retval; |
diff --git a/fs/xfs/xfs_attr_remote.c b/fs/xfs/xfs_attr_remote.c index dee84466dcc9..ef6b0c124528 100644 --- a/fs/xfs/xfs_attr_remote.c +++ b/fs/xfs/xfs_attr_remote.c | |||
@@ -47,22 +47,55 @@ | |||
47 | * Each contiguous block has a header, so it is not just a simple attribute | 47 | * Each contiguous block has a header, so it is not just a simple attribute |
48 | * length to FSB conversion. | 48 | * length to FSB conversion. |
49 | */ | 49 | */ |
50 | static int | 50 | int |
51 | xfs_attr3_rmt_blocks( | 51 | xfs_attr3_rmt_blocks( |
52 | struct xfs_mount *mp, | 52 | struct xfs_mount *mp, |
53 | int attrlen) | 53 | int attrlen) |
54 | { | 54 | { |
55 | int buflen = XFS_ATTR3_RMT_BUF_SPACE(mp, | 55 | if (xfs_sb_version_hascrc(&mp->m_sb)) { |
56 | mp->m_sb.sb_blocksize); | 56 | int buflen = XFS_ATTR3_RMT_BUF_SPACE(mp, mp->m_sb.sb_blocksize); |
57 | return (attrlen + buflen - 1) / buflen; | 57 | return (attrlen + buflen - 1) / buflen; |
58 | } | ||
59 | return XFS_B_TO_FSB(mp, attrlen); | ||
60 | } | ||
61 | |||
62 | /* | ||
63 | * Checking of the remote attribute header is split into two parts. The verifier | ||
64 | * does CRC, location and bounds checking, the unpacking function checks the | ||
65 | * attribute parameters and owner. | ||
66 | */ | ||
67 | static bool | ||
68 | xfs_attr3_rmt_hdr_ok( | ||
69 | struct xfs_mount *mp, | ||
70 | void *ptr, | ||
71 | xfs_ino_t ino, | ||
72 | uint32_t offset, | ||
73 | uint32_t size, | ||
74 | xfs_daddr_t bno) | ||
75 | { | ||
76 | struct xfs_attr3_rmt_hdr *rmt = ptr; | ||
77 | |||
78 | if (bno != be64_to_cpu(rmt->rm_blkno)) | ||
79 | return false; | ||
80 | if (offset != be32_to_cpu(rmt->rm_offset)) | ||
81 | return false; | ||
82 | if (size != be32_to_cpu(rmt->rm_bytes)) | ||
83 | return false; | ||
84 | if (ino != be64_to_cpu(rmt->rm_owner)) | ||
85 | return false; | ||
86 | |||
87 | /* ok */ | ||
88 | return true; | ||
58 | } | 89 | } |
59 | 90 | ||
60 | static bool | 91 | static bool |
61 | xfs_attr3_rmt_verify( | 92 | xfs_attr3_rmt_verify( |
62 | struct xfs_buf *bp) | 93 | struct xfs_mount *mp, |
94 | void *ptr, | ||
95 | int fsbsize, | ||
96 | xfs_daddr_t bno) | ||
63 | { | 97 | { |
64 | struct xfs_mount *mp = bp->b_target->bt_mount; | 98 | struct xfs_attr3_rmt_hdr *rmt = ptr; |
65 | struct xfs_attr3_rmt_hdr *rmt = bp->b_addr; | ||
66 | 99 | ||
67 | if (!xfs_sb_version_hascrc(&mp->m_sb)) | 100 | if (!xfs_sb_version_hascrc(&mp->m_sb)) |
68 | return false; | 101 | return false; |
@@ -70,7 +103,9 @@ xfs_attr3_rmt_verify( | |||
70 | return false; | 103 | return false; |
71 | if (!uuid_equal(&rmt->rm_uuid, &mp->m_sb.sb_uuid)) | 104 | if (!uuid_equal(&rmt->rm_uuid, &mp->m_sb.sb_uuid)) |
72 | return false; | 105 | return false; |
73 | if (bp->b_bn != be64_to_cpu(rmt->rm_blkno)) | 106 | if (be64_to_cpu(rmt->rm_blkno) != bno) |
107 | return false; | ||
108 | if (be32_to_cpu(rmt->rm_bytes) > fsbsize - sizeof(*rmt)) | ||
74 | return false; | 109 | return false; |
75 | if (be32_to_cpu(rmt->rm_offset) + | 110 | if (be32_to_cpu(rmt->rm_offset) + |
76 | be32_to_cpu(rmt->rm_bytes) >= XATTR_SIZE_MAX) | 111 | be32_to_cpu(rmt->rm_bytes) >= XATTR_SIZE_MAX) |
@@ -86,17 +121,40 @@ xfs_attr3_rmt_read_verify( | |||
86 | struct xfs_buf *bp) | 121 | struct xfs_buf *bp) |
87 | { | 122 | { |
88 | struct xfs_mount *mp = bp->b_target->bt_mount; | 123 | struct xfs_mount *mp = bp->b_target->bt_mount; |
124 | char *ptr; | ||
125 | int len; | ||
126 | bool corrupt = false; | ||
127 | xfs_daddr_t bno; | ||
89 | 128 | ||
90 | /* no verification of non-crc buffers */ | 129 | /* no verification of non-crc buffers */ |
91 | if (!xfs_sb_version_hascrc(&mp->m_sb)) | 130 | if (!xfs_sb_version_hascrc(&mp->m_sb)) |
92 | return; | 131 | return; |
93 | 132 | ||
94 | if (!xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), | 133 | ptr = bp->b_addr; |
95 | XFS_ATTR3_RMT_CRC_OFF) || | 134 | bno = bp->b_bn; |
96 | !xfs_attr3_rmt_verify(bp)) { | 135 | len = BBTOB(bp->b_length); |
136 | ASSERT(len >= XFS_LBSIZE(mp)); | ||
137 | |||
138 | while (len > 0) { | ||
139 | if (!xfs_verify_cksum(ptr, XFS_LBSIZE(mp), | ||
140 | XFS_ATTR3_RMT_CRC_OFF)) { | ||
141 | corrupt = true; | ||
142 | break; | ||
143 | } | ||
144 | if (!xfs_attr3_rmt_verify(mp, ptr, XFS_LBSIZE(mp), bno)) { | ||
145 | corrupt = true; | ||
146 | break; | ||
147 | } | ||
148 | len -= XFS_LBSIZE(mp); | ||
149 | ptr += XFS_LBSIZE(mp); | ||
150 | bno += mp->m_bsize; | ||
151 | } | ||
152 | |||
153 | if (corrupt) { | ||
97 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); | 154 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); |
98 | xfs_buf_ioerror(bp, EFSCORRUPTED); | 155 | xfs_buf_ioerror(bp, EFSCORRUPTED); |
99 | } | 156 | } else |
157 | ASSERT(len == 0); | ||
100 | } | 158 | } |
101 | 159 | ||
102 | static void | 160 | static void |
@@ -105,23 +163,39 @@ xfs_attr3_rmt_write_verify( | |||
105 | { | 163 | { |
106 | struct xfs_mount *mp = bp->b_target->bt_mount; | 164 | struct xfs_mount *mp = bp->b_target->bt_mount; |
107 | struct xfs_buf_log_item *bip = bp->b_fspriv; | 165 | struct xfs_buf_log_item *bip = bp->b_fspriv; |
166 | char *ptr; | ||
167 | int len; | ||
168 | xfs_daddr_t bno; | ||
108 | 169 | ||
109 | /* no verification of non-crc buffers */ | 170 | /* no verification of non-crc buffers */ |
110 | if (!xfs_sb_version_hascrc(&mp->m_sb)) | 171 | if (!xfs_sb_version_hascrc(&mp->m_sb)) |
111 | return; | 172 | return; |
112 | 173 | ||
113 | if (!xfs_attr3_rmt_verify(bp)) { | 174 | ptr = bp->b_addr; |
114 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); | 175 | bno = bp->b_bn; |
115 | xfs_buf_ioerror(bp, EFSCORRUPTED); | 176 | len = BBTOB(bp->b_length); |
116 | return; | 177 | ASSERT(len >= XFS_LBSIZE(mp)); |
117 | } | 178 | |
179 | while (len > 0) { | ||
180 | if (!xfs_attr3_rmt_verify(mp, ptr, XFS_LBSIZE(mp), bno)) { | ||
181 | XFS_CORRUPTION_ERROR(__func__, | ||
182 | XFS_ERRLEVEL_LOW, mp, bp->b_addr); | ||
183 | xfs_buf_ioerror(bp, EFSCORRUPTED); | ||
184 | return; | ||
185 | } | ||
186 | if (bip) { | ||
187 | struct xfs_attr3_rmt_hdr *rmt; | ||
188 | |||
189 | rmt = (struct xfs_attr3_rmt_hdr *)ptr; | ||
190 | rmt->rm_lsn = cpu_to_be64(bip->bli_item.li_lsn); | ||
191 | } | ||
192 | xfs_update_cksum(ptr, XFS_LBSIZE(mp), XFS_ATTR3_RMT_CRC_OFF); | ||
118 | 193 | ||
119 | if (bip) { | 194 | len -= XFS_LBSIZE(mp); |
120 | struct xfs_attr3_rmt_hdr *rmt = bp->b_addr; | 195 | ptr += XFS_LBSIZE(mp); |
121 | rmt->rm_lsn = cpu_to_be64(bip->bli_item.li_lsn); | 196 | bno += mp->m_bsize; |
122 | } | 197 | } |
123 | xfs_update_cksum(bp->b_addr, BBTOB(bp->b_length), | 198 | ASSERT(len == 0); |
124 | XFS_ATTR3_RMT_CRC_OFF); | ||
125 | } | 199 | } |
126 | 200 | ||
127 | const struct xfs_buf_ops xfs_attr3_rmt_buf_ops = { | 201 | const struct xfs_buf_ops xfs_attr3_rmt_buf_ops = { |
@@ -129,15 +203,16 @@ const struct xfs_buf_ops xfs_attr3_rmt_buf_ops = { | |||
129 | .verify_write = xfs_attr3_rmt_write_verify, | 203 | .verify_write = xfs_attr3_rmt_write_verify, |
130 | }; | 204 | }; |
131 | 205 | ||
132 | static int | 206 | STATIC int |
133 | xfs_attr3_rmt_hdr_set( | 207 | xfs_attr3_rmt_hdr_set( |
134 | struct xfs_mount *mp, | 208 | struct xfs_mount *mp, |
209 | void *ptr, | ||
135 | xfs_ino_t ino, | 210 | xfs_ino_t ino, |
136 | uint32_t offset, | 211 | uint32_t offset, |
137 | uint32_t size, | 212 | uint32_t size, |
138 | struct xfs_buf *bp) | 213 | xfs_daddr_t bno) |
139 | { | 214 | { |
140 | struct xfs_attr3_rmt_hdr *rmt = bp->b_addr; | 215 | struct xfs_attr3_rmt_hdr *rmt = ptr; |
141 | 216 | ||
142 | if (!xfs_sb_version_hascrc(&mp->m_sb)) | 217 | if (!xfs_sb_version_hascrc(&mp->m_sb)) |
143 | return 0; | 218 | return 0; |
@@ -147,36 +222,107 @@ xfs_attr3_rmt_hdr_set( | |||
147 | rmt->rm_bytes = cpu_to_be32(size); | 222 | rmt->rm_bytes = cpu_to_be32(size); |
148 | uuid_copy(&rmt->rm_uuid, &mp->m_sb.sb_uuid); | 223 | uuid_copy(&rmt->rm_uuid, &mp->m_sb.sb_uuid); |
149 | rmt->rm_owner = cpu_to_be64(ino); | 224 | rmt->rm_owner = cpu_to_be64(ino); |
150 | rmt->rm_blkno = cpu_to_be64(bp->b_bn); | 225 | rmt->rm_blkno = cpu_to_be64(bno); |
151 | bp->b_ops = &xfs_attr3_rmt_buf_ops; | ||
152 | 226 | ||
153 | return sizeof(struct xfs_attr3_rmt_hdr); | 227 | return sizeof(struct xfs_attr3_rmt_hdr); |
154 | } | 228 | } |
155 | 229 | ||
156 | /* | 230 | /* |
157 | * Checking of the remote attribute header is split into two parts. the verifier | 231 | * Helper functions to copy attribute data in and out of the one disk extents |
158 | * does CRC, location and bounds checking, the unpacking function checks the | ||
159 | * attribute parameters and owner. | ||
160 | */ | 232 | */ |
161 | static bool | 233 | STATIC int |
162 | xfs_attr3_rmt_hdr_ok( | 234 | xfs_attr_rmtval_copyout( |
163 | struct xfs_mount *mp, | 235 | struct xfs_mount *mp, |
164 | xfs_ino_t ino, | 236 | struct xfs_buf *bp, |
165 | uint32_t offset, | 237 | xfs_ino_t ino, |
166 | uint32_t size, | 238 | int *offset, |
167 | struct xfs_buf *bp) | 239 | int *valuelen, |
240 | char **dst) | ||
168 | { | 241 | { |
169 | struct xfs_attr3_rmt_hdr *rmt = bp->b_addr; | 242 | char *src = bp->b_addr; |
243 | xfs_daddr_t bno = bp->b_bn; | ||
244 | int len = BBTOB(bp->b_length); | ||
170 | 245 | ||
171 | if (offset != be32_to_cpu(rmt->rm_offset)) | 246 | ASSERT(len >= XFS_LBSIZE(mp)); |
172 | return false; | ||
173 | if (size != be32_to_cpu(rmt->rm_bytes)) | ||
174 | return false; | ||
175 | if (ino != be64_to_cpu(rmt->rm_owner)) | ||
176 | return false; | ||
177 | 247 | ||
178 | /* ok */ | 248 | while (len > 0 && *valuelen > 0) { |
179 | return true; | 249 | int hdr_size = 0; |
250 | int byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, XFS_LBSIZE(mp)); | ||
251 | |||
252 | byte_cnt = min_t(int, *valuelen, byte_cnt); | ||
253 | |||
254 | if (xfs_sb_version_hascrc(&mp->m_sb)) { | ||
255 | if (!xfs_attr3_rmt_hdr_ok(mp, src, ino, *offset, | ||
256 | byte_cnt, bno)) { | ||
257 | xfs_alert(mp, | ||
258 | "remote attribute header mismatch bno/off/len/owner (0x%llx/0x%x/Ox%x/0x%llx)", | ||
259 | bno, *offset, byte_cnt, ino); | ||
260 | return EFSCORRUPTED; | ||
261 | } | ||
262 | hdr_size = sizeof(struct xfs_attr3_rmt_hdr); | ||
263 | } | ||
264 | |||
265 | memcpy(*dst, src + hdr_size, byte_cnt); | ||
266 | |||
267 | /* roll buffer forwards */ | ||
268 | len -= XFS_LBSIZE(mp); | ||
269 | src += XFS_LBSIZE(mp); | ||
270 | bno += mp->m_bsize; | ||
271 | |||
272 | /* roll attribute data forwards */ | ||
273 | *valuelen -= byte_cnt; | ||
274 | *dst += byte_cnt; | ||
275 | *offset += byte_cnt; | ||
276 | } | ||
277 | return 0; | ||
278 | } | ||
279 | |||
280 | STATIC void | ||
281 | xfs_attr_rmtval_copyin( | ||
282 | struct xfs_mount *mp, | ||
283 | struct xfs_buf *bp, | ||
284 | xfs_ino_t ino, | ||
285 | int *offset, | ||
286 | int *valuelen, | ||
287 | char **src) | ||
288 | { | ||
289 | char *dst = bp->b_addr; | ||
290 | xfs_daddr_t bno = bp->b_bn; | ||
291 | int len = BBTOB(bp->b_length); | ||
292 | |||
293 | ASSERT(len >= XFS_LBSIZE(mp)); | ||
294 | |||
295 | while (len > 0 && *valuelen > 0) { | ||
296 | int hdr_size; | ||
297 | int byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, XFS_LBSIZE(mp)); | ||
298 | |||
299 | byte_cnt = min(*valuelen, byte_cnt); | ||
300 | hdr_size = xfs_attr3_rmt_hdr_set(mp, dst, ino, *offset, | ||
301 | byte_cnt, bno); | ||
302 | |||
303 | memcpy(dst + hdr_size, *src, byte_cnt); | ||
304 | |||
305 | /* | ||
306 | * If this is the last block, zero the remainder of it. | ||
307 | * Check that we are actually the last block, too. | ||
308 | */ | ||
309 | if (byte_cnt + hdr_size < XFS_LBSIZE(mp)) { | ||
310 | ASSERT(*valuelen - byte_cnt == 0); | ||
311 | ASSERT(len == XFS_LBSIZE(mp)); | ||
312 | memset(dst + hdr_size + byte_cnt, 0, | ||
313 | XFS_LBSIZE(mp) - hdr_size - byte_cnt); | ||
314 | } | ||
315 | |||
316 | /* roll buffer forwards */ | ||
317 | len -= XFS_LBSIZE(mp); | ||
318 | dst += XFS_LBSIZE(mp); | ||
319 | bno += mp->m_bsize; | ||
320 | |||
321 | /* roll attribute data forwards */ | ||
322 | *valuelen -= byte_cnt; | ||
323 | *src += byte_cnt; | ||
324 | *offset += byte_cnt; | ||
325 | } | ||
180 | } | 326 | } |
181 | 327 | ||
182 | /* | 328 | /* |
@@ -190,13 +336,12 @@ xfs_attr_rmtval_get( | |||
190 | struct xfs_bmbt_irec map[ATTR_RMTVALUE_MAPSIZE]; | 336 | struct xfs_bmbt_irec map[ATTR_RMTVALUE_MAPSIZE]; |
191 | struct xfs_mount *mp = args->dp->i_mount; | 337 | struct xfs_mount *mp = args->dp->i_mount; |
192 | struct xfs_buf *bp; | 338 | struct xfs_buf *bp; |
193 | xfs_daddr_t dblkno; | ||
194 | xfs_dablk_t lblkno = args->rmtblkno; | 339 | xfs_dablk_t lblkno = args->rmtblkno; |
195 | void *dst = args->value; | 340 | char *dst = args->value; |
196 | int valuelen = args->valuelen; | 341 | int valuelen = args->valuelen; |
197 | int nmap; | 342 | int nmap; |
198 | int error; | 343 | int error; |
199 | int blkcnt; | 344 | int blkcnt = args->rmtblkcnt; |
200 | int i; | 345 | int i; |
201 | int offset = 0; | 346 | int offset = 0; |
202 | 347 | ||
@@ -207,52 +352,36 @@ xfs_attr_rmtval_get( | |||
207 | while (valuelen > 0) { | 352 | while (valuelen > 0) { |
208 | nmap = ATTR_RMTVALUE_MAPSIZE; | 353 | nmap = ATTR_RMTVALUE_MAPSIZE; |
209 | error = xfs_bmapi_read(args->dp, (xfs_fileoff_t)lblkno, | 354 | error = xfs_bmapi_read(args->dp, (xfs_fileoff_t)lblkno, |
210 | args->rmtblkcnt, map, &nmap, | 355 | blkcnt, map, &nmap, |
211 | XFS_BMAPI_ATTRFORK); | 356 | XFS_BMAPI_ATTRFORK); |
212 | if (error) | 357 | if (error) |
213 | return error; | 358 | return error; |
214 | ASSERT(nmap >= 1); | 359 | ASSERT(nmap >= 1); |
215 | 360 | ||
216 | for (i = 0; (i < nmap) && (valuelen > 0); i++) { | 361 | for (i = 0; (i < nmap) && (valuelen > 0); i++) { |
217 | int byte_cnt; | 362 | xfs_daddr_t dblkno; |
218 | char *src; | 363 | int dblkcnt; |
219 | 364 | ||
220 | ASSERT((map[i].br_startblock != DELAYSTARTBLOCK) && | 365 | ASSERT((map[i].br_startblock != DELAYSTARTBLOCK) && |
221 | (map[i].br_startblock != HOLESTARTBLOCK)); | 366 | (map[i].br_startblock != HOLESTARTBLOCK)); |
222 | dblkno = XFS_FSB_TO_DADDR(mp, map[i].br_startblock); | 367 | dblkno = XFS_FSB_TO_DADDR(mp, map[i].br_startblock); |
223 | blkcnt = XFS_FSB_TO_BB(mp, map[i].br_blockcount); | 368 | dblkcnt = XFS_FSB_TO_BB(mp, map[i].br_blockcount); |
224 | error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp, | 369 | error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp, |
225 | dblkno, blkcnt, 0, &bp, | 370 | dblkno, dblkcnt, 0, &bp, |
226 | &xfs_attr3_rmt_buf_ops); | 371 | &xfs_attr3_rmt_buf_ops); |
227 | if (error) | 372 | if (error) |
228 | return error; | 373 | return error; |
229 | 374 | ||
230 | byte_cnt = min_t(int, valuelen, BBTOB(bp->b_length)); | 375 | error = xfs_attr_rmtval_copyout(mp, bp, args->dp->i_ino, |
231 | byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, byte_cnt); | 376 | &offset, &valuelen, |
232 | 377 | &dst); | |
233 | src = bp->b_addr; | ||
234 | if (xfs_sb_version_hascrc(&mp->m_sb)) { | ||
235 | if (!xfs_attr3_rmt_hdr_ok(mp, args->dp->i_ino, | ||
236 | offset, byte_cnt, bp)) { | ||
237 | xfs_alert(mp, | ||
238 | "remote attribute header does not match required off/len/owner (0x%x/Ox%x,0x%llx)", | ||
239 | offset, byte_cnt, args->dp->i_ino); | ||
240 | xfs_buf_relse(bp); | ||
241 | return EFSCORRUPTED; | ||
242 | |||
243 | } | ||
244 | |||
245 | src += sizeof(struct xfs_attr3_rmt_hdr); | ||
246 | } | ||
247 | |||
248 | memcpy(dst, src, byte_cnt); | ||
249 | xfs_buf_relse(bp); | 378 | xfs_buf_relse(bp); |
379 | if (error) | ||
380 | return error; | ||
250 | 381 | ||
251 | offset += byte_cnt; | 382 | /* roll attribute extent map forwards */ |
252 | dst += byte_cnt; | ||
253 | valuelen -= byte_cnt; | ||
254 | |||
255 | lblkno += map[i].br_blockcount; | 383 | lblkno += map[i].br_blockcount; |
384 | blkcnt -= map[i].br_blockcount; | ||
256 | } | 385 | } |
257 | } | 386 | } |
258 | ASSERT(valuelen == 0); | 387 | ASSERT(valuelen == 0); |
@@ -270,17 +399,13 @@ xfs_attr_rmtval_set( | |||
270 | struct xfs_inode *dp = args->dp; | 399 | struct xfs_inode *dp = args->dp; |
271 | struct xfs_mount *mp = dp->i_mount; | 400 | struct xfs_mount *mp = dp->i_mount; |
272 | struct xfs_bmbt_irec map; | 401 | struct xfs_bmbt_irec map; |
273 | struct xfs_buf *bp; | ||
274 | xfs_daddr_t dblkno; | ||
275 | xfs_dablk_t lblkno; | 402 | xfs_dablk_t lblkno; |
276 | xfs_fileoff_t lfileoff = 0; | 403 | xfs_fileoff_t lfileoff = 0; |
277 | void *src = args->value; | 404 | char *src = args->value; |
278 | int blkcnt; | 405 | int blkcnt; |
279 | int valuelen; | 406 | int valuelen; |
280 | int nmap; | 407 | int nmap; |
281 | int error; | 408 | int error; |
282 | int hdrcnt = 0; | ||
283 | bool crcs = xfs_sb_version_hascrc(&mp->m_sb); | ||
284 | int offset = 0; | 409 | int offset = 0; |
285 | 410 | ||
286 | trace_xfs_attr_rmtval_set(args); | 411 | trace_xfs_attr_rmtval_set(args); |
@@ -289,24 +414,14 @@ xfs_attr_rmtval_set( | |||
289 | * Find a "hole" in the attribute address space large enough for | 414 | * Find a "hole" in the attribute address space large enough for |
290 | * us to drop the new attribute's value into. Because CRC enable | 415 | * us to drop the new attribute's value into. Because CRC enable |
291 | * attributes have headers, we can't just do a straight byte to FSB | 416 | * attributes have headers, we can't just do a straight byte to FSB |
292 | * conversion. We calculate the worst case block count in this case | 417 | * conversion and have to take the header space into account. |
293 | * and we may not need that many, so we have to handle this when | ||
294 | * allocating the blocks below. | ||
295 | */ | 418 | */ |
296 | if (!crcs) | 419 | blkcnt = xfs_attr3_rmt_blocks(mp, args->valuelen); |
297 | blkcnt = XFS_B_TO_FSB(mp, args->valuelen); | ||
298 | else | ||
299 | blkcnt = xfs_attr3_rmt_blocks(mp, args->valuelen); | ||
300 | |||
301 | error = xfs_bmap_first_unused(args->trans, args->dp, blkcnt, &lfileoff, | 420 | error = xfs_bmap_first_unused(args->trans, args->dp, blkcnt, &lfileoff, |
302 | XFS_ATTR_FORK); | 421 | XFS_ATTR_FORK); |
303 | if (error) | 422 | if (error) |
304 | return error; | 423 | return error; |
305 | 424 | ||
306 | /* Start with the attribute data. We'll allocate the rest afterwards. */ | ||
307 | if (crcs) | ||
308 | blkcnt = XFS_B_TO_FSB(mp, args->valuelen); | ||
309 | |||
310 | args->rmtblkno = lblkno = (xfs_dablk_t)lfileoff; | 425 | args->rmtblkno = lblkno = (xfs_dablk_t)lfileoff; |
311 | args->rmtblkcnt = blkcnt; | 426 | args->rmtblkcnt = blkcnt; |
312 | 427 | ||
@@ -349,26 +464,6 @@ xfs_attr_rmtval_set( | |||
349 | (map.br_startblock != HOLESTARTBLOCK)); | 464 | (map.br_startblock != HOLESTARTBLOCK)); |
350 | lblkno += map.br_blockcount; | 465 | lblkno += map.br_blockcount; |
351 | blkcnt -= map.br_blockcount; | 466 | blkcnt -= map.br_blockcount; |
352 | hdrcnt++; | ||
353 | |||
354 | /* | ||
355 | * If we have enough blocks for the attribute data, calculate | ||
356 | * how many extra blocks we need for headers. We might run | ||
357 | * through this multiple times in the case that the additional | ||
358 | * headers in the blocks needed for the data fragments spills | ||
359 | * into requiring more blocks. e.g. for 512 byte blocks, we'll | ||
360 | * spill for another block every 9 headers we require in this | ||
361 | * loop. | ||
362 | */ | ||
363 | if (crcs && blkcnt == 0) { | ||
364 | int total_len; | ||
365 | |||
366 | total_len = args->valuelen + | ||
367 | hdrcnt * sizeof(struct xfs_attr3_rmt_hdr); | ||
368 | blkcnt = XFS_B_TO_FSB(mp, total_len); | ||
369 | blkcnt -= args->rmtblkcnt; | ||
370 | args->rmtblkcnt += blkcnt; | ||
371 | } | ||
372 | 467 | ||
373 | /* | 468 | /* |
374 | * Start the next trans in the chain. | 469 | * Start the next trans in the chain. |
@@ -385,18 +480,19 @@ xfs_attr_rmtval_set( | |||
385 | * the INCOMPLETE flag. | 480 | * the INCOMPLETE flag. |
386 | */ | 481 | */ |
387 | lblkno = args->rmtblkno; | 482 | lblkno = args->rmtblkno; |
483 | blkcnt = args->rmtblkcnt; | ||
388 | valuelen = args->valuelen; | 484 | valuelen = args->valuelen; |
389 | while (valuelen > 0) { | 485 | while (valuelen > 0) { |
390 | int byte_cnt; | 486 | struct xfs_buf *bp; |
391 | char *buf; | 487 | xfs_daddr_t dblkno; |
488 | int dblkcnt; | ||
489 | |||
490 | ASSERT(blkcnt > 0); | ||
392 | 491 | ||
393 | /* | ||
394 | * Try to remember where we decided to put the value. | ||
395 | */ | ||
396 | xfs_bmap_init(args->flist, args->firstblock); | 492 | xfs_bmap_init(args->flist, args->firstblock); |
397 | nmap = 1; | 493 | nmap = 1; |
398 | error = xfs_bmapi_read(dp, (xfs_fileoff_t)lblkno, | 494 | error = xfs_bmapi_read(dp, (xfs_fileoff_t)lblkno, |
399 | args->rmtblkcnt, &map, &nmap, | 495 | blkcnt, &map, &nmap, |
400 | XFS_BMAPI_ATTRFORK); | 496 | XFS_BMAPI_ATTRFORK); |
401 | if (error) | 497 | if (error) |
402 | return(error); | 498 | return(error); |
@@ -405,41 +501,27 @@ xfs_attr_rmtval_set( | |||
405 | (map.br_startblock != HOLESTARTBLOCK)); | 501 | (map.br_startblock != HOLESTARTBLOCK)); |
406 | 502 | ||
407 | dblkno = XFS_FSB_TO_DADDR(mp, map.br_startblock), | 503 | dblkno = XFS_FSB_TO_DADDR(mp, map.br_startblock), |
408 | blkcnt = XFS_FSB_TO_BB(mp, map.br_blockcount); | 504 | dblkcnt = XFS_FSB_TO_BB(mp, map.br_blockcount); |
409 | 505 | ||
410 | bp = xfs_buf_get(mp->m_ddev_targp, dblkno, blkcnt, 0); | 506 | bp = xfs_buf_get(mp->m_ddev_targp, dblkno, dblkcnt, 0); |
411 | if (!bp) | 507 | if (!bp) |
412 | return ENOMEM; | 508 | return ENOMEM; |
413 | bp->b_ops = &xfs_attr3_rmt_buf_ops; | 509 | bp->b_ops = &xfs_attr3_rmt_buf_ops; |
414 | 510 | ||
415 | byte_cnt = BBTOB(bp->b_length); | 511 | xfs_attr_rmtval_copyin(mp, bp, args->dp->i_ino, &offset, |
416 | byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, byte_cnt); | 512 | &valuelen, &src); |
417 | if (valuelen < byte_cnt) | ||
418 | byte_cnt = valuelen; | ||
419 | |||
420 | buf = bp->b_addr; | ||
421 | buf += xfs_attr3_rmt_hdr_set(mp, dp->i_ino, offset, | ||
422 | byte_cnt, bp); | ||
423 | memcpy(buf, src, byte_cnt); | ||
424 | |||
425 | if (byte_cnt < BBTOB(bp->b_length)) | ||
426 | xfs_buf_zero(bp, byte_cnt, | ||
427 | BBTOB(bp->b_length) - byte_cnt); | ||
428 | 513 | ||
429 | error = xfs_bwrite(bp); /* GROT: NOTE: synchronous write */ | 514 | error = xfs_bwrite(bp); /* GROT: NOTE: synchronous write */ |
430 | xfs_buf_relse(bp); | 515 | xfs_buf_relse(bp); |
431 | if (error) | 516 | if (error) |
432 | return error; | 517 | return error; |
433 | 518 | ||
434 | src += byte_cnt; | ||
435 | valuelen -= byte_cnt; | ||
436 | offset += byte_cnt; | ||
437 | hdrcnt--; | ||
438 | 519 | ||
520 | /* roll attribute extent map forwards */ | ||
439 | lblkno += map.br_blockcount; | 521 | lblkno += map.br_blockcount; |
522 | blkcnt -= map.br_blockcount; | ||
440 | } | 523 | } |
441 | ASSERT(valuelen == 0); | 524 | ASSERT(valuelen == 0); |
442 | ASSERT(hdrcnt == 0); | ||
443 | return 0; | 525 | return 0; |
444 | } | 526 | } |
445 | 527 | ||
@@ -448,33 +530,40 @@ xfs_attr_rmtval_set( | |||
448 | * out-of-line buffer that it is stored on. | 530 | * out-of-line buffer that it is stored on. |
449 | */ | 531 | */ |
450 | int | 532 | int |
451 | xfs_attr_rmtval_remove(xfs_da_args_t *args) | 533 | xfs_attr_rmtval_remove( |
534 | struct xfs_da_args *args) | ||
452 | { | 535 | { |
453 | xfs_mount_t *mp; | 536 | struct xfs_mount *mp = args->dp->i_mount; |
454 | xfs_bmbt_irec_t map; | 537 | xfs_dablk_t lblkno; |
455 | xfs_buf_t *bp; | 538 | int blkcnt; |
456 | xfs_daddr_t dblkno; | 539 | int error; |
457 | xfs_dablk_t lblkno; | 540 | int done; |
458 | int valuelen, blkcnt, nmap, error, done, committed; | ||
459 | 541 | ||
460 | trace_xfs_attr_rmtval_remove(args); | 542 | trace_xfs_attr_rmtval_remove(args); |
461 | 543 | ||
462 | mp = args->dp->i_mount; | ||
463 | |||
464 | /* | 544 | /* |
465 | * Roll through the "value", invalidating the attribute value's | 545 | * Roll through the "value", invalidating the attribute value's blocks. |
466 | * blocks. | 546 | * Note that args->rmtblkcnt is the minimum number of data blocks we'll |
547 | * see for a CRC enabled remote attribute. Each extent will have a | ||
548 | * header, and so we may have more blocks than we realise here. If we | ||
549 | * fail to map the blocks correctly, we'll have problems with the buffer | ||
550 | * lookups. | ||
467 | */ | 551 | */ |
468 | lblkno = args->rmtblkno; | 552 | lblkno = args->rmtblkno; |
469 | valuelen = args->rmtblkcnt; | 553 | blkcnt = args->rmtblkcnt; |
470 | while (valuelen > 0) { | 554 | while (blkcnt > 0) { |
555 | struct xfs_bmbt_irec map; | ||
556 | struct xfs_buf *bp; | ||
557 | xfs_daddr_t dblkno; | ||
558 | int dblkcnt; | ||
559 | int nmap; | ||
560 | |||
471 | /* | 561 | /* |
472 | * Try to remember where we decided to put the value. | 562 | * Try to remember where we decided to put the value. |
473 | */ | 563 | */ |
474 | nmap = 1; | 564 | nmap = 1; |
475 | error = xfs_bmapi_read(args->dp, (xfs_fileoff_t)lblkno, | 565 | error = xfs_bmapi_read(args->dp, (xfs_fileoff_t)lblkno, |
476 | args->rmtblkcnt, &map, &nmap, | 566 | blkcnt, &map, &nmap, XFS_BMAPI_ATTRFORK); |
477 | XFS_BMAPI_ATTRFORK); | ||
478 | if (error) | 567 | if (error) |
479 | return(error); | 568 | return(error); |
480 | ASSERT(nmap == 1); | 569 | ASSERT(nmap == 1); |
@@ -482,21 +571,20 @@ xfs_attr_rmtval_remove(xfs_da_args_t *args) | |||
482 | (map.br_startblock != HOLESTARTBLOCK)); | 571 | (map.br_startblock != HOLESTARTBLOCK)); |
483 | 572 | ||
484 | dblkno = XFS_FSB_TO_DADDR(mp, map.br_startblock), | 573 | dblkno = XFS_FSB_TO_DADDR(mp, map.br_startblock), |
485 | blkcnt = XFS_FSB_TO_BB(mp, map.br_blockcount); | 574 | dblkcnt = XFS_FSB_TO_BB(mp, map.br_blockcount); |
486 | 575 | ||
487 | /* | 576 | /* |
488 | * If the "remote" value is in the cache, remove it. | 577 | * If the "remote" value is in the cache, remove it. |
489 | */ | 578 | */ |
490 | bp = xfs_incore(mp->m_ddev_targp, dblkno, blkcnt, XBF_TRYLOCK); | 579 | bp = xfs_incore(mp->m_ddev_targp, dblkno, dblkcnt, XBF_TRYLOCK); |
491 | if (bp) { | 580 | if (bp) { |
492 | xfs_buf_stale(bp); | 581 | xfs_buf_stale(bp); |
493 | xfs_buf_relse(bp); | 582 | xfs_buf_relse(bp); |
494 | bp = NULL; | 583 | bp = NULL; |
495 | } | 584 | } |
496 | 585 | ||
497 | valuelen -= map.br_blockcount; | ||
498 | |||
499 | lblkno += map.br_blockcount; | 586 | lblkno += map.br_blockcount; |
587 | blkcnt -= map.br_blockcount; | ||
500 | } | 588 | } |
501 | 589 | ||
502 | /* | 590 | /* |
@@ -506,6 +594,8 @@ xfs_attr_rmtval_remove(xfs_da_args_t *args) | |||
506 | blkcnt = args->rmtblkcnt; | 594 | blkcnt = args->rmtblkcnt; |
507 | done = 0; | 595 | done = 0; |
508 | while (!done) { | 596 | while (!done) { |
597 | int committed; | ||
598 | |||
509 | xfs_bmap_init(args->flist, args->firstblock); | 599 | xfs_bmap_init(args->flist, args->firstblock); |
510 | error = xfs_bunmapi(args->trans, args->dp, lblkno, blkcnt, | 600 | error = xfs_bunmapi(args->trans, args->dp, lblkno, blkcnt, |
511 | XFS_BMAPI_ATTRFORK | XFS_BMAPI_METADATA, | 601 | XFS_BMAPI_ATTRFORK | XFS_BMAPI_METADATA, |
diff --git a/fs/xfs/xfs_attr_remote.h b/fs/xfs/xfs_attr_remote.h index c7cca60a062a..92a8fd7977cc 100644 --- a/fs/xfs/xfs_attr_remote.h +++ b/fs/xfs/xfs_attr_remote.h | |||
@@ -20,6 +20,14 @@ | |||
20 | 20 | ||
21 | #define XFS_ATTR3_RMT_MAGIC 0x5841524d /* XARM */ | 21 | #define XFS_ATTR3_RMT_MAGIC 0x5841524d /* XARM */ |
22 | 22 | ||
23 | /* | ||
24 | * There is one of these headers per filesystem block in a remote attribute. | ||
25 | * This is done to ensure there is a 1:1 mapping between the attribute value | ||
26 | * length and the number of blocks needed to store the attribute. This makes the | ||
27 | * verification of a buffer a little more complex, but greatly simplifies the | ||
28 | * allocation, reading and writing of these attributes as we don't have to guess | ||
29 | * the number of blocks needed to store the attribute data. | ||
30 | */ | ||
23 | struct xfs_attr3_rmt_hdr { | 31 | struct xfs_attr3_rmt_hdr { |
24 | __be32 rm_magic; | 32 | __be32 rm_magic; |
25 | __be32 rm_offset; | 33 | __be32 rm_offset; |
@@ -39,6 +47,8 @@ struct xfs_attr3_rmt_hdr { | |||
39 | 47 | ||
40 | extern const struct xfs_buf_ops xfs_attr3_rmt_buf_ops; | 48 | extern const struct xfs_buf_ops xfs_attr3_rmt_buf_ops; |
41 | 49 | ||
50 | int xfs_attr3_rmt_blocks(struct xfs_mount *mp, int attrlen); | ||
51 | |||
42 | int xfs_attr_rmtval_get(struct xfs_da_args *args); | 52 | int xfs_attr_rmtval_get(struct xfs_da_args *args); |
43 | int xfs_attr_rmtval_set(struct xfs_da_args *args); | 53 | int xfs_attr_rmtval_set(struct xfs_da_args *args); |
44 | int xfs_attr_rmtval_remove(struct xfs_da_args *args); | 54 | int xfs_attr_rmtval_remove(struct xfs_da_args *args); |
diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c index 82b70bda9f47..1b2472a46e46 100644 --- a/fs/xfs/xfs_buf.c +++ b/fs/xfs/xfs_buf.c | |||
@@ -513,6 +513,7 @@ _xfs_buf_find( | |||
513 | xfs_alert(btp->bt_mount, | 513 | xfs_alert(btp->bt_mount, |
514 | "%s: Block out of range: block 0x%llx, EOFS 0x%llx ", | 514 | "%s: Block out of range: block 0x%llx, EOFS 0x%llx ", |
515 | __func__, blkno, eofs); | 515 | __func__, blkno, eofs); |
516 | WARN_ON(1); | ||
516 | return NULL; | 517 | return NULL; |
517 | } | 518 | } |
518 | 519 | ||
@@ -1649,7 +1650,7 @@ xfs_alloc_buftarg( | |||
1649 | { | 1650 | { |
1650 | xfs_buftarg_t *btp; | 1651 | xfs_buftarg_t *btp; |
1651 | 1652 | ||
1652 | btp = kmem_zalloc(sizeof(*btp), KM_SLEEP); | 1653 | btp = kmem_zalloc(sizeof(*btp), KM_SLEEP | KM_NOFS); |
1653 | 1654 | ||
1654 | btp->bt_mount = mp; | 1655 | btp->bt_mount = mp; |
1655 | btp->bt_dev = bdev->bd_dev; | 1656 | btp->bt_dev = bdev->bd_dev; |
diff --git a/fs/xfs/xfs_buf_item.c b/fs/xfs/xfs_buf_item.c index cf263476d6b4..4ec431777048 100644 --- a/fs/xfs/xfs_buf_item.c +++ b/fs/xfs/xfs_buf_item.c | |||
@@ -262,12 +262,7 @@ xfs_buf_item_format_segment( | |||
262 | vecp->i_addr = xfs_buf_offset(bp, buffer_offset); | 262 | vecp->i_addr = xfs_buf_offset(bp, buffer_offset); |
263 | vecp->i_len = nbits * XFS_BLF_CHUNK; | 263 | vecp->i_len = nbits * XFS_BLF_CHUNK; |
264 | vecp->i_type = XLOG_REG_TYPE_BCHUNK; | 264 | vecp->i_type = XLOG_REG_TYPE_BCHUNK; |
265 | /* | 265 | nvecs++; |
266 | * You would think we need to bump the nvecs here too, but we do not | ||
267 | * this number is used by recovery, and it gets confused by the boundary | ||
268 | * split here | ||
269 | * nvecs++; | ||
270 | */ | ||
271 | vecp++; | 266 | vecp++; |
272 | first_bit = next_bit; | 267 | first_bit = next_bit; |
273 | last_bit = next_bit; | 268 | last_bit = next_bit; |
diff --git a/fs/xfs/xfs_da_btree.c b/fs/xfs/xfs_da_btree.c index 9b26a99ebfe9..0b8b2a13cd24 100644 --- a/fs/xfs/xfs_da_btree.c +++ b/fs/xfs/xfs_da_btree.c | |||
@@ -270,6 +270,7 @@ xfs_da3_node_read_verify( | |||
270 | break; | 270 | break; |
271 | return; | 271 | return; |
272 | case XFS_ATTR_LEAF_MAGIC: | 272 | case XFS_ATTR_LEAF_MAGIC: |
273 | case XFS_ATTR3_LEAF_MAGIC: | ||
273 | bp->b_ops = &xfs_attr3_leaf_buf_ops; | 274 | bp->b_ops = &xfs_attr3_leaf_buf_ops; |
274 | bp->b_ops->verify_read(bp); | 275 | bp->b_ops->verify_read(bp); |
275 | return; | 276 | return; |
@@ -2464,7 +2465,8 @@ xfs_buf_map_from_irec( | |||
2464 | ASSERT(nirecs >= 1); | 2465 | ASSERT(nirecs >= 1); |
2465 | 2466 | ||
2466 | if (nirecs > 1) { | 2467 | if (nirecs > 1) { |
2467 | map = kmem_zalloc(nirecs * sizeof(struct xfs_buf_map), KM_SLEEP); | 2468 | map = kmem_zalloc(nirecs * sizeof(struct xfs_buf_map), |
2469 | KM_SLEEP | KM_NOFS); | ||
2468 | if (!map) | 2470 | if (!map) |
2469 | return ENOMEM; | 2471 | return ENOMEM; |
2470 | *mapp = map; | 2472 | *mapp = map; |
@@ -2520,7 +2522,8 @@ xfs_dabuf_map( | |||
2520 | * Optimize the one-block case. | 2522 | * Optimize the one-block case. |
2521 | */ | 2523 | */ |
2522 | if (nfsb != 1) | 2524 | if (nfsb != 1) |
2523 | irecs = kmem_zalloc(sizeof(irec) * nfsb, KM_SLEEP); | 2525 | irecs = kmem_zalloc(sizeof(irec) * nfsb, |
2526 | KM_SLEEP | KM_NOFS); | ||
2524 | 2527 | ||
2525 | nirecs = nfsb; | 2528 | nirecs = nfsb; |
2526 | error = xfs_bmapi_read(dp, (xfs_fileoff_t)bno, nfsb, irecs, | 2529 | error = xfs_bmapi_read(dp, (xfs_fileoff_t)bno, nfsb, irecs, |
diff --git a/fs/xfs/xfs_dfrag.c b/fs/xfs/xfs_dfrag.c index f852b082a084..c407e1ccff43 100644 --- a/fs/xfs/xfs_dfrag.c +++ b/fs/xfs/xfs_dfrag.c | |||
@@ -219,6 +219,14 @@ xfs_swap_extents( | |||
219 | int taforkblks = 0; | 219 | int taforkblks = 0; |
220 | __uint64_t tmp; | 220 | __uint64_t tmp; |
221 | 221 | ||
222 | /* | ||
223 | * We have no way of updating owner information in the BMBT blocks for | ||
224 | * each inode on CRC enabled filesystems, so to avoid corrupting the | ||
225 | * this metadata we simply don't allow extent swaps to occur. | ||
226 | */ | ||
227 | if (xfs_sb_version_hascrc(&mp->m_sb)) | ||
228 | return XFS_ERROR(EINVAL); | ||
229 | |||
222 | tempifp = kmem_alloc(sizeof(xfs_ifork_t), KM_MAYFAIL); | 230 | tempifp = kmem_alloc(sizeof(xfs_ifork_t), KM_MAYFAIL); |
223 | if (!tempifp) { | 231 | if (!tempifp) { |
224 | error = XFS_ERROR(ENOMEM); | 232 | error = XFS_ERROR(ENOMEM); |
diff --git a/fs/xfs/xfs_dir2_format.h b/fs/xfs/xfs_dir2_format.h index a3b1bd841a80..995f1f505a52 100644 --- a/fs/xfs/xfs_dir2_format.h +++ b/fs/xfs/xfs_dir2_format.h | |||
@@ -715,6 +715,7 @@ struct xfs_dir3_free_hdr { | |||
715 | __be32 firstdb; /* db of first entry */ | 715 | __be32 firstdb; /* db of first entry */ |
716 | __be32 nvalid; /* count of valid entries */ | 716 | __be32 nvalid; /* count of valid entries */ |
717 | __be32 nused; /* count of used entries */ | 717 | __be32 nused; /* count of used entries */ |
718 | __be32 pad; /* 64 bit alignment. */ | ||
718 | }; | 719 | }; |
719 | 720 | ||
720 | struct xfs_dir3_free { | 721 | struct xfs_dir3_free { |
diff --git a/fs/xfs/xfs_dir2_leaf.c b/fs/xfs/xfs_dir2_leaf.c index 721ba2fe8e54..da71a1819d78 100644 --- a/fs/xfs/xfs_dir2_leaf.c +++ b/fs/xfs/xfs_dir2_leaf.c | |||
@@ -1336,7 +1336,7 @@ xfs_dir2_leaf_getdents( | |||
1336 | mp->m_sb.sb_blocksize); | 1336 | mp->m_sb.sb_blocksize); |
1337 | map_info = kmem_zalloc(offsetof(struct xfs_dir2_leaf_map_info, map) + | 1337 | map_info = kmem_zalloc(offsetof(struct xfs_dir2_leaf_map_info, map) + |
1338 | (length * sizeof(struct xfs_bmbt_irec)), | 1338 | (length * sizeof(struct xfs_bmbt_irec)), |
1339 | KM_SLEEP); | 1339 | KM_SLEEP | KM_NOFS); |
1340 | map_info->map_size = length; | 1340 | map_info->map_size = length; |
1341 | 1341 | ||
1342 | /* | 1342 | /* |
diff --git a/fs/xfs/xfs_dir2_node.c b/fs/xfs/xfs_dir2_node.c index 5246de4912d4..2226a00acd15 100644 --- a/fs/xfs/xfs_dir2_node.c +++ b/fs/xfs/xfs_dir2_node.c | |||
@@ -263,18 +263,19 @@ xfs_dir3_free_get_buf( | |||
263 | * Initialize the new block to be empty, and remember | 263 | * Initialize the new block to be empty, and remember |
264 | * its first slot as our empty slot. | 264 | * its first slot as our empty slot. |
265 | */ | 265 | */ |
266 | hdr.magic = XFS_DIR2_FREE_MAGIC; | 266 | memset(bp->b_addr, 0, sizeof(struct xfs_dir3_free_hdr)); |
267 | hdr.firstdb = 0; | 267 | memset(&hdr, 0, sizeof(hdr)); |
268 | hdr.nused = 0; | 268 | |
269 | hdr.nvalid = 0; | ||
270 | if (xfs_sb_version_hascrc(&mp->m_sb)) { | 269 | if (xfs_sb_version_hascrc(&mp->m_sb)) { |
271 | struct xfs_dir3_free_hdr *hdr3 = bp->b_addr; | 270 | struct xfs_dir3_free_hdr *hdr3 = bp->b_addr; |
272 | 271 | ||
273 | hdr.magic = XFS_DIR3_FREE_MAGIC; | 272 | hdr.magic = XFS_DIR3_FREE_MAGIC; |
273 | |||
274 | hdr3->hdr.blkno = cpu_to_be64(bp->b_bn); | 274 | hdr3->hdr.blkno = cpu_to_be64(bp->b_bn); |
275 | hdr3->hdr.owner = cpu_to_be64(dp->i_ino); | 275 | hdr3->hdr.owner = cpu_to_be64(dp->i_ino); |
276 | uuid_copy(&hdr3->hdr.uuid, &mp->m_sb.sb_uuid); | 276 | uuid_copy(&hdr3->hdr.uuid, &mp->m_sb.sb_uuid); |
277 | } | 277 | } else |
278 | hdr.magic = XFS_DIR2_FREE_MAGIC; | ||
278 | xfs_dir3_free_hdr_to_disk(bp->b_addr, &hdr); | 279 | xfs_dir3_free_hdr_to_disk(bp->b_addr, &hdr); |
279 | *bpp = bp; | 280 | *bpp = bp; |
280 | return 0; | 281 | return 0; |
@@ -1921,8 +1922,6 @@ xfs_dir2_node_addname_int( | |||
1921 | */ | 1922 | */ |
1922 | freehdr.firstdb = (fbno - XFS_DIR2_FREE_FIRSTDB(mp)) * | 1923 | freehdr.firstdb = (fbno - XFS_DIR2_FREE_FIRSTDB(mp)) * |
1923 | xfs_dir3_free_max_bests(mp); | 1924 | xfs_dir3_free_max_bests(mp); |
1924 | free->hdr.nvalid = 0; | ||
1925 | free->hdr.nused = 0; | ||
1926 | } else { | 1925 | } else { |
1927 | free = fbp->b_addr; | 1926 | free = fbp->b_addr; |
1928 | bests = xfs_dir3_free_bests_p(mp, free); | 1927 | bests = xfs_dir3_free_bests_p(mp, free); |
diff --git a/fs/xfs/xfs_extfree_item.c b/fs/xfs/xfs_extfree_item.c index c0f375087efc..452920a3f03f 100644 --- a/fs/xfs/xfs_extfree_item.c +++ b/fs/xfs/xfs_extfree_item.c | |||
@@ -305,11 +305,12 @@ xfs_efi_release(xfs_efi_log_item_t *efip, | |||
305 | { | 305 | { |
306 | ASSERT(atomic_read(&efip->efi_next_extent) >= nextents); | 306 | ASSERT(atomic_read(&efip->efi_next_extent) >= nextents); |
307 | if (atomic_sub_and_test(nextents, &efip->efi_next_extent)) { | 307 | if (atomic_sub_and_test(nextents, &efip->efi_next_extent)) { |
308 | __xfs_efi_release(efip); | ||
309 | |||
310 | /* recovery needs us to drop the EFI reference, too */ | 308 | /* recovery needs us to drop the EFI reference, too */ |
311 | if (test_bit(XFS_EFI_RECOVERED, &efip->efi_flags)) | 309 | if (test_bit(XFS_EFI_RECOVERED, &efip->efi_flags)) |
312 | __xfs_efi_release(efip); | 310 | __xfs_efi_release(efip); |
311 | |||
312 | __xfs_efi_release(efip); | ||
313 | /* efip may now have been freed, do not reference it again. */ | ||
313 | } | 314 | } |
314 | } | 315 | } |
315 | 316 | ||
diff --git a/fs/xfs/xfs_fs.h b/fs/xfs/xfs_fs.h index 6dda3f949b04..d04695545397 100644 --- a/fs/xfs/xfs_fs.h +++ b/fs/xfs/xfs_fs.h | |||
@@ -236,6 +236,7 @@ typedef struct xfs_fsop_resblks { | |||
236 | #define XFS_FSOP_GEOM_FLAGS_PROJID32 0x0800 /* 32-bit project IDs */ | 236 | #define XFS_FSOP_GEOM_FLAGS_PROJID32 0x0800 /* 32-bit project IDs */ |
237 | #define XFS_FSOP_GEOM_FLAGS_DIRV2CI 0x1000 /* ASCII only CI names */ | 237 | #define XFS_FSOP_GEOM_FLAGS_DIRV2CI 0x1000 /* ASCII only CI names */ |
238 | #define XFS_FSOP_GEOM_FLAGS_LAZYSB 0x4000 /* lazy superblock counters */ | 238 | #define XFS_FSOP_GEOM_FLAGS_LAZYSB 0x4000 /* lazy superblock counters */ |
239 | #define XFS_FSOP_GEOM_FLAGS_V5SB 0x8000 /* version 5 superblock */ | ||
239 | 240 | ||
240 | 241 | ||
241 | /* | 242 | /* |
diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c index 87595b211da1..3c3644ea825b 100644 --- a/fs/xfs/xfs_fsops.c +++ b/fs/xfs/xfs_fsops.c | |||
@@ -99,7 +99,9 @@ xfs_fs_geometry( | |||
99 | (xfs_sb_version_hasattr2(&mp->m_sb) ? | 99 | (xfs_sb_version_hasattr2(&mp->m_sb) ? |
100 | XFS_FSOP_GEOM_FLAGS_ATTR2 : 0) | | 100 | XFS_FSOP_GEOM_FLAGS_ATTR2 : 0) | |
101 | (xfs_sb_version_hasprojid32bit(&mp->m_sb) ? | 101 | (xfs_sb_version_hasprojid32bit(&mp->m_sb) ? |
102 | XFS_FSOP_GEOM_FLAGS_PROJID32 : 0); | 102 | XFS_FSOP_GEOM_FLAGS_PROJID32 : 0) | |
103 | (xfs_sb_version_hascrc(&mp->m_sb) ? | ||
104 | XFS_FSOP_GEOM_FLAGS_V5SB : 0); | ||
103 | geo->logsectsize = xfs_sb_version_hassector(&mp->m_sb) ? | 105 | geo->logsectsize = xfs_sb_version_hassector(&mp->m_sb) ? |
104 | mp->m_sb.sb_logsectsize : BBSIZE; | 106 | mp->m_sb.sb_logsectsize : BBSIZE; |
105 | geo->rtsectsize = mp->m_sb.sb_blocksize; | 107 | geo->rtsectsize = mp->m_sb.sb_blocksize; |
diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index d82efaa2ac73..ca9ecaa81112 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c | |||
@@ -455,6 +455,28 @@ xfs_vn_getattr( | |||
455 | return 0; | 455 | return 0; |
456 | } | 456 | } |
457 | 457 | ||
458 | static void | ||
459 | xfs_setattr_mode( | ||
460 | struct xfs_trans *tp, | ||
461 | struct xfs_inode *ip, | ||
462 | struct iattr *iattr) | ||
463 | { | ||
464 | struct inode *inode = VFS_I(ip); | ||
465 | umode_t mode = iattr->ia_mode; | ||
466 | |||
467 | ASSERT(tp); | ||
468 | ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); | ||
469 | |||
470 | if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID)) | ||
471 | mode &= ~S_ISGID; | ||
472 | |||
473 | ip->i_d.di_mode &= S_IFMT; | ||
474 | ip->i_d.di_mode |= mode & ~S_IFMT; | ||
475 | |||
476 | inode->i_mode &= S_IFMT; | ||
477 | inode->i_mode |= mode & ~S_IFMT; | ||
478 | } | ||
479 | |||
458 | int | 480 | int |
459 | xfs_setattr_nonsize( | 481 | xfs_setattr_nonsize( |
460 | struct xfs_inode *ip, | 482 | struct xfs_inode *ip, |
@@ -606,18 +628,8 @@ xfs_setattr_nonsize( | |||
606 | /* | 628 | /* |
607 | * Change file access modes. | 629 | * Change file access modes. |
608 | */ | 630 | */ |
609 | if (mask & ATTR_MODE) { | 631 | if (mask & ATTR_MODE) |
610 | umode_t mode = iattr->ia_mode; | 632 | xfs_setattr_mode(tp, ip, iattr); |
611 | |||
612 | if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID)) | ||
613 | mode &= ~S_ISGID; | ||
614 | |||
615 | ip->i_d.di_mode &= S_IFMT; | ||
616 | ip->i_d.di_mode |= mode & ~S_IFMT; | ||
617 | |||
618 | inode->i_mode &= S_IFMT; | ||
619 | inode->i_mode |= mode & ~S_IFMT; | ||
620 | } | ||
621 | 633 | ||
622 | /* | 634 | /* |
623 | * Change file access or modified times. | 635 | * Change file access or modified times. |
@@ -714,9 +726,8 @@ xfs_setattr_size( | |||
714 | return XFS_ERROR(error); | 726 | return XFS_ERROR(error); |
715 | 727 | ||
716 | ASSERT(S_ISREG(ip->i_d.di_mode)); | 728 | ASSERT(S_ISREG(ip->i_d.di_mode)); |
717 | ASSERT((mask & (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| | 729 | ASSERT((mask & (ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| |
718 | ATTR_MTIME_SET|ATTR_KILL_SUID|ATTR_KILL_SGID| | 730 | ATTR_MTIME_SET|ATTR_KILL_PRIV|ATTR_TIMES_SET)) == 0); |
719 | ATTR_KILL_PRIV|ATTR_TIMES_SET)) == 0); | ||
720 | 731 | ||
721 | if (!(flags & XFS_ATTR_NOLOCK)) { | 732 | if (!(flags & XFS_ATTR_NOLOCK)) { |
722 | lock_flags |= XFS_IOLOCK_EXCL; | 733 | lock_flags |= XFS_IOLOCK_EXCL; |
@@ -860,6 +871,12 @@ xfs_setattr_size( | |||
860 | xfs_inode_clear_eofblocks_tag(ip); | 871 | xfs_inode_clear_eofblocks_tag(ip); |
861 | } | 872 | } |
862 | 873 | ||
874 | /* | ||
875 | * Change file access modes. | ||
876 | */ | ||
877 | if (mask & ATTR_MODE) | ||
878 | xfs_setattr_mode(tp, ip, iattr); | ||
879 | |||
863 | if (mask & ATTR_CTIME) { | 880 | if (mask & ATTR_CTIME) { |
864 | inode->i_ctime = iattr->ia_ctime; | 881 | inode->i_ctime = iattr->ia_ctime; |
865 | ip->i_d.di_ctime.t_sec = iattr->ia_ctime.tv_sec; | 882 | ip->i_d.di_ctime.t_sec = iattr->ia_ctime.tv_sec; |
diff --git a/fs/xfs/xfs_log_cil.c b/fs/xfs/xfs_log_cil.c index e3d0b85d852b..d0833b54e55d 100644 --- a/fs/xfs/xfs_log_cil.c +++ b/fs/xfs/xfs_log_cil.c | |||
@@ -139,7 +139,7 @@ xlog_cil_prepare_log_vecs( | |||
139 | 139 | ||
140 | new_lv = kmem_zalloc(sizeof(*new_lv) + | 140 | new_lv = kmem_zalloc(sizeof(*new_lv) + |
141 | niovecs * sizeof(struct xfs_log_iovec), | 141 | niovecs * sizeof(struct xfs_log_iovec), |
142 | KM_SLEEP); | 142 | KM_SLEEP|KM_NOFS); |
143 | 143 | ||
144 | /* The allocated iovec region lies beyond the log vector. */ | 144 | /* The allocated iovec region lies beyond the log vector. */ |
145 | new_lv->lv_iovecp = (struct xfs_log_iovec *)&new_lv[1]; | 145 | new_lv->lv_iovecp = (struct xfs_log_iovec *)&new_lv[1]; |
diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 93f03ec17eec..d9e4d3c3991a 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c | |||
@@ -2097,6 +2097,17 @@ xlog_recover_do_reg_buffer( | |||
2097 | ((uint)bit << XFS_BLF_SHIFT) + (nbits << XFS_BLF_SHIFT)); | 2097 | ((uint)bit << XFS_BLF_SHIFT) + (nbits << XFS_BLF_SHIFT)); |
2098 | 2098 | ||
2099 | /* | 2099 | /* |
2100 | * The dirty regions logged in the buffer, even though | ||
2101 | * contiguous, may span multiple chunks. This is because the | ||
2102 | * dirty region may span a physical page boundary in a buffer | ||
2103 | * and hence be split into two separate vectors for writing into | ||
2104 | * the log. Hence we need to trim nbits back to the length of | ||
2105 | * the current region being copied out of the log. | ||
2106 | */ | ||
2107 | if (item->ri_buf[i].i_len < (nbits << XFS_BLF_SHIFT)) | ||
2108 | nbits = item->ri_buf[i].i_len >> XFS_BLF_SHIFT; | ||
2109 | |||
2110 | /* | ||
2100 | * Do a sanity check if this is a dquot buffer. Just checking | 2111 | * Do a sanity check if this is a dquot buffer. Just checking |
2101 | * the first dquot in the buffer should do. XXXThis is | 2112 | * the first dquot in the buffer should do. XXXThis is |
2102 | * probably a good thing to do for other buf types also. | 2113 | * probably a good thing to do for other buf types also. |
diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c index c41190cad6e9..6cdf6ffc36a1 100644 --- a/fs/xfs/xfs_qm_syscalls.c +++ b/fs/xfs/xfs_qm_syscalls.c | |||
@@ -489,31 +489,36 @@ xfs_qm_scall_setqlim( | |||
489 | if ((newlim->d_fieldmask & XFS_DQ_MASK) == 0) | 489 | if ((newlim->d_fieldmask & XFS_DQ_MASK) == 0) |
490 | return 0; | 490 | return 0; |
491 | 491 | ||
492 | tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SETQLIM); | ||
493 | error = xfs_trans_reserve(tp, 0, XFS_QM_SETQLIM_LOG_RES(mp), | ||
494 | 0, 0, XFS_DEFAULT_LOG_COUNT); | ||
495 | if (error) { | ||
496 | xfs_trans_cancel(tp, 0); | ||
497 | return (error); | ||
498 | } | ||
499 | |||
500 | /* | 492 | /* |
501 | * We don't want to race with a quotaoff so take the quotaoff lock. | 493 | * We don't want to race with a quotaoff so take the quotaoff lock. |
502 | * (We don't hold an inode lock, so there's nothing else to stop | 494 | * We don't hold an inode lock, so there's nothing else to stop |
503 | * a quotaoff from happening). (XXXThis doesn't currently happen | 495 | * a quotaoff from happening. |
504 | * because we take the vfslock before calling xfs_qm_sysent). | ||
505 | */ | 496 | */ |
506 | mutex_lock(&q->qi_quotaofflock); | 497 | mutex_lock(&q->qi_quotaofflock); |
507 | 498 | ||
508 | /* | 499 | /* |
509 | * Get the dquot (locked), and join it to the transaction. | 500 | * Get the dquot (locked) before we start, as we need to do a |
510 | * Allocate the dquot if this doesn't exist. | 501 | * transaction to allocate it if it doesn't exist. Once we have the |
502 | * dquot, unlock it so we can start the next transaction safely. We hold | ||
503 | * a reference to the dquot, so it's safe to do this unlock/lock without | ||
504 | * it being reclaimed in the mean time. | ||
511 | */ | 505 | */ |
512 | if ((error = xfs_qm_dqget(mp, NULL, id, type, XFS_QMOPT_DQALLOC, &dqp))) { | 506 | error = xfs_qm_dqget(mp, NULL, id, type, XFS_QMOPT_DQALLOC, &dqp); |
513 | xfs_trans_cancel(tp, XFS_TRANS_ABORT); | 507 | if (error) { |
514 | ASSERT(error != ENOENT); | 508 | ASSERT(error != ENOENT); |
515 | goto out_unlock; | 509 | goto out_unlock; |
516 | } | 510 | } |
511 | xfs_dqunlock(dqp); | ||
512 | |||
513 | tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SETQLIM); | ||
514 | error = xfs_trans_reserve(tp, 0, XFS_QM_SETQLIM_LOG_RES(mp), | ||
515 | 0, 0, XFS_DEFAULT_LOG_COUNT); | ||
516 | if (error) { | ||
517 | xfs_trans_cancel(tp, 0); | ||
518 | goto out_rele; | ||
519 | } | ||
520 | |||
521 | xfs_dqlock(dqp); | ||
517 | xfs_trans_dqjoin(tp, dqp); | 522 | xfs_trans_dqjoin(tp, dqp); |
518 | ddq = &dqp->q_core; | 523 | ddq = &dqp->q_core; |
519 | 524 | ||
@@ -621,9 +626,10 @@ xfs_qm_scall_setqlim( | |||
621 | xfs_trans_log_dquot(tp, dqp); | 626 | xfs_trans_log_dquot(tp, dqp); |
622 | 627 | ||
623 | error = xfs_trans_commit(tp, 0); | 628 | error = xfs_trans_commit(tp, 0); |
624 | xfs_qm_dqrele(dqp); | ||
625 | 629 | ||
626 | out_unlock: | 630 | out_rele: |
631 | xfs_qm_dqrele(dqp); | ||
632 | out_unlock: | ||
627 | mutex_unlock(&q->qi_quotaofflock); | 633 | mutex_unlock(&q->qi_quotaofflock); |
628 | return error; | 634 | return error; |
629 | } | 635 | } |
diff --git a/fs/xfs/xfs_symlink.c b/fs/xfs/xfs_symlink.c index 5f234389327c..195a403e1522 100644 --- a/fs/xfs/xfs_symlink.c +++ b/fs/xfs/xfs_symlink.c | |||
@@ -56,16 +56,9 @@ xfs_symlink_blocks( | |||
56 | struct xfs_mount *mp, | 56 | struct xfs_mount *mp, |
57 | int pathlen) | 57 | int pathlen) |
58 | { | 58 | { |
59 | int fsblocks = 0; | 59 | int buflen = XFS_SYMLINK_BUF_SPACE(mp, mp->m_sb.sb_blocksize); |
60 | int len = pathlen; | ||
61 | 60 | ||
62 | do { | 61 | return (pathlen + buflen - 1) / buflen; |
63 | fsblocks++; | ||
64 | len -= XFS_SYMLINK_BUF_SPACE(mp, mp->m_sb.sb_blocksize); | ||
65 | } while (len > 0); | ||
66 | |||
67 | ASSERT(fsblocks <= XFS_SYMLINK_MAPS); | ||
68 | return fsblocks; | ||
69 | } | 62 | } |
70 | 63 | ||
71 | static int | 64 | static int |
@@ -405,7 +398,7 @@ xfs_symlink( | |||
405 | if (pathlen <= XFS_LITINO(mp, dp->i_d.di_version)) | 398 | if (pathlen <= XFS_LITINO(mp, dp->i_d.di_version)) |
406 | fs_blocks = 0; | 399 | fs_blocks = 0; |
407 | else | 400 | else |
408 | fs_blocks = XFS_B_TO_FSB(mp, pathlen); | 401 | fs_blocks = xfs_symlink_blocks(mp, pathlen); |
409 | resblks = XFS_SYMLINK_SPACE_RES(mp, link_name->len, fs_blocks); | 402 | resblks = XFS_SYMLINK_SPACE_RES(mp, link_name->len, fs_blocks); |
410 | error = xfs_trans_reserve(tp, resblks, XFS_SYMLINK_LOG_RES(mp), 0, | 403 | error = xfs_trans_reserve(tp, resblks, XFS_SYMLINK_LOG_RES(mp), 0, |
411 | XFS_TRANS_PERM_LOG_RES, XFS_SYMLINK_LOG_COUNT); | 404 | XFS_TRANS_PERM_LOG_RES, XFS_SYMLINK_LOG_COUNT); |
@@ -512,7 +505,7 @@ xfs_symlink( | |||
512 | cur_chunk = target_path; | 505 | cur_chunk = target_path; |
513 | offset = 0; | 506 | offset = 0; |
514 | for (n = 0; n < nmaps; n++) { | 507 | for (n = 0; n < nmaps; n++) { |
515 | char *buf; | 508 | char *buf; |
516 | 509 | ||
517 | d = XFS_FSB_TO_DADDR(mp, mval[n].br_startblock); | 510 | d = XFS_FSB_TO_DADDR(mp, mval[n].br_startblock); |
518 | byte_cnt = XFS_FSB_TO_B(mp, mval[n].br_blockcount); | 511 | byte_cnt = XFS_FSB_TO_B(mp, mval[n].br_blockcount); |
@@ -525,9 +518,7 @@ xfs_symlink( | |||
525 | bp->b_ops = &xfs_symlink_buf_ops; | 518 | bp->b_ops = &xfs_symlink_buf_ops; |
526 | 519 | ||
527 | byte_cnt = XFS_SYMLINK_BUF_SPACE(mp, byte_cnt); | 520 | byte_cnt = XFS_SYMLINK_BUF_SPACE(mp, byte_cnt); |
528 | if (pathlen < byte_cnt) { | 521 | byte_cnt = min(byte_cnt, pathlen); |
529 | byte_cnt = pathlen; | ||
530 | } | ||
531 | 522 | ||
532 | buf = bp->b_addr; | 523 | buf = bp->b_addr; |
533 | buf += xfs_symlink_hdr_set(mp, ip->i_ino, offset, | 524 | buf += xfs_symlink_hdr_set(mp, ip->i_ino, offset, |
@@ -542,6 +533,7 @@ xfs_symlink( | |||
542 | xfs_trans_log_buf(tp, bp, 0, (buf + byte_cnt - 1) - | 533 | xfs_trans_log_buf(tp, bp, 0, (buf + byte_cnt - 1) - |
543 | (char *)bp->b_addr); | 534 | (char *)bp->b_addr); |
544 | } | 535 | } |
536 | ASSERT(pathlen == 0); | ||
545 | } | 537 | } |
546 | 538 | ||
547 | /* | 539 | /* |
diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index 1501f4fa51a6..0176bb21f09a 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c | |||
@@ -1453,7 +1453,7 @@ xfs_free_file_space( | |||
1453 | xfs_mount_t *mp; | 1453 | xfs_mount_t *mp; |
1454 | int nimap; | 1454 | int nimap; |
1455 | uint resblks; | 1455 | uint resblks; |
1456 | uint rounding; | 1456 | xfs_off_t rounding; |
1457 | int rt; | 1457 | int rt; |
1458 | xfs_fileoff_t startoffset_fsb; | 1458 | xfs_fileoff_t startoffset_fsb; |
1459 | xfs_trans_t *tp; | 1459 | xfs_trans_t *tp; |
@@ -1482,7 +1482,7 @@ xfs_free_file_space( | |||
1482 | inode_dio_wait(VFS_I(ip)); | 1482 | inode_dio_wait(VFS_I(ip)); |
1483 | } | 1483 | } |
1484 | 1484 | ||
1485 | rounding = max_t(uint, 1 << mp->m_sb.sb_blocklog, PAGE_CACHE_SIZE); | 1485 | rounding = max_t(xfs_off_t, 1 << mp->m_sb.sb_blocklog, PAGE_CACHE_SIZE); |
1486 | ioffset = offset & ~(rounding - 1); | 1486 | ioffset = offset & ~(rounding - 1); |
1487 | error = -filemap_write_and_wait_range(VFS_I(ip)->i_mapping, | 1487 | error = -filemap_write_and_wait_range(VFS_I(ip)->i_mapping, |
1488 | ioffset, -1); | 1488 | ioffset, -1); |
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index 98db31d9f9b4..636c59f2003a 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h | |||
@@ -377,7 +377,6 @@ acpi_status acpi_bus_get_status_handle(acpi_handle handle, | |||
377 | unsigned long long *sta); | 377 | unsigned long long *sta); |
378 | int acpi_bus_get_status(struct acpi_device *device); | 378 | int acpi_bus_get_status(struct acpi_device *device); |
379 | 379 | ||
380 | #ifdef CONFIG_PM | ||
381 | int acpi_bus_set_power(acpi_handle handle, int state); | 380 | int acpi_bus_set_power(acpi_handle handle, int state); |
382 | const char *acpi_power_state_string(int state); | 381 | const char *acpi_power_state_string(int state); |
383 | int acpi_device_get_power(struct acpi_device *device, int *state); | 382 | int acpi_device_get_power(struct acpi_device *device, int *state); |
@@ -385,41 +384,12 @@ int acpi_device_set_power(struct acpi_device *device, int state); | |||
385 | int acpi_bus_init_power(struct acpi_device *device); | 384 | int acpi_bus_init_power(struct acpi_device *device); |
386 | int acpi_bus_update_power(acpi_handle handle, int *state_p); | 385 | int acpi_bus_update_power(acpi_handle handle, int *state_p); |
387 | bool acpi_bus_power_manageable(acpi_handle handle); | 386 | bool acpi_bus_power_manageable(acpi_handle handle); |
387 | |||
388 | #ifdef CONFIG_PM | ||
388 | bool acpi_bus_can_wakeup(acpi_handle handle); | 389 | bool acpi_bus_can_wakeup(acpi_handle handle); |
389 | #else /* !CONFIG_PM */ | 390 | #else |
390 | static inline int acpi_bus_set_power(acpi_handle handle, int state) | 391 | static inline bool acpi_bus_can_wakeup(acpi_handle handle) { return false; } |
391 | { | 392 | #endif |
392 | return 0; | ||
393 | } | ||
394 | static inline const char *acpi_power_state_string(int state) | ||
395 | { | ||
396 | return "D0"; | ||
397 | } | ||
398 | static inline int acpi_device_get_power(struct acpi_device *device, int *state) | ||
399 | { | ||
400 | return 0; | ||
401 | } | ||
402 | static inline int acpi_device_set_power(struct acpi_device *device, int state) | ||
403 | { | ||
404 | return 0; | ||
405 | } | ||
406 | static inline int acpi_bus_init_power(struct acpi_device *device) | ||
407 | { | ||
408 | return 0; | ||
409 | } | ||
410 | static inline int acpi_bus_update_power(acpi_handle handle, int *state_p) | ||
411 | { | ||
412 | return 0; | ||
413 | } | ||
414 | static inline bool acpi_bus_power_manageable(acpi_handle handle) | ||
415 | { | ||
416 | return false; | ||
417 | } | ||
418 | static inline bool acpi_bus_can_wakeup(acpi_handle handle) | ||
419 | { | ||
420 | return false; | ||
421 | } | ||
422 | #endif /* !CONFIG_PM */ | ||
423 | 393 | ||
424 | #ifdef CONFIG_ACPI_PROC_EVENT | 394 | #ifdef CONFIG_ACPI_PROC_EVENT |
425 | int acpi_bus_generate_proc_event(struct acpi_device *device, u8 type, int data); | 395 | int acpi_bus_generate_proc_event(struct acpi_device *device, u8 type, int data); |
diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h index ac9da00e9f2c..d5afe96adba6 100644 --- a/include/asm-generic/io.h +++ b/include/asm-generic/io.h | |||
@@ -343,8 +343,12 @@ extern void ioport_unmap(void __iomem *p); | |||
343 | #endif /* CONFIG_GENERIC_IOMAP */ | 343 | #endif /* CONFIG_GENERIC_IOMAP */ |
344 | #endif /* CONFIG_HAS_IOPORT */ | 344 | #endif /* CONFIG_HAS_IOPORT */ |
345 | 345 | ||
346 | #ifndef xlate_dev_kmem_ptr | ||
346 | #define xlate_dev_kmem_ptr(p) p | 347 | #define xlate_dev_kmem_ptr(p) p |
348 | #endif | ||
349 | #ifndef xlate_dev_mem_ptr | ||
347 | #define xlate_dev_mem_ptr(p) __va(p) | 350 | #define xlate_dev_mem_ptr(p) __va(p) |
351 | #endif | ||
348 | 352 | ||
349 | #ifdef CONFIG_VIRT_TO_BUS | 353 | #ifdef CONFIG_VIRT_TO_BUS |
350 | #ifndef virt_to_bus | 354 | #ifndef virt_to_bus |
diff --git a/include/linux/acpi_dma.h b/include/linux/acpi_dma.h index d09deabc7bf6..fb0298082916 100644 --- a/include/linux/acpi_dma.h +++ b/include/linux/acpi_dma.h | |||
@@ -37,6 +37,8 @@ struct acpi_dma_spec { | |||
37 | * @dev: struct device of this controller | 37 | * @dev: struct device of this controller |
38 | * @acpi_dma_xlate: callback function to find a suitable channel | 38 | * @acpi_dma_xlate: callback function to find a suitable channel |
39 | * @data: private data used by a callback function | 39 | * @data: private data used by a callback function |
40 | * @base_request_line: first supported request line (CSRT) | ||
41 | * @end_request_line: last supported request line (CSRT) | ||
40 | */ | 42 | */ |
41 | struct acpi_dma { | 43 | struct acpi_dma { |
42 | struct list_head dma_controllers; | 44 | struct list_head dma_controllers; |
@@ -44,6 +46,8 @@ struct acpi_dma { | |||
44 | struct dma_chan *(*acpi_dma_xlate) | 46 | struct dma_chan *(*acpi_dma_xlate) |
45 | (struct acpi_dma_spec *, struct acpi_dma *); | 47 | (struct acpi_dma_spec *, struct acpi_dma *); |
46 | void *data; | 48 | void *data; |
49 | unsigned short base_request_line; | ||
50 | unsigned short end_request_line; | ||
47 | }; | 51 | }; |
48 | 52 | ||
49 | /* Used with acpi_dma_simple_xlate() */ | 53 | /* Used with acpi_dma_simple_xlate() */ |
diff --git a/include/linux/aer.h b/include/linux/aer.h index ec10e1b24c1c..737f90ab4b62 100644 --- a/include/linux/aer.h +++ b/include/linux/aer.h | |||
@@ -49,10 +49,11 @@ static inline int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev) | |||
49 | } | 49 | } |
50 | #endif | 50 | #endif |
51 | 51 | ||
52 | extern void cper_print_aer(const char *prefix, struct pci_dev *dev, | 52 | extern void cper_print_aer(struct pci_dev *dev, |
53 | int cper_severity, struct aer_capability_regs *aer); | 53 | int cper_severity, struct aer_capability_regs *aer); |
54 | extern int cper_severity_to_aer(int cper_severity); | 54 | extern int cper_severity_to_aer(int cper_severity); |
55 | extern void aer_recover_queue(int domain, unsigned int bus, unsigned int devfn, | 55 | extern void aer_recover_queue(int domain, unsigned int bus, unsigned int devfn, |
56 | int severity); | 56 | int severity, |
57 | struct aer_capability_regs *aer_regs); | ||
57 | #endif //_AER_H_ | 58 | #endif //_AER_H_ |
58 | 59 | ||
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h index 5047355b9a0f..8bda1294c035 100644 --- a/include/linux/cgroup.h +++ b/include/linux/cgroup.h | |||
@@ -707,7 +707,7 @@ struct cgroup *cgroup_rightmost_descendant(struct cgroup *pos); | |||
707 | * | 707 | * |
708 | * If a subsystem synchronizes against the parent in its ->css_online() and | 708 | * If a subsystem synchronizes against the parent in its ->css_online() and |
709 | * before starting iterating, and synchronizes against @pos on each | 709 | * before starting iterating, and synchronizes against @pos on each |
710 | * iteration, any descendant cgroup which finished ->css_offline() is | 710 | * iteration, any descendant cgroup which finished ->css_online() is |
711 | * guaranteed to be visible in the future iterations. | 711 | * guaranteed to be visible in the future iterations. |
712 | * | 712 | * |
713 | * In other words, the following guarantees that a descendant can't escape | 713 | * In other words, the following guarantees that a descendant can't escape |
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index e96329ceb28c..e9ef6d6b51d5 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
@@ -562,6 +562,9 @@ int __trace_bprintk(unsigned long ip, const char *fmt, ...); | |||
562 | extern __printf(2, 3) | 562 | extern __printf(2, 3) |
563 | int __trace_printk(unsigned long ip, const char *fmt, ...); | 563 | int __trace_printk(unsigned long ip, const char *fmt, ...); |
564 | 564 | ||
565 | extern int __trace_bputs(unsigned long ip, const char *str); | ||
566 | extern int __trace_puts(unsigned long ip, const char *str, int size); | ||
567 | |||
565 | /** | 568 | /** |
566 | * trace_puts - write a string into the ftrace buffer | 569 | * trace_puts - write a string into the ftrace buffer |
567 | * @str: the string to record | 570 | * @str: the string to record |
@@ -587,8 +590,6 @@ int __trace_printk(unsigned long ip, const char *fmt, ...); | |||
587 | * (1 when __trace_bputs is used, strlen(str) when __trace_puts is used) | 590 | * (1 when __trace_bputs is used, strlen(str) when __trace_puts is used) |
588 | */ | 591 | */ |
589 | 592 | ||
590 | extern int __trace_bputs(unsigned long ip, const char *str); | ||
591 | extern int __trace_puts(unsigned long ip, const char *str, int size); | ||
592 | #define trace_puts(str) ({ \ | 593 | #define trace_puts(str) ({ \ |
593 | static const char *trace_printk_fmt \ | 594 | static const char *trace_printk_fmt \ |
594 | __attribute__((section("__trace_printk_fmt"))) = \ | 595 | __attribute__((section("__trace_printk_fmt"))) = \ |
diff --git a/include/linux/list.h b/include/linux/list.h index 6a1f8df9144b..b83e5657365a 100644 --- a/include/linux/list.h +++ b/include/linux/list.h | |||
@@ -362,6 +362,17 @@ static inline void list_splice_tail_init(struct list_head *list, | |||
362 | list_entry((ptr)->next, type, member) | 362 | list_entry((ptr)->next, type, member) |
363 | 363 | ||
364 | /** | 364 | /** |
365 | * list_first_entry_or_null - get the first element from a list | ||
366 | * @ptr: the list head to take the element from. | ||
367 | * @type: the type of the struct this is embedded in. | ||
368 | * @member: the name of the list_struct within the struct. | ||
369 | * | ||
370 | * Note that if the list is empty, it returns NULL. | ||
371 | */ | ||
372 | #define list_first_entry_or_null(ptr, type, member) \ | ||
373 | (!list_empty(ptr) ? list_first_entry(ptr, type, member) : NULL) | ||
374 | |||
375 | /** | ||
365 | * list_for_each - iterate over a list | 376 | * list_for_each - iterate over a list |
366 | * @pos: the &struct list_head to use as a loop cursor. | 377 | * @pos: the &struct list_head to use as a loop cursor. |
367 | * @head: the head for your list. | 378 | * @head: the head for your list. |
diff --git a/include/linux/netfilter_ipv6.h b/include/linux/netfilter_ipv6.h index 98ffb54988b6..2d4df6ce043e 100644 --- a/include/linux/netfilter_ipv6.h +++ b/include/linux/netfilter_ipv6.h | |||
@@ -17,6 +17,22 @@ extern __sum16 nf_ip6_checksum(struct sk_buff *skb, unsigned int hook, | |||
17 | 17 | ||
18 | extern int ipv6_netfilter_init(void); | 18 | extern int ipv6_netfilter_init(void); |
19 | extern void ipv6_netfilter_fini(void); | 19 | extern void ipv6_netfilter_fini(void); |
20 | |||
21 | /* | ||
22 | * Hook functions for ipv6 to allow xt_* modules to be built-in even | ||
23 | * if IPv6 is a module. | ||
24 | */ | ||
25 | struct nf_ipv6_ops { | ||
26 | int (*chk_addr)(struct net *net, const struct in6_addr *addr, | ||
27 | const struct net_device *dev, int strict); | ||
28 | }; | ||
29 | |||
30 | extern const struct nf_ipv6_ops __rcu *nf_ipv6_ops; | ||
31 | static inline const struct nf_ipv6_ops *nf_get_ipv6_ops(void) | ||
32 | { | ||
33 | return rcu_dereference(nf_ipv6_ops); | ||
34 | } | ||
35 | |||
20 | #else /* CONFIG_NETFILTER */ | 36 | #else /* CONFIG_NETFILTER */ |
21 | static inline int ipv6_netfilter_init(void) { return 0; } | 37 | static inline int ipv6_netfilter_init(void) { return 0; } |
22 | static inline void ipv6_netfilter_fini(void) { return; } | 38 | static inline void ipv6_netfilter_fini(void) { return; } |
diff --git a/include/linux/platform_data/clk-lpss.h b/include/linux/platform_data/clk-lpss.h index 528e73ce46d2..23901992b9dd 100644 --- a/include/linux/platform_data/clk-lpss.h +++ b/include/linux/platform_data/clk-lpss.h | |||
@@ -13,6 +13,11 @@ | |||
13 | #ifndef __CLK_LPSS_H | 13 | #ifndef __CLK_LPSS_H |
14 | #define __CLK_LPSS_H | 14 | #define __CLK_LPSS_H |
15 | 15 | ||
16 | struct lpss_clk_data { | ||
17 | const char *name; | ||
18 | struct clk *clk; | ||
19 | }; | ||
20 | |||
16 | extern int lpt_clk_init(void); | 21 | extern int lpt_clk_init(void); |
17 | 22 | ||
18 | #endif /* __CLK_LPSS_H */ | 23 | #endif /* __CLK_LPSS_H */ |
diff --git a/include/linux/platform_data/serial-omap.h b/include/linux/platform_data/serial-omap.h index ff9b0aab5281..c860c1b314c0 100644 --- a/include/linux/platform_data/serial-omap.h +++ b/include/linux/platform_data/serial-omap.h | |||
@@ -43,8 +43,6 @@ struct omap_uart_port_info { | |||
43 | int DTR_present; | 43 | int DTR_present; |
44 | 44 | ||
45 | int (*get_context_loss_count)(struct device *); | 45 | int (*get_context_loss_count)(struct device *); |
46 | void (*set_forceidle)(struct device *); | ||
47 | void (*set_noidle)(struct device *); | ||
48 | void (*enable_wakeup)(struct device *, bool); | 46 | void (*enable_wakeup)(struct device *, bool); |
49 | }; | 47 | }; |
50 | 48 | ||
diff --git a/include/linux/rculist_nulls.h b/include/linux/rculist_nulls.h index 2ae13714828b..1c33dd7da4a7 100644 --- a/include/linux/rculist_nulls.h +++ b/include/linux/rculist_nulls.h | |||
@@ -105,9 +105,14 @@ static inline void hlist_nulls_add_head_rcu(struct hlist_nulls_node *n, | |||
105 | * @head: the head for your list. | 105 | * @head: the head for your list. |
106 | * @member: the name of the hlist_nulls_node within the struct. | 106 | * @member: the name of the hlist_nulls_node within the struct. |
107 | * | 107 | * |
108 | * The barrier() is needed to make sure compiler doesn't cache first element [1], | ||
109 | * as this loop can be restarted [2] | ||
110 | * [1] Documentation/atomic_ops.txt around line 114 | ||
111 | * [2] Documentation/RCU/rculist_nulls.txt around line 146 | ||
108 | */ | 112 | */ |
109 | #define hlist_nulls_for_each_entry_rcu(tpos, pos, head, member) \ | 113 | #define hlist_nulls_for_each_entry_rcu(tpos, pos, head, member) \ |
110 | for (pos = rcu_dereference_raw(hlist_nulls_first_rcu(head)); \ | 114 | for (({barrier();}), \ |
115 | pos = rcu_dereference_raw(hlist_nulls_first_rcu(head)); \ | ||
111 | (!is_a_nulls(pos)) && \ | 116 | (!is_a_nulls(pos)) && \ |
112 | ({ tpos = hlist_nulls_entry(pos, typeof(*tpos), member); 1; }); \ | 117 | ({ tpos = hlist_nulls_entry(pos, typeof(*tpos), member); 1; }); \ |
113 | pos = rcu_dereference_raw(hlist_nulls_next_rcu(pos))) | 118 | pos = rcu_dereference_raw(hlist_nulls_next_rcu(pos))) |
diff --git a/include/linux/rio.h b/include/linux/rio.h index a3e784278667..18e099342e6f 100644 --- a/include/linux/rio.h +++ b/include/linux/rio.h | |||
@@ -83,7 +83,6 @@ | |||
83 | 83 | ||
84 | extern struct bus_type rio_bus_type; | 84 | extern struct bus_type rio_bus_type; |
85 | extern struct device rio_bus; | 85 | extern struct device rio_bus; |
86 | extern struct list_head rio_devices; /* list of all devices */ | ||
87 | 86 | ||
88 | struct rio_mport; | 87 | struct rio_mport; |
89 | struct rio_dev; | 88 | struct rio_dev; |
@@ -237,6 +236,7 @@ enum rio_phy_type { | |||
237 | * @name: Port name string | 236 | * @name: Port name string |
238 | * @priv: Master port private data | 237 | * @priv: Master port private data |
239 | * @dma: DMA device associated with mport | 238 | * @dma: DMA device associated with mport |
239 | * @nscan: RapidIO network enumeration/discovery operations | ||
240 | */ | 240 | */ |
241 | struct rio_mport { | 241 | struct rio_mport { |
242 | struct list_head dbells; /* list of doorbell events */ | 242 | struct list_head dbells; /* list of doorbell events */ |
@@ -262,8 +262,14 @@ struct rio_mport { | |||
262 | #ifdef CONFIG_RAPIDIO_DMA_ENGINE | 262 | #ifdef CONFIG_RAPIDIO_DMA_ENGINE |
263 | struct dma_device dma; | 263 | struct dma_device dma; |
264 | #endif | 264 | #endif |
265 | struct rio_scan *nscan; | ||
265 | }; | 266 | }; |
266 | 267 | ||
268 | /* | ||
269 | * Enumeration/discovery control flags | ||
270 | */ | ||
271 | #define RIO_SCAN_ENUM_NO_WAIT 0x00000001 /* Do not wait for enum completed */ | ||
272 | |||
267 | struct rio_id_table { | 273 | struct rio_id_table { |
268 | u16 start; /* logical minimal id */ | 274 | u16 start; /* logical minimal id */ |
269 | u32 max; /* max number of IDs in table */ | 275 | u32 max; /* max number of IDs in table */ |
@@ -460,6 +466,16 @@ static inline struct rio_mport *dma_to_mport(struct dma_device *ddev) | |||
460 | } | 466 | } |
461 | #endif /* CONFIG_RAPIDIO_DMA_ENGINE */ | 467 | #endif /* CONFIG_RAPIDIO_DMA_ENGINE */ |
462 | 468 | ||
469 | /** | ||
470 | * struct rio_scan - RIO enumeration and discovery operations | ||
471 | * @enumerate: Callback to perform RapidIO fabric enumeration. | ||
472 | * @discover: Callback to perform RapidIO fabric discovery. | ||
473 | */ | ||
474 | struct rio_scan { | ||
475 | int (*enumerate)(struct rio_mport *mport, u32 flags); | ||
476 | int (*discover)(struct rio_mport *mport, u32 flags); | ||
477 | }; | ||
478 | |||
463 | /* Architecture and hardware-specific functions */ | 479 | /* Architecture and hardware-specific functions */ |
464 | extern int rio_register_mport(struct rio_mport *); | 480 | extern int rio_register_mport(struct rio_mport *); |
465 | extern int rio_open_inb_mbox(struct rio_mport *, void *, int, int); | 481 | extern int rio_open_inb_mbox(struct rio_mport *, void *, int, int); |
diff --git a/include/linux/rio_drv.h b/include/linux/rio_drv.h index b75c05920ab5..5059994fe297 100644 --- a/include/linux/rio_drv.h +++ b/include/linux/rio_drv.h | |||
@@ -433,5 +433,6 @@ extern u16 rio_local_get_device_id(struct rio_mport *port); | |||
433 | extern struct rio_dev *rio_get_device(u16 vid, u16 did, struct rio_dev *from); | 433 | extern struct rio_dev *rio_get_device(u16 vid, u16 did, struct rio_dev *from); |
434 | extern struct rio_dev *rio_get_asm(u16 vid, u16 did, u16 asm_vid, u16 asm_did, | 434 | extern struct rio_dev *rio_get_asm(u16 vid, u16 did, u16 asm_vid, u16 asm_did, |
435 | struct rio_dev *from); | 435 | struct rio_dev *from); |
436 | extern int rio_init_mports(void); | ||
436 | 437 | ||
437 | #endif /* LINUX_RIO_DRV_H */ | 438 | #endif /* LINUX_RIO_DRV_H */ |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index b9997907a0f1..9995834d2cb6 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -2758,6 +2758,21 @@ static inline int skb_tnl_header_len(const struct sk_buff *inner_skb) | |||
2758 | SKB_GSO_CB(inner_skb)->mac_offset; | 2758 | SKB_GSO_CB(inner_skb)->mac_offset; |
2759 | } | 2759 | } |
2760 | 2760 | ||
2761 | static inline int gso_pskb_expand_head(struct sk_buff *skb, int extra) | ||
2762 | { | ||
2763 | int new_headroom, headroom; | ||
2764 | int ret; | ||
2765 | |||
2766 | headroom = skb_headroom(skb); | ||
2767 | ret = pskb_expand_head(skb, extra, 0, GFP_ATOMIC); | ||
2768 | if (ret) | ||
2769 | return ret; | ||
2770 | |||
2771 | new_headroom = skb_headroom(skb); | ||
2772 | SKB_GSO_CB(skb)->mac_offset += (new_headroom - headroom); | ||
2773 | return 0; | ||
2774 | } | ||
2775 | |||
2761 | static inline bool skb_is_gso(const struct sk_buff *skb) | 2776 | static inline bool skb_is_gso(const struct sk_buff *skb) |
2762 | { | 2777 | { |
2763 | return skb_shinfo(skb)->gso_size; | 2778 | return skb_shinfo(skb)->gso_size; |
diff --git a/include/linux/wait.h b/include/linux/wait.h index ac38be2692d8..1133695eb067 100644 --- a/include/linux/wait.h +++ b/include/linux/wait.h | |||
@@ -217,6 +217,8 @@ do { \ | |||
217 | if (!ret) \ | 217 | if (!ret) \ |
218 | break; \ | 218 | break; \ |
219 | } \ | 219 | } \ |
220 | if (!ret && (condition)) \ | ||
221 | ret = 1; \ | ||
220 | finish_wait(&wq, &__wait); \ | 222 | finish_wait(&wq, &__wait); \ |
221 | } while (0) | 223 | } while (0) |
222 | 224 | ||
@@ -233,8 +235,9 @@ do { \ | |||
233 | * wake_up() has to be called after changing any variable that could | 235 | * wake_up() has to be called after changing any variable that could |
234 | * change the result of the wait condition. | 236 | * change the result of the wait condition. |
235 | * | 237 | * |
236 | * The function returns 0 if the @timeout elapsed, and the remaining | 238 | * The function returns 0 if the @timeout elapsed, or the remaining |
237 | * jiffies if the condition evaluated to true before the timeout elapsed. | 239 | * jiffies (at least 1) if the @condition evaluated to %true before |
240 | * the @timeout elapsed. | ||
238 | */ | 241 | */ |
239 | #define wait_event_timeout(wq, condition, timeout) \ | 242 | #define wait_event_timeout(wq, condition, timeout) \ |
240 | ({ \ | 243 | ({ \ |
@@ -302,6 +305,8 @@ do { \ | |||
302 | ret = -ERESTARTSYS; \ | 305 | ret = -ERESTARTSYS; \ |
303 | break; \ | 306 | break; \ |
304 | } \ | 307 | } \ |
308 | if (!ret && (condition)) \ | ||
309 | ret = 1; \ | ||
305 | finish_wait(&wq, &__wait); \ | 310 | finish_wait(&wq, &__wait); \ |
306 | } while (0) | 311 | } while (0) |
307 | 312 | ||
@@ -318,9 +323,10 @@ do { \ | |||
318 | * wake_up() has to be called after changing any variable that could | 323 | * wake_up() has to be called after changing any variable that could |
319 | * change the result of the wait condition. | 324 | * change the result of the wait condition. |
320 | * | 325 | * |
321 | * The function returns 0 if the @timeout elapsed, -ERESTARTSYS if it | 326 | * Returns: |
322 | * was interrupted by a signal, and the remaining jiffies otherwise | 327 | * 0 if the @timeout elapsed, -%ERESTARTSYS if it was interrupted by |
323 | * if the condition evaluated to true before the timeout elapsed. | 328 | * a signal, or the remaining jiffies (at least 1) if the @condition |
329 | * evaluated to %true before the @timeout elapsed. | ||
324 | */ | 330 | */ |
325 | #define wait_event_interruptible_timeout(wq, condition, timeout) \ | 331 | #define wait_event_interruptible_timeout(wq, condition, timeout) \ |
326 | ({ \ | 332 | ({ \ |
diff --git a/include/net/addrconf.h b/include/net/addrconf.h index 84a6440f1f19..21f702704f24 100644 --- a/include/net/addrconf.h +++ b/include/net/addrconf.h | |||
@@ -65,7 +65,7 @@ extern int addrconf_set_dstaddr(struct net *net, | |||
65 | 65 | ||
66 | extern int ipv6_chk_addr(struct net *net, | 66 | extern int ipv6_chk_addr(struct net *net, |
67 | const struct in6_addr *addr, | 67 | const struct in6_addr *addr, |
68 | struct net_device *dev, | 68 | const struct net_device *dev, |
69 | int strict); | 69 | int strict); |
70 | 70 | ||
71 | #if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE) | 71 | #if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE) |
diff --git a/include/net/ping.h b/include/net/ping.h index db04802f1673..5db0224b73ac 100644 --- a/include/net/ping.h +++ b/include/net/ping.h | |||
@@ -38,7 +38,7 @@ struct pingv6_ops { | |||
38 | void (*ipv6_icmp_error)(struct sock *sk, struct sk_buff *skb, int err, | 38 | void (*ipv6_icmp_error)(struct sock *sk, struct sk_buff *skb, int err, |
39 | __be16 port, u32 info, u8 *payload); | 39 | __be16 port, u32 info, u8 *payload); |
40 | int (*ipv6_chk_addr)(struct net *net, const struct in6_addr *addr, | 40 | int (*ipv6_chk_addr)(struct net *net, const struct in6_addr *addr, |
41 | struct net_device *dev, int strict); | 41 | const struct net_device *dev, int strict); |
42 | }; | 42 | }; |
43 | 43 | ||
44 | struct ping_table { | 44 | struct ping_table { |
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h index f10818fc8804..e7f4e21cc3e1 100644 --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h | |||
@@ -679,22 +679,26 @@ static inline struct sk_buff *skb_act_clone(struct sk_buff *skb, gfp_t gfp_mask, | |||
679 | #endif | 679 | #endif |
680 | 680 | ||
681 | struct psched_ratecfg { | 681 | struct psched_ratecfg { |
682 | u64 rate_bps; | 682 | u64 rate_bps; |
683 | u32 mult; | 683 | u32 mult; |
684 | u32 shift; | 684 | u16 overhead; |
685 | u8 shift; | ||
685 | }; | 686 | }; |
686 | 687 | ||
687 | static inline u64 psched_l2t_ns(const struct psched_ratecfg *r, | 688 | static inline u64 psched_l2t_ns(const struct psched_ratecfg *r, |
688 | unsigned int len) | 689 | unsigned int len) |
689 | { | 690 | { |
690 | return ((u64)len * r->mult) >> r->shift; | 691 | return ((u64)(len + r->overhead) * r->mult) >> r->shift; |
691 | } | 692 | } |
692 | 693 | ||
693 | extern void psched_ratecfg_precompute(struct psched_ratecfg *r, u32 rate); | 694 | extern void psched_ratecfg_precompute(struct psched_ratecfg *r, const struct tc_ratespec *conf); |
694 | 695 | ||
695 | static inline u32 psched_ratecfg_getrate(const struct psched_ratecfg *r) | 696 | static inline void psched_ratecfg_getrate(struct tc_ratespec *res, |
697 | const struct psched_ratecfg *r) | ||
696 | { | 698 | { |
697 | return r->rate_bps >> 3; | 699 | memset(res, 0, sizeof(*res)); |
700 | res->rate = r->rate_bps >> 3; | ||
701 | res->overhead = r->overhead; | ||
698 | } | 702 | } |
699 | 703 | ||
700 | #endif | 704 | #endif |
diff --git a/include/net/xfrm.h b/include/net/xfrm.h index ae16531d0d35..94ce082b29dc 100644 --- a/include/net/xfrm.h +++ b/include/net/xfrm.h | |||
@@ -1160,6 +1160,8 @@ static inline void xfrm_sk_free_policy(struct sock *sk) | |||
1160 | } | 1160 | } |
1161 | } | 1161 | } |
1162 | 1162 | ||
1163 | extern void xfrm_garbage_collect(struct net *net); | ||
1164 | |||
1163 | #else | 1165 | #else |
1164 | 1166 | ||
1165 | static inline void xfrm_sk_free_policy(struct sock *sk) {} | 1167 | static inline void xfrm_sk_free_policy(struct sock *sk) {} |
@@ -1194,6 +1196,9 @@ static inline int xfrm6_policy_check_reverse(struct sock *sk, int dir, | |||
1194 | { | 1196 | { |
1195 | return 1; | 1197 | return 1; |
1196 | } | 1198 | } |
1199 | static inline void xfrm_garbage_collect(struct net *net) | ||
1200 | { | ||
1201 | } | ||
1197 | #endif | 1202 | #endif |
1198 | 1203 | ||
1199 | static __inline__ | 1204 | static __inline__ |
diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h index e773dfa5f98f..4ea4f985f394 100644 --- a/include/target/target_core_base.h +++ b/include/target/target_core_base.h | |||
@@ -543,6 +543,7 @@ struct se_session { | |||
543 | struct list_head sess_list; | 543 | struct list_head sess_list; |
544 | struct list_head sess_acl_list; | 544 | struct list_head sess_acl_list; |
545 | struct list_head sess_cmd_list; | 545 | struct list_head sess_cmd_list; |
546 | struct list_head sess_wait_list; | ||
546 | spinlock_t sess_cmd_lock; | 547 | spinlock_t sess_cmd_lock; |
547 | struct kref sess_kref; | 548 | struct kref sess_kref; |
548 | }; | 549 | }; |
diff --git a/include/target/target_core_fabric.h b/include/target/target_core_fabric.h index ba3471b73c07..1dcce9cc99b9 100644 --- a/include/target/target_core_fabric.h +++ b/include/target/target_core_fabric.h | |||
@@ -114,7 +114,7 @@ sense_reason_t transport_generic_new_cmd(struct se_cmd *); | |||
114 | 114 | ||
115 | void target_execute_cmd(struct se_cmd *cmd); | 115 | void target_execute_cmd(struct se_cmd *cmd); |
116 | 116 | ||
117 | void transport_generic_free_cmd(struct se_cmd *, int); | 117 | int transport_generic_free_cmd(struct se_cmd *, int); |
118 | 118 | ||
119 | bool transport_wait_for_tasks(struct se_cmd *); | 119 | bool transport_wait_for_tasks(struct se_cmd *); |
120 | int transport_check_aborted_status(struct se_cmd *, int); | 120 | int transport_check_aborted_status(struct se_cmd *, int); |
@@ -123,7 +123,7 @@ int transport_send_check_condition_and_sense(struct se_cmd *, | |||
123 | int target_get_sess_cmd(struct se_session *, struct se_cmd *, bool); | 123 | int target_get_sess_cmd(struct se_session *, struct se_cmd *, bool); |
124 | int target_put_sess_cmd(struct se_session *, struct se_cmd *); | 124 | int target_put_sess_cmd(struct se_session *, struct se_cmd *); |
125 | void target_sess_cmd_list_set_waiting(struct se_session *); | 125 | void target_sess_cmd_list_set_waiting(struct se_session *); |
126 | void target_wait_for_sess_cmds(struct se_session *, int); | 126 | void target_wait_for_sess_cmds(struct se_session *); |
127 | 127 | ||
128 | int core_alua_check_nonop_delay(struct se_cmd *); | 128 | int core_alua_check_nonop_delay(struct se_cmd *); |
129 | 129 | ||
diff --git a/include/video/omapdss.h b/include/video/omapdss.h index 62ca9a77c1d6..aeb4e9a0c5d1 100644 --- a/include/video/omapdss.h +++ b/include/video/omapdss.h | |||
@@ -748,6 +748,7 @@ struct omap_dss_driver { | |||
748 | }; | 748 | }; |
749 | 749 | ||
750 | enum omapdss_version omapdss_get_version(void); | 750 | enum omapdss_version omapdss_get_version(void); |
751 | bool omapdss_is_initialized(void); | ||
751 | 752 | ||
752 | int omap_dss_register_driver(struct omap_dss_driver *); | 753 | int omap_dss_register_driver(struct omap_dss_driver *); |
753 | void omap_dss_unregister_driver(struct omap_dss_driver *); | 754 | void omap_dss_unregister_driver(struct omap_dss_driver *); |
diff --git a/include/xen/xenbus.h b/include/xen/xenbus.h index 0a7515c1e3a4..569c07f2e344 100644 --- a/include/xen/xenbus.h +++ b/include/xen/xenbus.h | |||
@@ -70,6 +70,7 @@ struct xenbus_device { | |||
70 | struct device dev; | 70 | struct device dev; |
71 | enum xenbus_state state; | 71 | enum xenbus_state state; |
72 | struct completion down; | 72 | struct completion down; |
73 | struct work_struct work; | ||
73 | }; | 74 | }; |
74 | 75 | ||
75 | static inline struct xenbus_device *to_xenbus_device(struct device *dev) | 76 | static inline struct xenbus_device *to_xenbus_device(struct device *dev) |
@@ -752,19 +752,29 @@ static void do_smart_update(struct sem_array *sma, struct sembuf *sops, int nsop | |||
752 | int otime, struct list_head *pt) | 752 | int otime, struct list_head *pt) |
753 | { | 753 | { |
754 | int i; | 754 | int i; |
755 | int progress; | ||
755 | 756 | ||
756 | if (sma->complex_count || sops == NULL) { | 757 | progress = 1; |
757 | if (update_queue(sma, -1, pt)) | 758 | retry_global: |
759 | if (sma->complex_count) { | ||
760 | if (update_queue(sma, -1, pt)) { | ||
761 | progress = 1; | ||
758 | otime = 1; | 762 | otime = 1; |
763 | sops = NULL; | ||
764 | } | ||
759 | } | 765 | } |
766 | if (!progress) | ||
767 | goto done; | ||
760 | 768 | ||
761 | if (!sops) { | 769 | if (!sops) { |
762 | /* No semops; something special is going on. */ | 770 | /* No semops; something special is going on. */ |
763 | for (i = 0; i < sma->sem_nsems; i++) { | 771 | for (i = 0; i < sma->sem_nsems; i++) { |
764 | if (update_queue(sma, i, pt)) | 772 | if (update_queue(sma, i, pt)) { |
765 | otime = 1; | 773 | otime = 1; |
774 | progress = 1; | ||
775 | } | ||
766 | } | 776 | } |
767 | goto done; | 777 | goto done_checkretry; |
768 | } | 778 | } |
769 | 779 | ||
770 | /* Check the semaphores that were modified. */ | 780 | /* Check the semaphores that were modified. */ |
@@ -772,8 +782,15 @@ static void do_smart_update(struct sem_array *sma, struct sembuf *sops, int nsop | |||
772 | if (sops[i].sem_op > 0 || | 782 | if (sops[i].sem_op > 0 || |
773 | (sops[i].sem_op < 0 && | 783 | (sops[i].sem_op < 0 && |
774 | sma->sem_base[sops[i].sem_num].semval == 0)) | 784 | sma->sem_base[sops[i].sem_num].semval == 0)) |
775 | if (update_queue(sma, sops[i].sem_num, pt)) | 785 | if (update_queue(sma, sops[i].sem_num, pt)) { |
776 | otime = 1; | 786 | otime = 1; |
787 | progress = 1; | ||
788 | } | ||
789 | } | ||
790 | done_checkretry: | ||
791 | if (progress) { | ||
792 | progress = 0; | ||
793 | goto retry_global; | ||
777 | } | 794 | } |
778 | done: | 795 | done: |
779 | if (otime) | 796 | if (otime) |
diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c index 83a2970295d1..6bd4a90d1991 100644 --- a/kernel/auditfilter.c +++ b/kernel/auditfilter.c | |||
@@ -1021,9 +1021,6 @@ static void audit_log_rule_change(char *action, struct audit_krule *rule, int re | |||
1021 | * @seq: netlink audit message sequence (serial) number | 1021 | * @seq: netlink audit message sequence (serial) number |
1022 | * @data: payload data | 1022 | * @data: payload data |
1023 | * @datasz: size of payload data | 1023 | * @datasz: size of payload data |
1024 | * @loginuid: loginuid of sender | ||
1025 | * @sessionid: sessionid for netlink audit message | ||
1026 | * @sid: SE Linux Security ID of sender | ||
1027 | */ | 1024 | */ |
1028 | int audit_receive_filter(int type, int pid, int seq, void *data, size_t datasz) | 1025 | int audit_receive_filter(int type, int pid, int seq, void *data, size_t datasz) |
1029 | { | 1026 | { |
diff --git a/kernel/cgroup.c b/kernel/cgroup.c index 2a9926275f80..a7c9e6ddb979 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c | |||
@@ -1686,11 +1686,14 @@ static struct dentry *cgroup_mount(struct file_system_type *fs_type, | |||
1686 | */ | 1686 | */ |
1687 | cgroup_drop_root(opts.new_root); | 1687 | cgroup_drop_root(opts.new_root); |
1688 | 1688 | ||
1689 | if (((root->flags | opts.flags) & CGRP_ROOT_SANE_BEHAVIOR) && | 1689 | if (root->flags != opts.flags) { |
1690 | root->flags != opts.flags) { | 1690 | if ((root->flags | opts.flags) & CGRP_ROOT_SANE_BEHAVIOR) { |
1691 | pr_err("cgroup: sane_behavior: new mount options should match the existing superblock\n"); | 1691 | pr_err("cgroup: sane_behavior: new mount options should match the existing superblock\n"); |
1692 | ret = -EINVAL; | 1692 | ret = -EINVAL; |
1693 | goto drop_new_super; | 1693 | goto drop_new_super; |
1694 | } else { | ||
1695 | pr_warning("cgroup: new mount options do not match the existing superblock, will be ignored\n"); | ||
1696 | } | ||
1694 | } | 1697 | } |
1695 | 1698 | ||
1696 | /* no subsys rebinding, so refcounts don't change */ | 1699 | /* no subsys rebinding, so refcounts don't change */ |
@@ -2699,13 +2702,14 @@ static int cgroup_add_file(struct cgroup *cgrp, struct cgroup_subsys *subsys, | |||
2699 | goto out; | 2702 | goto out; |
2700 | } | 2703 | } |
2701 | 2704 | ||
2705 | cfe->type = (void *)cft; | ||
2706 | cfe->dentry = dentry; | ||
2707 | dentry->d_fsdata = cfe; | ||
2708 | simple_xattrs_init(&cfe->xattrs); | ||
2709 | |||
2702 | mode = cgroup_file_mode(cft); | 2710 | mode = cgroup_file_mode(cft); |
2703 | error = cgroup_create_file(dentry, mode | S_IFREG, cgrp->root->sb); | 2711 | error = cgroup_create_file(dentry, mode | S_IFREG, cgrp->root->sb); |
2704 | if (!error) { | 2712 | if (!error) { |
2705 | cfe->type = (void *)cft; | ||
2706 | cfe->dentry = dentry; | ||
2707 | dentry->d_fsdata = cfe; | ||
2708 | simple_xattrs_init(&cfe->xattrs); | ||
2709 | list_add_tail(&cfe->node, &parent->files); | 2713 | list_add_tail(&cfe->node, &parent->files); |
2710 | cfe = NULL; | 2714 | cfe = NULL; |
2711 | } | 2715 | } |
@@ -2953,11 +2957,8 @@ struct cgroup *cgroup_next_descendant_pre(struct cgroup *pos, | |||
2953 | WARN_ON_ONCE(!rcu_read_lock_held()); | 2957 | WARN_ON_ONCE(!rcu_read_lock_held()); |
2954 | 2958 | ||
2955 | /* if first iteration, pretend we just visited @cgroup */ | 2959 | /* if first iteration, pretend we just visited @cgroup */ |
2956 | if (!pos) { | 2960 | if (!pos) |
2957 | if (list_empty(&cgroup->children)) | ||
2958 | return NULL; | ||
2959 | pos = cgroup; | 2961 | pos = cgroup; |
2960 | } | ||
2961 | 2962 | ||
2962 | /* visit the first child if exists */ | 2963 | /* visit the first child if exists */ |
2963 | next = list_first_or_null_rcu(&pos->children, struct cgroup, sibling); | 2964 | next = list_first_or_null_rcu(&pos->children, struct cgroup, sibling); |
@@ -2965,14 +2966,14 @@ struct cgroup *cgroup_next_descendant_pre(struct cgroup *pos, | |||
2965 | return next; | 2966 | return next; |
2966 | 2967 | ||
2967 | /* no child, visit my or the closest ancestor's next sibling */ | 2968 | /* no child, visit my or the closest ancestor's next sibling */ |
2968 | do { | 2969 | while (pos != cgroup) { |
2969 | next = list_entry_rcu(pos->sibling.next, struct cgroup, | 2970 | next = list_entry_rcu(pos->sibling.next, struct cgroup, |
2970 | sibling); | 2971 | sibling); |
2971 | if (&next->sibling != &pos->parent->children) | 2972 | if (&next->sibling != &pos->parent->children) |
2972 | return next; | 2973 | return next; |
2973 | 2974 | ||
2974 | pos = pos->parent; | 2975 | pos = pos->parent; |
2975 | } while (pos != cgroup); | 2976 | } |
2976 | 2977 | ||
2977 | return NULL; | 2978 | return NULL; |
2978 | } | 2979 | } |
diff --git a/kernel/range.c b/kernel/range.c index 071b0ab455cb..eb911dbce267 100644 --- a/kernel/range.c +++ b/kernel/range.c | |||
@@ -48,9 +48,11 @@ int add_range_with_merge(struct range *range, int az, int nr_range, | |||
48 | final_start = min(range[i].start, start); | 48 | final_start = min(range[i].start, start); |
49 | final_end = max(range[i].end, end); | 49 | final_end = max(range[i].end, end); |
50 | 50 | ||
51 | range[i].start = final_start; | 51 | /* clear it and add it back for further merge */ |
52 | range[i].end = final_end; | 52 | range[i].start = 0; |
53 | return nr_range; | 53 | range[i].end = 0; |
54 | return add_range_with_merge(range, az, nr_range, | ||
55 | final_start, final_end); | ||
54 | } | 56 | } |
55 | 57 | ||
56 | /* Need to add it: */ | 58 | /* Need to add it: */ |
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index b59aea2c48c2..e444ff88f0a4 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c | |||
@@ -620,6 +620,9 @@ int ring_buffer_poll_wait(struct ring_buffer *buffer, int cpu, | |||
620 | if (cpu == RING_BUFFER_ALL_CPUS) | 620 | if (cpu == RING_BUFFER_ALL_CPUS) |
621 | work = &buffer->irq_work; | 621 | work = &buffer->irq_work; |
622 | else { | 622 | else { |
623 | if (!cpumask_test_cpu(cpu, buffer->cpumask)) | ||
624 | return -EINVAL; | ||
625 | |||
623 | cpu_buffer = buffer->buffers[cpu]; | 626 | cpu_buffer = buffer->buffers[cpu]; |
624 | work = &cpu_buffer->irq_work; | 627 | work = &cpu_buffer->irq_work; |
625 | } | 628 | } |
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index ae6fa2d1cdf7..4d79485b3237 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
@@ -6216,10 +6216,15 @@ __init static int tracer_alloc_buffers(void) | |||
6216 | 6216 | ||
6217 | trace_init_cmdlines(); | 6217 | trace_init_cmdlines(); |
6218 | 6218 | ||
6219 | register_tracer(&nop_trace); | 6219 | /* |
6220 | 6220 | * register_tracer() might reference current_trace, so it | |
6221 | * needs to be set before we register anything. This is | ||
6222 | * just a bootstrap of current_trace anyway. | ||
6223 | */ | ||
6221 | global_trace.current_trace = &nop_trace; | 6224 | global_trace.current_trace = &nop_trace; |
6222 | 6225 | ||
6226 | register_tracer(&nop_trace); | ||
6227 | |||
6223 | /* All seems OK, enable tracing */ | 6228 | /* All seems OK, enable tracing */ |
6224 | tracing_disabled = 0; | 6229 | tracing_disabled = 0; |
6225 | 6230 | ||
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c index 7a0cf68027cc..27963e2bf4bf 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c | |||
@@ -2072,8 +2072,10 @@ event_enable_func(struct ftrace_hash *hash, | |||
2072 | out_reg: | 2072 | out_reg: |
2073 | /* Don't let event modules unload while probe registered */ | 2073 | /* Don't let event modules unload while probe registered */ |
2074 | ret = try_module_get(file->event_call->mod); | 2074 | ret = try_module_get(file->event_call->mod); |
2075 | if (!ret) | 2075 | if (!ret) { |
2076 | ret = -EBUSY; | ||
2076 | goto out_free; | 2077 | goto out_free; |
2078 | } | ||
2077 | 2079 | ||
2078 | ret = __ftrace_event_enable_disable(file, 1, 1); | 2080 | ret = __ftrace_event_enable_disable(file, 1, 1); |
2079 | if (ret < 0) | 2081 | if (ret < 0) |
diff --git a/lib/mpi/longlong.h b/lib/mpi/longlong.h index 095ab157a521..d411355f238e 100644 --- a/lib/mpi/longlong.h +++ b/lib/mpi/longlong.h | |||
@@ -318,7 +318,8 @@ extern UDItype __udiv_qrnnd(); | |||
318 | "rM" ((USItype)(bh)), \ | 318 | "rM" ((USItype)(bh)), \ |
319 | "rM" ((USItype)(al)), \ | 319 | "rM" ((USItype)(al)), \ |
320 | "rM" ((USItype)(bl))) | 320 | "rM" ((USItype)(bl))) |
321 | #if defined(_PA_RISC1_1) | 321 | #if 0 && defined(_PA_RISC1_1) |
322 | /* xmpyu uses floating point register which is not allowed in Linux kernel. */ | ||
322 | #define umul_ppmm(wh, wl, u, v) \ | 323 | #define umul_ppmm(wh, wl, u, v) \ |
323 | do { \ | 324 | do { \ |
324 | union {UDItype __ll; \ | 325 | union {UDItype __ll; \ |
@@ -337,7 +338,7 @@ do { \ | |||
337 | #define UMUL_TIME 40 | 338 | #define UMUL_TIME 40 |
338 | #define UDIV_TIME 80 | 339 | #define UDIV_TIME 80 |
339 | #endif | 340 | #endif |
340 | #ifndef LONGLONG_STANDALONE | 341 | #if 0 /* #ifndef LONGLONG_STANDALONE */ |
341 | #define udiv_qrnnd(q, r, n1, n0, d) \ | 342 | #define udiv_qrnnd(q, r, n1, n0, d) \ |
342 | do { USItype __r; \ | 343 | do { USItype __r; \ |
343 | (q) = __udiv_qrnnd(&__r, (n1), (n0), (d)); \ | 344 | (q) = __udiv_qrnnd(&__r, (n1), (n0), (d)); \ |
diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 03a89a2f464b..362c329b83fe 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c | |||
@@ -2325,7 +2325,12 @@ static void collapse_huge_page(struct mm_struct *mm, | |||
2325 | pte_unmap(pte); | 2325 | pte_unmap(pte); |
2326 | spin_lock(&mm->page_table_lock); | 2326 | spin_lock(&mm->page_table_lock); |
2327 | BUG_ON(!pmd_none(*pmd)); | 2327 | BUG_ON(!pmd_none(*pmd)); |
2328 | set_pmd_at(mm, address, pmd, _pmd); | 2328 | /* |
2329 | * We can only use set_pmd_at when establishing | ||
2330 | * hugepmds and never for establishing regular pmds that | ||
2331 | * points to regular pagetables. Use pmd_populate for that | ||
2332 | */ | ||
2333 | pmd_populate(mm, pmd, pmd_pgtable(_pmd)); | ||
2329 | spin_unlock(&mm->page_table_lock); | 2334 | spin_unlock(&mm->page_table_lock); |
2330 | anon_vma_unlock_write(vma->anon_vma); | 2335 | anon_vma_unlock_write(vma->anon_vma); |
2331 | goto out; | 2336 | goto out; |
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index cb1c9dedf9b6..010d6c14129a 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
@@ -4108,8 +4108,6 @@ __mem_cgroup_uncharge_common(struct page *page, enum charge_type ctype, | |||
4108 | if (mem_cgroup_disabled()) | 4108 | if (mem_cgroup_disabled()) |
4109 | return NULL; | 4109 | return NULL; |
4110 | 4110 | ||
4111 | VM_BUG_ON(PageSwapCache(page)); | ||
4112 | |||
4113 | if (PageTransHuge(page)) { | 4111 | if (PageTransHuge(page)) { |
4114 | nr_pages <<= compound_order(page); | 4112 | nr_pages <<= compound_order(page); |
4115 | VM_BUG_ON(!PageTransHuge(page)); | 4113 | VM_BUG_ON(!PageTransHuge(page)); |
@@ -4205,6 +4203,18 @@ void mem_cgroup_uncharge_page(struct page *page) | |||
4205 | if (page_mapped(page)) | 4203 | if (page_mapped(page)) |
4206 | return; | 4204 | return; |
4207 | VM_BUG_ON(page->mapping && !PageAnon(page)); | 4205 | VM_BUG_ON(page->mapping && !PageAnon(page)); |
4206 | /* | ||
4207 | * If the page is in swap cache, uncharge should be deferred | ||
4208 | * to the swap path, which also properly accounts swap usage | ||
4209 | * and handles memcg lifetime. | ||
4210 | * | ||
4211 | * Note that this check is not stable and reclaim may add the | ||
4212 | * page to swap cache at any time after this. However, if the | ||
4213 | * page is not in swap cache by the time page->mapcount hits | ||
4214 | * 0, there won't be any page table references to the swap | ||
4215 | * slot, and reclaim will free it and not actually write the | ||
4216 | * page to disk. | ||
4217 | */ | ||
4208 | if (PageSwapCache(page)) | 4218 | if (PageSwapCache(page)) |
4209 | return; | 4219 | return; |
4210 | __mem_cgroup_uncharge_common(page, MEM_CGROUP_CHARGE_TYPE_ANON, false); | 4220 | __mem_cgroup_uncharge_common(page, MEM_CGROUP_CHARGE_TYPE_ANON, false); |
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index a221fac1f47d..1ad92b46753e 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c | |||
@@ -720,9 +720,12 @@ int __remove_pages(struct zone *zone, unsigned long phys_start_pfn, | |||
720 | start = phys_start_pfn << PAGE_SHIFT; | 720 | start = phys_start_pfn << PAGE_SHIFT; |
721 | size = nr_pages * PAGE_SIZE; | 721 | size = nr_pages * PAGE_SIZE; |
722 | ret = release_mem_region_adjustable(&iomem_resource, start, size); | 722 | ret = release_mem_region_adjustable(&iomem_resource, start, size); |
723 | if (ret) | 723 | if (ret) { |
724 | pr_warn("Unable to release resource <%016llx-%016llx> (%d)\n", | 724 | resource_size_t endres = start + size - 1; |
725 | start, start + size - 1, ret); | 725 | |
726 | pr_warn("Unable to release resource <%pa-%pa> (%d)\n", | ||
727 | &start, &endres, ret); | ||
728 | } | ||
726 | 729 | ||
727 | sections_to_remove = nr_pages / PAGES_PER_SECTION; | 730 | sections_to_remove = nr_pages / PAGES_PER_SECTION; |
728 | for (i = 0; i < sections_to_remove; i++) { | 731 | for (i = 0; i < sections_to_remove; i++) { |
diff --git a/mm/migrate.c b/mm/migrate.c index 27ed22579fd9..b1f57501de9c 100644 --- a/mm/migrate.c +++ b/mm/migrate.c | |||
@@ -165,7 +165,7 @@ static int remove_migration_pte(struct page *new, struct vm_area_struct *vma, | |||
165 | pte = arch_make_huge_pte(pte, vma, new, 0); | 165 | pte = arch_make_huge_pte(pte, vma, new, 0); |
166 | } | 166 | } |
167 | #endif | 167 | #endif |
168 | flush_cache_page(vma, addr, pte_pfn(pte)); | 168 | flush_dcache_page(new); |
169 | set_pte_at(mm, addr, ptep, pte); | 169 | set_pte_at(mm, addr, ptep, pte); |
170 | 170 | ||
171 | if (PageHuge(new)) { | 171 | if (PageHuge(new)) { |
diff --git a/mm/mmu_notifier.c b/mm/mmu_notifier.c index be04122fb277..6725ff183374 100644 --- a/mm/mmu_notifier.c +++ b/mm/mmu_notifier.c | |||
@@ -40,48 +40,44 @@ void __mmu_notifier_release(struct mm_struct *mm) | |||
40 | int id; | 40 | int id; |
41 | 41 | ||
42 | /* | 42 | /* |
43 | * srcu_read_lock() here will block synchronize_srcu() in | 43 | * SRCU here will block mmu_notifier_unregister until |
44 | * mmu_notifier_unregister() until all registered | 44 | * ->release returns. |
45 | * ->release() callouts this function makes have | ||
46 | * returned. | ||
47 | */ | 45 | */ |
48 | id = srcu_read_lock(&srcu); | 46 | id = srcu_read_lock(&srcu); |
47 | hlist_for_each_entry_rcu(mn, &mm->mmu_notifier_mm->list, hlist) | ||
48 | /* | ||
49 | * If ->release runs before mmu_notifier_unregister it must be | ||
50 | * handled, as it's the only way for the driver to flush all | ||
51 | * existing sptes and stop the driver from establishing any more | ||
52 | * sptes before all the pages in the mm are freed. | ||
53 | */ | ||
54 | if (mn->ops->release) | ||
55 | mn->ops->release(mn, mm); | ||
56 | srcu_read_unlock(&srcu, id); | ||
57 | |||
49 | spin_lock(&mm->mmu_notifier_mm->lock); | 58 | spin_lock(&mm->mmu_notifier_mm->lock); |
50 | while (unlikely(!hlist_empty(&mm->mmu_notifier_mm->list))) { | 59 | while (unlikely(!hlist_empty(&mm->mmu_notifier_mm->list))) { |
51 | mn = hlist_entry(mm->mmu_notifier_mm->list.first, | 60 | mn = hlist_entry(mm->mmu_notifier_mm->list.first, |
52 | struct mmu_notifier, | 61 | struct mmu_notifier, |
53 | hlist); | 62 | hlist); |
54 | |||
55 | /* | 63 | /* |
56 | * Unlink. This will prevent mmu_notifier_unregister() | 64 | * We arrived before mmu_notifier_unregister so |
57 | * from also making the ->release() callout. | 65 | * mmu_notifier_unregister will do nothing other than to wait |
66 | * for ->release to finish and for mmu_notifier_unregister to | ||
67 | * return. | ||
58 | */ | 68 | */ |
59 | hlist_del_init_rcu(&mn->hlist); | 69 | hlist_del_init_rcu(&mn->hlist); |
60 | spin_unlock(&mm->mmu_notifier_mm->lock); | ||
61 | |||
62 | /* | ||
63 | * Clear sptes. (see 'release' description in mmu_notifier.h) | ||
64 | */ | ||
65 | if (mn->ops->release) | ||
66 | mn->ops->release(mn, mm); | ||
67 | |||
68 | spin_lock(&mm->mmu_notifier_mm->lock); | ||
69 | } | 70 | } |
70 | spin_unlock(&mm->mmu_notifier_mm->lock); | 71 | spin_unlock(&mm->mmu_notifier_mm->lock); |
71 | 72 | ||
72 | /* | 73 | /* |
73 | * All callouts to ->release() which we have done are complete. | 74 | * synchronize_srcu here prevents mmu_notifier_release from returning to |
74 | * Allow synchronize_srcu() in mmu_notifier_unregister() to complete | 75 | * exit_mmap (which would proceed with freeing all pages in the mm) |
75 | */ | 76 | * until the ->release method returns, if it was invoked by |
76 | srcu_read_unlock(&srcu, id); | 77 | * mmu_notifier_unregister. |
77 | 78 | * | |
78 | /* | 79 | * The mmu_notifier_mm can't go away from under us because one mm_count |
79 | * mmu_notifier_unregister() may have unlinked a notifier and may | 80 | * is held by exit_mmap. |
80 | * still be calling out to it. Additionally, other notifiers | ||
81 | * may have been active via vmtruncate() et. al. Block here | ||
82 | * to ensure that all notifier callouts for this mm have been | ||
83 | * completed and the sptes are really cleaned up before returning | ||
84 | * to exit_mmap(). | ||
85 | */ | 81 | */ |
86 | synchronize_srcu(&srcu); | 82 | synchronize_srcu(&srcu); |
87 | } | 83 | } |
@@ -292,31 +288,34 @@ void mmu_notifier_unregister(struct mmu_notifier *mn, struct mm_struct *mm) | |||
292 | { | 288 | { |
293 | BUG_ON(atomic_read(&mm->mm_count) <= 0); | 289 | BUG_ON(atomic_read(&mm->mm_count) <= 0); |
294 | 290 | ||
295 | spin_lock(&mm->mmu_notifier_mm->lock); | ||
296 | if (!hlist_unhashed(&mn->hlist)) { | 291 | if (!hlist_unhashed(&mn->hlist)) { |
292 | /* | ||
293 | * SRCU here will force exit_mmap to wait for ->release to | ||
294 | * finish before freeing the pages. | ||
295 | */ | ||
297 | int id; | 296 | int id; |
298 | 297 | ||
298 | id = srcu_read_lock(&srcu); | ||
299 | /* | 299 | /* |
300 | * Ensure we synchronize up with __mmu_notifier_release(). | 300 | * exit_mmap will block in mmu_notifier_release to guarantee |
301 | * that ->release is called before freeing the pages. | ||
301 | */ | 302 | */ |
302 | id = srcu_read_lock(&srcu); | ||
303 | |||
304 | hlist_del_rcu(&mn->hlist); | ||
305 | spin_unlock(&mm->mmu_notifier_mm->lock); | ||
306 | |||
307 | if (mn->ops->release) | 303 | if (mn->ops->release) |
308 | mn->ops->release(mn, mm); | 304 | mn->ops->release(mn, mm); |
305 | srcu_read_unlock(&srcu, id); | ||
309 | 306 | ||
307 | spin_lock(&mm->mmu_notifier_mm->lock); | ||
310 | /* | 308 | /* |
311 | * Allow __mmu_notifier_release() to complete. | 309 | * Can not use list_del_rcu() since __mmu_notifier_release |
310 | * can delete it before we hold the lock. | ||
312 | */ | 311 | */ |
313 | srcu_read_unlock(&srcu, id); | 312 | hlist_del_init_rcu(&mn->hlist); |
314 | } else | ||
315 | spin_unlock(&mm->mmu_notifier_mm->lock); | 313 | spin_unlock(&mm->mmu_notifier_mm->lock); |
314 | } | ||
316 | 315 | ||
317 | /* | 316 | /* |
318 | * Wait for any running method to finish, including ->release() if it | 317 | * Wait for any running method to finish, of course including |
319 | * was run by __mmu_notifier_release() instead of us. | 318 | * ->release if it was run by mmu_notifier_relase instead of us. |
320 | */ | 319 | */ |
321 | synchronize_srcu(&srcu); | 320 | synchronize_srcu(&srcu); |
322 | 321 | ||
diff --git a/mm/pagewalk.c b/mm/pagewalk.c index 35aa294656cd..5da2cbcfdbb5 100644 --- a/mm/pagewalk.c +++ b/mm/pagewalk.c | |||
@@ -127,28 +127,7 @@ static int walk_hugetlb_range(struct vm_area_struct *vma, | |||
127 | return 0; | 127 | return 0; |
128 | } | 128 | } |
129 | 129 | ||
130 | static struct vm_area_struct* hugetlb_vma(unsigned long addr, struct mm_walk *walk) | ||
131 | { | ||
132 | struct vm_area_struct *vma; | ||
133 | |||
134 | /* We don't need vma lookup at all. */ | ||
135 | if (!walk->hugetlb_entry) | ||
136 | return NULL; | ||
137 | |||
138 | VM_BUG_ON(!rwsem_is_locked(&walk->mm->mmap_sem)); | ||
139 | vma = find_vma(walk->mm, addr); | ||
140 | if (vma && vma->vm_start <= addr && is_vm_hugetlb_page(vma)) | ||
141 | return vma; | ||
142 | |||
143 | return NULL; | ||
144 | } | ||
145 | |||
146 | #else /* CONFIG_HUGETLB_PAGE */ | 130 | #else /* CONFIG_HUGETLB_PAGE */ |
147 | static struct vm_area_struct* hugetlb_vma(unsigned long addr, struct mm_walk *walk) | ||
148 | { | ||
149 | return NULL; | ||
150 | } | ||
151 | |||
152 | static int walk_hugetlb_range(struct vm_area_struct *vma, | 131 | static int walk_hugetlb_range(struct vm_area_struct *vma, |
153 | unsigned long addr, unsigned long end, | 132 | unsigned long addr, unsigned long end, |
154 | struct mm_walk *walk) | 133 | struct mm_walk *walk) |
@@ -198,30 +177,53 @@ int walk_page_range(unsigned long addr, unsigned long end, | |||
198 | if (!walk->mm) | 177 | if (!walk->mm) |
199 | return -EINVAL; | 178 | return -EINVAL; |
200 | 179 | ||
180 | VM_BUG_ON(!rwsem_is_locked(&walk->mm->mmap_sem)); | ||
181 | |||
201 | pgd = pgd_offset(walk->mm, addr); | 182 | pgd = pgd_offset(walk->mm, addr); |
202 | do { | 183 | do { |
203 | struct vm_area_struct *vma; | 184 | struct vm_area_struct *vma = NULL; |
204 | 185 | ||
205 | next = pgd_addr_end(addr, end); | 186 | next = pgd_addr_end(addr, end); |
206 | 187 | ||
207 | /* | 188 | /* |
208 | * handle hugetlb vma individually because pagetable walk for | 189 | * This function was not intended to be vma based. |
209 | * the hugetlb page is dependent on the architecture and | 190 | * But there are vma special cases to be handled: |
210 | * we can't handled it in the same manner as non-huge pages. | 191 | * - hugetlb vma's |
192 | * - VM_PFNMAP vma's | ||
211 | */ | 193 | */ |
212 | vma = hugetlb_vma(addr, walk); | 194 | vma = find_vma(walk->mm, addr); |
213 | if (vma) { | 195 | if (vma) { |
214 | if (vma->vm_end < next) | 196 | /* |
197 | * There are no page structures backing a VM_PFNMAP | ||
198 | * range, so do not allow split_huge_page_pmd(). | ||
199 | */ | ||
200 | if ((vma->vm_start <= addr) && | ||
201 | (vma->vm_flags & VM_PFNMAP)) { | ||
215 | next = vma->vm_end; | 202 | next = vma->vm_end; |
203 | pgd = pgd_offset(walk->mm, next); | ||
204 | continue; | ||
205 | } | ||
216 | /* | 206 | /* |
217 | * Hugepage is very tightly coupled with vma, so | 207 | * Handle hugetlb vma individually because pagetable |
218 | * walk through hugetlb entries within a given vma. | 208 | * walk for the hugetlb page is dependent on the |
209 | * architecture and we can't handled it in the same | ||
210 | * manner as non-huge pages. | ||
219 | */ | 211 | */ |
220 | err = walk_hugetlb_range(vma, addr, next, walk); | 212 | if (walk->hugetlb_entry && (vma->vm_start <= addr) && |
221 | if (err) | 213 | is_vm_hugetlb_page(vma)) { |
222 | break; | 214 | if (vma->vm_end < next) |
223 | pgd = pgd_offset(walk->mm, next); | 215 | next = vma->vm_end; |
224 | continue; | 216 | /* |
217 | * Hugepage is very tightly coupled with vma, | ||
218 | * so walk through hugetlb entries within a | ||
219 | * given vma. | ||
220 | */ | ||
221 | err = walk_hugetlb_range(vma, addr, next, walk); | ||
222 | if (err) | ||
223 | break; | ||
224 | pgd = pgd_offset(walk->mm, next); | ||
225 | continue; | ||
226 | } | ||
225 | } | 227 | } |
226 | 228 | ||
227 | if (pgd_none_or_clear_bad(pgd)) { | 229 | if (pgd_none_or_clear_bad(pgd)) { |
diff --git a/net/core/dev_addr_lists.c b/net/core/dev_addr_lists.c index c013f38482a1..6cda4e2c2132 100644 --- a/net/core/dev_addr_lists.c +++ b/net/core/dev_addr_lists.c | |||
@@ -39,6 +39,7 @@ static int __hw_addr_create_ex(struct netdev_hw_addr_list *list, | |||
39 | ha->refcount = 1; | 39 | ha->refcount = 1; |
40 | ha->global_use = global; | 40 | ha->global_use = global; |
41 | ha->synced = sync; | 41 | ha->synced = sync; |
42 | ha->sync_cnt = 0; | ||
42 | list_add_tail_rcu(&ha->list, &list->list); | 43 | list_add_tail_rcu(&ha->list, &list->list); |
43 | list->count++; | 44 | list->count++; |
44 | 45 | ||
@@ -66,7 +67,7 @@ static int __hw_addr_add_ex(struct netdev_hw_addr_list *list, | |||
66 | } | 67 | } |
67 | if (sync) { | 68 | if (sync) { |
68 | if (ha->synced) | 69 | if (ha->synced) |
69 | return 0; | 70 | return -EEXIST; |
70 | else | 71 | else |
71 | ha->synced = true; | 72 | ha->synced = true; |
72 | } | 73 | } |
@@ -139,10 +140,13 @@ static int __hw_addr_sync_one(struct netdev_hw_addr_list *to_list, | |||
139 | 140 | ||
140 | err = __hw_addr_add_ex(to_list, ha->addr, addr_len, ha->type, | 141 | err = __hw_addr_add_ex(to_list, ha->addr, addr_len, ha->type, |
141 | false, true); | 142 | false, true); |
142 | if (err) | 143 | if (err && err != -EEXIST) |
143 | return err; | 144 | return err; |
144 | ha->sync_cnt++; | 145 | |
145 | ha->refcount++; | 146 | if (!err) { |
147 | ha->sync_cnt++; | ||
148 | ha->refcount++; | ||
149 | } | ||
146 | 150 | ||
147 | return 0; | 151 | return 0; |
148 | } | 152 | } |
@@ -159,7 +163,8 @@ static void __hw_addr_unsync_one(struct netdev_hw_addr_list *to_list, | |||
159 | if (err) | 163 | if (err) |
160 | return; | 164 | return; |
161 | ha->sync_cnt--; | 165 | ha->sync_cnt--; |
162 | __hw_addr_del_entry(from_list, ha, false, true); | 166 | /* address on from list is not marked synced */ |
167 | __hw_addr_del_entry(from_list, ha, false, false); | ||
163 | } | 168 | } |
164 | 169 | ||
165 | static int __hw_addr_sync_multiple(struct netdev_hw_addr_list *to_list, | 170 | static int __hw_addr_sync_multiple(struct netdev_hw_addr_list *to_list, |
@@ -796,7 +801,7 @@ int dev_mc_sync_multiple(struct net_device *to, struct net_device *from) | |||
796 | return -EINVAL; | 801 | return -EINVAL; |
797 | 802 | ||
798 | netif_addr_lock_nested(to); | 803 | netif_addr_lock_nested(to); |
799 | err = __hw_addr_sync(&to->mc, &from->mc, to->addr_len); | 804 | err = __hw_addr_sync_multiple(&to->mc, &from->mc, to->addr_len); |
800 | if (!err) | 805 | if (!err) |
801 | __dev_set_rx_mode(to); | 806 | __dev_set_rx_mode(to); |
802 | netif_addr_unlock(to); | 807 | netif_addr_unlock(to); |
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 6b1b52c5593b..73f57a0e1523 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
@@ -195,7 +195,7 @@ struct sk_buff *__alloc_skb_head(gfp_t gfp_mask, int node) | |||
195 | * the tail pointer in struct sk_buff! | 195 | * the tail pointer in struct sk_buff! |
196 | */ | 196 | */ |
197 | memset(skb, 0, offsetof(struct sk_buff, tail)); | 197 | memset(skb, 0, offsetof(struct sk_buff, tail)); |
198 | skb->data = NULL; | 198 | skb->head = NULL; |
199 | skb->truesize = sizeof(struct sk_buff); | 199 | skb->truesize = sizeof(struct sk_buff); |
200 | atomic_set(&skb->users, 1); | 200 | atomic_set(&skb->users, 1); |
201 | 201 | ||
@@ -605,7 +605,7 @@ static void skb_release_head_state(struct sk_buff *skb) | |||
605 | static void skb_release_all(struct sk_buff *skb) | 605 | static void skb_release_all(struct sk_buff *skb) |
606 | { | 606 | { |
607 | skb_release_head_state(skb); | 607 | skb_release_head_state(skb); |
608 | if (likely(skb->data)) | 608 | if (likely(skb->head)) |
609 | skb_release_data(skb); | 609 | skb_release_data(skb); |
610 | } | 610 | } |
611 | 611 | ||
diff --git a/net/core/sock.c b/net/core/sock.c index 6ba327da79e1..88868a9d21da 100644 --- a/net/core/sock.c +++ b/net/core/sock.c | |||
@@ -210,7 +210,7 @@ static const char *const af_family_key_strings[AF_MAX+1] = { | |||
210 | "sk_lock-AF_TIPC" , "sk_lock-AF_BLUETOOTH", "sk_lock-IUCV" , | 210 | "sk_lock-AF_TIPC" , "sk_lock-AF_BLUETOOTH", "sk_lock-IUCV" , |
211 | "sk_lock-AF_RXRPC" , "sk_lock-AF_ISDN" , "sk_lock-AF_PHONET" , | 211 | "sk_lock-AF_RXRPC" , "sk_lock-AF_ISDN" , "sk_lock-AF_PHONET" , |
212 | "sk_lock-AF_IEEE802154", "sk_lock-AF_CAIF" , "sk_lock-AF_ALG" , | 212 | "sk_lock-AF_IEEE802154", "sk_lock-AF_CAIF" , "sk_lock-AF_ALG" , |
213 | "sk_lock-AF_NFC" , "sk_lock-AF_MAX" | 213 | "sk_lock-AF_NFC" , "sk_lock-AF_VSOCK" , "sk_lock-AF_MAX" |
214 | }; | 214 | }; |
215 | static const char *const af_family_slock_key_strings[AF_MAX+1] = { | 215 | static const char *const af_family_slock_key_strings[AF_MAX+1] = { |
216 | "slock-AF_UNSPEC", "slock-AF_UNIX" , "slock-AF_INET" , | 216 | "slock-AF_UNSPEC", "slock-AF_UNIX" , "slock-AF_INET" , |
@@ -226,7 +226,7 @@ static const char *const af_family_slock_key_strings[AF_MAX+1] = { | |||
226 | "slock-AF_TIPC" , "slock-AF_BLUETOOTH", "slock-AF_IUCV" , | 226 | "slock-AF_TIPC" , "slock-AF_BLUETOOTH", "slock-AF_IUCV" , |
227 | "slock-AF_RXRPC" , "slock-AF_ISDN" , "slock-AF_PHONET" , | 227 | "slock-AF_RXRPC" , "slock-AF_ISDN" , "slock-AF_PHONET" , |
228 | "slock-AF_IEEE802154", "slock-AF_CAIF" , "slock-AF_ALG" , | 228 | "slock-AF_IEEE802154", "slock-AF_CAIF" , "slock-AF_ALG" , |
229 | "slock-AF_NFC" , "slock-AF_MAX" | 229 | "slock-AF_NFC" , "slock-AF_VSOCK" ,"slock-AF_MAX" |
230 | }; | 230 | }; |
231 | static const char *const af_family_clock_key_strings[AF_MAX+1] = { | 231 | static const char *const af_family_clock_key_strings[AF_MAX+1] = { |
232 | "clock-AF_UNSPEC", "clock-AF_UNIX" , "clock-AF_INET" , | 232 | "clock-AF_UNSPEC", "clock-AF_UNIX" , "clock-AF_INET" , |
@@ -242,7 +242,7 @@ static const char *const af_family_clock_key_strings[AF_MAX+1] = { | |||
242 | "clock-AF_TIPC" , "clock-AF_BLUETOOTH", "clock-AF_IUCV" , | 242 | "clock-AF_TIPC" , "clock-AF_BLUETOOTH", "clock-AF_IUCV" , |
243 | "clock-AF_RXRPC" , "clock-AF_ISDN" , "clock-AF_PHONET" , | 243 | "clock-AF_RXRPC" , "clock-AF_ISDN" , "clock-AF_PHONET" , |
244 | "clock-AF_IEEE802154", "clock-AF_CAIF" , "clock-AF_ALG" , | 244 | "clock-AF_IEEE802154", "clock-AF_CAIF" , "clock-AF_ALG" , |
245 | "clock-AF_NFC" , "clock-AF_MAX" | 245 | "clock-AF_NFC" , "clock-AF_VSOCK" , "clock-AF_MAX" |
246 | }; | 246 | }; |
247 | 247 | ||
248 | /* | 248 | /* |
diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c index b89095c1518f..7c79cf8ad449 100644 --- a/net/ipv4/ip_tunnel.c +++ b/net/ipv4/ip_tunnel.c | |||
@@ -503,6 +503,7 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev, | |||
503 | 503 | ||
504 | inner_iph = (const struct iphdr *)skb_inner_network_header(skb); | 504 | inner_iph = (const struct iphdr *)skb_inner_network_header(skb); |
505 | 505 | ||
506 | memset(IPCB(skb), 0, sizeof(*IPCB(skb))); | ||
506 | dst = tnl_params->daddr; | 507 | dst = tnl_params->daddr; |
507 | if (dst == 0) { | 508 | if (dst == 0) { |
508 | /* NBMA tunnel */ | 509 | /* NBMA tunnel */ |
@@ -658,7 +659,6 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev, | |||
658 | 659 | ||
659 | skb_dst_drop(skb); | 660 | skb_dst_drop(skb); |
660 | skb_dst_set(skb, &rt->dst); | 661 | skb_dst_set(skb, &rt->dst); |
661 | memset(IPCB(skb), 0, sizeof(*IPCB(skb))); | ||
662 | 662 | ||
663 | /* Push down and install the IP header. */ | 663 | /* Push down and install the IP header. */ |
664 | skb_push(skb, sizeof(struct iphdr)); | 664 | skb_push(skb, sizeof(struct iphdr)); |
diff --git a/net/ipv4/netfilter/ipt_ULOG.c b/net/ipv4/netfilter/ipt_ULOG.c index cf08218ddbcf..ff4b781b1056 100644 --- a/net/ipv4/netfilter/ipt_ULOG.c +++ b/net/ipv4/netfilter/ipt_ULOG.c | |||
@@ -231,8 +231,10 @@ static void ipt_ulog_packet(struct net *net, | |||
231 | put_unaligned(tv.tv_usec, &pm->timestamp_usec); | 231 | put_unaligned(tv.tv_usec, &pm->timestamp_usec); |
232 | put_unaligned(skb->mark, &pm->mark); | 232 | put_unaligned(skb->mark, &pm->mark); |
233 | pm->hook = hooknum; | 233 | pm->hook = hooknum; |
234 | if (prefix != NULL) | 234 | if (prefix != NULL) { |
235 | strncpy(pm->prefix, prefix, sizeof(pm->prefix)); | 235 | strncpy(pm->prefix, prefix, sizeof(pm->prefix) - 1); |
236 | pm->prefix[sizeof(pm->prefix) - 1] = '\0'; | ||
237 | } | ||
236 | else if (loginfo->prefix[0] != '\0') | 238 | else if (loginfo->prefix[0] != '\0') |
237 | strncpy(pm->prefix, loginfo->prefix, sizeof(pm->prefix)); | 239 | strncpy(pm->prefix, loginfo->prefix, sizeof(pm->prefix)); |
238 | else | 240 | else |
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index 403e28302869..198ea596f2d9 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c | |||
@@ -768,10 +768,15 @@ static void ip_do_redirect(struct dst_entry *dst, struct sock *sk, struct sk_buf | |||
768 | { | 768 | { |
769 | struct rtable *rt; | 769 | struct rtable *rt; |
770 | struct flowi4 fl4; | 770 | struct flowi4 fl4; |
771 | const struct iphdr *iph = (const struct iphdr *) skb->data; | ||
772 | int oif = skb->dev->ifindex; | ||
773 | u8 tos = RT_TOS(iph->tos); | ||
774 | u8 prot = iph->protocol; | ||
775 | u32 mark = skb->mark; | ||
771 | 776 | ||
772 | rt = (struct rtable *) dst; | 777 | rt = (struct rtable *) dst; |
773 | 778 | ||
774 | ip_rt_build_flow_key(&fl4, sk, skb); | 779 | __build_flow_key(&fl4, sk, iph, oif, tos, prot, mark, 0); |
775 | __ip_do_redirect(rt, skb, &fl4, true); | 780 | __ip_do_redirect(rt, skb, &fl4, true); |
776 | } | 781 | } |
777 | 782 | ||
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 7b34f06af344..21010fddb203 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c | |||
@@ -1486,7 +1486,7 @@ static int ipv6_count_addresses(struct inet6_dev *idev) | |||
1486 | } | 1486 | } |
1487 | 1487 | ||
1488 | int ipv6_chk_addr(struct net *net, const struct in6_addr *addr, | 1488 | int ipv6_chk_addr(struct net *net, const struct in6_addr *addr, |
1489 | struct net_device *dev, int strict) | 1489 | const struct net_device *dev, int strict) |
1490 | { | 1490 | { |
1491 | struct inet6_ifaddr *ifp; | 1491 | struct inet6_ifaddr *ifp; |
1492 | unsigned int hash = inet6_addr_hash(addr); | 1492 | unsigned int hash = inet6_addr_hash(addr); |
@@ -2660,8 +2660,10 @@ static void init_loopback(struct net_device *dev) | |||
2660 | sp_rt = addrconf_dst_alloc(idev, &sp_ifa->addr, 0); | 2660 | sp_rt = addrconf_dst_alloc(idev, &sp_ifa->addr, 0); |
2661 | 2661 | ||
2662 | /* Failure cases are ignored */ | 2662 | /* Failure cases are ignored */ |
2663 | if (!IS_ERR(sp_rt)) | 2663 | if (!IS_ERR(sp_rt)) { |
2664 | sp_ifa->rt = sp_rt; | ||
2664 | ip6_ins_rt(sp_rt); | 2665 | ip6_ins_rt(sp_rt); |
2666 | } | ||
2665 | } | 2667 | } |
2666 | read_unlock_bh(&idev->lock); | 2668 | read_unlock_bh(&idev->lock); |
2667 | } | 2669 | } |
diff --git a/net/ipv6/netfilter.c b/net/ipv6/netfilter.c index 72836f40b730..95f3f1da0d7f 100644 --- a/net/ipv6/netfilter.c +++ b/net/ipv6/netfilter.c | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <linux/netfilter.h> | 10 | #include <linux/netfilter.h> |
11 | #include <linux/netfilter_ipv6.h> | 11 | #include <linux/netfilter_ipv6.h> |
12 | #include <linux/export.h> | 12 | #include <linux/export.h> |
13 | #include <net/addrconf.h> | ||
13 | #include <net/dst.h> | 14 | #include <net/dst.h> |
14 | #include <net/ipv6.h> | 15 | #include <net/ipv6.h> |
15 | #include <net/ip6_route.h> | 16 | #include <net/ip6_route.h> |
@@ -186,6 +187,10 @@ static __sum16 nf_ip6_checksum_partial(struct sk_buff *skb, unsigned int hook, | |||
186 | return csum; | 187 | return csum; |
187 | }; | 188 | }; |
188 | 189 | ||
190 | static const struct nf_ipv6_ops ipv6ops = { | ||
191 | .chk_addr = ipv6_chk_addr, | ||
192 | }; | ||
193 | |||
189 | static const struct nf_afinfo nf_ip6_afinfo = { | 194 | static const struct nf_afinfo nf_ip6_afinfo = { |
190 | .family = AF_INET6, | 195 | .family = AF_INET6, |
191 | .checksum = nf_ip6_checksum, | 196 | .checksum = nf_ip6_checksum, |
@@ -198,6 +203,7 @@ static const struct nf_afinfo nf_ip6_afinfo = { | |||
198 | 203 | ||
199 | int __init ipv6_netfilter_init(void) | 204 | int __init ipv6_netfilter_init(void) |
200 | { | 205 | { |
206 | RCU_INIT_POINTER(nf_ipv6_ops, &ipv6ops); | ||
201 | return nf_register_afinfo(&nf_ip6_afinfo); | 207 | return nf_register_afinfo(&nf_ip6_afinfo); |
202 | } | 208 | } |
203 | 209 | ||
@@ -206,5 +212,6 @@ int __init ipv6_netfilter_init(void) | |||
206 | */ | 212 | */ |
207 | void ipv6_netfilter_fini(void) | 213 | void ipv6_netfilter_fini(void) |
208 | { | 214 | { |
215 | RCU_INIT_POINTER(nf_ipv6_ops, NULL); | ||
209 | nf_unregister_afinfo(&nf_ip6_afinfo); | 216 | nf_unregister_afinfo(&nf_ip6_afinfo); |
210 | } | 217 | } |
diff --git a/net/ipv6/ping.c b/net/ipv6/ping.c index 62ac5f2e0aaf..a43110385918 100644 --- a/net/ipv6/ping.c +++ b/net/ipv6/ping.c | |||
@@ -73,7 +73,7 @@ int dummy_icmpv6_err_convert(u8 type, u8 code, int *err) | |||
73 | void dummy_ipv6_icmp_error(struct sock *sk, struct sk_buff *skb, int err, | 73 | void dummy_ipv6_icmp_error(struct sock *sk, struct sk_buff *skb, int err, |
74 | __be16 port, u32 info, u8 *payload) {} | 74 | __be16 port, u32 info, u8 *payload) {} |
75 | int dummy_ipv6_chk_addr(struct net *net, const struct in6_addr *addr, | 75 | int dummy_ipv6_chk_addr(struct net *net, const struct in6_addr *addr, |
76 | struct net_device *dev, int strict) | 76 | const struct net_device *dev, int strict) |
77 | { | 77 | { |
78 | return 0; | 78 | return 0; |
79 | } | 79 | } |
diff --git a/net/ipv6/proc.c b/net/ipv6/proc.c index f3c1ff4357ff..51c3285b5d9b 100644 --- a/net/ipv6/proc.c +++ b/net/ipv6/proc.c | |||
@@ -90,7 +90,7 @@ static const struct snmp_mib snmp6_ipstats_list[] = { | |||
90 | SNMP_MIB_ITEM("Ip6OutMcastOctets", IPSTATS_MIB_OUTMCASTOCTETS), | 90 | SNMP_MIB_ITEM("Ip6OutMcastOctets", IPSTATS_MIB_OUTMCASTOCTETS), |
91 | SNMP_MIB_ITEM("Ip6InBcastOctets", IPSTATS_MIB_INBCASTOCTETS), | 91 | SNMP_MIB_ITEM("Ip6InBcastOctets", IPSTATS_MIB_INBCASTOCTETS), |
92 | SNMP_MIB_ITEM("Ip6OutBcastOctets", IPSTATS_MIB_OUTBCASTOCTETS), | 92 | SNMP_MIB_ITEM("Ip6OutBcastOctets", IPSTATS_MIB_OUTBCASTOCTETS), |
93 | SNMP_MIB_ITEM("InCsumErrors", IPSTATS_MIB_CSUMERRORS), | 93 | /* IPSTATS_MIB_CSUMERRORS is not relevant in IPv6 (no checksum) */ |
94 | SNMP_MIB_SENTINEL | 94 | SNMP_MIB_SENTINEL |
95 | }; | 95 | }; |
96 | 96 | ||
diff --git a/net/ipv6/udp_offload.c b/net/ipv6/udp_offload.c index 76d401a93c7a..5d1b8d7ac993 100644 --- a/net/ipv6/udp_offload.c +++ b/net/ipv6/udp_offload.c | |||
@@ -46,11 +46,12 @@ static struct sk_buff *udp6_ufo_fragment(struct sk_buff *skb, | |||
46 | unsigned int mss; | 46 | unsigned int mss; |
47 | unsigned int unfrag_ip6hlen, unfrag_len; | 47 | unsigned int unfrag_ip6hlen, unfrag_len; |
48 | struct frag_hdr *fptr; | 48 | struct frag_hdr *fptr; |
49 | u8 *mac_start, *prevhdr; | 49 | u8 *packet_start, *prevhdr; |
50 | u8 nexthdr; | 50 | u8 nexthdr; |
51 | u8 frag_hdr_sz = sizeof(struct frag_hdr); | 51 | u8 frag_hdr_sz = sizeof(struct frag_hdr); |
52 | int offset; | 52 | int offset; |
53 | __wsum csum; | 53 | __wsum csum; |
54 | int tnl_hlen; | ||
54 | 55 | ||
55 | mss = skb_shinfo(skb)->gso_size; | 56 | mss = skb_shinfo(skb)->gso_size; |
56 | if (unlikely(skb->len <= mss)) | 57 | if (unlikely(skb->len <= mss)) |
@@ -84,9 +85,11 @@ static struct sk_buff *udp6_ufo_fragment(struct sk_buff *skb, | |||
84 | skb->ip_summed = CHECKSUM_NONE; | 85 | skb->ip_summed = CHECKSUM_NONE; |
85 | 86 | ||
86 | /* Check if there is enough headroom to insert fragment header. */ | 87 | /* Check if there is enough headroom to insert fragment header. */ |
87 | if ((skb_mac_header(skb) < skb->head + frag_hdr_sz) && | 88 | tnl_hlen = skb_tnl_header_len(skb); |
88 | pskb_expand_head(skb, frag_hdr_sz, 0, GFP_ATOMIC)) | 89 | if (skb_headroom(skb) < (tnl_hlen + frag_hdr_sz)) { |
89 | goto out; | 90 | if (gso_pskb_expand_head(skb, tnl_hlen + frag_hdr_sz)) |
91 | goto out; | ||
92 | } | ||
90 | 93 | ||
91 | /* Find the unfragmentable header and shift it left by frag_hdr_sz | 94 | /* Find the unfragmentable header and shift it left by frag_hdr_sz |
92 | * bytes to insert fragment header. | 95 | * bytes to insert fragment header. |
@@ -94,11 +97,12 @@ static struct sk_buff *udp6_ufo_fragment(struct sk_buff *skb, | |||
94 | unfrag_ip6hlen = ip6_find_1stfragopt(skb, &prevhdr); | 97 | unfrag_ip6hlen = ip6_find_1stfragopt(skb, &prevhdr); |
95 | nexthdr = *prevhdr; | 98 | nexthdr = *prevhdr; |
96 | *prevhdr = NEXTHDR_FRAGMENT; | 99 | *prevhdr = NEXTHDR_FRAGMENT; |
97 | unfrag_len = skb_network_header(skb) - skb_mac_header(skb) + | 100 | unfrag_len = (skb_network_header(skb) - skb_mac_header(skb)) + |
98 | unfrag_ip6hlen; | 101 | unfrag_ip6hlen + tnl_hlen; |
99 | mac_start = skb_mac_header(skb); | 102 | packet_start = (u8 *) skb->head + SKB_GSO_CB(skb)->mac_offset; |
100 | memmove(mac_start-frag_hdr_sz, mac_start, unfrag_len); | 103 | memmove(packet_start-frag_hdr_sz, packet_start, unfrag_len); |
101 | 104 | ||
105 | SKB_GSO_CB(skb)->mac_offset -= frag_hdr_sz; | ||
102 | skb->mac_header -= frag_hdr_sz; | 106 | skb->mac_header -= frag_hdr_sz; |
103 | skb->network_header -= frag_hdr_sz; | 107 | skb->network_header -= frag_hdr_sz; |
104 | 108 | ||
diff --git a/net/key/af_key.c b/net/key/af_key.c index 5b1e5af25713..c5fbd7589681 100644 --- a/net/key/af_key.c +++ b/net/key/af_key.c | |||
@@ -2366,6 +2366,8 @@ static int pfkey_spddelete(struct sock *sk, struct sk_buff *skb, const struct sa | |||
2366 | 2366 | ||
2367 | out: | 2367 | out: |
2368 | xfrm_pol_put(xp); | 2368 | xfrm_pol_put(xp); |
2369 | if (err == 0) | ||
2370 | xfrm_garbage_collect(net); | ||
2369 | return err; | 2371 | return err; |
2370 | } | 2372 | } |
2371 | 2373 | ||
@@ -2615,6 +2617,8 @@ static int pfkey_spdget(struct sock *sk, struct sk_buff *skb, const struct sadb_ | |||
2615 | 2617 | ||
2616 | out: | 2618 | out: |
2617 | xfrm_pol_put(xp); | 2619 | xfrm_pol_put(xp); |
2620 | if (delete && err == 0) | ||
2621 | xfrm_garbage_collect(net); | ||
2618 | return err; | 2622 | return err; |
2619 | } | 2623 | } |
2620 | 2624 | ||
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index d2c3fd178dbe..7c3ba8628d4e 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c | |||
@@ -159,9 +159,10 @@ static int ieee80211_change_mtu(struct net_device *dev, int new_mtu) | |||
159 | return 0; | 159 | return 0; |
160 | } | 160 | } |
161 | 161 | ||
162 | static int ieee80211_verify_mac(struct ieee80211_local *local, u8 *addr) | 162 | static int ieee80211_verify_mac(struct ieee80211_sub_if_data *sdata, u8 *addr) |
163 | { | 163 | { |
164 | struct ieee80211_sub_if_data *sdata; | 164 | struct ieee80211_local *local = sdata->local; |
165 | struct ieee80211_sub_if_data *iter; | ||
165 | u64 new, mask, tmp; | 166 | u64 new, mask, tmp; |
166 | u8 *m; | 167 | u8 *m; |
167 | int ret = 0; | 168 | int ret = 0; |
@@ -181,11 +182,14 @@ static int ieee80211_verify_mac(struct ieee80211_local *local, u8 *addr) | |||
181 | 182 | ||
182 | 183 | ||
183 | mutex_lock(&local->iflist_mtx); | 184 | mutex_lock(&local->iflist_mtx); |
184 | list_for_each_entry(sdata, &local->interfaces, list) { | 185 | list_for_each_entry(iter, &local->interfaces, list) { |
185 | if (sdata->vif.type == NL80211_IFTYPE_MONITOR) | 186 | if (iter == sdata) |
187 | continue; | ||
188 | |||
189 | if (iter->vif.type == NL80211_IFTYPE_MONITOR) | ||
186 | continue; | 190 | continue; |
187 | 191 | ||
188 | m = sdata->vif.addr; | 192 | m = iter->vif.addr; |
189 | tmp = ((u64)m[0] << 5*8) | ((u64)m[1] << 4*8) | | 193 | tmp = ((u64)m[0] << 5*8) | ((u64)m[1] << 4*8) | |
190 | ((u64)m[2] << 3*8) | ((u64)m[3] << 2*8) | | 194 | ((u64)m[2] << 3*8) | ((u64)m[3] << 2*8) | |
191 | ((u64)m[4] << 1*8) | ((u64)m[5] << 0*8); | 195 | ((u64)m[4] << 1*8) | ((u64)m[5] << 0*8); |
@@ -209,7 +213,7 @@ static int ieee80211_change_mac(struct net_device *dev, void *addr) | |||
209 | if (ieee80211_sdata_running(sdata)) | 213 | if (ieee80211_sdata_running(sdata)) |
210 | return -EBUSY; | 214 | return -EBUSY; |
211 | 215 | ||
212 | ret = ieee80211_verify_mac(sdata->local, sa->sa_data); | 216 | ret = ieee80211_verify_mac(sdata, sa->sa_data); |
213 | if (ret) | 217 | if (ret) |
214 | return ret; | 218 | return ret; |
215 | 219 | ||
@@ -474,6 +478,9 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up) | |||
474 | master->control_port_protocol; | 478 | master->control_port_protocol; |
475 | sdata->control_port_no_encrypt = | 479 | sdata->control_port_no_encrypt = |
476 | master->control_port_no_encrypt; | 480 | master->control_port_no_encrypt; |
481 | sdata->vif.cab_queue = master->vif.cab_queue; | ||
482 | memcpy(sdata->vif.hw_queue, master->vif.hw_queue, | ||
483 | sizeof(sdata->vif.hw_queue)); | ||
477 | break; | 484 | break; |
478 | } | 485 | } |
479 | case NL80211_IFTYPE_AP: | 486 | case NL80211_IFTYPE_AP: |
@@ -653,7 +660,11 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up) | |||
653 | 660 | ||
654 | ieee80211_recalc_ps(local, -1); | 661 | ieee80211_recalc_ps(local, -1); |
655 | 662 | ||
656 | if (dev) { | 663 | if (sdata->vif.type == NL80211_IFTYPE_MONITOR || |
664 | sdata->vif.type == NL80211_IFTYPE_AP_VLAN) { | ||
665 | /* XXX: for AP_VLAN, actually track AP queues */ | ||
666 | netif_tx_start_all_queues(dev); | ||
667 | } else if (dev) { | ||
657 | unsigned long flags; | 668 | unsigned long flags; |
658 | int n_acs = IEEE80211_NUM_ACS; | 669 | int n_acs = IEEE80211_NUM_ACS; |
659 | int ac; | 670 | int ac; |
@@ -1479,7 +1490,17 @@ static void ieee80211_assign_perm_addr(struct ieee80211_local *local, | |||
1479 | break; | 1490 | break; |
1480 | } | 1491 | } |
1481 | 1492 | ||
1493 | /* | ||
1494 | * Pick address of existing interface in case user changed | ||
1495 | * MAC address manually, default to perm_addr. | ||
1496 | */ | ||
1482 | m = local->hw.wiphy->perm_addr; | 1497 | m = local->hw.wiphy->perm_addr; |
1498 | list_for_each_entry(sdata, &local->interfaces, list) { | ||
1499 | if (sdata->vif.type == NL80211_IFTYPE_MONITOR) | ||
1500 | continue; | ||
1501 | m = sdata->vif.addr; | ||
1502 | break; | ||
1503 | } | ||
1483 | start = ((u64)m[0] << 5*8) | ((u64)m[1] << 4*8) | | 1504 | start = ((u64)m[0] << 5*8) | ((u64)m[1] << 4*8) | |
1484 | ((u64)m[2] << 3*8) | ((u64)m[3] << 2*8) | | 1505 | ((u64)m[2] << 3*8) | ((u64)m[3] << 2*8) | |
1485 | ((u64)m[4] << 1*8) | ((u64)m[5] << 0*8); | 1506 | ((u64)m[4] << 1*8) | ((u64)m[5] << 0*8); |
@@ -1696,6 +1717,15 @@ void ieee80211_remove_interfaces(struct ieee80211_local *local) | |||
1696 | 1717 | ||
1697 | ASSERT_RTNL(); | 1718 | ASSERT_RTNL(); |
1698 | 1719 | ||
1720 | /* | ||
1721 | * Close all AP_VLAN interfaces first, as otherwise they | ||
1722 | * might be closed while the AP interface they belong to | ||
1723 | * is closed, causing unregister_netdevice_many() to crash. | ||
1724 | */ | ||
1725 | list_for_each_entry(sdata, &local->interfaces, list) | ||
1726 | if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) | ||
1727 | dev_close(sdata->dev); | ||
1728 | |||
1699 | mutex_lock(&local->iflist_mtx); | 1729 | mutex_lock(&local->iflist_mtx); |
1700 | list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) { | 1730 | list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) { |
1701 | list_del(&sdata->list); | 1731 | list_del(&sdata->list); |
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index a46e490f20dd..a8c2130c8ba4 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c | |||
@@ -3321,10 +3321,6 @@ static int ieee80211_probe_auth(struct ieee80211_sub_if_data *sdata) | |||
3321 | if (WARN_ON_ONCE(!auth_data)) | 3321 | if (WARN_ON_ONCE(!auth_data)) |
3322 | return -EINVAL; | 3322 | return -EINVAL; |
3323 | 3323 | ||
3324 | if (local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS) | ||
3325 | tx_flags = IEEE80211_TX_CTL_REQ_TX_STATUS | | ||
3326 | IEEE80211_TX_INTFL_MLME_CONN_TX; | ||
3327 | |||
3328 | auth_data->tries++; | 3324 | auth_data->tries++; |
3329 | 3325 | ||
3330 | if (auth_data->tries > IEEE80211_AUTH_MAX_TRIES) { | 3326 | if (auth_data->tries > IEEE80211_AUTH_MAX_TRIES) { |
@@ -3358,6 +3354,10 @@ static int ieee80211_probe_auth(struct ieee80211_sub_if_data *sdata) | |||
3358 | auth_data->expected_transaction = trans; | 3354 | auth_data->expected_transaction = trans; |
3359 | } | 3355 | } |
3360 | 3356 | ||
3357 | if (local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS) | ||
3358 | tx_flags = IEEE80211_TX_CTL_REQ_TX_STATUS | | ||
3359 | IEEE80211_TX_INTFL_MLME_CONN_TX; | ||
3360 | |||
3361 | ieee80211_send_auth(sdata, trans, auth_data->algorithm, status, | 3361 | ieee80211_send_auth(sdata, trans, auth_data->algorithm, status, |
3362 | auth_data->data, auth_data->data_len, | 3362 | auth_data->data, auth_data->data_len, |
3363 | auth_data->bss->bssid, | 3363 | auth_data->bss->bssid, |
@@ -3381,12 +3381,12 @@ static int ieee80211_probe_auth(struct ieee80211_sub_if_data *sdata) | |||
3381 | * will not answer to direct packet in unassociated state. | 3381 | * will not answer to direct packet in unassociated state. |
3382 | */ | 3382 | */ |
3383 | ieee80211_send_probe_req(sdata, NULL, ssidie + 2, ssidie[1], | 3383 | ieee80211_send_probe_req(sdata, NULL, ssidie + 2, ssidie[1], |
3384 | NULL, 0, (u32) -1, true, tx_flags, | 3384 | NULL, 0, (u32) -1, true, 0, |
3385 | auth_data->bss->channel, false); | 3385 | auth_data->bss->channel, false); |
3386 | rcu_read_unlock(); | 3386 | rcu_read_unlock(); |
3387 | } | 3387 | } |
3388 | 3388 | ||
3389 | if (!(local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS)) { | 3389 | if (tx_flags == 0) { |
3390 | auth_data->timeout = jiffies + IEEE80211_AUTH_TIMEOUT; | 3390 | auth_data->timeout = jiffies + IEEE80211_AUTH_TIMEOUT; |
3391 | ifmgd->auth_data->timeout_started = true; | 3391 | ifmgd->auth_data->timeout_started = true; |
3392 | run_again(ifmgd, auth_data->timeout); | 3392 | run_again(ifmgd, auth_data->timeout); |
diff --git a/net/netfilter/core.c b/net/netfilter/core.c index 07c865a31a3d..857ca9f35177 100644 --- a/net/netfilter/core.c +++ b/net/netfilter/core.c | |||
@@ -30,6 +30,8 @@ static DEFINE_MUTEX(afinfo_mutex); | |||
30 | 30 | ||
31 | const struct nf_afinfo __rcu *nf_afinfo[NFPROTO_NUMPROTO] __read_mostly; | 31 | const struct nf_afinfo __rcu *nf_afinfo[NFPROTO_NUMPROTO] __read_mostly; |
32 | EXPORT_SYMBOL(nf_afinfo); | 32 | EXPORT_SYMBOL(nf_afinfo); |
33 | const struct nf_ipv6_ops __rcu *nf_ipv6_ops __read_mostly; | ||
34 | EXPORT_SYMBOL_GPL(nf_ipv6_ops); | ||
33 | 35 | ||
34 | int nf_register_afinfo(const struct nf_afinfo *afinfo) | 36 | int nf_register_afinfo(const struct nf_afinfo *afinfo) |
35 | { | 37 | { |
diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c index 085b5880ab0d..05565d2b3a61 100644 --- a/net/netfilter/ipvs/ip_vs_core.c +++ b/net/netfilter/ipvs/ip_vs_core.c | |||
@@ -1001,6 +1001,32 @@ static inline int is_tcp_reset(const struct sk_buff *skb, int nh_len) | |||
1001 | return th->rst; | 1001 | return th->rst; |
1002 | } | 1002 | } |
1003 | 1003 | ||
1004 | static inline bool is_new_conn(const struct sk_buff *skb, | ||
1005 | struct ip_vs_iphdr *iph) | ||
1006 | { | ||
1007 | switch (iph->protocol) { | ||
1008 | case IPPROTO_TCP: { | ||
1009 | struct tcphdr _tcph, *th; | ||
1010 | |||
1011 | th = skb_header_pointer(skb, iph->len, sizeof(_tcph), &_tcph); | ||
1012 | if (th == NULL) | ||
1013 | return false; | ||
1014 | return th->syn; | ||
1015 | } | ||
1016 | case IPPROTO_SCTP: { | ||
1017 | sctp_chunkhdr_t *sch, schunk; | ||
1018 | |||
1019 | sch = skb_header_pointer(skb, iph->len + sizeof(sctp_sctphdr_t), | ||
1020 | sizeof(schunk), &schunk); | ||
1021 | if (sch == NULL) | ||
1022 | return false; | ||
1023 | return sch->type == SCTP_CID_INIT; | ||
1024 | } | ||
1025 | default: | ||
1026 | return false; | ||
1027 | } | ||
1028 | } | ||
1029 | |||
1004 | /* Handle response packets: rewrite addresses and send away... | 1030 | /* Handle response packets: rewrite addresses and send away... |
1005 | */ | 1031 | */ |
1006 | static unsigned int | 1032 | static unsigned int |
@@ -1612,6 +1638,15 @@ ip_vs_in(unsigned int hooknum, struct sk_buff *skb, int af) | |||
1612 | * Check if the packet belongs to an existing connection entry | 1638 | * Check if the packet belongs to an existing connection entry |
1613 | */ | 1639 | */ |
1614 | cp = pp->conn_in_get(af, skb, &iph, 0); | 1640 | cp = pp->conn_in_get(af, skb, &iph, 0); |
1641 | |||
1642 | if (unlikely(sysctl_expire_nodest_conn(ipvs)) && cp && cp->dest && | ||
1643 | unlikely(!atomic_read(&cp->dest->weight)) && !iph.fragoffs && | ||
1644 | is_new_conn(skb, &iph)) { | ||
1645 | ip_vs_conn_expire_now(cp); | ||
1646 | __ip_vs_conn_put(cp); | ||
1647 | cp = NULL; | ||
1648 | } | ||
1649 | |||
1615 | if (unlikely(!cp) && !iph.fragoffs) { | 1650 | if (unlikely(!cp) && !iph.fragoffs) { |
1616 | /* No (second) fragments need to enter here, as nf_defrag_ipv6 | 1651 | /* No (second) fragments need to enter here, as nf_defrag_ipv6 |
1617 | * replayed fragment zero will already have created the cp | 1652 | * replayed fragment zero will already have created the cp |
diff --git a/net/netfilter/ipvs/ip_vs_sh.c b/net/netfilter/ipvs/ip_vs_sh.c index 0df269d7c99f..a65edfe4b16c 100644 --- a/net/netfilter/ipvs/ip_vs_sh.c +++ b/net/netfilter/ipvs/ip_vs_sh.c | |||
@@ -67,8 +67,8 @@ struct ip_vs_sh_bucket { | |||
67 | #define IP_VS_SH_TAB_MASK (IP_VS_SH_TAB_SIZE - 1) | 67 | #define IP_VS_SH_TAB_MASK (IP_VS_SH_TAB_SIZE - 1) |
68 | 68 | ||
69 | struct ip_vs_sh_state { | 69 | struct ip_vs_sh_state { |
70 | struct ip_vs_sh_bucket buckets[IP_VS_SH_TAB_SIZE]; | ||
71 | struct rcu_head rcu_head; | 70 | struct rcu_head rcu_head; |
71 | struct ip_vs_sh_bucket buckets[IP_VS_SH_TAB_SIZE]; | ||
72 | }; | 72 | }; |
73 | 73 | ||
74 | /* | 74 | /* |
diff --git a/net/netfilter/xt_LOG.c b/net/netfilter/xt_LOG.c index 491c7d821a0b..5ab24843370a 100644 --- a/net/netfilter/xt_LOG.c +++ b/net/netfilter/xt_LOG.c | |||
@@ -737,7 +737,7 @@ static void dump_ipv6_packet(struct sbuff *m, | |||
737 | dump_sk_uid_gid(m, skb->sk); | 737 | dump_sk_uid_gid(m, skb->sk); |
738 | 738 | ||
739 | /* Max length: 16 "MARK=0xFFFFFFFF " */ | 739 | /* Max length: 16 "MARK=0xFFFFFFFF " */ |
740 | if (!recurse && skb->mark) | 740 | if (recurse && skb->mark) |
741 | sb_add(m, "MARK=0x%x ", skb->mark); | 741 | sb_add(m, "MARK=0x%x ", skb->mark); |
742 | } | 742 | } |
743 | 743 | ||
diff --git a/net/netfilter/xt_addrtype.c b/net/netfilter/xt_addrtype.c index 49c5ff7f6dd6..68ff29f60867 100644 --- a/net/netfilter/xt_addrtype.c +++ b/net/netfilter/xt_addrtype.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <net/ip6_fib.h> | 22 | #include <net/ip6_fib.h> |
23 | #endif | 23 | #endif |
24 | 24 | ||
25 | #include <linux/netfilter_ipv6.h> | ||
25 | #include <linux/netfilter/xt_addrtype.h> | 26 | #include <linux/netfilter/xt_addrtype.h> |
26 | #include <linux/netfilter/x_tables.h> | 27 | #include <linux/netfilter/x_tables.h> |
27 | 28 | ||
@@ -33,12 +34,12 @@ MODULE_ALIAS("ip6t_addrtype"); | |||
33 | 34 | ||
34 | #if IS_ENABLED(CONFIG_IP6_NF_IPTABLES) | 35 | #if IS_ENABLED(CONFIG_IP6_NF_IPTABLES) |
35 | static u32 match_lookup_rt6(struct net *net, const struct net_device *dev, | 36 | static u32 match_lookup_rt6(struct net *net, const struct net_device *dev, |
36 | const struct in6_addr *addr) | 37 | const struct in6_addr *addr, u16 mask) |
37 | { | 38 | { |
38 | const struct nf_afinfo *afinfo; | 39 | const struct nf_afinfo *afinfo; |
39 | struct flowi6 flow; | 40 | struct flowi6 flow; |
40 | struct rt6_info *rt; | 41 | struct rt6_info *rt; |
41 | u32 ret; | 42 | u32 ret = 0; |
42 | int route_err; | 43 | int route_err; |
43 | 44 | ||
44 | memset(&flow, 0, sizeof(flow)); | 45 | memset(&flow, 0, sizeof(flow)); |
@@ -49,12 +50,19 @@ static u32 match_lookup_rt6(struct net *net, const struct net_device *dev, | |||
49 | rcu_read_lock(); | 50 | rcu_read_lock(); |
50 | 51 | ||
51 | afinfo = nf_get_afinfo(NFPROTO_IPV6); | 52 | afinfo = nf_get_afinfo(NFPROTO_IPV6); |
52 | if (afinfo != NULL) | 53 | if (afinfo != NULL) { |
54 | const struct nf_ipv6_ops *v6ops; | ||
55 | |||
56 | if (dev && (mask & XT_ADDRTYPE_LOCAL)) { | ||
57 | v6ops = nf_get_ipv6_ops(); | ||
58 | if (v6ops && v6ops->chk_addr(net, addr, dev, true)) | ||
59 | ret = XT_ADDRTYPE_LOCAL; | ||
60 | } | ||
53 | route_err = afinfo->route(net, (struct dst_entry **)&rt, | 61 | route_err = afinfo->route(net, (struct dst_entry **)&rt, |
54 | flowi6_to_flowi(&flow), !!dev); | 62 | flowi6_to_flowi(&flow), false); |
55 | else | 63 | } else { |
56 | route_err = 1; | 64 | route_err = 1; |
57 | 65 | } | |
58 | rcu_read_unlock(); | 66 | rcu_read_unlock(); |
59 | 67 | ||
60 | if (route_err) | 68 | if (route_err) |
@@ -62,15 +70,12 @@ static u32 match_lookup_rt6(struct net *net, const struct net_device *dev, | |||
62 | 70 | ||
63 | if (rt->rt6i_flags & RTF_REJECT) | 71 | if (rt->rt6i_flags & RTF_REJECT) |
64 | ret = XT_ADDRTYPE_UNREACHABLE; | 72 | ret = XT_ADDRTYPE_UNREACHABLE; |
65 | else | ||
66 | ret = 0; | ||
67 | 73 | ||
68 | if (rt->rt6i_flags & RTF_LOCAL) | 74 | if (dev == NULL && rt->rt6i_flags & RTF_LOCAL) |
69 | ret |= XT_ADDRTYPE_LOCAL; | 75 | ret |= XT_ADDRTYPE_LOCAL; |
70 | if (rt->rt6i_flags & RTF_ANYCAST) | 76 | if (rt->rt6i_flags & RTF_ANYCAST) |
71 | ret |= XT_ADDRTYPE_ANYCAST; | 77 | ret |= XT_ADDRTYPE_ANYCAST; |
72 | 78 | ||
73 | |||
74 | dst_release(&rt->dst); | 79 | dst_release(&rt->dst); |
75 | return ret; | 80 | return ret; |
76 | } | 81 | } |
@@ -90,7 +95,7 @@ static bool match_type6(struct net *net, const struct net_device *dev, | |||
90 | 95 | ||
91 | if ((XT_ADDRTYPE_LOCAL | XT_ADDRTYPE_ANYCAST | | 96 | if ((XT_ADDRTYPE_LOCAL | XT_ADDRTYPE_ANYCAST | |
92 | XT_ADDRTYPE_UNREACHABLE) & mask) | 97 | XT_ADDRTYPE_UNREACHABLE) & mask) |
93 | return !!(mask & match_lookup_rt6(net, dev, addr)); | 98 | return !!(mask & match_lookup_rt6(net, dev, addr, mask)); |
94 | return true; | 99 | return true; |
95 | } | 100 | } |
96 | 101 | ||
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index 12ac6b47a35c..d0b3dd60d386 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c | |||
@@ -747,7 +747,7 @@ static void netlink_skb_destructor(struct sk_buff *skb) | |||
747 | atomic_dec(&ring->pending); | 747 | atomic_dec(&ring->pending); |
748 | sock_put(sk); | 748 | sock_put(sk); |
749 | 749 | ||
750 | skb->data = NULL; | 750 | skb->head = NULL; |
751 | } | 751 | } |
752 | #endif | 752 | #endif |
753 | if (skb->sk != NULL) | 753 | if (skb->sk != NULL) |
diff --git a/net/nfc/Makefile b/net/nfc/Makefile index fb799deaed4f..a76f4533cb6c 100644 --- a/net/nfc/Makefile +++ b/net/nfc/Makefile | |||
@@ -5,7 +5,6 @@ | |||
5 | obj-$(CONFIG_NFC) += nfc.o | 5 | obj-$(CONFIG_NFC) += nfc.o |
6 | obj-$(CONFIG_NFC_NCI) += nci/ | 6 | obj-$(CONFIG_NFC_NCI) += nci/ |
7 | obj-$(CONFIG_NFC_HCI) += hci/ | 7 | obj-$(CONFIG_NFC_HCI) += hci/ |
8 | #obj-$(CONFIG_NFC_LLCP) += llcp/ | ||
9 | 8 | ||
10 | nfc-objs := core.o netlink.o af_nfc.o rawsock.o llcp_core.o llcp_commands.o \ | 9 | nfc-objs := core.o netlink.o af_nfc.o rawsock.o llcp_core.o llcp_commands.o \ |
11 | llcp_sock.o | 10 | llcp_sock.o |
diff --git a/net/sched/act_police.c b/net/sched/act_police.c index 823463adbd21..189e3c5b3d09 100644 --- a/net/sched/act_police.c +++ b/net/sched/act_police.c | |||
@@ -231,14 +231,14 @@ override: | |||
231 | } | 231 | } |
232 | if (R_tab) { | 232 | if (R_tab) { |
233 | police->rate_present = true; | 233 | police->rate_present = true; |
234 | psched_ratecfg_precompute(&police->rate, R_tab->rate.rate); | 234 | psched_ratecfg_precompute(&police->rate, &R_tab->rate); |
235 | qdisc_put_rtab(R_tab); | 235 | qdisc_put_rtab(R_tab); |
236 | } else { | 236 | } else { |
237 | police->rate_present = false; | 237 | police->rate_present = false; |
238 | } | 238 | } |
239 | if (P_tab) { | 239 | if (P_tab) { |
240 | police->peak_present = true; | 240 | police->peak_present = true; |
241 | psched_ratecfg_precompute(&police->peak, P_tab->rate.rate); | 241 | psched_ratecfg_precompute(&police->peak, &P_tab->rate); |
242 | qdisc_put_rtab(P_tab); | 242 | qdisc_put_rtab(P_tab); |
243 | } else { | 243 | } else { |
244 | police->peak_present = false; | 244 | police->peak_present = false; |
@@ -376,9 +376,9 @@ tcf_act_police_dump(struct sk_buff *skb, struct tc_action *a, int bind, int ref) | |||
376 | }; | 376 | }; |
377 | 377 | ||
378 | if (police->rate_present) | 378 | if (police->rate_present) |
379 | opt.rate.rate = psched_ratecfg_getrate(&police->rate); | 379 | psched_ratecfg_getrate(&opt.rate, &police->rate); |
380 | if (police->peak_present) | 380 | if (police->peak_present) |
381 | opt.peakrate.rate = psched_ratecfg_getrate(&police->peak); | 381 | psched_ratecfg_getrate(&opt.peakrate, &police->peak); |
382 | if (nla_put(skb, TCA_POLICE_TBF, sizeof(opt), &opt)) | 382 | if (nla_put(skb, TCA_POLICE_TBF, sizeof(opt), &opt)) |
383 | goto nla_put_failure; | 383 | goto nla_put_failure; |
384 | if (police->tcfp_result && | 384 | if (police->tcfp_result && |
diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index eac7e0ee23c1..20224086cc28 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c | |||
@@ -898,14 +898,16 @@ void dev_shutdown(struct net_device *dev) | |||
898 | WARN_ON(timer_pending(&dev->watchdog_timer)); | 898 | WARN_ON(timer_pending(&dev->watchdog_timer)); |
899 | } | 899 | } |
900 | 900 | ||
901 | void psched_ratecfg_precompute(struct psched_ratecfg *r, u32 rate) | 901 | void psched_ratecfg_precompute(struct psched_ratecfg *r, |
902 | const struct tc_ratespec *conf) | ||
902 | { | 903 | { |
903 | u64 factor; | 904 | u64 factor; |
904 | u64 mult; | 905 | u64 mult; |
905 | int shift; | 906 | int shift; |
906 | 907 | ||
907 | r->rate_bps = (u64)rate << 3; | 908 | memset(r, 0, sizeof(*r)); |
908 | r->shift = 0; | 909 | r->overhead = conf->overhead; |
910 | r->rate_bps = (u64)conf->rate << 3; | ||
909 | r->mult = 1; | 911 | r->mult = 1; |
910 | /* | 912 | /* |
911 | * Calibrate mult, shift so that token counting is accurate | 913 | * Calibrate mult, shift so that token counting is accurate |
diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c index 79b1876b6cd2..adaedd79389c 100644 --- a/net/sched/sch_htb.c +++ b/net/sched/sch_htb.c | |||
@@ -109,7 +109,7 @@ struct htb_class { | |||
109 | } un; | 109 | } un; |
110 | struct rb_node node[TC_HTB_NUMPRIO]; /* node for self or feed tree */ | 110 | struct rb_node node[TC_HTB_NUMPRIO]; /* node for self or feed tree */ |
111 | struct rb_node pq_node; /* node for event queue */ | 111 | struct rb_node pq_node; /* node for event queue */ |
112 | psched_time_t pq_key; | 112 | s64 pq_key; |
113 | 113 | ||
114 | int prio_activity; /* for which prios are we active */ | 114 | int prio_activity; /* for which prios are we active */ |
115 | enum htb_cmode cmode; /* current mode of the class */ | 115 | enum htb_cmode cmode; /* current mode of the class */ |
@@ -121,10 +121,10 @@ struct htb_class { | |||
121 | /* token bucket parameters */ | 121 | /* token bucket parameters */ |
122 | struct psched_ratecfg rate; | 122 | struct psched_ratecfg rate; |
123 | struct psched_ratecfg ceil; | 123 | struct psched_ratecfg ceil; |
124 | s64 buffer, cbuffer; /* token bucket depth/rate */ | 124 | s64 buffer, cbuffer; /* token bucket depth/rate */ |
125 | psched_tdiff_t mbuffer; /* max wait time */ | 125 | s64 mbuffer; /* max wait time */ |
126 | s64 tokens, ctokens; /* current number of tokens */ | 126 | s64 tokens, ctokens; /* current number of tokens */ |
127 | psched_time_t t_c; /* checkpoint time */ | 127 | s64 t_c; /* checkpoint time */ |
128 | }; | 128 | }; |
129 | 129 | ||
130 | struct htb_sched { | 130 | struct htb_sched { |
@@ -141,15 +141,15 @@ struct htb_sched { | |||
141 | struct rb_root wait_pq[TC_HTB_MAXDEPTH]; | 141 | struct rb_root wait_pq[TC_HTB_MAXDEPTH]; |
142 | 142 | ||
143 | /* time of nearest event per level (row) */ | 143 | /* time of nearest event per level (row) */ |
144 | psched_time_t near_ev_cache[TC_HTB_MAXDEPTH]; | 144 | s64 near_ev_cache[TC_HTB_MAXDEPTH]; |
145 | 145 | ||
146 | int defcls; /* class where unclassified flows go to */ | 146 | int defcls; /* class where unclassified flows go to */ |
147 | 147 | ||
148 | /* filters for qdisc itself */ | 148 | /* filters for qdisc itself */ |
149 | struct tcf_proto *filter_list; | 149 | struct tcf_proto *filter_list; |
150 | 150 | ||
151 | int rate2quantum; /* quant = rate / rate2quantum */ | 151 | int rate2quantum; /* quant = rate / rate2quantum */ |
152 | psched_time_t now; /* cached dequeue time */ | 152 | s64 now; /* cached dequeue time */ |
153 | struct qdisc_watchdog watchdog; | 153 | struct qdisc_watchdog watchdog; |
154 | 154 | ||
155 | /* non shaped skbs; let them go directly thru */ | 155 | /* non shaped skbs; let them go directly thru */ |
@@ -664,8 +664,8 @@ static void htb_charge_class(struct htb_sched *q, struct htb_class *cl, | |||
664 | * next pending event (0 for no event in pq, q->now for too many events). | 664 | * next pending event (0 for no event in pq, q->now for too many events). |
665 | * Note: Applied are events whose have cl->pq_key <= q->now. | 665 | * Note: Applied are events whose have cl->pq_key <= q->now. |
666 | */ | 666 | */ |
667 | static psched_time_t htb_do_events(struct htb_sched *q, int level, | 667 | static s64 htb_do_events(struct htb_sched *q, int level, |
668 | unsigned long start) | 668 | unsigned long start) |
669 | { | 669 | { |
670 | /* don't run for longer than 2 jiffies; 2 is used instead of | 670 | /* don't run for longer than 2 jiffies; 2 is used instead of |
671 | * 1 to simplify things when jiffy is going to be incremented | 671 | * 1 to simplify things when jiffy is going to be incremented |
@@ -857,7 +857,7 @@ static struct sk_buff *htb_dequeue(struct Qdisc *sch) | |||
857 | struct sk_buff *skb; | 857 | struct sk_buff *skb; |
858 | struct htb_sched *q = qdisc_priv(sch); | 858 | struct htb_sched *q = qdisc_priv(sch); |
859 | int level; | 859 | int level; |
860 | psched_time_t next_event; | 860 | s64 next_event; |
861 | unsigned long start_at; | 861 | unsigned long start_at; |
862 | 862 | ||
863 | /* try to dequeue direct packets as high prio (!) to minimize cpu work */ | 863 | /* try to dequeue direct packets as high prio (!) to minimize cpu work */ |
@@ -880,7 +880,7 @@ ok: | |||
880 | for (level = 0; level < TC_HTB_MAXDEPTH; level++) { | 880 | for (level = 0; level < TC_HTB_MAXDEPTH; level++) { |
881 | /* common case optimization - skip event handler quickly */ | 881 | /* common case optimization - skip event handler quickly */ |
882 | int m; | 882 | int m; |
883 | psched_time_t event; | 883 | s64 event; |
884 | 884 | ||
885 | if (q->now >= q->near_ev_cache[level]) { | 885 | if (q->now >= q->near_ev_cache[level]) { |
886 | event = htb_do_events(q, level, start_at); | 886 | event = htb_do_events(q, level, start_at); |
@@ -1090,9 +1090,9 @@ static int htb_dump_class(struct Qdisc *sch, unsigned long arg, | |||
1090 | 1090 | ||
1091 | memset(&opt, 0, sizeof(opt)); | 1091 | memset(&opt, 0, sizeof(opt)); |
1092 | 1092 | ||
1093 | opt.rate.rate = psched_ratecfg_getrate(&cl->rate); | 1093 | psched_ratecfg_getrate(&opt.rate, &cl->rate); |
1094 | opt.buffer = PSCHED_NS2TICKS(cl->buffer); | 1094 | opt.buffer = PSCHED_NS2TICKS(cl->buffer); |
1095 | opt.ceil.rate = psched_ratecfg_getrate(&cl->ceil); | 1095 | psched_ratecfg_getrate(&opt.ceil, &cl->ceil); |
1096 | opt.cbuffer = PSCHED_NS2TICKS(cl->cbuffer); | 1096 | opt.cbuffer = PSCHED_NS2TICKS(cl->cbuffer); |
1097 | opt.quantum = cl->quantum; | 1097 | opt.quantum = cl->quantum; |
1098 | opt.prio = cl->prio; | 1098 | opt.prio = cl->prio; |
@@ -1117,8 +1117,8 @@ htb_dump_class_stats(struct Qdisc *sch, unsigned long arg, struct gnet_dump *d) | |||
1117 | 1117 | ||
1118 | if (!cl->level && cl->un.leaf.q) | 1118 | if (!cl->level && cl->un.leaf.q) |
1119 | cl->qstats.qlen = cl->un.leaf.q->q.qlen; | 1119 | cl->qstats.qlen = cl->un.leaf.q->q.qlen; |
1120 | cl->xstats.tokens = cl->tokens; | 1120 | cl->xstats.tokens = PSCHED_NS2TICKS(cl->tokens); |
1121 | cl->xstats.ctokens = cl->ctokens; | 1121 | cl->xstats.ctokens = PSCHED_NS2TICKS(cl->ctokens); |
1122 | 1122 | ||
1123 | if (gnet_stats_copy_basic(d, &cl->bstats) < 0 || | 1123 | if (gnet_stats_copy_basic(d, &cl->bstats) < 0 || |
1124 | gnet_stats_copy_rate_est(d, NULL, &cl->rate_est) < 0 || | 1124 | gnet_stats_copy_rate_est(d, NULL, &cl->rate_est) < 0 || |
@@ -1200,7 +1200,7 @@ static void htb_parent_to_leaf(struct htb_sched *q, struct htb_class *cl, | |||
1200 | parent->un.leaf.q = new_q ? new_q : &noop_qdisc; | 1200 | parent->un.leaf.q = new_q ? new_q : &noop_qdisc; |
1201 | parent->tokens = parent->buffer; | 1201 | parent->tokens = parent->buffer; |
1202 | parent->ctokens = parent->cbuffer; | 1202 | parent->ctokens = parent->cbuffer; |
1203 | parent->t_c = psched_get_time(); | 1203 | parent->t_c = ktime_to_ns(ktime_get()); |
1204 | parent->cmode = HTB_CAN_SEND; | 1204 | parent->cmode = HTB_CAN_SEND; |
1205 | } | 1205 | } |
1206 | 1206 | ||
@@ -1417,8 +1417,8 @@ static int htb_change_class(struct Qdisc *sch, u32 classid, | |||
1417 | /* set class to be in HTB_CAN_SEND state */ | 1417 | /* set class to be in HTB_CAN_SEND state */ |
1418 | cl->tokens = PSCHED_TICKS2NS(hopt->buffer); | 1418 | cl->tokens = PSCHED_TICKS2NS(hopt->buffer); |
1419 | cl->ctokens = PSCHED_TICKS2NS(hopt->cbuffer); | 1419 | cl->ctokens = PSCHED_TICKS2NS(hopt->cbuffer); |
1420 | cl->mbuffer = 60 * PSCHED_TICKS_PER_SEC; /* 1min */ | 1420 | cl->mbuffer = 60ULL * NSEC_PER_SEC; /* 1min */ |
1421 | cl->t_c = psched_get_time(); | 1421 | cl->t_c = ktime_to_ns(ktime_get()); |
1422 | cl->cmode = HTB_CAN_SEND; | 1422 | cl->cmode = HTB_CAN_SEND; |
1423 | 1423 | ||
1424 | /* attach to the hash list and parent's family */ | 1424 | /* attach to the hash list and parent's family */ |
@@ -1459,8 +1459,8 @@ static int htb_change_class(struct Qdisc *sch, u32 classid, | |||
1459 | cl->prio = TC_HTB_NUMPRIO - 1; | 1459 | cl->prio = TC_HTB_NUMPRIO - 1; |
1460 | } | 1460 | } |
1461 | 1461 | ||
1462 | psched_ratecfg_precompute(&cl->rate, hopt->rate.rate); | 1462 | psched_ratecfg_precompute(&cl->rate, &hopt->rate); |
1463 | psched_ratecfg_precompute(&cl->ceil, hopt->ceil.rate); | 1463 | psched_ratecfg_precompute(&cl->ceil, &hopt->ceil); |
1464 | 1464 | ||
1465 | cl->buffer = PSCHED_TICKS2NS(hopt->buffer); | 1465 | cl->buffer = PSCHED_TICKS2NS(hopt->buffer); |
1466 | cl->cbuffer = PSCHED_TICKS2NS(hopt->buffer); | 1466 | cl->cbuffer = PSCHED_TICKS2NS(hopt->buffer); |
diff --git a/net/sched/sch_tbf.c b/net/sched/sch_tbf.c index 38008b0980d9..1aaf1b6e51a2 100644 --- a/net/sched/sch_tbf.c +++ b/net/sched/sch_tbf.c | |||
@@ -341,9 +341,9 @@ static int tbf_change(struct Qdisc *sch, struct nlattr *opt) | |||
341 | q->tokens = q->buffer; | 341 | q->tokens = q->buffer; |
342 | q->ptokens = q->mtu; | 342 | q->ptokens = q->mtu; |
343 | 343 | ||
344 | psched_ratecfg_precompute(&q->rate, rtab->rate.rate); | 344 | psched_ratecfg_precompute(&q->rate, &rtab->rate); |
345 | if (ptab) { | 345 | if (ptab) { |
346 | psched_ratecfg_precompute(&q->peak, ptab->rate.rate); | 346 | psched_ratecfg_precompute(&q->peak, &ptab->rate); |
347 | q->peak_present = true; | 347 | q->peak_present = true; |
348 | } else { | 348 | } else { |
349 | q->peak_present = false; | 349 | q->peak_present = false; |
@@ -393,9 +393,9 @@ static int tbf_dump(struct Qdisc *sch, struct sk_buff *skb) | |||
393 | goto nla_put_failure; | 393 | goto nla_put_failure; |
394 | 394 | ||
395 | opt.limit = q->limit; | 395 | opt.limit = q->limit; |
396 | opt.rate.rate = psched_ratecfg_getrate(&q->rate); | 396 | psched_ratecfg_getrate(&opt.rate, &q->rate); |
397 | if (q->peak_present) | 397 | if (q->peak_present) |
398 | opt.peakrate.rate = psched_ratecfg_getrate(&q->peak); | 398 | psched_ratecfg_getrate(&opt.peakrate, &q->peak); |
399 | else | 399 | else |
400 | memset(&opt.peakrate, 0, sizeof(opt.peakrate)); | 400 | memset(&opt.peakrate, 0, sizeof(opt.peakrate)); |
401 | opt.mtu = PSCHED_NS2TICKS(q->mtu); | 401 | opt.mtu = PSCHED_NS2TICKS(q->mtu); |
diff --git a/net/socket.c b/net/socket.c index 6b94633ca61d..9ff6366fee13 100644 --- a/net/socket.c +++ b/net/socket.c | |||
@@ -2075,8 +2075,12 @@ SYSCALL_DEFINE3(sendmsg, int, fd, struct msghdr __user *, msg, unsigned int, fla | |||
2075 | { | 2075 | { |
2076 | int fput_needed, err; | 2076 | int fput_needed, err; |
2077 | struct msghdr msg_sys; | 2077 | struct msghdr msg_sys; |
2078 | struct socket *sock = sockfd_lookup_light(fd, &err, &fput_needed); | 2078 | struct socket *sock; |
2079 | |||
2080 | if (flags & MSG_CMSG_COMPAT) | ||
2081 | return -EINVAL; | ||
2079 | 2082 | ||
2083 | sock = sockfd_lookup_light(fd, &err, &fput_needed); | ||
2080 | if (!sock) | 2084 | if (!sock) |
2081 | goto out; | 2085 | goto out; |
2082 | 2086 | ||
@@ -2149,6 +2153,8 @@ int __sys_sendmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen, | |||
2149 | SYSCALL_DEFINE4(sendmmsg, int, fd, struct mmsghdr __user *, mmsg, | 2153 | SYSCALL_DEFINE4(sendmmsg, int, fd, struct mmsghdr __user *, mmsg, |
2150 | unsigned int, vlen, unsigned int, flags) | 2154 | unsigned int, vlen, unsigned int, flags) |
2151 | { | 2155 | { |
2156 | if (flags & MSG_CMSG_COMPAT) | ||
2157 | return -EINVAL; | ||
2152 | return __sys_sendmmsg(fd, mmsg, vlen, flags); | 2158 | return __sys_sendmmsg(fd, mmsg, vlen, flags); |
2153 | } | 2159 | } |
2154 | 2160 | ||
@@ -2249,8 +2255,12 @@ SYSCALL_DEFINE3(recvmsg, int, fd, struct msghdr __user *, msg, | |||
2249 | { | 2255 | { |
2250 | int fput_needed, err; | 2256 | int fput_needed, err; |
2251 | struct msghdr msg_sys; | 2257 | struct msghdr msg_sys; |
2252 | struct socket *sock = sockfd_lookup_light(fd, &err, &fput_needed); | 2258 | struct socket *sock; |
2259 | |||
2260 | if (flags & MSG_CMSG_COMPAT) | ||
2261 | return -EINVAL; | ||
2253 | 2262 | ||
2263 | sock = sockfd_lookup_light(fd, &err, &fput_needed); | ||
2254 | if (!sock) | 2264 | if (!sock) |
2255 | goto out; | 2265 | goto out; |
2256 | 2266 | ||
@@ -2375,6 +2385,9 @@ SYSCALL_DEFINE5(recvmmsg, int, fd, struct mmsghdr __user *, mmsg, | |||
2375 | int datagrams; | 2385 | int datagrams; |
2376 | struct timespec timeout_sys; | 2386 | struct timespec timeout_sys; |
2377 | 2387 | ||
2388 | if (flags & MSG_CMSG_COMPAT) | ||
2389 | return -EINVAL; | ||
2390 | |||
2378 | if (!timeout) | 2391 | if (!timeout) |
2379 | return __sys_recvmmsg(fd, mmsg, vlen, flags, NULL); | 2392 | return __sys_recvmmsg(fd, mmsg, vlen, flags, NULL); |
2380 | 2393 | ||
@@ -2492,15 +2505,31 @@ SYSCALL_DEFINE2(socketcall, int, call, unsigned long __user *, args) | |||
2492 | (int __user *)a[4]); | 2505 | (int __user *)a[4]); |
2493 | break; | 2506 | break; |
2494 | case SYS_SENDMSG: | 2507 | case SYS_SENDMSG: |
2508 | if (a[2] & MSG_CMSG_COMPAT) { | ||
2509 | err = -EINVAL; | ||
2510 | break; | ||
2511 | } | ||
2495 | err = sys_sendmsg(a0, (struct msghdr __user *)a1, a[2]); | 2512 | err = sys_sendmsg(a0, (struct msghdr __user *)a1, a[2]); |
2496 | break; | 2513 | break; |
2497 | case SYS_SENDMMSG: | 2514 | case SYS_SENDMMSG: |
2515 | if (a[3] & MSG_CMSG_COMPAT) { | ||
2516 | err = -EINVAL; | ||
2517 | break; | ||
2518 | } | ||
2498 | err = sys_sendmmsg(a0, (struct mmsghdr __user *)a1, a[2], a[3]); | 2519 | err = sys_sendmmsg(a0, (struct mmsghdr __user *)a1, a[2], a[3]); |
2499 | break; | 2520 | break; |
2500 | case SYS_RECVMSG: | 2521 | case SYS_RECVMSG: |
2522 | if (a[2] & MSG_CMSG_COMPAT) { | ||
2523 | err = -EINVAL; | ||
2524 | break; | ||
2525 | } | ||
2501 | err = sys_recvmsg(a0, (struct msghdr __user *)a1, a[2]); | 2526 | err = sys_recvmsg(a0, (struct msghdr __user *)a1, a[2]); |
2502 | break; | 2527 | break; |
2503 | case SYS_RECVMMSG: | 2528 | case SYS_RECVMMSG: |
2529 | if (a[3] & MSG_CMSG_COMPAT) { | ||
2530 | err = -EINVAL; | ||
2531 | break; | ||
2532 | } | ||
2504 | err = sys_recvmmsg(a0, (struct mmsghdr __user *)a1, a[2], a[3], | 2533 | err = sys_recvmmsg(a0, (struct mmsghdr __user *)a1, a[2], a[3], |
2505 | (struct timespec __user *)a[4]); | 2534 | (struct timespec __user *)a[4]); |
2506 | break; | 2535 | break; |
diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c index 7da6b457f66a..fc2f78d6a9b4 100644 --- a/net/sunrpc/auth_gss/auth_gss.c +++ b/net/sunrpc/auth_gss/auth_gss.c | |||
@@ -52,6 +52,8 @@ | |||
52 | #include <linux/sunrpc/gss_api.h> | 52 | #include <linux/sunrpc/gss_api.h> |
53 | #include <asm/uaccess.h> | 53 | #include <asm/uaccess.h> |
54 | 54 | ||
55 | #include "../netns.h" | ||
56 | |||
55 | static const struct rpc_authops authgss_ops; | 57 | static const struct rpc_authops authgss_ops; |
56 | 58 | ||
57 | static const struct rpc_credops gss_credops; | 59 | static const struct rpc_credops gss_credops; |
@@ -85,8 +87,6 @@ struct gss_auth { | |||
85 | }; | 87 | }; |
86 | 88 | ||
87 | /* pipe_version >= 0 if and only if someone has a pipe open. */ | 89 | /* pipe_version >= 0 if and only if someone has a pipe open. */ |
88 | static int pipe_version = -1; | ||
89 | static atomic_t pipe_users = ATOMIC_INIT(0); | ||
90 | static DEFINE_SPINLOCK(pipe_version_lock); | 90 | static DEFINE_SPINLOCK(pipe_version_lock); |
91 | static struct rpc_wait_queue pipe_version_rpc_waitqueue; | 91 | static struct rpc_wait_queue pipe_version_rpc_waitqueue; |
92 | static DECLARE_WAIT_QUEUE_HEAD(pipe_version_waitqueue); | 92 | static DECLARE_WAIT_QUEUE_HEAD(pipe_version_waitqueue); |
@@ -266,24 +266,27 @@ struct gss_upcall_msg { | |||
266 | char databuf[UPCALL_BUF_LEN]; | 266 | char databuf[UPCALL_BUF_LEN]; |
267 | }; | 267 | }; |
268 | 268 | ||
269 | static int get_pipe_version(void) | 269 | static int get_pipe_version(struct net *net) |
270 | { | 270 | { |
271 | struct sunrpc_net *sn = net_generic(net, sunrpc_net_id); | ||
271 | int ret; | 272 | int ret; |
272 | 273 | ||
273 | spin_lock(&pipe_version_lock); | 274 | spin_lock(&pipe_version_lock); |
274 | if (pipe_version >= 0) { | 275 | if (sn->pipe_version >= 0) { |
275 | atomic_inc(&pipe_users); | 276 | atomic_inc(&sn->pipe_users); |
276 | ret = pipe_version; | 277 | ret = sn->pipe_version; |
277 | } else | 278 | } else |
278 | ret = -EAGAIN; | 279 | ret = -EAGAIN; |
279 | spin_unlock(&pipe_version_lock); | 280 | spin_unlock(&pipe_version_lock); |
280 | return ret; | 281 | return ret; |
281 | } | 282 | } |
282 | 283 | ||
283 | static void put_pipe_version(void) | 284 | static void put_pipe_version(struct net *net) |
284 | { | 285 | { |
285 | if (atomic_dec_and_lock(&pipe_users, &pipe_version_lock)) { | 286 | struct sunrpc_net *sn = net_generic(net, sunrpc_net_id); |
286 | pipe_version = -1; | 287 | |
288 | if (atomic_dec_and_lock(&sn->pipe_users, &pipe_version_lock)) { | ||
289 | sn->pipe_version = -1; | ||
287 | spin_unlock(&pipe_version_lock); | 290 | spin_unlock(&pipe_version_lock); |
288 | } | 291 | } |
289 | } | 292 | } |
@@ -291,9 +294,10 @@ static void put_pipe_version(void) | |||
291 | static void | 294 | static void |
292 | gss_release_msg(struct gss_upcall_msg *gss_msg) | 295 | gss_release_msg(struct gss_upcall_msg *gss_msg) |
293 | { | 296 | { |
297 | struct net *net = rpc_net_ns(gss_msg->auth->client); | ||
294 | if (!atomic_dec_and_test(&gss_msg->count)) | 298 | if (!atomic_dec_and_test(&gss_msg->count)) |
295 | return; | 299 | return; |
296 | put_pipe_version(); | 300 | put_pipe_version(net); |
297 | BUG_ON(!list_empty(&gss_msg->list)); | 301 | BUG_ON(!list_empty(&gss_msg->list)); |
298 | if (gss_msg->ctx != NULL) | 302 | if (gss_msg->ctx != NULL) |
299 | gss_put_ctx(gss_msg->ctx); | 303 | gss_put_ctx(gss_msg->ctx); |
@@ -439,7 +443,10 @@ static void gss_encode_msg(struct gss_upcall_msg *gss_msg, | |||
439 | struct rpc_clnt *clnt, | 443 | struct rpc_clnt *clnt, |
440 | const char *service_name) | 444 | const char *service_name) |
441 | { | 445 | { |
442 | if (pipe_version == 0) | 446 | struct net *net = rpc_net_ns(clnt); |
447 | struct sunrpc_net *sn = net_generic(net, sunrpc_net_id); | ||
448 | |||
449 | if (sn->pipe_version == 0) | ||
443 | gss_encode_v0_msg(gss_msg); | 450 | gss_encode_v0_msg(gss_msg); |
444 | else /* pipe_version == 1 */ | 451 | else /* pipe_version == 1 */ |
445 | gss_encode_v1_msg(gss_msg, clnt, service_name); | 452 | gss_encode_v1_msg(gss_msg, clnt, service_name); |
@@ -455,7 +462,7 @@ gss_alloc_msg(struct gss_auth *gss_auth, struct rpc_clnt *clnt, | |||
455 | gss_msg = kzalloc(sizeof(*gss_msg), GFP_NOFS); | 462 | gss_msg = kzalloc(sizeof(*gss_msg), GFP_NOFS); |
456 | if (gss_msg == NULL) | 463 | if (gss_msg == NULL) |
457 | return ERR_PTR(-ENOMEM); | 464 | return ERR_PTR(-ENOMEM); |
458 | vers = get_pipe_version(); | 465 | vers = get_pipe_version(rpc_net_ns(clnt)); |
459 | if (vers < 0) { | 466 | if (vers < 0) { |
460 | kfree(gss_msg); | 467 | kfree(gss_msg); |
461 | return ERR_PTR(vers); | 468 | return ERR_PTR(vers); |
@@ -559,24 +566,34 @@ out: | |||
559 | static inline int | 566 | static inline int |
560 | gss_create_upcall(struct gss_auth *gss_auth, struct gss_cred *gss_cred) | 567 | gss_create_upcall(struct gss_auth *gss_auth, struct gss_cred *gss_cred) |
561 | { | 568 | { |
569 | struct net *net = rpc_net_ns(gss_auth->client); | ||
570 | struct sunrpc_net *sn = net_generic(net, sunrpc_net_id); | ||
562 | struct rpc_pipe *pipe; | 571 | struct rpc_pipe *pipe; |
563 | struct rpc_cred *cred = &gss_cred->gc_base; | 572 | struct rpc_cred *cred = &gss_cred->gc_base; |
564 | struct gss_upcall_msg *gss_msg; | 573 | struct gss_upcall_msg *gss_msg; |
574 | unsigned long timeout; | ||
565 | DEFINE_WAIT(wait); | 575 | DEFINE_WAIT(wait); |
566 | int err = 0; | 576 | int err; |
567 | 577 | ||
568 | dprintk("RPC: %s for uid %u\n", | 578 | dprintk("RPC: %s for uid %u\n", |
569 | __func__, from_kuid(&init_user_ns, cred->cr_uid)); | 579 | __func__, from_kuid(&init_user_ns, cred->cr_uid)); |
570 | retry: | 580 | retry: |
581 | err = 0; | ||
582 | /* Default timeout is 15s unless we know that gssd is not running */ | ||
583 | timeout = 15 * HZ; | ||
584 | if (!sn->gssd_running) | ||
585 | timeout = HZ >> 2; | ||
571 | gss_msg = gss_setup_upcall(gss_auth->client, gss_auth, cred); | 586 | gss_msg = gss_setup_upcall(gss_auth->client, gss_auth, cred); |
572 | if (PTR_ERR(gss_msg) == -EAGAIN) { | 587 | if (PTR_ERR(gss_msg) == -EAGAIN) { |
573 | err = wait_event_interruptible_timeout(pipe_version_waitqueue, | 588 | err = wait_event_interruptible_timeout(pipe_version_waitqueue, |
574 | pipe_version >= 0, 15*HZ); | 589 | sn->pipe_version >= 0, timeout); |
575 | if (pipe_version < 0) { | 590 | if (sn->pipe_version < 0) { |
591 | if (err == 0) | ||
592 | sn->gssd_running = 0; | ||
576 | warn_gssd(); | 593 | warn_gssd(); |
577 | err = -EACCES; | 594 | err = -EACCES; |
578 | } | 595 | } |
579 | if (err) | 596 | if (err < 0) |
580 | goto out; | 597 | goto out; |
581 | goto retry; | 598 | goto retry; |
582 | } | 599 | } |
@@ -707,20 +724,22 @@ out: | |||
707 | 724 | ||
708 | static int gss_pipe_open(struct inode *inode, int new_version) | 725 | static int gss_pipe_open(struct inode *inode, int new_version) |
709 | { | 726 | { |
727 | struct net *net = inode->i_sb->s_fs_info; | ||
728 | struct sunrpc_net *sn = net_generic(net, sunrpc_net_id); | ||
710 | int ret = 0; | 729 | int ret = 0; |
711 | 730 | ||
712 | spin_lock(&pipe_version_lock); | 731 | spin_lock(&pipe_version_lock); |
713 | if (pipe_version < 0) { | 732 | if (sn->pipe_version < 0) { |
714 | /* First open of any gss pipe determines the version: */ | 733 | /* First open of any gss pipe determines the version: */ |
715 | pipe_version = new_version; | 734 | sn->pipe_version = new_version; |
716 | rpc_wake_up(&pipe_version_rpc_waitqueue); | 735 | rpc_wake_up(&pipe_version_rpc_waitqueue); |
717 | wake_up(&pipe_version_waitqueue); | 736 | wake_up(&pipe_version_waitqueue); |
718 | } else if (pipe_version != new_version) { | 737 | } else if (sn->pipe_version != new_version) { |
719 | /* Trying to open a pipe of a different version */ | 738 | /* Trying to open a pipe of a different version */ |
720 | ret = -EBUSY; | 739 | ret = -EBUSY; |
721 | goto out; | 740 | goto out; |
722 | } | 741 | } |
723 | atomic_inc(&pipe_users); | 742 | atomic_inc(&sn->pipe_users); |
724 | out: | 743 | out: |
725 | spin_unlock(&pipe_version_lock); | 744 | spin_unlock(&pipe_version_lock); |
726 | return ret; | 745 | return ret; |
@@ -740,6 +759,7 @@ static int gss_pipe_open_v1(struct inode *inode) | |||
740 | static void | 759 | static void |
741 | gss_pipe_release(struct inode *inode) | 760 | gss_pipe_release(struct inode *inode) |
742 | { | 761 | { |
762 | struct net *net = inode->i_sb->s_fs_info; | ||
743 | struct rpc_pipe *pipe = RPC_I(inode)->pipe; | 763 | struct rpc_pipe *pipe = RPC_I(inode)->pipe; |
744 | struct gss_upcall_msg *gss_msg; | 764 | struct gss_upcall_msg *gss_msg; |
745 | 765 | ||
@@ -758,7 +778,7 @@ restart: | |||
758 | } | 778 | } |
759 | spin_unlock(&pipe->lock); | 779 | spin_unlock(&pipe->lock); |
760 | 780 | ||
761 | put_pipe_version(); | 781 | put_pipe_version(net); |
762 | } | 782 | } |
763 | 783 | ||
764 | static void | 784 | static void |
diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c index 871c73c92165..29b4ba93ab3c 100644 --- a/net/sunrpc/auth_gss/svcauth_gss.c +++ b/net/sunrpc/auth_gss/svcauth_gss.c | |||
@@ -1287,7 +1287,7 @@ static bool use_gss_proxy(struct net *net) | |||
1287 | 1287 | ||
1288 | #ifdef CONFIG_PROC_FS | 1288 | #ifdef CONFIG_PROC_FS |
1289 | 1289 | ||
1290 | static bool set_gss_proxy(struct net *net, int type) | 1290 | static int set_gss_proxy(struct net *net, int type) |
1291 | { | 1291 | { |
1292 | struct sunrpc_net *sn = net_generic(net, sunrpc_net_id); | 1292 | struct sunrpc_net *sn = net_generic(net, sunrpc_net_id); |
1293 | int ret = 0; | 1293 | int ret = 0; |
@@ -1317,10 +1317,12 @@ static inline bool gssp_ready(struct sunrpc_net *sn) | |||
1317 | return false; | 1317 | return false; |
1318 | } | 1318 | } |
1319 | 1319 | ||
1320 | static int wait_for_gss_proxy(struct net *net) | 1320 | static int wait_for_gss_proxy(struct net *net, struct file *file) |
1321 | { | 1321 | { |
1322 | struct sunrpc_net *sn = net_generic(net, sunrpc_net_id); | 1322 | struct sunrpc_net *sn = net_generic(net, sunrpc_net_id); |
1323 | 1323 | ||
1324 | if (file->f_flags & O_NONBLOCK && !gssp_ready(sn)) | ||
1325 | return -EAGAIN; | ||
1324 | return wait_event_interruptible(sn->gssp_wq, gssp_ready(sn)); | 1326 | return wait_event_interruptible(sn->gssp_wq, gssp_ready(sn)); |
1325 | } | 1327 | } |
1326 | 1328 | ||
@@ -1362,7 +1364,7 @@ static ssize_t read_gssp(struct file *file, char __user *buf, | |||
1362 | size_t len; | 1364 | size_t len; |
1363 | int ret; | 1365 | int ret; |
1364 | 1366 | ||
1365 | ret = wait_for_gss_proxy(net); | 1367 | ret = wait_for_gss_proxy(net, file); |
1366 | if (ret) | 1368 | if (ret) |
1367 | return ret; | 1369 | return ret; |
1368 | 1370 | ||
diff --git a/net/sunrpc/netns.h b/net/sunrpc/netns.h index 7111a4c9113b..74d948f5d5a1 100644 --- a/net/sunrpc/netns.h +++ b/net/sunrpc/netns.h | |||
@@ -28,7 +28,11 @@ struct sunrpc_net { | |||
28 | wait_queue_head_t gssp_wq; | 28 | wait_queue_head_t gssp_wq; |
29 | struct rpc_clnt *gssp_clnt; | 29 | struct rpc_clnt *gssp_clnt; |
30 | int use_gss_proxy; | 30 | int use_gss_proxy; |
31 | int pipe_version; | ||
32 | atomic_t pipe_users; | ||
31 | struct proc_dir_entry *use_gssp_proc; | 33 | struct proc_dir_entry *use_gssp_proc; |
34 | |||
35 | unsigned int gssd_running; | ||
32 | }; | 36 | }; |
33 | 37 | ||
34 | extern int sunrpc_net_id; | 38 | extern int sunrpc_net_id; |
diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c index a9129f8d7070..e7ce4b3eb0bd 100644 --- a/net/sunrpc/rpc_pipe.c +++ b/net/sunrpc/rpc_pipe.c | |||
@@ -216,11 +216,14 @@ rpc_destroy_inode(struct inode *inode) | |||
216 | static int | 216 | static int |
217 | rpc_pipe_open(struct inode *inode, struct file *filp) | 217 | rpc_pipe_open(struct inode *inode, struct file *filp) |
218 | { | 218 | { |
219 | struct net *net = inode->i_sb->s_fs_info; | ||
220 | struct sunrpc_net *sn = net_generic(net, sunrpc_net_id); | ||
219 | struct rpc_pipe *pipe; | 221 | struct rpc_pipe *pipe; |
220 | int first_open; | 222 | int first_open; |
221 | int res = -ENXIO; | 223 | int res = -ENXIO; |
222 | 224 | ||
223 | mutex_lock(&inode->i_mutex); | 225 | mutex_lock(&inode->i_mutex); |
226 | sn->gssd_running = 1; | ||
224 | pipe = RPC_I(inode)->pipe; | 227 | pipe = RPC_I(inode)->pipe; |
225 | if (pipe == NULL) | 228 | if (pipe == NULL) |
226 | goto out; | 229 | goto out; |
@@ -1069,6 +1072,8 @@ void rpc_pipefs_init_net(struct net *net) | |||
1069 | struct sunrpc_net *sn = net_generic(net, sunrpc_net_id); | 1072 | struct sunrpc_net *sn = net_generic(net, sunrpc_net_id); |
1070 | 1073 | ||
1071 | mutex_init(&sn->pipefs_sb_lock); | 1074 | mutex_init(&sn->pipefs_sb_lock); |
1075 | sn->gssd_running = 1; | ||
1076 | sn->pipe_version = -1; | ||
1072 | } | 1077 | } |
1073 | 1078 | ||
1074 | /* | 1079 | /* |
diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c index f8529fc8e542..5356b120dbf8 100644 --- a/net/sunrpc/sched.c +++ b/net/sunrpc/sched.c | |||
@@ -324,11 +324,17 @@ EXPORT_SYMBOL_GPL(__rpc_wait_for_completion_task); | |||
324 | * Note: If the task is ASYNC, and is being made runnable after sitting on an | 324 | * Note: If the task is ASYNC, and is being made runnable after sitting on an |
325 | * rpc_wait_queue, this must be called with the queue spinlock held to protect | 325 | * rpc_wait_queue, this must be called with the queue spinlock held to protect |
326 | * the wait queue operation. | 326 | * the wait queue operation. |
327 | * Note the ordering of rpc_test_and_set_running() and rpc_clear_queued(), | ||
328 | * which is needed to ensure that __rpc_execute() doesn't loop (due to the | ||
329 | * lockless RPC_IS_QUEUED() test) before we've had a chance to test | ||
330 | * the RPC_TASK_RUNNING flag. | ||
327 | */ | 331 | */ |
328 | static void rpc_make_runnable(struct rpc_task *task) | 332 | static void rpc_make_runnable(struct rpc_task *task) |
329 | { | 333 | { |
334 | bool need_wakeup = !rpc_test_and_set_running(task); | ||
335 | |||
330 | rpc_clear_queued(task); | 336 | rpc_clear_queued(task); |
331 | if (rpc_test_and_set_running(task)) | 337 | if (!need_wakeup) |
332 | return; | 338 | return; |
333 | if (RPC_IS_ASYNC(task)) { | 339 | if (RPC_IS_ASYNC(task)) { |
334 | INIT_WORK(&task->u.tk_work, rpc_async_schedule); | 340 | INIT_WORK(&task->u.tk_work, rpc_async_schedule); |
diff --git a/net/sunrpc/svcauth_unix.c b/net/sunrpc/svcauth_unix.c index c3f9e1ef7f53..06bdf5a1082c 100644 --- a/net/sunrpc/svcauth_unix.c +++ b/net/sunrpc/svcauth_unix.c | |||
@@ -810,11 +810,15 @@ svcauth_unix_accept(struct svc_rqst *rqstp, __be32 *authp) | |||
810 | goto badcred; | 810 | goto badcred; |
811 | argv->iov_base = (void*)((__be32*)argv->iov_base + slen); /* skip machname */ | 811 | argv->iov_base = (void*)((__be32*)argv->iov_base + slen); /* skip machname */ |
812 | argv->iov_len -= slen*4; | 812 | argv->iov_len -= slen*4; |
813 | 813 | /* | |
814 | * Note: we skip uid_valid()/gid_valid() checks here for | ||
815 | * backwards compatibility with clients that use -1 id's. | ||
816 | * Instead, -1 uid or gid is later mapped to the | ||
817 | * (export-specific) anonymous id by nfsd_setuser. | ||
818 | * Supplementary gid's will be left alone. | ||
819 | */ | ||
814 | cred->cr_uid = make_kuid(&init_user_ns, svc_getnl(argv)); /* uid */ | 820 | cred->cr_uid = make_kuid(&init_user_ns, svc_getnl(argv)); /* uid */ |
815 | cred->cr_gid = make_kgid(&init_user_ns, svc_getnl(argv)); /* gid */ | 821 | cred->cr_gid = make_kgid(&init_user_ns, svc_getnl(argv)); /* gid */ |
816 | if (!uid_valid(cred->cr_uid) || !gid_valid(cred->cr_gid)) | ||
817 | goto badcred; | ||
818 | slen = svc_getnl(argv); /* gids length */ | 822 | slen = svc_getnl(argv); /* gids length */ |
819 | if (slen > 16 || (len -= (slen + 2)*4) < 0) | 823 | if (slen > 16 || (len -= (slen + 2)*4) < 0) |
820 | goto badcred; | 824 | goto badcred; |
@@ -823,8 +827,6 @@ svcauth_unix_accept(struct svc_rqst *rqstp, __be32 *authp) | |||
823 | return SVC_CLOSE; | 827 | return SVC_CLOSE; |
824 | for (i = 0; i < slen; i++) { | 828 | for (i = 0; i < slen; i++) { |
825 | kgid_t kgid = make_kgid(&init_user_ns, svc_getnl(argv)); | 829 | kgid_t kgid = make_kgid(&init_user_ns, svc_getnl(argv)); |
826 | if (!gid_valid(kgid)) | ||
827 | goto badcred; | ||
828 | GROUP_AT(cred->cr_group_info, i) = kgid; | 830 | GROUP_AT(cred->cr_group_info, i) = kgid; |
829 | } | 831 | } |
830 | if (svc_getu32(argv) != htonl(RPC_AUTH_NULL) || svc_getu32(argv) != 0) { | 832 | if (svc_getu32(argv) != htonl(RPC_AUTH_NULL) || svc_getu32(argv) != 0) { |
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index dfdb5e643211..d5aed3bb3945 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
@@ -3411,7 +3411,7 @@ static int nl80211_send_station(struct sk_buff *msg, u32 portid, u32 seq, | |||
3411 | (u32)sinfo->rx_bytes)) | 3411 | (u32)sinfo->rx_bytes)) |
3412 | goto nla_put_failure; | 3412 | goto nla_put_failure; |
3413 | if ((sinfo->filled & (STATION_INFO_TX_BYTES | | 3413 | if ((sinfo->filled & (STATION_INFO_TX_BYTES | |
3414 | NL80211_STA_INFO_TX_BYTES64)) && | 3414 | STATION_INFO_TX_BYTES64)) && |
3415 | nla_put_u32(msg, NL80211_STA_INFO_TX_BYTES, | 3415 | nla_put_u32(msg, NL80211_STA_INFO_TX_BYTES, |
3416 | (u32)sinfo->tx_bytes)) | 3416 | (u32)sinfo->tx_bytes)) |
3417 | goto nla_put_failure; | 3417 | goto nla_put_failure; |
diff --git a/net/wireless/sme.c b/net/wireless/sme.c index 8b5eddfba1e5..3ed35c345cae 100644 --- a/net/wireless/sme.c +++ b/net/wireless/sme.c | |||
@@ -231,6 +231,9 @@ void cfg80211_conn_work(struct work_struct *work) | |||
231 | mutex_lock(&rdev->sched_scan_mtx); | 231 | mutex_lock(&rdev->sched_scan_mtx); |
232 | 232 | ||
233 | list_for_each_entry(wdev, &rdev->wdev_list, list) { | 233 | list_for_each_entry(wdev, &rdev->wdev_list, list) { |
234 | if (!wdev->netdev) | ||
235 | continue; | ||
236 | |||
234 | wdev_lock(wdev); | 237 | wdev_lock(wdev); |
235 | if (!netif_running(wdev->netdev)) { | 238 | if (!netif_running(wdev->netdev)) { |
236 | wdev_unlock(wdev); | 239 | wdev_unlock(wdev); |
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c index 536ccc95de89..e52cab3591dd 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c | |||
@@ -2557,11 +2557,12 @@ static void __xfrm_garbage_collect(struct net *net) | |||
2557 | } | 2557 | } |
2558 | } | 2558 | } |
2559 | 2559 | ||
2560 | static void xfrm_garbage_collect(struct net *net) | 2560 | void xfrm_garbage_collect(struct net *net) |
2561 | { | 2561 | { |
2562 | flow_cache_flush(); | 2562 | flow_cache_flush(); |
2563 | __xfrm_garbage_collect(net); | 2563 | __xfrm_garbage_collect(net); |
2564 | } | 2564 | } |
2565 | EXPORT_SYMBOL(xfrm_garbage_collect); | ||
2565 | 2566 | ||
2566 | static void xfrm_garbage_collect_deferred(struct net *net) | 2567 | static void xfrm_garbage_collect_deferred(struct net *net) |
2567 | { | 2568 | { |
diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c index aa778748c565..3f565e495ac6 100644 --- a/net/xfrm/xfrm_user.c +++ b/net/xfrm/xfrm_user.c | |||
@@ -1681,6 +1681,8 @@ static int xfrm_get_policy(struct sk_buff *skb, struct nlmsghdr *nlh, | |||
1681 | 1681 | ||
1682 | out: | 1682 | out: |
1683 | xfrm_pol_put(xp); | 1683 | xfrm_pol_put(xp); |
1684 | if (delete && err == 0) | ||
1685 | xfrm_garbage_collect(net); | ||
1684 | return err; | 1686 | return err; |
1685 | } | 1687 | } |
1686 | 1688 | ||
diff --git a/security/selinux/xfrm.c b/security/selinux/xfrm.c index 8ab295154517..d03081886214 100644 --- a/security/selinux/xfrm.c +++ b/security/selinux/xfrm.c | |||
@@ -316,6 +316,7 @@ int selinux_xfrm_policy_clone(struct xfrm_sec_ctx *old_ctx, | |||
316 | 316 | ||
317 | memcpy(new_ctx, old_ctx, sizeof(*new_ctx)); | 317 | memcpy(new_ctx, old_ctx, sizeof(*new_ctx)); |
318 | memcpy(new_ctx->ctx_str, old_ctx->ctx_str, new_ctx->ctx_len); | 318 | memcpy(new_ctx->ctx_str, old_ctx->ctx_str, new_ctx->ctx_len); |
319 | atomic_inc(&selinux_xfrm_refcount); | ||
319 | *new_ctxp = new_ctx; | 320 | *new_ctxp = new_ctx; |
320 | } | 321 | } |
321 | return 0; | 322 | return 0; |
@@ -326,6 +327,7 @@ int selinux_xfrm_policy_clone(struct xfrm_sec_ctx *old_ctx, | |||
326 | */ | 327 | */ |
327 | void selinux_xfrm_policy_free(struct xfrm_sec_ctx *ctx) | 328 | void selinux_xfrm_policy_free(struct xfrm_sec_ctx *ctx) |
328 | { | 329 | { |
330 | atomic_dec(&selinux_xfrm_refcount); | ||
329 | kfree(ctx); | 331 | kfree(ctx); |
330 | } | 332 | } |
331 | 333 | ||
@@ -335,17 +337,13 @@ void selinux_xfrm_policy_free(struct xfrm_sec_ctx *ctx) | |||
335 | int selinux_xfrm_policy_delete(struct xfrm_sec_ctx *ctx) | 337 | int selinux_xfrm_policy_delete(struct xfrm_sec_ctx *ctx) |
336 | { | 338 | { |
337 | const struct task_security_struct *tsec = current_security(); | 339 | const struct task_security_struct *tsec = current_security(); |
338 | int rc = 0; | ||
339 | 340 | ||
340 | if (ctx) { | 341 | if (!ctx) |
341 | rc = avc_has_perm(tsec->sid, ctx->ctx_sid, | 342 | return 0; |
342 | SECCLASS_ASSOCIATION, | ||
343 | ASSOCIATION__SETCONTEXT, NULL); | ||
344 | if (rc == 0) | ||
345 | atomic_dec(&selinux_xfrm_refcount); | ||
346 | } | ||
347 | 343 | ||
348 | return rc; | 344 | return avc_has_perm(tsec->sid, ctx->ctx_sid, |
345 | SECCLASS_ASSOCIATION, ASSOCIATION__SETCONTEXT, | ||
346 | NULL); | ||
349 | } | 347 | } |
350 | 348 | ||
351 | /* | 349 | /* |
@@ -370,8 +368,8 @@ int selinux_xfrm_state_alloc(struct xfrm_state *x, struct xfrm_user_sec_ctx *uct | |||
370 | */ | 368 | */ |
371 | void selinux_xfrm_state_free(struct xfrm_state *x) | 369 | void selinux_xfrm_state_free(struct xfrm_state *x) |
372 | { | 370 | { |
373 | struct xfrm_sec_ctx *ctx = x->security; | 371 | atomic_dec(&selinux_xfrm_refcount); |
374 | kfree(ctx); | 372 | kfree(x->security); |
375 | } | 373 | } |
376 | 374 | ||
377 | /* | 375 | /* |
@@ -381,17 +379,13 @@ int selinux_xfrm_state_delete(struct xfrm_state *x) | |||
381 | { | 379 | { |
382 | const struct task_security_struct *tsec = current_security(); | 380 | const struct task_security_struct *tsec = current_security(); |
383 | struct xfrm_sec_ctx *ctx = x->security; | 381 | struct xfrm_sec_ctx *ctx = x->security; |
384 | int rc = 0; | ||
385 | 382 | ||
386 | if (ctx) { | 383 | if (!ctx) |
387 | rc = avc_has_perm(tsec->sid, ctx->ctx_sid, | 384 | return 0; |
388 | SECCLASS_ASSOCIATION, | ||
389 | ASSOCIATION__SETCONTEXT, NULL); | ||
390 | if (rc == 0) | ||
391 | atomic_dec(&selinux_xfrm_refcount); | ||
392 | } | ||
393 | 385 | ||
394 | return rc; | 386 | return avc_has_perm(tsec->sid, ctx->ctx_sid, |
387 | SECCLASS_ASSOCIATION, ASSOCIATION__SETCONTEXT, | ||
388 | NULL); | ||
395 | } | 389 | } |
396 | 390 | ||
397 | /* | 391 | /* |
diff --git a/sound/soc/codecs/cs42l52.c b/sound/soc/codecs/cs42l52.c index 0f6f481cec09..030f53c96ec0 100644 --- a/sound/soc/codecs/cs42l52.c +++ b/sound/soc/codecs/cs42l52.c | |||
@@ -86,7 +86,7 @@ static const struct reg_default cs42l52_reg_defaults[] = { | |||
86 | { CS42L52_BEEP_VOL, 0x00 }, /* r1D Beep Volume off Time */ | 86 | { CS42L52_BEEP_VOL, 0x00 }, /* r1D Beep Volume off Time */ |
87 | { CS42L52_BEEP_TONE_CTL, 0x00 }, /* r1E Beep Tone Cfg. */ | 87 | { CS42L52_BEEP_TONE_CTL, 0x00 }, /* r1E Beep Tone Cfg. */ |
88 | { CS42L52_TONE_CTL, 0x00 }, /* r1F Tone Ctl */ | 88 | { CS42L52_TONE_CTL, 0x00 }, /* r1F Tone Ctl */ |
89 | { CS42L52_MASTERA_VOL, 0x88 }, /* r20 Master A Volume */ | 89 | { CS42L52_MASTERA_VOL, 0x00 }, /* r20 Master A Volume */ |
90 | { CS42L52_MASTERB_VOL, 0x00 }, /* r21 Master B Volume */ | 90 | { CS42L52_MASTERB_VOL, 0x00 }, /* r21 Master B Volume */ |
91 | { CS42L52_HPA_VOL, 0x00 }, /* r22 Headphone A Volume */ | 91 | { CS42L52_HPA_VOL, 0x00 }, /* r22 Headphone A Volume */ |
92 | { CS42L52_HPB_VOL, 0x00 }, /* r23 Headphone B Volume */ | 92 | { CS42L52_HPB_VOL, 0x00 }, /* r23 Headphone B Volume */ |
@@ -225,7 +225,7 @@ static const char * const mic_bias_level_text[] = { | |||
225 | }; | 225 | }; |
226 | 226 | ||
227 | static const struct soc_enum mic_bias_level_enum = | 227 | static const struct soc_enum mic_bias_level_enum = |
228 | SOC_ENUM_SINGLE(CS42L52_IFACE_CTL1, 0, | 228 | SOC_ENUM_SINGLE(CS42L52_IFACE_CTL2, 0, |
229 | ARRAY_SIZE(mic_bias_level_text), mic_bias_level_text); | 229 | ARRAY_SIZE(mic_bias_level_text), mic_bias_level_text); |
230 | 230 | ||
231 | static const char * const cs42l52_mic_text[] = { "Single", "Differential" }; | 231 | static const char * const cs42l52_mic_text[] = { "Single", "Differential" }; |
@@ -413,7 +413,7 @@ static const struct snd_kcontrol_new cs42l52_snd_controls[] = { | |||
413 | SOC_ENUM("Headphone Analog Gain", hp_gain_enum), | 413 | SOC_ENUM("Headphone Analog Gain", hp_gain_enum), |
414 | 414 | ||
415 | SOC_DOUBLE_R_SX_TLV("Speaker Volume", CS42L52_SPKA_VOL, | 415 | SOC_DOUBLE_R_SX_TLV("Speaker Volume", CS42L52_SPKA_VOL, |
416 | CS42L52_SPKB_VOL, 7, 0x1, 0xff, hl_tlv), | 416 | CS42L52_SPKB_VOL, 0, 0x1, 0xff, hl_tlv), |
417 | 417 | ||
418 | SOC_DOUBLE_R_SX_TLV("Bypass Volume", CS42L52_PASSTHRUA_VOL, | 418 | SOC_DOUBLE_R_SX_TLV("Bypass Volume", CS42L52_PASSTHRUA_VOL, |
419 | CS42L52_PASSTHRUB_VOL, 6, 0x18, 0x90, pga_tlv), | 419 | CS42L52_PASSTHRUB_VOL, 6, 0x18, 0x90, pga_tlv), |
@@ -441,7 +441,7 @@ static const struct snd_kcontrol_new cs42l52_snd_controls[] = { | |||
441 | 441 | ||
442 | SOC_DOUBLE_R_SX_TLV("PCM Mixer Volume", | 442 | SOC_DOUBLE_R_SX_TLV("PCM Mixer Volume", |
443 | CS42L52_PCMA_MIXER_VOL, CS42L52_PCMB_MIXER_VOL, | 443 | CS42L52_PCMA_MIXER_VOL, CS42L52_PCMB_MIXER_VOL, |
444 | 6, 0x7f, 0x19, hl_tlv), | 444 | 0, 0x7f, 0x19, hl_tlv), |
445 | SOC_DOUBLE_R("PCM Mixer Switch", | 445 | SOC_DOUBLE_R("PCM Mixer Switch", |
446 | CS42L52_PCMA_MIXER_VOL, CS42L52_PCMB_MIXER_VOL, 7, 1, 1), | 446 | CS42L52_PCMA_MIXER_VOL, CS42L52_PCMB_MIXER_VOL, 7, 1, 1), |
447 | 447 | ||
diff --git a/sound/soc/codecs/cs42l52.h b/sound/soc/codecs/cs42l52.h index 60985c059071..4277012c4719 100644 --- a/sound/soc/codecs/cs42l52.h +++ b/sound/soc/codecs/cs42l52.h | |||
@@ -157,7 +157,7 @@ | |||
157 | #define CS42L52_PB_CTL1_INV_PCMA (1 << 2) | 157 | #define CS42L52_PB_CTL1_INV_PCMA (1 << 2) |
158 | #define CS42L52_PB_CTL1_MSTB_MUTE (1 << 1) | 158 | #define CS42L52_PB_CTL1_MSTB_MUTE (1 << 1) |
159 | #define CS42L52_PB_CTL1_MSTA_MUTE (1 << 0) | 159 | #define CS42L52_PB_CTL1_MSTA_MUTE (1 << 0) |
160 | #define CS42L52_PB_CTL1_MUTE_MASK 0xFFFD | 160 | #define CS42L52_PB_CTL1_MUTE_MASK 0x03 |
161 | #define CS42L52_PB_CTL1_MUTE 3 | 161 | #define CS42L52_PB_CTL1_MUTE 3 |
162 | #define CS42L52_PB_CTL1_UNMUTE 0 | 162 | #define CS42L52_PB_CTL1_UNMUTE 0 |
163 | 163 | ||
diff --git a/sound/soc/codecs/max98090.c b/sound/soc/codecs/max98090.c index ce0d36412c97..8d14a76c7249 100644 --- a/sound/soc/codecs/max98090.c +++ b/sound/soc/codecs/max98090.c | |||
@@ -2233,7 +2233,7 @@ static int max98090_probe(struct snd_soc_codec *codec) | |||
2233 | dev_dbg(codec->dev, "irq = %d\n", max98090->irq); | 2233 | dev_dbg(codec->dev, "irq = %d\n", max98090->irq); |
2234 | 2234 | ||
2235 | ret = request_threaded_irq(max98090->irq, NULL, | 2235 | ret = request_threaded_irq(max98090->irq, NULL, |
2236 | max98090_interrupt, IRQF_TRIGGER_FALLING, | 2236 | max98090_interrupt, IRQF_TRIGGER_FALLING | IRQF_ONESHOT, |
2237 | "max98090_interrupt", codec); | 2237 | "max98090_interrupt", codec); |
2238 | if (ret < 0) { | 2238 | if (ret < 0) { |
2239 | dev_err(codec->dev, "request_irq failed: %d\n", | 2239 | dev_err(codec->dev, "request_irq failed: %d\n", |
diff --git a/sound/soc/codecs/wm5110.c b/sound/soc/codecs/wm5110.c index 731884e04776..ba38f0679662 100644 --- a/sound/soc/codecs/wm5110.c +++ b/sound/soc/codecs/wm5110.c | |||
@@ -190,7 +190,7 @@ ARIZONA_MIXER_CONTROLS("DSP2R", ARIZONA_DSP2RMIX_INPUT_1_SOURCE), | |||
190 | ARIZONA_MIXER_CONTROLS("DSP3L", ARIZONA_DSP3LMIX_INPUT_1_SOURCE), | 190 | ARIZONA_MIXER_CONTROLS("DSP3L", ARIZONA_DSP3LMIX_INPUT_1_SOURCE), |
191 | ARIZONA_MIXER_CONTROLS("DSP3R", ARIZONA_DSP3RMIX_INPUT_1_SOURCE), | 191 | ARIZONA_MIXER_CONTROLS("DSP3R", ARIZONA_DSP3RMIX_INPUT_1_SOURCE), |
192 | ARIZONA_MIXER_CONTROLS("DSP4L", ARIZONA_DSP4LMIX_INPUT_1_SOURCE), | 192 | ARIZONA_MIXER_CONTROLS("DSP4L", ARIZONA_DSP4LMIX_INPUT_1_SOURCE), |
193 | ARIZONA_MIXER_CONTROLS("DSP5R", ARIZONA_DSP4RMIX_INPUT_1_SOURCE), | 193 | ARIZONA_MIXER_CONTROLS("DSP4R", ARIZONA_DSP4RMIX_INPUT_1_SOURCE), |
194 | 194 | ||
195 | ARIZONA_MIXER_CONTROLS("Mic", ARIZONA_MICMIX_INPUT_1_SOURCE), | 195 | ARIZONA_MIXER_CONTROLS("Mic", ARIZONA_MICMIX_INPUT_1_SOURCE), |
196 | ARIZONA_MIXER_CONTROLS("Noise", ARIZONA_NOISEMIX_INPUT_1_SOURCE), | 196 | ARIZONA_MIXER_CONTROLS("Noise", ARIZONA_NOISEMIX_INPUT_1_SOURCE), |
@@ -976,6 +976,8 @@ static int wm5110_codec_probe(struct snd_soc_codec *codec) | |||
976 | if (ret != 0) | 976 | if (ret != 0) |
977 | return ret; | 977 | return ret; |
978 | 978 | ||
979 | arizona_init_spk(codec); | ||
980 | |||
979 | snd_soc_dapm_disable_pin(&codec->dapm, "HAPTICS"); | 981 | snd_soc_dapm_disable_pin(&codec->dapm, "HAPTICS"); |
980 | 982 | ||
981 | priv->core.arizona->dapm = &codec->dapm; | 983 | priv->core.arizona->dapm = &codec->dapm; |
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c index 1eb152cb1097..dfd997aaadfc 100644 --- a/sound/soc/codecs/wm8994.c +++ b/sound/soc/codecs/wm8994.c | |||
@@ -383,6 +383,8 @@ static int wm8994_get_drc_enum(struct snd_kcontrol *kcontrol, | |||
383 | struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec); | 383 | struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec); |
384 | int drc = wm8994_get_drc(kcontrol->id.name); | 384 | int drc = wm8994_get_drc(kcontrol->id.name); |
385 | 385 | ||
386 | if (drc < 0) | ||
387 | return drc; | ||
386 | ucontrol->value.enumerated.item[0] = wm8994->drc_cfg[drc]; | 388 | ucontrol->value.enumerated.item[0] = wm8994->drc_cfg[drc]; |
387 | 389 | ||
388 | return 0; | 390 | return 0; |
@@ -488,6 +490,9 @@ static int wm8994_get_retune_mobile_enum(struct snd_kcontrol *kcontrol, | |||
488 | struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec); | 490 | struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec); |
489 | int block = wm8994_get_retune_mobile_block(kcontrol->id.name); | 491 | int block = wm8994_get_retune_mobile_block(kcontrol->id.name); |
490 | 492 | ||
493 | if (block < 0) | ||
494 | return block; | ||
495 | |||
491 | ucontrol->value.enumerated.item[0] = wm8994->retune_mobile_cfg[block]; | 496 | ucontrol->value.enumerated.item[0] = wm8994->retune_mobile_cfg[block]; |
492 | 497 | ||
493 | return 0; | 498 | return 0; |
@@ -1031,7 +1036,7 @@ static int aif1clk_ev(struct snd_soc_dapm_widget *w, | |||
1031 | { | 1036 | { |
1032 | struct snd_soc_codec *codec = w->codec; | 1037 | struct snd_soc_codec *codec = w->codec; |
1033 | struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec); | 1038 | struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec); |
1034 | struct wm8994 *control = codec->control_data; | 1039 | struct wm8994 *control = wm8994->wm8994; |
1035 | int mask = WM8994_AIF1DAC1L_ENA | WM8994_AIF1DAC1R_ENA; | 1040 | int mask = WM8994_AIF1DAC1L_ENA | WM8994_AIF1DAC1R_ENA; |
1036 | int i; | 1041 | int i; |
1037 | int dac; | 1042 | int dac; |
@@ -3833,6 +3838,11 @@ static irqreturn_t wm8958_mic_irq(int irq, void *data) | |||
3833 | dev_dbg(codec->dev, "Ignoring removed jack\n"); | 3838 | dev_dbg(codec->dev, "Ignoring removed jack\n"); |
3834 | return IRQ_HANDLED; | 3839 | return IRQ_HANDLED; |
3835 | } | 3840 | } |
3841 | } else if (!(reg & WM8958_MICD_STS)) { | ||
3842 | snd_soc_jack_report(wm8994->micdet[0].jack, 0, | ||
3843 | SND_JACK_MECHANICAL | SND_JACK_HEADSET | | ||
3844 | wm8994->btn_mask); | ||
3845 | goto out; | ||
3836 | } | 3846 | } |
3837 | 3847 | ||
3838 | if (wm8994->mic_detecting) | 3848 | if (wm8994->mic_detecting) |
diff --git a/sound/soc/davinci/davinci-mcasp.c b/sound/soc/davinci/davinci-mcasp.c index 56ecfc72f2e9..81490febac6d 100644 --- a/sound/soc/davinci/davinci-mcasp.c +++ b/sound/soc/davinci/davinci-mcasp.c | |||
@@ -631,7 +631,8 @@ static int davinci_config_channel_size(struct davinci_audio_dev *dev, | |||
631 | int word_length) | 631 | int word_length) |
632 | { | 632 | { |
633 | u32 fmt; | 633 | u32 fmt; |
634 | u32 rotate = (word_length / 4) & 0x7; | 634 | u32 tx_rotate = (word_length / 4) & 0x7; |
635 | u32 rx_rotate = (32 - word_length) / 4; | ||
635 | u32 mask = (1ULL << word_length) - 1; | 636 | u32 mask = (1ULL << word_length) - 1; |
636 | 637 | ||
637 | /* | 638 | /* |
@@ -655,9 +656,9 @@ static int davinci_config_channel_size(struct davinci_audio_dev *dev, | |||
655 | mcasp_mod_bits(dev->base + DAVINCI_MCASP_TXFMT_REG, | 656 | mcasp_mod_bits(dev->base + DAVINCI_MCASP_TXFMT_REG, |
656 | TXSSZ(fmt), TXSSZ(0x0F)); | 657 | TXSSZ(fmt), TXSSZ(0x0F)); |
657 | mcasp_mod_bits(dev->base + DAVINCI_MCASP_TXFMT_REG, | 658 | mcasp_mod_bits(dev->base + DAVINCI_MCASP_TXFMT_REG, |
658 | TXROT(rotate), TXROT(7)); | 659 | TXROT(tx_rotate), TXROT(7)); |
659 | mcasp_mod_bits(dev->base + DAVINCI_MCASP_RXFMT_REG, | 660 | mcasp_mod_bits(dev->base + DAVINCI_MCASP_RXFMT_REG, |
660 | RXROT(rotate), RXROT(7)); | 661 | RXROT(rx_rotate), RXROT(7)); |
661 | mcasp_set_reg(dev->base + DAVINCI_MCASP_RXMASK_REG, | 662 | mcasp_set_reg(dev->base + DAVINCI_MCASP_RXMASK_REG, |
662 | mask); | 663 | mask); |
663 | } | 664 | } |
diff --git a/sound/soc/soc-compress.c b/sound/soc/soc-compress.c index 3853f7eb3f28..06a8000aa07b 100644 --- a/sound/soc/soc-compress.c +++ b/sound/soc/soc-compress.c | |||
@@ -220,8 +220,12 @@ static int soc_compr_set_params(struct snd_compr_stream *cstream, | |||
220 | goto err; | 220 | goto err; |
221 | } | 221 | } |
222 | 222 | ||
223 | snd_soc_dapm_stream_event(rtd, SNDRV_PCM_STREAM_PLAYBACK, | 223 | if (cstream->direction == SND_COMPRESS_PLAYBACK) |
224 | SND_SOC_DAPM_STREAM_START); | 224 | snd_soc_dapm_stream_event(rtd, SNDRV_PCM_STREAM_PLAYBACK, |
225 | SND_SOC_DAPM_STREAM_START); | ||
226 | else | ||
227 | snd_soc_dapm_stream_event(rtd, SNDRV_PCM_STREAM_CAPTURE, | ||
228 | SND_SOC_DAPM_STREAM_START); | ||
225 | 229 | ||
226 | /* cancel any delayed stream shutdown that is pending */ | 230 | /* cancel any delayed stream shutdown that is pending */ |
227 | rtd->pop_wait = 0; | 231 | rtd->pop_wait = 0; |
diff --git a/sound/usb/6fire/firmware.c b/sound/usb/6fire/firmware.c index a1d9b0792a1e..b9defcdeb7ef 100644 --- a/sound/usb/6fire/firmware.c +++ b/sound/usb/6fire/firmware.c | |||
@@ -42,8 +42,8 @@ static const u8 ep_w_max_packet_size[] = { | |||
42 | 0x94, 0x01, 0x5c, 0x02 /* alt 3: 404 EP2 and 604 EP6 (25 fpp) */ | 42 | 0x94, 0x01, 0x5c, 0x02 /* alt 3: 404 EP2 and 604 EP6 (25 fpp) */ |
43 | }; | 43 | }; |
44 | 44 | ||
45 | static const u8 known_fw_versions[][4] = { | 45 | static const u8 known_fw_versions[][2] = { |
46 | { 0x03, 0x01, 0x0b, 0x00 } | 46 | { 0x03, 0x01 } |
47 | }; | 47 | }; |
48 | 48 | ||
49 | struct ihex_record { | 49 | struct ihex_record { |
@@ -343,7 +343,7 @@ static int usb6fire_fw_check(u8 *version) | |||
343 | int i; | 343 | int i; |
344 | 344 | ||
345 | for (i = 0; i < ARRAY_SIZE(known_fw_versions); i++) | 345 | for (i = 0; i < ARRAY_SIZE(known_fw_versions); i++) |
346 | if (!memcmp(version, known_fw_versions + i, 4)) | 346 | if (!memcmp(version, known_fw_versions + i, 2)) |
347 | return 0; | 347 | return 0; |
348 | 348 | ||
349 | snd_printk(KERN_ERR PREFIX "invalid fimware version in device: %*ph. " | 349 | snd_printk(KERN_ERR PREFIX "invalid fimware version in device: %*ph. " |
diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile index d4abc59ce1d9..0a63658065f0 100644 --- a/tools/testing/selftests/Makefile +++ b/tools/testing/selftests/Makefile | |||
@@ -6,7 +6,6 @@ TARGETS += memory-hotplug | |||
6 | TARGETS += mqueue | 6 | TARGETS += mqueue |
7 | TARGETS += net | 7 | TARGETS += net |
8 | TARGETS += ptrace | 8 | TARGETS += ptrace |
9 | TARGETS += soft-dirty | ||
10 | TARGETS += vm | 9 | TARGETS += vm |
11 | 10 | ||
12 | all: | 11 | all: |
diff --git a/tools/testing/selftests/soft-dirty/Makefile b/tools/testing/selftests/soft-dirty/Makefile deleted file mode 100644 index a9cdc823d6e0..000000000000 --- a/tools/testing/selftests/soft-dirty/Makefile +++ /dev/null | |||
@@ -1,10 +0,0 @@ | |||
1 | CFLAGS += -iquote../../../../include/uapi -Wall | ||
2 | soft-dirty: soft-dirty.c | ||
3 | |||
4 | all: soft-dirty | ||
5 | |||
6 | clean: | ||
7 | rm -f soft-dirty | ||
8 | |||
9 | run_tests: all | ||
10 | @./soft-dirty || echo "soft-dirty selftests: [FAIL]" | ||
diff --git a/tools/testing/selftests/soft-dirty/soft-dirty.c b/tools/testing/selftests/soft-dirty/soft-dirty.c deleted file mode 100644 index aba4f87f87f0..000000000000 --- a/tools/testing/selftests/soft-dirty/soft-dirty.c +++ /dev/null | |||
@@ -1,114 +0,0 @@ | |||
1 | #include <stdlib.h> | ||
2 | #include <stdio.h> | ||
3 | #include <sys/mman.h> | ||
4 | #include <unistd.h> | ||
5 | #include <fcntl.h> | ||
6 | #include <sys/types.h> | ||
7 | |||
8 | typedef unsigned long long u64; | ||
9 | |||
10 | #define PME_PRESENT (1ULL << 63) | ||
11 | #define PME_SOFT_DIRTY (1Ull << 55) | ||
12 | |||
13 | #define PAGES_TO_TEST 3 | ||
14 | #ifndef PAGE_SIZE | ||
15 | #define PAGE_SIZE 4096 | ||
16 | #endif | ||
17 | |||
18 | static void get_pagemap2(char *mem, u64 *map) | ||
19 | { | ||
20 | int fd; | ||
21 | |||
22 | fd = open("/proc/self/pagemap2", O_RDONLY); | ||
23 | if (fd < 0) { | ||
24 | perror("Can't open pagemap2"); | ||
25 | exit(1); | ||
26 | } | ||
27 | |||
28 | lseek(fd, (unsigned long)mem / PAGE_SIZE * sizeof(u64), SEEK_SET); | ||
29 | read(fd, map, sizeof(u64) * PAGES_TO_TEST); | ||
30 | close(fd); | ||
31 | } | ||
32 | |||
33 | static inline char map_p(u64 map) | ||
34 | { | ||
35 | return map & PME_PRESENT ? 'p' : '-'; | ||
36 | } | ||
37 | |||
38 | static inline char map_sd(u64 map) | ||
39 | { | ||
40 | return map & PME_SOFT_DIRTY ? 'd' : '-'; | ||
41 | } | ||
42 | |||
43 | static int check_pte(int step, int page, u64 *map, u64 want) | ||
44 | { | ||
45 | if ((map[page] & want) != want) { | ||
46 | printf("Step %d Page %d has %c%c, want %c%c\n", | ||
47 | step, page, | ||
48 | map_p(map[page]), map_sd(map[page]), | ||
49 | map_p(want), map_sd(want)); | ||
50 | return 1; | ||
51 | } | ||
52 | |||
53 | return 0; | ||
54 | } | ||
55 | |||
56 | static void clear_refs(void) | ||
57 | { | ||
58 | int fd; | ||
59 | char *v = "4"; | ||
60 | |||
61 | fd = open("/proc/self/clear_refs", O_WRONLY); | ||
62 | if (write(fd, v, 3) < 3) { | ||
63 | perror("Can't clear soft-dirty bit"); | ||
64 | exit(1); | ||
65 | } | ||
66 | close(fd); | ||
67 | } | ||
68 | |||
69 | int main(void) | ||
70 | { | ||
71 | char *mem, x; | ||
72 | u64 map[PAGES_TO_TEST]; | ||
73 | |||
74 | mem = mmap(NULL, PAGES_TO_TEST * PAGE_SIZE, | ||
75 | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, 0, 0); | ||
76 | |||
77 | x = mem[0]; | ||
78 | mem[2 * PAGE_SIZE] = 'c'; | ||
79 | get_pagemap2(mem, map); | ||
80 | |||
81 | if (check_pte(1, 0, map, PME_PRESENT)) | ||
82 | return 1; | ||
83 | if (check_pte(1, 1, map, 0)) | ||
84 | return 1; | ||
85 | if (check_pte(1, 2, map, PME_PRESENT | PME_SOFT_DIRTY)) | ||
86 | return 1; | ||
87 | |||
88 | clear_refs(); | ||
89 | get_pagemap2(mem, map); | ||
90 | |||
91 | if (check_pte(2, 0, map, PME_PRESENT)) | ||
92 | return 1; | ||
93 | if (check_pte(2, 1, map, 0)) | ||
94 | return 1; | ||
95 | if (check_pte(2, 2, map, PME_PRESENT)) | ||
96 | return 1; | ||
97 | |||
98 | mem[0] = 'a'; | ||
99 | mem[PAGE_SIZE] = 'b'; | ||
100 | x = mem[2 * PAGE_SIZE]; | ||
101 | get_pagemap2(mem, map); | ||
102 | |||
103 | if (check_pte(3, 0, map, PME_PRESENT | PME_SOFT_DIRTY)) | ||
104 | return 1; | ||
105 | if (check_pte(3, 1, map, PME_PRESENT | PME_SOFT_DIRTY)) | ||
106 | return 1; | ||
107 | if (check_pte(3, 2, map, PME_PRESENT)) | ||
108 | return 1; | ||
109 | |||
110 | (void)x; /* gcc warn */ | ||
111 | |||
112 | printf("PASS\n"); | ||
113 | return 0; | ||
114 | } | ||