Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.1/0103-4.1.4-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2748 - (hide annotations) (download)
Mon Jan 11 12:00:45 2016 UTC (8 years, 4 months ago) by niro
File size: 392028 byte(s)
-linux-4.1 patches up to 4.1.15
1 niro 2748 diff --git a/Documentation/ABI/testing/ima_policy b/Documentation/ABI/testing/ima_policy
2     index d0d0c578324c..0a378a88217a 100644
3     --- a/Documentation/ABI/testing/ima_policy
4     +++ b/Documentation/ABI/testing/ima_policy
5     @@ -20,17 +20,19 @@ Description:
6     action: measure | dont_measure | appraise | dont_appraise | audit
7     condition:= base | lsm [option]
8     base: [[func=] [mask=] [fsmagic=] [fsuuid=] [uid=]
9     - [fowner]]
10     + [euid=] [fowner=]]
11     lsm: [[subj_user=] [subj_role=] [subj_type=]
12     [obj_user=] [obj_role=] [obj_type=]]
13     option: [[appraise_type=]] [permit_directio]
14    
15     base: func:= [BPRM_CHECK][MMAP_CHECK][FILE_CHECK][MODULE_CHECK]
16     [FIRMWARE_CHECK]
17     - mask:= [MAY_READ] [MAY_WRITE] [MAY_APPEND] [MAY_EXEC]
18     + mask:= [[^]MAY_READ] [[^]MAY_WRITE] [[^]MAY_APPEND]
19     + [[^]MAY_EXEC]
20     fsmagic:= hex value
21     fsuuid:= file system UUID (e.g 8bcbe394-4f13-4144-be8e-5aa9ea2ce2f6)
22     uid:= decimal value
23     + euid:= decimal value
24     fowner:=decimal value
25     lsm: are LSM specific
26     option: appraise_type:= [imasig]
27     @@ -49,11 +51,25 @@ Description:
28     dont_measure fsmagic=0x01021994
29     dont_appraise fsmagic=0x01021994
30     # RAMFS_MAGIC
31     - dont_measure fsmagic=0x858458f6
32     dont_appraise fsmagic=0x858458f6
33     + # DEVPTS_SUPER_MAGIC
34     + dont_measure fsmagic=0x1cd1
35     + dont_appraise fsmagic=0x1cd1
36     + # BINFMTFS_MAGIC
37     + dont_measure fsmagic=0x42494e4d
38     + dont_appraise fsmagic=0x42494e4d
39     # SECURITYFS_MAGIC
40     dont_measure fsmagic=0x73636673
41     dont_appraise fsmagic=0x73636673
42     + # SELINUX_MAGIC
43     + dont_measure fsmagic=0xf97cff8c
44     + dont_appraise fsmagic=0xf97cff8c
45     + # CGROUP_SUPER_MAGIC
46     + dont_measure fsmagic=0x27e0eb
47     + dont_appraise fsmagic=0x27e0eb
48     + # NSFS_MAGIC
49     + dont_measure fsmagic=0x6e736673
50     + dont_appraise fsmagic=0x6e736673
51    
52     measure func=BPRM_CHECK
53     measure func=FILE_MMAP mask=MAY_EXEC
54     @@ -70,10 +86,6 @@ Description:
55     Examples of LSM specific definitions:
56    
57     SELinux:
58     - # SELINUX_MAGIC
59     - dont_measure fsmagic=0xf97cff8c
60     - dont_appraise fsmagic=0xf97cff8c
61     -
62     dont_measure obj_type=var_log_t
63     dont_appraise obj_type=var_log_t
64     dont_measure obj_type=auditd_log_t
65     diff --git a/Documentation/ABI/testing/sysfs-ata b/Documentation/ABI/testing/sysfs-ata
66     index 0a932155cbba..9231daef3813 100644
67     --- a/Documentation/ABI/testing/sysfs-ata
68     +++ b/Documentation/ABI/testing/sysfs-ata
69     @@ -90,6 +90,17 @@ gscr
70     130: SATA_PMP_GSCR_SII_GPIO
71     Only valid if the device is a PM.
72    
73     +trim
74     +
75     + Shows the DSM TRIM mode currently used by the device. Valid
76     + values are:
77     + unsupported: Drive does not support DSM TRIM
78     + unqueued: Drive supports unqueued DSM TRIM only
79     + queued: Drive supports queued DSM TRIM
80     + forced_unqueued: Drive's unqueued DSM support is known to be
81     + buggy and only unqueued TRIM commands
82     + are sent
83     +
84     spdn_cnt
85    
86     Number of time libata decided to lower the speed of link due to errors.
87     diff --git a/Documentation/ABI/testing/sysfs-bus-iio b/Documentation/ABI/testing/sysfs-bus-iio
88     index 3befcb19f414..1fbdd79d1624 100644
89     --- a/Documentation/ABI/testing/sysfs-bus-iio
90     +++ b/Documentation/ABI/testing/sysfs-bus-iio
91     @@ -1165,10 +1165,8 @@ Description:
92     object is near the sensor, usually be observing
93     reflectivity of infrared or ultrasound emitted.
94     Often these sensors are unit less and as such conversion
95     - to SI units is not possible. Where it is, the units should
96     - be meters. If such a conversion is not possible, the reported
97     - values should behave in the same way as a distance, i.e. lower
98     - values indicate something is closer to the sensor.
99     + to SI units is not possible. Higher proximity measurements
100     + indicate closer objects, and vice versa.
101    
102     What: /sys/.../iio:deviceX/in_illuminance_input
103     What: /sys/.../iio:deviceX/in_illuminance_raw
104     diff --git a/Documentation/devicetree/bindings/pinctrl/marvell,armada-370-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/marvell,armada-370-pinctrl.txt
105     index adda2a8d1d52..e357b020861d 100644
106     --- a/Documentation/devicetree/bindings/pinctrl/marvell,armada-370-pinctrl.txt
107     +++ b/Documentation/devicetree/bindings/pinctrl/marvell,armada-370-pinctrl.txt
108     @@ -92,5 +92,5 @@ mpp61 61 gpo, dev(wen1), uart1(txd), audio(rclk)
109     mpp62 62 gpio, dev(a2), uart1(cts), tdm(drx), pcie(clkreq0),
110     audio(mclk), uart0(cts)
111     mpp63 63 gpo, spi0(sck), tclk
112     -mpp64 64 gpio, spi0(miso), spi0-1(cs1)
113     -mpp65 65 gpio, spi0(mosi), spi0-1(cs2)
114     +mpp64 64 gpio, spi0(miso), spi0(cs1)
115     +mpp65 65 gpio, spi0(mosi), spi0(cs2)
116     diff --git a/Documentation/devicetree/bindings/pinctrl/marvell,armada-375-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/marvell,armada-375-pinctrl.txt
117     index 7de0cda4a379..bedbe42c8c0a 100644
118     --- a/Documentation/devicetree/bindings/pinctrl/marvell,armada-375-pinctrl.txt
119     +++ b/Documentation/devicetree/bindings/pinctrl/marvell,armada-375-pinctrl.txt
120     @@ -22,8 +22,8 @@ mpp5 5 gpio, dev(ad7), spi0(cs2), spi1(cs2)
121     mpp6 6 gpio, dev(ad0), led(p1), audio(rclk)
122     mpp7 7 gpio, dev(ad1), ptp(clk), led(p2), audio(extclk)
123     mpp8 8 gpio, dev (bootcs), spi0(cs0), spi1(cs0)
124     -mpp9 9 gpio, nf(wen), spi0(sck), spi1(sck)
125     -mpp10 10 gpio, nf(ren), dram(vttctrl), led(c1)
126     +mpp9 9 gpio, spi0(sck), spi1(sck), nand(we)
127     +mpp10 10 gpio, dram(vttctrl), led(c1), nand(re)
128     mpp11 11 gpio, dev(a0), led(c2), audio(sdo)
129     mpp12 12 gpio, dev(a1), audio(bclk)
130     mpp13 13 gpio, dev(readyn), pcie0(rstoutn), pcie1(rstoutn)
131     diff --git a/Documentation/devicetree/bindings/pinctrl/marvell,armada-38x-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/marvell,armada-38x-pinctrl.txt
132     index b17c96849fc9..4ac138aaaf87 100644
133     --- a/Documentation/devicetree/bindings/pinctrl/marvell,armada-38x-pinctrl.txt
134     +++ b/Documentation/devicetree/bindings/pinctrl/marvell,armada-38x-pinctrl.txt
135     @@ -27,15 +27,15 @@ mpp8 8 gpio, ge0(txd1), dev(ad10)
136     mpp9 9 gpio, ge0(txd2), dev(ad11)
137     mpp10 10 gpio, ge0(txd3), dev(ad12)
138     mpp11 11 gpio, ge0(txctl), dev(ad13)
139     -mpp12 12 gpio, ge0(rxd0), pcie0(rstout), pcie1(rstout) [1], spi0(cs1), dev(ad14)
140     -mpp13 13 gpio, ge0(rxd1), pcie0(clkreq), pcie1(clkreq) [1], spi0(cs2), dev(ad15)
141     -mpp14 14 gpio, ge0(rxd2), ptp(clk), m(vtt_ctrl), spi0(cs3), dev(wen1)
142     -mpp15 15 gpio, ge0(rxd3), ge(mdc slave), pcie0(rstout), spi0(mosi), pcie1(rstout) [1]
143     -mpp16 16 gpio, ge0(rxctl), ge(mdio slave), m(decc_err), spi0(miso), pcie0(clkreq)
144     +mpp12 12 gpio, ge0(rxd0), pcie0(rstout), spi0(cs1), dev(ad14), pcie3(clkreq)
145     +mpp13 13 gpio, ge0(rxd1), pcie0(clkreq), pcie1(clkreq) [1], spi0(cs2), dev(ad15), pcie2(clkreq)
146     +mpp14 14 gpio, ge0(rxd2), ptp(clk), m(vtt_ctrl), spi0(cs3), dev(wen1), pcie3(clkreq)
147     +mpp15 15 gpio, ge0(rxd3), ge(mdc slave), pcie0(rstout), spi0(mosi)
148     +mpp16 16 gpio, ge0(rxctl), ge(mdio slave), m(decc_err), spi0(miso), pcie0(clkreq), pcie1(clkreq) [1]
149     mpp17 17 gpio, ge0(rxclk), ptp(clk), ua1(rxd), spi0(sck), sata1(prsnt)
150     -mpp18 18 gpio, ge0(rxerr), ptp(trig_gen), ua1(txd), spi0(cs0), pcie1(rstout) [1]
151     -mpp19 19 gpio, ge0(col), ptp(event_req), pcie0(clkreq), sata1(prsnt), ua0(cts)
152     -mpp20 20 gpio, ge0(txclk), ptp(clk), pcie1(rstout) [1], sata0(prsnt), ua0(rts)
153     +mpp18 18 gpio, ge0(rxerr), ptp(trig_gen), ua1(txd), spi0(cs0)
154     +mpp19 19 gpio, ge0(col), ptp(event_req), ge0(txerr), sata1(prsnt), ua0(cts)
155     +mpp20 20 gpio, ge0(txclk), ptp(clk), sata0(prsnt), ua0(rts)
156     mpp21 21 gpio, spi0(cs1), ge1(rxd0), sata0(prsnt), sd0(cmd), dev(bootcs)
157     mpp22 22 gpio, spi0(mosi), dev(ad0)
158     mpp23 23 gpio, spi0(sck), dev(ad2)
159     @@ -58,23 +58,23 @@ mpp39 39 gpio, i2c1(sck), ge1(rxd2), ua0(cts), sd0(d1), dev(a2)
160     mpp40 40 gpio, i2c1(sda), ge1(rxd3), ua0(rts), sd0(d2), dev(ad6)
161     mpp41 41 gpio, ua1(rxd), ge1(rxctl), ua0(cts), spi1(cs3), dev(burst/last)
162     mpp42 42 gpio, ua1(txd), ua0(rts), dev(ad7)
163     -mpp43 43 gpio, pcie0(clkreq), m(vtt_ctrl), m(decc_err), pcie0(rstout), dev(clkout)
164     -mpp44 44 gpio, sata0(prsnt), sata1(prsnt), sata2(prsnt) [2], sata3(prsnt) [3], pcie0(rstout)
165     -mpp45 45 gpio, ref(clk_out0), pcie0(rstout), pcie1(rstout) [1], pcie2(rstout), pcie3(rstout)
166     -mpp46 46 gpio, ref(clk_out1), pcie0(rstout), pcie1(rstout) [1], pcie2(rstout), pcie3(rstout)
167     -mpp47 47 gpio, sata0(prsnt), sata1(prsnt), sata2(prsnt) [2], spi1(cs2), sata3(prsnt) [2]
168     -mpp48 48 gpio, sata0(prsnt), m(vtt_ctrl), tdm2c(pclk), audio(mclk), sd0(d4)
169     -mpp49 49 gpio, sata2(prsnt) [2], sata3(prsnt) [2], tdm2c(fsync), audio(lrclk), sd0(d5)
170     -mpp50 50 gpio, pcie0(rstout), pcie1(rstout) [1], tdm2c(drx), audio(extclk), sd0(cmd)
171     +mpp43 43 gpio, pcie0(clkreq), m(vtt_ctrl), m(decc_err), spi1(cs2), dev(clkout)
172     +mpp44 44 gpio, sata0(prsnt), sata1(prsnt), sata2(prsnt) [2], sata3(prsnt) [3]
173     +mpp45 45 gpio, ref(clk_out0), pcie0(rstout)
174     +mpp46 46 gpio, ref(clk_out1), pcie0(rstout)
175     +mpp47 47 gpio, sata0(prsnt), sata1(prsnt), sata2(prsnt) [2], sata3(prsnt) [2]
176     +mpp48 48 gpio, sata0(prsnt), m(vtt_ctrl), tdm2c(pclk), audio(mclk), sd0(d4), pcie0(clkreq)
177     +mpp49 49 gpio, sata2(prsnt) [2], sata3(prsnt) [2], tdm2c(fsync), audio(lrclk), sd0(d5), pcie1(clkreq)
178     +mpp50 50 gpio, pcie0(rstout), tdm2c(drx), audio(extclk), sd0(cmd)
179     mpp51 51 gpio, tdm2c(dtx), audio(sdo), m(decc_err)
180     -mpp52 52 gpio, pcie0(rstout), pcie1(rstout) [1], tdm2c(intn), audio(sdi), sd0(d6)
181     +mpp52 52 gpio, pcie0(rstout), tdm2c(intn), audio(sdi), sd0(d6)
182     mpp53 53 gpio, sata1(prsnt), sata0(prsnt), tdm2c(rstn), audio(bclk), sd0(d7)
183     -mpp54 54 gpio, sata0(prsnt), sata1(prsnt), pcie0(rstout), pcie1(rstout) [1], sd0(d3)
184     +mpp54 54 gpio, sata0(prsnt), sata1(prsnt), pcie0(rstout), ge0(txerr), sd0(d3)
185     mpp55 55 gpio, ua1(cts), ge(mdio), pcie1(clkreq) [1], spi1(cs1), sd0(d0)
186     mpp56 56 gpio, ua1(rts), ge(mdc), m(decc_err), spi1(mosi)
187     mpp57 57 gpio, spi1(sck), sd0(clk)
188     mpp58 58 gpio, pcie1(clkreq) [1], i2c1(sck), pcie2(clkreq), spi1(miso), sd0(d1)
189     -mpp59 59 gpio, pcie0(rstout), i2c1(sda), pcie1(rstout) [1], spi1(cs0), sd0(d2)
190     +mpp59 59 gpio, pcie0(rstout), i2c1(sda), spi1(cs0), sd0(d2)
191    
192     [1]: only available on 88F6820 and 88F6828
193     [2]: only available on 88F6828
194     diff --git a/Documentation/devicetree/bindings/pinctrl/marvell,armada-xp-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/marvell,armada-xp-pinctrl.txt
195     index 373dbccd7ab0..96e7744cab84 100644
196     --- a/Documentation/devicetree/bindings/pinctrl/marvell,armada-xp-pinctrl.txt
197     +++ b/Documentation/devicetree/bindings/pinctrl/marvell,armada-xp-pinctrl.txt
198     @@ -42,15 +42,15 @@ mpp20 20 gpio, ge0(rxd4), ge1(rxd2), lcd(d20), ptp(clk)
199     mpp21 21 gpio, ge0(rxd5), ge1(rxd3), lcd(d21), mem(bat)
200     mpp22 22 gpio, ge0(rxd6), ge1(rxctl), lcd(d22), sata0(prsnt)
201     mpp23 23 gpio, ge0(rxd7), ge1(rxclk), lcd(d23), sata1(prsnt)
202     -mpp24 24 gpio, lcd(hsync), sata1(prsnt), nf(bootcs-re), tdm(rst)
203     -mpp25 25 gpio, lcd(vsync), sata0(prsnt), nf(bootcs-we), tdm(pclk)
204     -mpp26 26 gpio, lcd(clk), tdm(fsync), vdd(cpu1-pd)
205     +mpp24 24 gpio, lcd(hsync), sata1(prsnt), tdm(rst)
206     +mpp25 25 gpio, lcd(vsync), sata0(prsnt), tdm(pclk)
207     +mpp26 26 gpio, lcd(clk), tdm(fsync)
208     mpp27 27 gpio, lcd(e), tdm(dtx), ptp(trig)
209     mpp28 28 gpio, lcd(pwm), tdm(drx), ptp(evreq)
210     -mpp29 29 gpio, lcd(ref-clk), tdm(int0), ptp(clk), vdd(cpu0-pd)
211     +mpp29 29 gpio, lcd(ref-clk), tdm(int0), ptp(clk)
212     mpp30 30 gpio, tdm(int1), sd0(clk)
213     -mpp31 31 gpio, tdm(int2), sd0(cmd), vdd(cpu0-pd)
214     -mpp32 32 gpio, tdm(int3), sd0(d0), vdd(cpu1-pd)
215     +mpp31 31 gpio, tdm(int2), sd0(cmd)
216     +mpp32 32 gpio, tdm(int3), sd0(d0)
217     mpp33 33 gpio, tdm(int4), sd0(d1), mem(bat)
218     mpp34 34 gpio, tdm(int5), sd0(d2), sata0(prsnt)
219     mpp35 35 gpio, tdm(int6), sd0(d3), sata1(prsnt)
220     @@ -58,21 +58,18 @@ mpp36 36 gpio, spi(mosi)
221     mpp37 37 gpio, spi(miso)
222     mpp38 38 gpio, spi(sck)
223     mpp39 39 gpio, spi(cs0)
224     -mpp40 40 gpio, spi(cs1), uart2(cts), lcd(vga-hsync), vdd(cpu1-pd),
225     - pcie(clkreq0)
226     +mpp40 40 gpio, spi(cs1), uart2(cts), lcd(vga-hsync), pcie(clkreq0)
227     mpp41 41 gpio, spi(cs2), uart2(rts), lcd(vga-vsync), sata1(prsnt),
228     pcie(clkreq1)
229     -mpp42 42 gpio, uart2(rxd), uart0(cts), tdm(int7), tdm-1(timer),
230     - vdd(cpu0-pd)
231     -mpp43 43 gpio, uart2(txd), uart0(rts), spi(cs3), pcie(rstout),
232     - vdd(cpu2-3-pd){1}
233     +mpp42 42 gpio, uart2(rxd), uart0(cts), tdm(int7), tdm-1(timer)
234     +mpp43 43 gpio, uart2(txd), uart0(rts), spi(cs3), pcie(rstout)
235     mpp44 44 gpio, uart2(cts), uart3(rxd), spi(cs4), pcie(clkreq2),
236     mem(bat)
237     mpp45 45 gpio, uart2(rts), uart3(txd), spi(cs5), sata1(prsnt)
238     mpp46 46 gpio, uart3(rts), uart1(rts), spi(cs6), sata0(prsnt)
239     mpp47 47 gpio, uart3(cts), uart1(cts), spi(cs7), pcie(clkreq3),
240     ref(clkout)
241     -mpp48 48 gpio, tclk, dev(burst/last)
242     +mpp48 48 gpio, dev(clkout), dev(burst/last)
243    
244     * Marvell Armada XP (mv78260 and mv78460 only)
245    
246     @@ -84,9 +81,9 @@ mpp51 51 gpio, dev(ad16)
247     mpp52 52 gpio, dev(ad17)
248     mpp53 53 gpio, dev(ad18)
249     mpp54 54 gpio, dev(ad19)
250     -mpp55 55 gpio, dev(ad20), vdd(cpu0-pd)
251     -mpp56 56 gpio, dev(ad21), vdd(cpu1-pd)
252     -mpp57 57 gpio, dev(ad22), vdd(cpu2-3-pd){1}
253     +mpp55 55 gpio, dev(ad20)
254     +mpp56 56 gpio, dev(ad21)
255     +mpp57 57 gpio, dev(ad22)
256     mpp58 58 gpio, dev(ad23)
257     mpp59 59 gpio, dev(ad24)
258     mpp60 60 gpio, dev(ad25)
259     @@ -96,6 +93,3 @@ mpp63 63 gpio, dev(ad28)
260     mpp64 64 gpio, dev(ad29)
261     mpp65 65 gpio, dev(ad30)
262     mpp66 66 gpio, dev(ad31)
263     -
264     -Notes:
265     -* {1} vdd(cpu2-3-pd) only available on mv78460.
266     diff --git a/Documentation/devicetree/bindings/usb/atmel-usb.txt b/Documentation/devicetree/bindings/usb/atmel-usb.txt
267     index e180d56c75db..de773a00e2d4 100644
268     --- a/Documentation/devicetree/bindings/usb/atmel-usb.txt
269     +++ b/Documentation/devicetree/bindings/usb/atmel-usb.txt
270     @@ -60,9 +60,9 @@ Atmel High-Speed USB device controller
271    
272     Required properties:
273     - compatible: Should be one of the following
274     - "at91sam9rl-udc"
275     - "at91sam9g45-udc"
276     - "sama5d3-udc"
277     + "atmel,at91sam9rl-udc"
278     + "atmel,at91sam9g45-udc"
279     + "atmel,sama5d3-udc"
280     - reg: Address and length of the register set for the device
281     - interrupts: Should contain usba interrupt
282     - ep childnode: To specify the number of endpoints and their properties.
283     diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
284     index 6726139bd289..cd03a0faca8f 100644
285     --- a/Documentation/kernel-parameters.txt
286     +++ b/Documentation/kernel-parameters.txt
287     @@ -1398,7 +1398,15 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
288     The list of supported hash algorithms is defined
289     in crypto/hash_info.h.
290    
291     - ima_tcb [IMA]
292     + ima_policy= [IMA]
293     + The builtin measurement policy to load during IMA
294     + setup. Specyfing "tcb" as the value, measures all
295     + programs exec'd, files mmap'd for exec, and all files
296     + opened with the read mode bit set by either the
297     + effective uid (euid=0) or uid=0.
298     + Format: "tcb"
299     +
300     + ima_tcb [IMA] Deprecated. Use ima_policy= instead.
301     Load a policy which meets the needs of the Trusted
302     Computing Base. This means IMA will measure all
303     programs exec'd, files mmap'd for exec, and all files
304     diff --git a/Makefile b/Makefile
305     index e3cdec4898be..36f3225cdf1f 100644
306     --- a/Makefile
307     +++ b/Makefile
308     @@ -1,6 +1,6 @@
309     VERSION = 4
310     PATCHLEVEL = 1
311     -SUBLEVEL = 3
312     +SUBLEVEL = 4
313     EXTRAVERSION =
314     NAME = Series 4800
315    
316     diff --git a/arch/arm/boot/dts/at91-sama5d4ek.dts b/arch/arm/boot/dts/at91-sama5d4ek.dts
317     index 89ef4a540db5..45e7761b7a29 100644
318     --- a/arch/arm/boot/dts/at91-sama5d4ek.dts
319     +++ b/arch/arm/boot/dts/at91-sama5d4ek.dts
320     @@ -108,8 +108,8 @@
321     mmc0: mmc@f8000000 {
322     pinctrl-names = "default";
323     pinctrl-0 = <&pinctrl_mmc0_clk_cmd_dat0 &pinctrl_mmc0_dat1_3 &pinctrl_mmc0_cd>;
324     - slot@1 {
325     - reg = <1>;
326     + slot@0 {
327     + reg = <0>;
328     bus-width = <4>;
329     cd-gpios = <&pioE 5 0>;
330     };
331     diff --git a/arch/arm/boot/dts/at91sam9g45.dtsi b/arch/arm/boot/dts/at91sam9g45.dtsi
332     index 70e59c5ceb2f..e54421176af8 100644
333     --- a/arch/arm/boot/dts/at91sam9g45.dtsi
334     +++ b/arch/arm/boot/dts/at91sam9g45.dtsi
335     @@ -1148,7 +1148,7 @@
336     usb2: gadget@fff78000 {
337     #address-cells = <1>;
338     #size-cells = <0>;
339     - compatible = "atmel,at91sam9rl-udc";
340     + compatible = "atmel,at91sam9g45-udc";
341     reg = <0x00600000 0x80000
342     0xfff78000 0x400>;
343     interrupts = <27 IRQ_TYPE_LEVEL_HIGH 0>;
344     diff --git a/arch/arm/boot/dts/at91sam9x5.dtsi b/arch/arm/boot/dts/at91sam9x5.dtsi
345     index 3aa56ae3410a..3314a7303754 100644
346     --- a/arch/arm/boot/dts/at91sam9x5.dtsi
347     +++ b/arch/arm/boot/dts/at91sam9x5.dtsi
348     @@ -1062,7 +1062,7 @@
349     usb2: gadget@f803c000 {
350     #address-cells = <1>;
351     #size-cells = <0>;
352     - compatible = "atmel,at91sam9rl-udc";
353     + compatible = "atmel,at91sam9g45-udc";
354     reg = <0x00500000 0x80000
355     0xf803c000 0x400>;
356     interrupts = <23 IRQ_TYPE_LEVEL_HIGH 0>;
357     diff --git a/arch/arm/boot/dts/imx23.dtsi b/arch/arm/boot/dts/imx23.dtsi
358     index bbcfb5a19c77..0cb8b0b11c3f 100644
359     --- a/arch/arm/boot/dts/imx23.dtsi
360     +++ b/arch/arm/boot/dts/imx23.dtsi
361     @@ -435,6 +435,7 @@
362     interrupts = <36 37 38 39 40 41 42 43 44>;
363     status = "disabled";
364     clocks = <&clks 26>;
365     + #io-channel-cells = <1>;
366     };
367    
368     spdif@80054000 {
369     diff --git a/arch/arm/boot/dts/sama5d3.dtsi b/arch/arm/boot/dts/sama5d3.dtsi
370     index 57ab8587f7b9..37e6182f1470 100644
371     --- a/arch/arm/boot/dts/sama5d3.dtsi
372     +++ b/arch/arm/boot/dts/sama5d3.dtsi
373     @@ -1321,7 +1321,7 @@
374     usb0: gadget@00500000 {
375     #address-cells = <1>;
376     #size-cells = <0>;
377     - compatible = "atmel,at91sam9rl-udc";
378     + compatible = "atmel,sama5d3-udc";
379     reg = <0x00500000 0x100000
380     0xf8030000 0x4000>;
381     interrupts = <33 IRQ_TYPE_LEVEL_HIGH 2>;
382     diff --git a/arch/arm/boot/dts/sama5d4.dtsi b/arch/arm/boot/dts/sama5d4.dtsi
383     index 6b1bb58f9c0b..a5f5f4090af6 100644
384     --- a/arch/arm/boot/dts/sama5d4.dtsi
385     +++ b/arch/arm/boot/dts/sama5d4.dtsi
386     @@ -123,7 +123,7 @@
387     usb0: gadget@00400000 {
388     #address-cells = <1>;
389     #size-cells = <0>;
390     - compatible = "atmel,at91sam9rl-udc";
391     + compatible = "atmel,sama5d3-udc";
392     reg = <0x00400000 0x100000
393     0xfc02c000 0x4000>;
394     interrupts = <47 IRQ_TYPE_LEVEL_HIGH 2>;
395     @@ -1125,10 +1125,10 @@
396     compatible = "atmel,at91sam9g46-aes";
397     reg = <0xfc044000 0x100>;
398     interrupts = <12 IRQ_TYPE_LEVEL_HIGH 0>;
399     - dmas = <&dma0 (AT91_XDMAC_DT_MEM_IF(0) | AT91_XDMAC_DT_PER_IF(1))
400     - AT91_XDMAC_DT_PERID(41)>,
401     - <&dma0 (AT91_XDMAC_DT_MEM_IF(0) | AT91_XDMAC_DT_PER_IF(1))
402     - AT91_XDMAC_DT_PERID(40)>;
403     + dmas = <&dma0 (AT91_XDMAC_DT_MEM_IF(0) | AT91_XDMAC_DT_PER_IF(1)
404     + | AT91_XDMAC_DT_PERID(41))>,
405     + <&dma0 (AT91_XDMAC_DT_MEM_IF(0) | AT91_XDMAC_DT_PER_IF(1)
406     + | AT91_XDMAC_DT_PERID(40))>;
407     dma-names = "tx", "rx";
408     clocks = <&aes_clk>;
409     clock-names = "aes_clk";
410     @@ -1139,10 +1139,10 @@
411     compatible = "atmel,at91sam9g46-tdes";
412     reg = <0xfc04c000 0x100>;
413     interrupts = <14 IRQ_TYPE_LEVEL_HIGH 0>;
414     - dmas = <&dma0 (AT91_XDMAC_DT_MEM_IF(0) | AT91_XDMAC_DT_PER_IF(1))
415     - AT91_XDMAC_DT_PERID(42)>,
416     - <&dma0 (AT91_XDMAC_DT_MEM_IF(0) | AT91_XDMAC_DT_PER_IF(1))
417     - AT91_XDMAC_DT_PERID(43)>;
418     + dmas = <&dma0 (AT91_XDMAC_DT_MEM_IF(0) | AT91_XDMAC_DT_PER_IF(1)
419     + | AT91_XDMAC_DT_PERID(42))>,
420     + <&dma0 (AT91_XDMAC_DT_MEM_IF(0) | AT91_XDMAC_DT_PER_IF(1)
421     + | AT91_XDMAC_DT_PERID(43))>;
422     dma-names = "tx", "rx";
423     clocks = <&tdes_clk>;
424     clock-names = "tdes_clk";
425     @@ -1153,8 +1153,8 @@
426     compatible = "atmel,at91sam9g46-sha";
427     reg = <0xfc050000 0x100>;
428     interrupts = <15 IRQ_TYPE_LEVEL_HIGH 0>;
429     - dmas = <&dma0 (AT91_XDMAC_DT_MEM_IF(0) | AT91_XDMAC_DT_PER_IF(1))
430     - AT91_XDMAC_DT_PERID(44)>;
431     + dmas = <&dma0 (AT91_XDMAC_DT_MEM_IF(0) | AT91_XDMAC_DT_PER_IF(1)
432     + | AT91_XDMAC_DT_PERID(44))>;
433     dma-names = "tx";
434     clocks = <&sha_clk>;
435     clock-names = "sha_clk";
436     diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
437     index cca5b8758185..f11d82527076 100644
438     --- a/arch/arm/kernel/smp.c
439     +++ b/arch/arm/kernel/smp.c
440     @@ -576,7 +576,7 @@ void handle_IPI(int ipinr, struct pt_regs *regs)
441     struct pt_regs *old_regs = set_irq_regs(regs);
442    
443     if ((unsigned)ipinr < NR_IPI) {
444     - trace_ipi_entry(ipi_types[ipinr]);
445     + trace_ipi_entry_rcuidle(ipi_types[ipinr]);
446     __inc_irq_stat(cpu, ipi_irqs[ipinr]);
447     }
448    
449     @@ -635,7 +635,7 @@ void handle_IPI(int ipinr, struct pt_regs *regs)
450     }
451    
452     if ((unsigned)ipinr < NR_IPI)
453     - trace_ipi_exit(ipi_types[ipinr]);
454     + trace_ipi_exit_rcuidle(ipi_types[ipinr]);
455     set_irq_regs(old_regs);
456     }
457    
458     diff --git a/arch/arm/mach-dove/include/mach/irqs.h b/arch/arm/mach-dove/include/mach/irqs.h
459     index 03d401d20453..3f29e6bca058 100644
460     --- a/arch/arm/mach-dove/include/mach/irqs.h
461     +++ b/arch/arm/mach-dove/include/mach/irqs.h
462     @@ -14,73 +14,73 @@
463     /*
464     * Dove Low Interrupt Controller
465     */
466     -#define IRQ_DOVE_BRIDGE 0
467     -#define IRQ_DOVE_H2C 1
468     -#define IRQ_DOVE_C2H 2
469     -#define IRQ_DOVE_NAND 3
470     -#define IRQ_DOVE_PDMA 4
471     -#define IRQ_DOVE_SPI1 5
472     -#define IRQ_DOVE_SPI0 6
473     -#define IRQ_DOVE_UART_0 7
474     -#define IRQ_DOVE_UART_1 8
475     -#define IRQ_DOVE_UART_2 9
476     -#define IRQ_DOVE_UART_3 10
477     -#define IRQ_DOVE_I2C 11
478     -#define IRQ_DOVE_GPIO_0_7 12
479     -#define IRQ_DOVE_GPIO_8_15 13
480     -#define IRQ_DOVE_GPIO_16_23 14
481     -#define IRQ_DOVE_PCIE0_ERR 15
482     -#define IRQ_DOVE_PCIE0 16
483     -#define IRQ_DOVE_PCIE1_ERR 17
484     -#define IRQ_DOVE_PCIE1 18
485     -#define IRQ_DOVE_I2S0 19
486     -#define IRQ_DOVE_I2S0_ERR 20
487     -#define IRQ_DOVE_I2S1 21
488     -#define IRQ_DOVE_I2S1_ERR 22
489     -#define IRQ_DOVE_USB_ERR 23
490     -#define IRQ_DOVE_USB0 24
491     -#define IRQ_DOVE_USB1 25
492     -#define IRQ_DOVE_GE00_RX 26
493     -#define IRQ_DOVE_GE00_TX 27
494     -#define IRQ_DOVE_GE00_MISC 28
495     -#define IRQ_DOVE_GE00_SUM 29
496     -#define IRQ_DOVE_GE00_ERR 30
497     -#define IRQ_DOVE_CRYPTO 31
498     +#define IRQ_DOVE_BRIDGE (1 + 0)
499     +#define IRQ_DOVE_H2C (1 + 1)
500     +#define IRQ_DOVE_C2H (1 + 2)
501     +#define IRQ_DOVE_NAND (1 + 3)
502     +#define IRQ_DOVE_PDMA (1 + 4)
503     +#define IRQ_DOVE_SPI1 (1 + 5)
504     +#define IRQ_DOVE_SPI0 (1 + 6)
505     +#define IRQ_DOVE_UART_0 (1 + 7)
506     +#define IRQ_DOVE_UART_1 (1 + 8)
507     +#define IRQ_DOVE_UART_2 (1 + 9)
508     +#define IRQ_DOVE_UART_3 (1 + 10)
509     +#define IRQ_DOVE_I2C (1 + 11)
510     +#define IRQ_DOVE_GPIO_0_7 (1 + 12)
511     +#define IRQ_DOVE_GPIO_8_15 (1 + 13)
512     +#define IRQ_DOVE_GPIO_16_23 (1 + 14)
513     +#define IRQ_DOVE_PCIE0_ERR (1 + 15)
514     +#define IRQ_DOVE_PCIE0 (1 + 16)
515     +#define IRQ_DOVE_PCIE1_ERR (1 + 17)
516     +#define IRQ_DOVE_PCIE1 (1 + 18)
517     +#define IRQ_DOVE_I2S0 (1 + 19)
518     +#define IRQ_DOVE_I2S0_ERR (1 + 20)
519     +#define IRQ_DOVE_I2S1 (1 + 21)
520     +#define IRQ_DOVE_I2S1_ERR (1 + 22)
521     +#define IRQ_DOVE_USB_ERR (1 + 23)
522     +#define IRQ_DOVE_USB0 (1 + 24)
523     +#define IRQ_DOVE_USB1 (1 + 25)
524     +#define IRQ_DOVE_GE00_RX (1 + 26)
525     +#define IRQ_DOVE_GE00_TX (1 + 27)
526     +#define IRQ_DOVE_GE00_MISC (1 + 28)
527     +#define IRQ_DOVE_GE00_SUM (1 + 29)
528     +#define IRQ_DOVE_GE00_ERR (1 + 30)
529     +#define IRQ_DOVE_CRYPTO (1 + 31)
530    
531     /*
532     * Dove High Interrupt Controller
533     */
534     -#define IRQ_DOVE_AC97 32
535     -#define IRQ_DOVE_PMU 33
536     -#define IRQ_DOVE_CAM 34
537     -#define IRQ_DOVE_SDIO0 35
538     -#define IRQ_DOVE_SDIO1 36
539     -#define IRQ_DOVE_SDIO0_WAKEUP 37
540     -#define IRQ_DOVE_SDIO1_WAKEUP 38
541     -#define IRQ_DOVE_XOR_00 39
542     -#define IRQ_DOVE_XOR_01 40
543     -#define IRQ_DOVE_XOR0_ERR 41
544     -#define IRQ_DOVE_XOR_10 42
545     -#define IRQ_DOVE_XOR_11 43
546     -#define IRQ_DOVE_XOR1_ERR 44
547     -#define IRQ_DOVE_LCD_DCON 45
548     -#define IRQ_DOVE_LCD1 46
549     -#define IRQ_DOVE_LCD0 47
550     -#define IRQ_DOVE_GPU 48
551     -#define IRQ_DOVE_PERFORM_MNTR 49
552     -#define IRQ_DOVE_VPRO_DMA1 51
553     -#define IRQ_DOVE_SSP_TIMER 54
554     -#define IRQ_DOVE_SSP 55
555     -#define IRQ_DOVE_MC_L2_ERR 56
556     -#define IRQ_DOVE_CRYPTO_ERR 59
557     -#define IRQ_DOVE_GPIO_24_31 60
558     -#define IRQ_DOVE_HIGH_GPIO 61
559     -#define IRQ_DOVE_SATA 62
560     +#define IRQ_DOVE_AC97 (1 + 32)
561     +#define IRQ_DOVE_PMU (1 + 33)
562     +#define IRQ_DOVE_CAM (1 + 34)
563     +#define IRQ_DOVE_SDIO0 (1 + 35)
564     +#define IRQ_DOVE_SDIO1 (1 + 36)
565     +#define IRQ_DOVE_SDIO0_WAKEUP (1 + 37)
566     +#define IRQ_DOVE_SDIO1_WAKEUP (1 + 38)
567     +#define IRQ_DOVE_XOR_00 (1 + 39)
568     +#define IRQ_DOVE_XOR_01 (1 + 40)
569     +#define IRQ_DOVE_XOR0_ERR (1 + 41)
570     +#define IRQ_DOVE_XOR_10 (1 + 42)
571     +#define IRQ_DOVE_XOR_11 (1 + 43)
572     +#define IRQ_DOVE_XOR1_ERR (1 + 44)
573     +#define IRQ_DOVE_LCD_DCON (1 + 45)
574     +#define IRQ_DOVE_LCD1 (1 + 46)
575     +#define IRQ_DOVE_LCD0 (1 + 47)
576     +#define IRQ_DOVE_GPU (1 + 48)
577     +#define IRQ_DOVE_PERFORM_MNTR (1 + 49)
578     +#define IRQ_DOVE_VPRO_DMA1 (1 + 51)
579     +#define IRQ_DOVE_SSP_TIMER (1 + 54)
580     +#define IRQ_DOVE_SSP (1 + 55)
581     +#define IRQ_DOVE_MC_L2_ERR (1 + 56)
582     +#define IRQ_DOVE_CRYPTO_ERR (1 + 59)
583     +#define IRQ_DOVE_GPIO_24_31 (1 + 60)
584     +#define IRQ_DOVE_HIGH_GPIO (1 + 61)
585     +#define IRQ_DOVE_SATA (1 + 62)
586    
587     /*
588     * DOVE General Purpose Pins
589     */
590     -#define IRQ_DOVE_GPIO_START 64
591     +#define IRQ_DOVE_GPIO_START 65
592     #define NR_GPIO_IRQS 64
593    
594     /*
595     diff --git a/arch/arm/mach-dove/irq.c b/arch/arm/mach-dove/irq.c
596     index 4a5a7aedcb76..df0223f76fa9 100644
597     --- a/arch/arm/mach-dove/irq.c
598     +++ b/arch/arm/mach-dove/irq.c
599     @@ -126,14 +126,14 @@ __exception_irq_entry dove_legacy_handle_irq(struct pt_regs *regs)
600     stat = readl_relaxed(dove_irq_base + IRQ_CAUSE_LOW_OFF);
601     stat &= readl_relaxed(dove_irq_base + IRQ_MASK_LOW_OFF);
602     if (stat) {
603     - unsigned int hwirq = __fls(stat);
604     + unsigned int hwirq = 1 + __fls(stat);
605     handle_IRQ(hwirq, regs);
606     return;
607     }
608     stat = readl_relaxed(dove_irq_base + IRQ_CAUSE_HIGH_OFF);
609     stat &= readl_relaxed(dove_irq_base + IRQ_MASK_HIGH_OFF);
610     if (stat) {
611     - unsigned int hwirq = 32 + __fls(stat);
612     + unsigned int hwirq = 33 + __fls(stat);
613     handle_IRQ(hwirq, regs);
614     return;
615     }
616     @@ -144,8 +144,8 @@ void __init dove_init_irq(void)
617     {
618     int i;
619    
620     - orion_irq_init(0, IRQ_VIRT_BASE + IRQ_MASK_LOW_OFF);
621     - orion_irq_init(32, IRQ_VIRT_BASE + IRQ_MASK_HIGH_OFF);
622     + orion_irq_init(1, IRQ_VIRT_BASE + IRQ_MASK_LOW_OFF);
623     + orion_irq_init(33, IRQ_VIRT_BASE + IRQ_MASK_HIGH_OFF);
624    
625     #ifdef CONFIG_MULTI_IRQ_HANDLER
626     set_handle_irq(dove_legacy_handle_irq);
627     diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c
628     index 9005b07296c8..aedec81d1198 100644
629     --- a/arch/arm/vdso/vdsomunge.c
630     +++ b/arch/arm/vdso/vdsomunge.c
631     @@ -45,13 +45,11 @@
632     * it does.
633     */
634    
635     -#define _GNU_SOURCE
636     -
637     #include <byteswap.h>
638     #include <elf.h>
639     #include <errno.h>
640     -#include <error.h>
641     #include <fcntl.h>
642     +#include <stdarg.h>
643     #include <stdbool.h>
644     #include <stdio.h>
645     #include <stdlib.h>
646     @@ -82,11 +80,25 @@
647     #define EF_ARM_ABI_FLOAT_HARD 0x400
648     #endif
649    
650     +static int failed;
651     +static const char *argv0;
652     static const char *outfile;
653    
654     +static void fail(const char *fmt, ...)
655     +{
656     + va_list ap;
657     +
658     + failed = 1;
659     + fprintf(stderr, "%s: ", argv0);
660     + va_start(ap, fmt);
661     + vfprintf(stderr, fmt, ap);
662     + va_end(ap);
663     + exit(EXIT_FAILURE);
664     +}
665     +
666     static void cleanup(void)
667     {
668     - if (error_message_count > 0 && outfile != NULL)
669     + if (failed && outfile != NULL)
670     unlink(outfile);
671     }
672    
673     @@ -119,68 +131,66 @@ int main(int argc, char **argv)
674     int infd;
675    
676     atexit(cleanup);
677     + argv0 = argv[0];
678    
679     if (argc != 3)
680     - error(EXIT_FAILURE, 0, "Usage: %s [infile] [outfile]", argv[0]);
681     + fail("Usage: %s [infile] [outfile]\n", argv[0]);
682    
683     infile = argv[1];
684     outfile = argv[2];
685    
686     infd = open(infile, O_RDONLY);
687     if (infd < 0)
688     - error(EXIT_FAILURE, errno, "Cannot open %s", infile);
689     + fail("Cannot open %s: %s\n", infile, strerror(errno));
690    
691     if (fstat(infd, &stat) != 0)
692     - error(EXIT_FAILURE, errno, "Failed stat for %s", infile);
693     + fail("Failed stat for %s: %s\n", infile, strerror(errno));
694    
695     inbuf = mmap(NULL, stat.st_size, PROT_READ, MAP_PRIVATE, infd, 0);
696     if (inbuf == MAP_FAILED)
697     - error(EXIT_FAILURE, errno, "Failed to map %s", infile);
698     + fail("Failed to map %s: %s\n", infile, strerror(errno));
699    
700     close(infd);
701    
702     inhdr = inbuf;
703    
704     if (memcmp(&inhdr->e_ident, ELFMAG, SELFMAG) != 0)
705     - error(EXIT_FAILURE, 0, "Not an ELF file");
706     + fail("Not an ELF file\n");
707    
708     if (inhdr->e_ident[EI_CLASS] != ELFCLASS32)
709     - error(EXIT_FAILURE, 0, "Unsupported ELF class");
710     + fail("Unsupported ELF class\n");
711    
712     swap = inhdr->e_ident[EI_DATA] != HOST_ORDER;
713    
714     if (read_elf_half(inhdr->e_type, swap) != ET_DYN)
715     - error(EXIT_FAILURE, 0, "Not a shared object");
716     + fail("Not a shared object\n");
717    
718     - if (read_elf_half(inhdr->e_machine, swap) != EM_ARM) {
719     - error(EXIT_FAILURE, 0, "Unsupported architecture %#x",
720     - inhdr->e_machine);
721     - }
722     + if (read_elf_half(inhdr->e_machine, swap) != EM_ARM)
723     + fail("Unsupported architecture %#x\n", inhdr->e_machine);
724    
725     e_flags = read_elf_word(inhdr->e_flags, swap);
726    
727     if (EF_ARM_EABI_VERSION(e_flags) != EF_ARM_EABI_VER5) {
728     - error(EXIT_FAILURE, 0, "Unsupported EABI version %#x",
729     - EF_ARM_EABI_VERSION(e_flags));
730     + fail("Unsupported EABI version %#x\n",
731     + EF_ARM_EABI_VERSION(e_flags));
732     }
733    
734     if (e_flags & EF_ARM_ABI_FLOAT_HARD)
735     - error(EXIT_FAILURE, 0,
736     - "Unexpected hard-float flag set in e_flags");
737     + fail("Unexpected hard-float flag set in e_flags\n");
738    
739     clear_soft_float = !!(e_flags & EF_ARM_ABI_FLOAT_SOFT);
740    
741     outfd = open(outfile, O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
742     if (outfd < 0)
743     - error(EXIT_FAILURE, errno, "Cannot open %s", outfile);
744     + fail("Cannot open %s: %s\n", outfile, strerror(errno));
745    
746     if (ftruncate(outfd, stat.st_size) != 0)
747     - error(EXIT_FAILURE, errno, "Cannot truncate %s", outfile);
748     + fail("Cannot truncate %s: %s\n", outfile, strerror(errno));
749    
750     outbuf = mmap(NULL, stat.st_size, PROT_READ | PROT_WRITE, MAP_SHARED,
751     outfd, 0);
752     if (outbuf == MAP_FAILED)
753     - error(EXIT_FAILURE, errno, "Failed to map %s", outfile);
754     + fail("Failed to map %s: %s\n", outfile, strerror(errno));
755    
756     close(outfd);
757    
758     @@ -195,7 +205,7 @@ int main(int argc, char **argv)
759     }
760    
761     if (msync(outbuf, stat.st_size, MS_SYNC) != 0)
762     - error(EXIT_FAILURE, errno, "Failed to sync %s", outfile);
763     + fail("Failed to sync %s: %s\n", outfile, strerror(errno));
764    
765     return EXIT_SUCCESS;
766     }
767     diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
768     index 2cb008177252..d3a202b85ba6 100644
769     --- a/arch/arm64/kernel/smp.c
770     +++ b/arch/arm64/kernel/smp.c
771     @@ -569,7 +569,7 @@ void handle_IPI(int ipinr, struct pt_regs *regs)
772     struct pt_regs *old_regs = set_irq_regs(regs);
773    
774     if ((unsigned)ipinr < NR_IPI) {
775     - trace_ipi_entry(ipi_types[ipinr]);
776     + trace_ipi_entry_rcuidle(ipi_types[ipinr]);
777     __inc_irq_stat(cpu, ipi_irqs[ipinr]);
778     }
779    
780     @@ -612,7 +612,7 @@ void handle_IPI(int ipinr, struct pt_regs *regs)
781     }
782    
783     if ((unsigned)ipinr < NR_IPI)
784     - trace_ipi_exit(ipi_types[ipinr]);
785     + trace_ipi_exit_rcuidle(ipi_types[ipinr]);
786     set_irq_regs(old_regs);
787     }
788    
789     diff --git a/arch/arm64/mm/hugetlbpage.c b/arch/arm64/mm/hugetlbpage.c
790     index 2de9d2e59d96..0eeb4f0930a0 100644
791     --- a/arch/arm64/mm/hugetlbpage.c
792     +++ b/arch/arm64/mm/hugetlbpage.c
793     @@ -40,13 +40,13 @@ int huge_pmd_unshare(struct mm_struct *mm, unsigned long *addr, pte_t *ptep)
794    
795     int pmd_huge(pmd_t pmd)
796     {
797     - return !(pmd_val(pmd) & PMD_TABLE_BIT);
798     + return pmd_val(pmd) && !(pmd_val(pmd) & PMD_TABLE_BIT);
799     }
800    
801     int pud_huge(pud_t pud)
802     {
803     #ifndef __PAGETABLE_PMD_FOLDED
804     - return !(pud_val(pud) & PUD_TABLE_BIT);
805     + return pud_val(pud) && !(pud_val(pud) & PUD_TABLE_BIT);
806     #else
807     return 0;
808     #endif
809     diff --git a/arch/arm64/net/bpf_jit.h b/arch/arm64/net/bpf_jit.h
810     index de0a81a539a0..98a26ce82d26 100644
811     --- a/arch/arm64/net/bpf_jit.h
812     +++ b/arch/arm64/net/bpf_jit.h
813     @@ -110,6 +110,10 @@
814     /* Rd = Rn >> shift; signed */
815     #define A64_ASR(sf, Rd, Rn, shift) A64_SBFM(sf, Rd, Rn, shift, (sf) ? 63 : 31)
816    
817     +/* Zero extend */
818     +#define A64_UXTH(sf, Rd, Rn) A64_UBFM(sf, Rd, Rn, 0, 15)
819     +#define A64_UXTW(sf, Rd, Rn) A64_UBFM(sf, Rd, Rn, 0, 31)
820     +
821     /* Move wide (immediate) */
822     #define A64_MOVEW(sf, Rd, imm16, shift, type) \
823     aarch64_insn_gen_movewide(Rd, imm16, shift, \
824     diff --git a/arch/arm64/net/bpf_jit_comp.c b/arch/arm64/net/bpf_jit_comp.c
825     index dc6a4842683a..c047598b09e0 100644
826     --- a/arch/arm64/net/bpf_jit_comp.c
827     +++ b/arch/arm64/net/bpf_jit_comp.c
828     @@ -113,9 +113,9 @@ static inline void emit_a64_mov_i(const int is64, const int reg,
829     static inline int bpf2a64_offset(int bpf_to, int bpf_from,
830     const struct jit_ctx *ctx)
831     {
832     - int to = ctx->offset[bpf_to + 1];
833     + int to = ctx->offset[bpf_to];
834     /* -1 to account for the Branch instruction */
835     - int from = ctx->offset[bpf_from + 1] - 1;
836     + int from = ctx->offset[bpf_from] - 1;
837    
838     return to - from;
839     }
840     @@ -289,23 +289,41 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx)
841     case BPF_ALU | BPF_END | BPF_FROM_BE:
842     #ifdef CONFIG_CPU_BIG_ENDIAN
843     if (BPF_SRC(code) == BPF_FROM_BE)
844     - break;
845     + goto emit_bswap_uxt;
846     #else /* !CONFIG_CPU_BIG_ENDIAN */
847     if (BPF_SRC(code) == BPF_FROM_LE)
848     - break;
849     + goto emit_bswap_uxt;
850     #endif
851     switch (imm) {
852     case 16:
853     emit(A64_REV16(is64, dst, dst), ctx);
854     + /* zero-extend 16 bits into 64 bits */
855     + emit(A64_UXTH(is64, dst, dst), ctx);
856     break;
857     case 32:
858     emit(A64_REV32(is64, dst, dst), ctx);
859     + /* upper 32 bits already cleared */
860     break;
861     case 64:
862     emit(A64_REV64(dst, dst), ctx);
863     break;
864     }
865     break;
866     +emit_bswap_uxt:
867     + switch (imm) {
868     + case 16:
869     + /* zero-extend 16 bits into 64 bits */
870     + emit(A64_UXTH(is64, dst, dst), ctx);
871     + break;
872     + case 32:
873     + /* zero-extend 32 bits into 64 bits */
874     + emit(A64_UXTW(is64, dst, dst), ctx);
875     + break;
876     + case 64:
877     + /* nop */
878     + break;
879     + }
880     + break;
881     /* dst = imm */
882     case BPF_ALU | BPF_MOV | BPF_K:
883     case BPF_ALU64 | BPF_MOV | BPF_K:
884     @@ -640,10 +658,11 @@ static int build_body(struct jit_ctx *ctx)
885     const struct bpf_insn *insn = &prog->insnsi[i];
886     int ret;
887    
888     + ret = build_insn(insn, ctx);
889     +
890     if (ctx->image == NULL)
891     ctx->offset[i] = ctx->idx;
892    
893     - ret = build_insn(insn, ctx);
894     if (ret > 0) {
895     i++;
896     continue;
897     diff --git a/arch/m68k/Kconfig.cpu b/arch/m68k/Kconfig.cpu
898     index 33013dfcd3e1..5c68c85d5dbe 100644
899     --- a/arch/m68k/Kconfig.cpu
900     +++ b/arch/m68k/Kconfig.cpu
901     @@ -125,6 +125,13 @@ endif # M68KCLASSIC
902    
903     if COLDFIRE
904    
905     +choice
906     + prompt "ColdFire SoC type"
907     + default M520x
908     + help
909     + Select the type of ColdFire System-on-Chip (SoC) that you want
910     + to build for.
911     +
912     config M5206
913     bool "MCF5206"
914     depends on !MMU
915     @@ -174,9 +181,6 @@ config M525x
916     help
917     Freescale (Motorola) Coldfire 5251/5253 processor support.
918    
919     -config M527x
920     - bool
921     -
922     config M5271
923     bool "MCF5271"
924     depends on !MMU
925     @@ -223,9 +227,6 @@ config M5307
926     help
927     Motorola ColdFire 5307 processor support.
928    
929     -config M53xx
930     - bool
931     -
932     config M532x
933     bool "MCF532x"
934     depends on !MMU
935     @@ -251,9 +252,6 @@ config M5407
936     help
937     Motorola ColdFire 5407 processor support.
938    
939     -config M54xx
940     - bool
941     -
942     config M547x
943     bool "MCF547x"
944     select M54xx
945     @@ -280,6 +278,17 @@ config M5441x
946     help
947     Freescale Coldfire 54410/54415/54416/54417/54418 processor support.
948    
949     +endchoice
950     +
951     +config M527x
952     + bool
953     +
954     +config M53xx
955     + bool
956     +
957     +config M54xx
958     + bool
959     +
960     endif # COLDFIRE
961    
962    
963     @@ -416,22 +425,10 @@ config HAVE_MBAR
964     config HAVE_IPSBAR
965     bool
966    
967     -config CLOCK_SET
968     - bool "Enable setting the CPU clock frequency"
969     - depends on COLDFIRE
970     - default n
971     - help
972     - On some CPU's you do not need to know what the core CPU clock
973     - frequency is. On these you can disable clock setting. On some
974     - traditional 68K parts, and on all ColdFire parts you need to set
975     - the appropriate CPU clock frequency. On these devices many of the
976     - onboard peripherals derive their timing from the master CPU clock
977     - frequency.
978     -
979     config CLOCK_FREQ
980     int "Set the core clock frequency"
981     default "66666666"
982     - depends on CLOCK_SET
983     + depends on COLDFIRE
984     help
985     Define the CPU clock frequency in use. This is the core clock
986     frequency, it may or may not be the same as the external clock
987     diff --git a/arch/m68k/include/asm/coldfire.h b/arch/m68k/include/asm/coldfire.h
988     index c94557b91448..50aa4dac9ca2 100644
989     --- a/arch/m68k/include/asm/coldfire.h
990     +++ b/arch/m68k/include/asm/coldfire.h
991     @@ -19,7 +19,7 @@
992     * in any case new boards come along from time to time that have yet
993     * another different clocking frequency.
994     */
995     -#ifdef CONFIG_CLOCK_SET
996     +#ifdef CONFIG_CLOCK_FREQ
997     #define MCF_CLK CONFIG_CLOCK_FREQ
998     #else
999     #error "Don't know what your ColdFire CPU clock frequency is??"
1000     diff --git a/arch/openrisc/Kconfig b/arch/openrisc/Kconfig
1001     index e5a693b16da2..443f44de1020 100644
1002     --- a/arch/openrisc/Kconfig
1003     +++ b/arch/openrisc/Kconfig
1004     @@ -17,6 +17,7 @@ config OPENRISC
1005     select GENERIC_IRQ_SHOW
1006     select GENERIC_IOMAP
1007     select GENERIC_CPU_DEVICES
1008     + select HAVE_UID16
1009     select GENERIC_ATOMIC64
1010     select GENERIC_CLOCKEVENTS
1011     select GENERIC_STRNCPY_FROM_USER
1012     @@ -31,9 +32,6 @@ config MMU
1013     config HAVE_DMA_ATTRS
1014     def_bool y
1015    
1016     -config UID16
1017     - def_bool y
1018     -
1019     config RWSEM_GENERIC_SPINLOCK
1020     def_bool y
1021    
1022     diff --git a/arch/x86/mm/mmap.c b/arch/x86/mm/mmap.c
1023     index 9d518d693b4b..844b06d67df4 100644
1024     --- a/arch/x86/mm/mmap.c
1025     +++ b/arch/x86/mm/mmap.c
1026     @@ -126,3 +126,10 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
1027     mm->get_unmapped_area = arch_get_unmapped_area_topdown;
1028     }
1029     }
1030     +
1031     +const char *arch_vma_name(struct vm_area_struct *vma)
1032     +{
1033     + if (vma->vm_flags & VM_MPX)
1034     + return "[mpx]";
1035     + return NULL;
1036     +}
1037     diff --git a/arch/x86/mm/mpx.c b/arch/x86/mm/mpx.c
1038     index c439ec478216..4d1c11c07fe1 100644
1039     --- a/arch/x86/mm/mpx.c
1040     +++ b/arch/x86/mm/mpx.c
1041     @@ -18,26 +18,9 @@
1042     #include <asm/processor.h>
1043     #include <asm/fpu-internal.h>
1044    
1045     -static const char *mpx_mapping_name(struct vm_area_struct *vma)
1046     -{
1047     - return "[mpx]";
1048     -}
1049     -
1050     -static struct vm_operations_struct mpx_vma_ops = {
1051     - .name = mpx_mapping_name,
1052     -};
1053     -
1054     -static int is_mpx_vma(struct vm_area_struct *vma)
1055     -{
1056     - return (vma->vm_ops == &mpx_vma_ops);
1057     -}
1058     -
1059     /*
1060     * This is really a simplified "vm_mmap". it only handles MPX
1061     * bounds tables (the bounds directory is user-allocated).
1062     - *
1063     - * Later on, we use the vma->vm_ops to uniquely identify these
1064     - * VMAs.
1065     */
1066     static unsigned long mpx_mmap(unsigned long len)
1067     {
1068     @@ -83,7 +66,6 @@ static unsigned long mpx_mmap(unsigned long len)
1069     ret = -ENOMEM;
1070     goto out;
1071     }
1072     - vma->vm_ops = &mpx_vma_ops;
1073    
1074     if (vm_flags & VM_LOCKED) {
1075     up_write(&mm->mmap_sem);
1076     @@ -661,7 +643,7 @@ static int zap_bt_entries(struct mm_struct *mm,
1077     * so stop immediately and return an error. This
1078     * probably results in a SIGSEGV.
1079     */
1080     - if (!is_mpx_vma(vma))
1081     + if (!(vma->vm_flags & VM_MPX))
1082     return -EINVAL;
1083    
1084     len = min(vma->vm_end, end) - addr;
1085     diff --git a/block/bio.c b/block/bio.c
1086     index f66a4eae16ee..4441522ca339 100644
1087     --- a/block/bio.c
1088     +++ b/block/bio.c
1089     @@ -1814,8 +1814,9 @@ EXPORT_SYMBOL(bio_endio_nodec);
1090     * Allocates and returns a new bio which represents @sectors from the start of
1091     * @bio, and updates @bio to represent the remaining sectors.
1092     *
1093     - * The newly allocated bio will point to @bio's bi_io_vec; it is the caller's
1094     - * responsibility to ensure that @bio is not freed before the split.
1095     + * Unless this is a discard request the newly allocated bio will point
1096     + * to @bio's bi_io_vec; it is the caller's responsibility to ensure that
1097     + * @bio is not freed before the split.
1098     */
1099     struct bio *bio_split(struct bio *bio, int sectors,
1100     gfp_t gfp, struct bio_set *bs)
1101     @@ -1825,7 +1826,15 @@ struct bio *bio_split(struct bio *bio, int sectors,
1102     BUG_ON(sectors <= 0);
1103     BUG_ON(sectors >= bio_sectors(bio));
1104    
1105     - split = bio_clone_fast(bio, gfp, bs);
1106     + /*
1107     + * Discards need a mutable bio_vec to accommodate the payload
1108     + * required by the DSM TRIM and UNMAP commands.
1109     + */
1110     + if (bio->bi_rw & REQ_DISCARD)
1111     + split = bio_clone_bioset(bio, gfp, bs);
1112     + else
1113     + split = bio_clone_fast(bio, gfp, bs);
1114     +
1115     if (!split)
1116     return NULL;
1117    
1118     diff --git a/crypto/asymmetric_keys/asymmetric_keys.h b/crypto/asymmetric_keys/asymmetric_keys.h
1119     index f97330886d58..3f5b537ab33e 100644
1120     --- a/crypto/asymmetric_keys/asymmetric_keys.h
1121     +++ b/crypto/asymmetric_keys/asymmetric_keys.h
1122     @@ -11,6 +11,9 @@
1123    
1124     extern struct asymmetric_key_id *asymmetric_key_hex_to_key_id(const char *id);
1125    
1126     +extern int __asymmetric_key_hex_to_key_id(const char *id,
1127     + struct asymmetric_key_id *match_id,
1128     + size_t hexlen);
1129     static inline
1130     const struct asymmetric_key_ids *asymmetric_key_ids(const struct key *key)
1131     {
1132     diff --git a/crypto/asymmetric_keys/asymmetric_type.c b/crypto/asymmetric_keys/asymmetric_type.c
1133     index bcbbbd794e1d..b0e4ed23d668 100644
1134     --- a/crypto/asymmetric_keys/asymmetric_type.c
1135     +++ b/crypto/asymmetric_keys/asymmetric_type.c
1136     @@ -104,6 +104,15 @@ static bool asymmetric_match_key_ids(
1137     return false;
1138     }
1139    
1140     +/* helper function can be called directly with pre-allocated memory */
1141     +inline int __asymmetric_key_hex_to_key_id(const char *id,
1142     + struct asymmetric_key_id *match_id,
1143     + size_t hexlen)
1144     +{
1145     + match_id->len = hexlen;
1146     + return hex2bin(match_id->data, id, hexlen);
1147     +}
1148     +
1149     /**
1150     * asymmetric_key_hex_to_key_id - Convert a hex string into a key ID.
1151     * @id: The ID as a hex string.
1152     @@ -111,21 +120,20 @@ static bool asymmetric_match_key_ids(
1153     struct asymmetric_key_id *asymmetric_key_hex_to_key_id(const char *id)
1154     {
1155     struct asymmetric_key_id *match_id;
1156     - size_t hexlen;
1157     + size_t asciihexlen;
1158     int ret;
1159    
1160     if (!*id)
1161     return ERR_PTR(-EINVAL);
1162     - hexlen = strlen(id);
1163     - if (hexlen & 1)
1164     + asciihexlen = strlen(id);
1165     + if (asciihexlen & 1)
1166     return ERR_PTR(-EINVAL);
1167    
1168     - match_id = kmalloc(sizeof(struct asymmetric_key_id) + hexlen / 2,
1169     + match_id = kmalloc(sizeof(struct asymmetric_key_id) + asciihexlen / 2,
1170     GFP_KERNEL);
1171     if (!match_id)
1172     return ERR_PTR(-ENOMEM);
1173     - match_id->len = hexlen / 2;
1174     - ret = hex2bin(match_id->data, id, hexlen / 2);
1175     + ret = __asymmetric_key_hex_to_key_id(id, match_id, asciihexlen / 2);
1176     if (ret < 0) {
1177     kfree(match_id);
1178     return ERR_PTR(-EINVAL);
1179     diff --git a/crypto/asymmetric_keys/x509_public_key.c b/crypto/asymmetric_keys/x509_public_key.c
1180     index a6c42031628e..24f17e6c5904 100644
1181     --- a/crypto/asymmetric_keys/x509_public_key.c
1182     +++ b/crypto/asymmetric_keys/x509_public_key.c
1183     @@ -28,17 +28,30 @@ static bool use_builtin_keys;
1184     static struct asymmetric_key_id *ca_keyid;
1185    
1186     #ifndef MODULE
1187     +static struct {
1188     + struct asymmetric_key_id id;
1189     + unsigned char data[10];
1190     +} cakey;
1191     +
1192     static int __init ca_keys_setup(char *str)
1193     {
1194     if (!str) /* default system keyring */
1195     return 1;
1196    
1197     if (strncmp(str, "id:", 3) == 0) {
1198     - struct asymmetric_key_id *p;
1199     - p = asymmetric_key_hex_to_key_id(str + 3);
1200     - if (p == ERR_PTR(-EINVAL))
1201     - pr_err("Unparsable hex string in ca_keys\n");
1202     - else if (!IS_ERR(p))
1203     + struct asymmetric_key_id *p = &cakey.id;
1204     + size_t hexlen = (strlen(str) - 3) / 2;
1205     + int ret;
1206     +
1207     + if (hexlen == 0 || hexlen > sizeof(cakey.data)) {
1208     + pr_err("Missing or invalid ca_keys id\n");
1209     + return 1;
1210     + }
1211     +
1212     + ret = __asymmetric_key_hex_to_key_id(str + 3, p, hexlen);
1213     + if (ret < 0)
1214     + pr_err("Unparsable ca_keys id hex string\n");
1215     + else
1216     ca_keyid = p; /* owner key 'id:xxxxxx' */
1217     } else if (strcmp(str, "builtin") == 0) {
1218     use_builtin_keys = true;
1219     diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c
1220     index 37fb19047603..73f056a597a9 100644
1221     --- a/drivers/acpi/acpi_lpss.c
1222     +++ b/drivers/acpi/acpi_lpss.c
1223     @@ -352,13 +352,16 @@ static int acpi_lpss_create_device(struct acpi_device *adev,
1224     pdata->mmio_size = resource_size(rentry->res);
1225     pdata->mmio_base = ioremap(rentry->res->start,
1226     pdata->mmio_size);
1227     - if (!pdata->mmio_base)
1228     - goto err_out;
1229     break;
1230     }
1231    
1232     acpi_dev_free_resource_list(&resource_list);
1233    
1234     + if (!pdata->mmio_base) {
1235     + ret = -ENOMEM;
1236     + goto err_out;
1237     + }
1238     +
1239     pdata->dev_desc = dev_desc;
1240    
1241     if (dev_desc->setup)
1242     diff --git a/drivers/acpi/acpica/aclocal.h b/drivers/acpi/acpica/aclocal.h
1243     index 87b27521fcac..7f50dd9eb1d0 100644
1244     --- a/drivers/acpi/acpica/aclocal.h
1245     +++ b/drivers/acpi/acpica/aclocal.h
1246     @@ -213,6 +213,7 @@ struct acpi_table_list {
1247    
1248     #define ACPI_TABLE_INDEX_DSDT (0)
1249     #define ACPI_TABLE_INDEX_FACS (1)
1250     +#define ACPI_TABLE_INDEX_X_FACS (2)
1251    
1252     struct acpi_find_context {
1253     char *search_for;
1254     diff --git a/drivers/acpi/acpica/tbfadt.c b/drivers/acpi/acpica/tbfadt.c
1255     index 7d2486005e3f..05be59c772c7 100644
1256     --- a/drivers/acpi/acpica/tbfadt.c
1257     +++ b/drivers/acpi/acpica/tbfadt.c
1258     @@ -350,9 +350,18 @@ void acpi_tb_parse_fadt(u32 table_index)
1259     /* If Hardware Reduced flag is set, there is no FACS */
1260    
1261     if (!acpi_gbl_reduced_hardware) {
1262     - acpi_tb_install_fixed_table((acpi_physical_address)
1263     - acpi_gbl_FADT.Xfacs, ACPI_SIG_FACS,
1264     - ACPI_TABLE_INDEX_FACS);
1265     + if (acpi_gbl_FADT.facs) {
1266     + acpi_tb_install_fixed_table((acpi_physical_address)
1267     + acpi_gbl_FADT.facs,
1268     + ACPI_SIG_FACS,
1269     + ACPI_TABLE_INDEX_FACS);
1270     + }
1271     + if (acpi_gbl_FADT.Xfacs) {
1272     + acpi_tb_install_fixed_table((acpi_physical_address)
1273     + acpi_gbl_FADT.Xfacs,
1274     + ACPI_SIG_FACS,
1275     + ACPI_TABLE_INDEX_X_FACS);
1276     + }
1277     }
1278     }
1279    
1280     @@ -491,13 +500,9 @@ static void acpi_tb_convert_fadt(void)
1281     acpi_gbl_FADT.header.length = sizeof(struct acpi_table_fadt);
1282    
1283     /*
1284     - * Expand the 32-bit FACS and DSDT addresses to 64-bit as necessary.
1285     + * Expand the 32-bit DSDT addresses to 64-bit as necessary.
1286     * Later ACPICA code will always use the X 64-bit field.
1287     */
1288     - acpi_gbl_FADT.Xfacs = acpi_tb_select_address("FACS",
1289     - acpi_gbl_FADT.facs,
1290     - acpi_gbl_FADT.Xfacs);
1291     -
1292     acpi_gbl_FADT.Xdsdt = acpi_tb_select_address("DSDT",
1293     acpi_gbl_FADT.dsdt,
1294     acpi_gbl_FADT.Xdsdt);
1295     diff --git a/drivers/acpi/acpica/tbutils.c b/drivers/acpi/acpica/tbutils.c
1296     index 6559a58439c5..2fb1afaacc6d 100644
1297     --- a/drivers/acpi/acpica/tbutils.c
1298     +++ b/drivers/acpi/acpica/tbutils.c
1299     @@ -68,7 +68,8 @@ acpi_tb_get_root_table_entry(u8 *table_entry, u32 table_entry_size);
1300    
1301     acpi_status acpi_tb_initialize_facs(void)
1302     {
1303     - acpi_status status;
1304     + struct acpi_table_facs *facs32;
1305     + struct acpi_table_facs *facs64;
1306    
1307     /* If Hardware Reduced flag is set, there is no FACS */
1308    
1309     @@ -77,11 +78,22 @@ acpi_status acpi_tb_initialize_facs(void)
1310     return (AE_OK);
1311     }
1312    
1313     - status = acpi_get_table_by_index(ACPI_TABLE_INDEX_FACS,
1314     - ACPI_CAST_INDIRECT_PTR(struct
1315     - acpi_table_header,
1316     - &acpi_gbl_FACS));
1317     - return (status);
1318     + (void)acpi_get_table_by_index(ACPI_TABLE_INDEX_FACS,
1319     + ACPI_CAST_INDIRECT_PTR(struct
1320     + acpi_table_header,
1321     + &facs32));
1322     + (void)acpi_get_table_by_index(ACPI_TABLE_INDEX_X_FACS,
1323     + ACPI_CAST_INDIRECT_PTR(struct
1324     + acpi_table_header,
1325     + &facs64));
1326     +
1327     + if (acpi_gbl_use32_bit_facs_addresses) {
1328     + acpi_gbl_FACS = facs32 ? facs32 : facs64;
1329     + } else {
1330     + acpi_gbl_FACS = facs64 ? facs64 : facs32;
1331     + }
1332     +
1333     + return (AE_OK);
1334     }
1335     #endif /* !ACPI_REDUCED_HARDWARE */
1336    
1337     @@ -101,7 +113,7 @@ acpi_status acpi_tb_initialize_facs(void)
1338     u8 acpi_tb_tables_loaded(void)
1339     {
1340    
1341     - if (acpi_gbl_root_table_list.current_table_count >= 3) {
1342     + if (acpi_gbl_root_table_list.current_table_count >= 4) {
1343     return (TRUE);
1344     }
1345    
1346     @@ -357,11 +369,11 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address)
1347     table_entry = ACPI_ADD_PTR(u8, table, sizeof(struct acpi_table_header));
1348    
1349     /*
1350     - * First two entries in the table array are reserved for the DSDT
1351     - * and FACS, which are not actually present in the RSDT/XSDT - they
1352     - * come from the FADT
1353     + * First three entries in the table array are reserved for the DSDT
1354     + * and 32bit/64bit FACS, which are not actually present in the
1355     + * RSDT/XSDT - they come from the FADT
1356     */
1357     - acpi_gbl_root_table_list.current_table_count = 2;
1358     + acpi_gbl_root_table_list.current_table_count = 3;
1359    
1360     /* Initialize the root table array from the RSDT/XSDT */
1361    
1362     diff --git a/drivers/acpi/acpica/tbxfload.c b/drivers/acpi/acpica/tbxfload.c
1363     index aadb3002a2dd..b63e35d6d1bf 100644
1364     --- a/drivers/acpi/acpica/tbxfload.c
1365     +++ b/drivers/acpi/acpica/tbxfload.c
1366     @@ -166,7 +166,8 @@ static acpi_status acpi_tb_load_namespace(void)
1367    
1368     (void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES);
1369     for (i = 0; i < acpi_gbl_root_table_list.current_table_count; ++i) {
1370     - if ((!ACPI_COMPARE_NAME
1371     + if (!acpi_gbl_root_table_list.tables[i].address ||
1372     + (!ACPI_COMPARE_NAME
1373     (&(acpi_gbl_root_table_list.tables[i].signature),
1374     ACPI_SIG_SSDT)
1375     &&
1376     diff --git a/drivers/acpi/acpica/utxfinit.c b/drivers/acpi/acpica/utxfinit.c
1377     index 083a76891889..42a32a66ef22 100644
1378     --- a/drivers/acpi/acpica/utxfinit.c
1379     +++ b/drivers/acpi/acpica/utxfinit.c
1380     @@ -179,10 +179,12 @@ acpi_status __init acpi_enable_subsystem(u32 flags)
1381     * Obtain a permanent mapping for the FACS. This is required for the
1382     * Global Lock and the Firmware Waking Vector
1383     */
1384     - status = acpi_tb_initialize_facs();
1385     - if (ACPI_FAILURE(status)) {
1386     - ACPI_WARNING((AE_INFO, "Could not map the FACS table"));
1387     - return_ACPI_STATUS(status);
1388     + if (!(flags & ACPI_NO_FACS_INIT)) {
1389     + status = acpi_tb_initialize_facs();
1390     + if (ACPI_FAILURE(status)) {
1391     + ACPI_WARNING((AE_INFO, "Could not map the FACS table"));
1392     + return_ACPI_STATUS(status);
1393     + }
1394     }
1395     #endif /* !ACPI_REDUCED_HARDWARE */
1396    
1397     diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
1398     index 5226a8b921ae..98f5316aad72 100644
1399     --- a/drivers/acpi/osl.c
1400     +++ b/drivers/acpi/osl.c
1401     @@ -175,10 +175,14 @@ static void __init acpi_request_region (struct acpi_generic_address *gas,
1402     if (!addr || !length)
1403     return;
1404    
1405     - acpi_reserve_region(addr, length, gas->space_id, 0, desc);
1406     + /* Resources are never freed */
1407     + if (gas->space_id == ACPI_ADR_SPACE_SYSTEM_IO)
1408     + request_region(addr, length, desc);
1409     + else if (gas->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY)
1410     + request_mem_region(addr, length, desc);
1411     }
1412    
1413     -static void __init acpi_reserve_resources(void)
1414     +static int __init acpi_reserve_resources(void)
1415     {
1416     acpi_request_region(&acpi_gbl_FADT.xpm1a_event_block, acpi_gbl_FADT.pm1_event_length,
1417     "ACPI PM1a_EVT_BLK");
1418     @@ -207,7 +211,10 @@ static void __init acpi_reserve_resources(void)
1419     if (!(acpi_gbl_FADT.gpe1_block_length & 0x1))
1420     acpi_request_region(&acpi_gbl_FADT.xgpe1_block,
1421     acpi_gbl_FADT.gpe1_block_length, "ACPI GPE1_BLK");
1422     +
1423     + return 0;
1424     }
1425     +fs_initcall_sync(acpi_reserve_resources);
1426    
1427     void acpi_os_printf(const char *fmt, ...)
1428     {
1429     @@ -1838,7 +1845,6 @@ acpi_status __init acpi_os_initialize(void)
1430    
1431     acpi_status __init acpi_os_initialize1(void)
1432     {
1433     - acpi_reserve_resources();
1434     kacpid_wq = alloc_workqueue("kacpid", 0, 1);
1435     kacpi_notify_wq = alloc_workqueue("kacpi_notify", 0, 1);
1436     kacpi_hotplug_wq = alloc_ordered_workqueue("kacpi_hotplug", 0);
1437     diff --git a/drivers/acpi/resource.c b/drivers/acpi/resource.c
1438     index fcb7807ea8b7..f1c966e05078 100644
1439     --- a/drivers/acpi/resource.c
1440     +++ b/drivers/acpi/resource.c
1441     @@ -26,7 +26,6 @@
1442     #include <linux/device.h>
1443     #include <linux/export.h>
1444     #include <linux/ioport.h>
1445     -#include <linux/list.h>
1446     #include <linux/slab.h>
1447    
1448     #ifdef CONFIG_X86
1449     @@ -194,6 +193,7 @@ static bool acpi_decode_space(struct resource_win *win,
1450     u8 iodec = attr->granularity == 0xfff ? ACPI_DECODE_10 : ACPI_DECODE_16;
1451     bool wp = addr->info.mem.write_protect;
1452     u64 len = attr->address_length;
1453     + u64 start, end, offset = 0;
1454     struct resource *res = &win->res;
1455    
1456     /*
1457     @@ -205,9 +205,6 @@ static bool acpi_decode_space(struct resource_win *win,
1458     pr_debug("ACPI: Invalid address space min_addr_fix %d, max_addr_fix %d, len %llx\n",
1459     addr->min_address_fixed, addr->max_address_fixed, len);
1460    
1461     - res->start = attr->minimum;
1462     - res->end = attr->maximum;
1463     -
1464     /*
1465     * For bridges that translate addresses across the bridge,
1466     * translation_offset is the offset that must be added to the
1467     @@ -215,12 +212,22 @@ static bool acpi_decode_space(struct resource_win *win,
1468     * primary side. Non-bridge devices must list 0 for all Address
1469     * Translation offset bits.
1470     */
1471     - if (addr->producer_consumer == ACPI_PRODUCER) {
1472     - res->start += attr->translation_offset;
1473     - res->end += attr->translation_offset;
1474     - } else if (attr->translation_offset) {
1475     + if (addr->producer_consumer == ACPI_PRODUCER)
1476     + offset = attr->translation_offset;
1477     + else if (attr->translation_offset)
1478     pr_debug("ACPI: translation_offset(%lld) is invalid for non-bridge device.\n",
1479     attr->translation_offset);
1480     + start = attr->minimum + offset;
1481     + end = attr->maximum + offset;
1482     +
1483     + win->offset = offset;
1484     + res->start = start;
1485     + res->end = end;
1486     + if (sizeof(resource_size_t) < sizeof(u64) &&
1487     + (offset != win->offset || start != res->start || end != res->end)) {
1488     + pr_warn("acpi resource window ([%#llx-%#llx] ignored, not CPU addressable)\n",
1489     + attr->minimum, attr->maximum);
1490     + return false;
1491     }
1492    
1493     switch (addr->resource_type) {
1494     @@ -237,8 +244,6 @@ static bool acpi_decode_space(struct resource_win *win,
1495     return false;
1496     }
1497    
1498     - win->offset = attr->translation_offset;
1499     -
1500     if (addr->producer_consumer == ACPI_PRODUCER)
1501     res->flags |= IORESOURCE_WINDOW;
1502    
1503     @@ -622,162 +627,3 @@ int acpi_dev_filter_resource_type(struct acpi_resource *ares,
1504     return (type & types) ? 0 : 1;
1505     }
1506     EXPORT_SYMBOL_GPL(acpi_dev_filter_resource_type);
1507     -
1508     -struct reserved_region {
1509     - struct list_head node;
1510     - u64 start;
1511     - u64 end;
1512     -};
1513     -
1514     -static LIST_HEAD(reserved_io_regions);
1515     -static LIST_HEAD(reserved_mem_regions);
1516     -
1517     -static int request_range(u64 start, u64 end, u8 space_id, unsigned long flags,
1518     - char *desc)
1519     -{
1520     - unsigned int length = end - start + 1;
1521     - struct resource *res;
1522     -
1523     - res = space_id == ACPI_ADR_SPACE_SYSTEM_IO ?
1524     - request_region(start, length, desc) :
1525     - request_mem_region(start, length, desc);
1526     - if (!res)
1527     - return -EIO;
1528     -
1529     - res->flags &= ~flags;
1530     - return 0;
1531     -}
1532     -
1533     -static int add_region_before(u64 start, u64 end, u8 space_id,
1534     - unsigned long flags, char *desc,
1535     - struct list_head *head)
1536     -{
1537     - struct reserved_region *reg;
1538     - int error;
1539     -
1540     - reg = kmalloc(sizeof(*reg), GFP_KERNEL);
1541     - if (!reg)
1542     - return -ENOMEM;
1543     -
1544     - error = request_range(start, end, space_id, flags, desc);
1545     - if (error)
1546     - return error;
1547     -
1548     - reg->start = start;
1549     - reg->end = end;
1550     - list_add_tail(&reg->node, head);
1551     - return 0;
1552     -}
1553     -
1554     -/**
1555     - * acpi_reserve_region - Reserve an I/O or memory region as a system resource.
1556     - * @start: Starting address of the region.
1557     - * @length: Length of the region.
1558     - * @space_id: Identifier of address space to reserve the region from.
1559     - * @flags: Resource flags to clear for the region after requesting it.
1560     - * @desc: Region description (for messages).
1561     - *
1562     - * Reserve an I/O or memory region as a system resource to prevent others from
1563     - * using it. If the new region overlaps with one of the regions (in the given
1564     - * address space) already reserved by this routine, only the non-overlapping
1565     - * parts of it will be reserved.
1566     - *
1567     - * Returned is either 0 (success) or a negative error code indicating a resource
1568     - * reservation problem. It is the code of the first encountered error, but the
1569     - * routine doesn't abort until it has attempted to request all of the parts of
1570     - * the new region that don't overlap with other regions reserved previously.
1571     - *
1572     - * The resources requested by this routine are never released.
1573     - */
1574     -int acpi_reserve_region(u64 start, unsigned int length, u8 space_id,
1575     - unsigned long flags, char *desc)
1576     -{
1577     - struct list_head *regions;
1578     - struct reserved_region *reg;
1579     - u64 end = start + length - 1;
1580     - int ret = 0, error = 0;
1581     -
1582     - if (space_id == ACPI_ADR_SPACE_SYSTEM_IO)
1583     - regions = &reserved_io_regions;
1584     - else if (space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY)
1585     - regions = &reserved_mem_regions;
1586     - else
1587     - return -EINVAL;
1588     -
1589     - if (list_empty(regions))
1590     - return add_region_before(start, end, space_id, flags, desc, regions);
1591     -
1592     - list_for_each_entry(reg, regions, node)
1593     - if (reg->start == end + 1) {
1594     - /* The new region can be prepended to this one. */
1595     - ret = request_range(start, end, space_id, flags, desc);
1596     - if (!ret)
1597     - reg->start = start;
1598     -
1599     - return ret;
1600     - } else if (reg->start > end) {
1601     - /* No overlap. Add the new region here and get out. */
1602     - return add_region_before(start, end, space_id, flags,
1603     - desc, &reg->node);
1604     - } else if (reg->end == start - 1) {
1605     - goto combine;
1606     - } else if (reg->end >= start) {
1607     - goto overlap;
1608     - }
1609     -
1610     - /* The new region goes after the last existing one. */
1611     - return add_region_before(start, end, space_id, flags, desc, regions);
1612     -
1613     - overlap:
1614     - /*
1615     - * The new region overlaps an existing one.
1616     - *
1617     - * The head part of the new region immediately preceding the existing
1618     - * overlapping one can be combined with it right away.
1619     - */
1620     - if (reg->start > start) {
1621     - error = request_range(start, reg->start - 1, space_id, flags, desc);
1622     - if (error)
1623     - ret = error;
1624     - else
1625     - reg->start = start;
1626     - }
1627     -
1628     - combine:
1629     - /*
1630     - * The new region is adjacent to an existing one. If it extends beyond
1631     - * that region all the way to the next one, it is possible to combine
1632     - * all three of them.
1633     - */
1634     - while (reg->end < end) {
1635     - struct reserved_region *next = NULL;
1636     - u64 a = reg->end + 1, b = end;
1637     -
1638     - if (!list_is_last(&reg->node, regions)) {
1639     - next = list_next_entry(reg, node);
1640     - if (next->start <= end)
1641     - b = next->start - 1;
1642     - }
1643     - error = request_range(a, b, space_id, flags, desc);
1644     - if (!error) {
1645     - if (next && next->start == b + 1) {
1646     - reg->end = next->end;
1647     - list_del(&next->node);
1648     - kfree(next);
1649     - } else {
1650     - reg->end = end;
1651     - break;
1652     - }
1653     - } else if (next) {
1654     - if (!ret)
1655     - ret = error;
1656     -
1657     - reg = next;
1658     - } else {
1659     - break;
1660     - }
1661     - }
1662     -
1663     - return ret ? ret : error;
1664     -}
1665     -EXPORT_SYMBOL_GPL(acpi_reserve_region);
1666     diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
1667     index 577849c6611a..41c99be9bd41 100644
1668     --- a/drivers/ata/libata-core.c
1669     +++ b/drivers/ata/libata-core.c
1670     @@ -2478,6 +2478,10 @@ int ata_dev_configure(struct ata_device *dev)
1671     dev->max_sectors = min_t(unsigned int, ATA_MAX_SECTORS_128,
1672     dev->max_sectors);
1673    
1674     + if (dev->horkage & ATA_HORKAGE_MAX_SEC_1024)
1675     + dev->max_sectors = min_t(unsigned int, ATA_MAX_SECTORS_1024,
1676     + dev->max_sectors);
1677     +
1678     if (dev->horkage & ATA_HORKAGE_MAX_SEC_LBA48)
1679     dev->max_sectors = ATA_MAX_SECTORS_LBA48;
1680    
1681     @@ -4146,6 +4150,12 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
1682     { "Slimtype DVD A DS8A8SH", NULL, ATA_HORKAGE_MAX_SEC_LBA48 },
1683     { "Slimtype DVD A DS8A9SH", NULL, ATA_HORKAGE_MAX_SEC_LBA48 },
1684    
1685     + /*
1686     + * Causes silent data corruption with higher max sects.
1687     + * http://lkml.kernel.org/g/x49wpy40ysk.fsf@segfault.boston.devel.redhat.com
1688     + */
1689     + { "ST380013AS", "3.20", ATA_HORKAGE_MAX_SEC_1024 },
1690     +
1691     /* Devices we expect to fail diagnostics */
1692    
1693     /* Devices where NCQ should be avoided */
1694     @@ -4174,9 +4184,10 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
1695     { "ST3320[68]13AS", "SD1[5-9]", ATA_HORKAGE_NONCQ |
1696     ATA_HORKAGE_FIRMWARE_WARN },
1697    
1698     - /* Seagate Momentus SpinPoint M8 seem to have FPMDA_AA issues */
1699     + /* drives which fail FPDMA_AA activation (some may freeze afterwards) */
1700     { "ST1000LM024 HN-M101MBB", "2AR10001", ATA_HORKAGE_BROKEN_FPDMA_AA },
1701     { "ST1000LM024 HN-M101MBB", "2BA30001", ATA_HORKAGE_BROKEN_FPDMA_AA },
1702     + { "VB0250EAVER", "HPG7", ATA_HORKAGE_BROKEN_FPDMA_AA },
1703    
1704     /* Blacklist entries taken from Silicon Image 3124/3132
1705     Windows driver .inf file - also several Linux problem reports */
1706     @@ -4225,11 +4236,11 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
1707     { "PIONEER DVD-RW DVR-216D", NULL, ATA_HORKAGE_NOSETXFER },
1708    
1709     /* devices that don't properly handle queued TRIM commands */
1710     - { "Micron_M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
1711     + { "Micron_M500_*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
1712     ATA_HORKAGE_ZERO_AFTER_TRIM, },
1713     { "Crucial_CT*M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
1714     ATA_HORKAGE_ZERO_AFTER_TRIM, },
1715     - { "Micron_M5[15]0*", "MU01", ATA_HORKAGE_NO_NCQ_TRIM |
1716     + { "Micron_M5[15]0_*", "MU01", ATA_HORKAGE_NO_NCQ_TRIM |
1717     ATA_HORKAGE_ZERO_AFTER_TRIM, },
1718     { "Crucial_CT*M550*", "MU01", ATA_HORKAGE_NO_NCQ_TRIM |
1719     ATA_HORKAGE_ZERO_AFTER_TRIM, },
1720     @@ -4238,6 +4249,9 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
1721     { "Samsung SSD 8*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
1722     ATA_HORKAGE_ZERO_AFTER_TRIM, },
1723    
1724     + /* devices that don't properly handle TRIM commands */
1725     + { "SuperSSpeed S238*", NULL, ATA_HORKAGE_NOTRIM, },
1726     +
1727     /*
1728     * As defined, the DRAT (Deterministic Read After Trim) and RZAT
1729     * (Return Zero After Trim) flags in the ATA Command Set are
1730     @@ -4501,7 +4515,8 @@ static unsigned int ata_dev_set_xfermode(struct ata_device *dev)
1731     else /* In the ancient relic department - skip all of this */
1732     return 0;
1733    
1734     - err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, 0);
1735     + /* On some disks, this command causes spin-up, so we need longer timeout */
1736     + err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, 15000);
1737    
1738     DPRINTK("EXIT, err_mask=%x\n", err_mask);
1739     return err_mask;
1740     diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
1741     index cf0022ec07f2..7465031a893c 100644
1742     --- a/drivers/ata/libata-eh.c
1743     +++ b/drivers/ata/libata-eh.c
1744     @@ -1507,16 +1507,21 @@ unsigned int ata_read_log_page(struct ata_device *dev, u8 log,
1745     {
1746     struct ata_taskfile tf;
1747     unsigned int err_mask;
1748     + bool dma = false;
1749    
1750     DPRINTK("read log page - log 0x%x, page 0x%x\n", log, page);
1751    
1752     +retry:
1753     ata_tf_init(dev, &tf);
1754     - if (dev->dma_mode && ata_id_has_read_log_dma_ext(dev->id)) {
1755     + if (dev->dma_mode && ata_id_has_read_log_dma_ext(dev->id) &&
1756     + !(dev->horkage & ATA_HORKAGE_NO_NCQ_LOG)) {
1757     tf.command = ATA_CMD_READ_LOG_DMA_EXT;
1758     tf.protocol = ATA_PROT_DMA;
1759     + dma = true;
1760     } else {
1761     tf.command = ATA_CMD_READ_LOG_EXT;
1762     tf.protocol = ATA_PROT_PIO;
1763     + dma = false;
1764     }
1765     tf.lbal = log;
1766     tf.lbam = page;
1767     @@ -1527,6 +1532,12 @@ unsigned int ata_read_log_page(struct ata_device *dev, u8 log,
1768     err_mask = ata_exec_internal(dev, &tf, NULL, DMA_FROM_DEVICE,
1769     buf, sectors * ATA_SECT_SIZE, 0);
1770    
1771     + if (err_mask && dma) {
1772     + dev->horkage |= ATA_HORKAGE_NO_NCQ_LOG;
1773     + ata_dev_warn(dev, "READ LOG DMA EXT failed, trying unqueued\n");
1774     + goto retry;
1775     + }
1776     +
1777     DPRINTK("EXIT, err_mask=%x\n", err_mask);
1778     return err_mask;
1779     }
1780     diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
1781     index 3131adcc1f87..641a61a59e89 100644
1782     --- a/drivers/ata/libata-scsi.c
1783     +++ b/drivers/ata/libata-scsi.c
1784     @@ -2568,7 +2568,8 @@ static unsigned int ata_scsiop_read_cap(struct ata_scsi_args *args, u8 *rbuf)
1785     rbuf[14] = (lowest_aligned >> 8) & 0x3f;
1786     rbuf[15] = lowest_aligned;
1787    
1788     - if (ata_id_has_trim(args->id)) {
1789     + if (ata_id_has_trim(args->id) &&
1790     + !(dev->horkage & ATA_HORKAGE_NOTRIM)) {
1791     rbuf[14] |= 0x80; /* LBPME */
1792    
1793     if (ata_id_has_zero_after_trim(args->id) &&
1794     diff --git a/drivers/ata/libata-transport.c b/drivers/ata/libata-transport.c
1795     index 3227b7c8a05f..e2d94972962d 100644
1796     --- a/drivers/ata/libata-transport.c
1797     +++ b/drivers/ata/libata-transport.c
1798     @@ -560,6 +560,29 @@ show_ata_dev_gscr(struct device *dev,
1799    
1800     static DEVICE_ATTR(gscr, S_IRUGO, show_ata_dev_gscr, NULL);
1801    
1802     +static ssize_t
1803     +show_ata_dev_trim(struct device *dev,
1804     + struct device_attribute *attr, char *buf)
1805     +{
1806     + struct ata_device *ata_dev = transport_class_to_dev(dev);
1807     + unsigned char *mode;
1808     +
1809     + if (!ata_id_has_trim(ata_dev->id))
1810     + mode = "unsupported";
1811     + else if (ata_dev->horkage & ATA_HORKAGE_NOTRIM)
1812     + mode = "forced_unsupported";
1813     + else if (ata_dev->horkage & ATA_HORKAGE_NO_NCQ_TRIM)
1814     + mode = "forced_unqueued";
1815     + else if (ata_fpdma_dsm_supported(ata_dev))
1816     + mode = "queued";
1817     + else
1818     + mode = "unqueued";
1819     +
1820     + return snprintf(buf, 20, "%s\n", mode);
1821     +}
1822     +
1823     +static DEVICE_ATTR(trim, S_IRUGO, show_ata_dev_trim, NULL);
1824     +
1825     static DECLARE_TRANSPORT_CLASS(ata_dev_class,
1826     "ata_device", NULL, NULL, NULL);
1827    
1828     @@ -733,6 +756,7 @@ struct scsi_transport_template *ata_attach_transport(void)
1829     SETUP_DEV_ATTRIBUTE(ering);
1830     SETUP_DEV_ATTRIBUTE(id);
1831     SETUP_DEV_ATTRIBUTE(gscr);
1832     + SETUP_DEV_ATTRIBUTE(trim);
1833     BUG_ON(count > ATA_DEV_ATTRS);
1834     i->dev_attrs[count] = NULL;
1835    
1836     diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c
1837     index 171841ad1008..4d1d9de4f9bf 100644
1838     --- a/drivers/base/firmware_class.c
1839     +++ b/drivers/base/firmware_class.c
1840     @@ -544,10 +544,8 @@ static void fw_dev_release(struct device *dev)
1841     kfree(fw_priv);
1842     }
1843    
1844     -static int firmware_uevent(struct device *dev, struct kobj_uevent_env *env)
1845     +static int do_firmware_uevent(struct firmware_priv *fw_priv, struct kobj_uevent_env *env)
1846     {
1847     - struct firmware_priv *fw_priv = to_firmware_priv(dev);
1848     -
1849     if (add_uevent_var(env, "FIRMWARE=%s", fw_priv->buf->fw_id))
1850     return -ENOMEM;
1851     if (add_uevent_var(env, "TIMEOUT=%i", loading_timeout))
1852     @@ -558,6 +556,18 @@ static int firmware_uevent(struct device *dev, struct kobj_uevent_env *env)
1853     return 0;
1854     }
1855    
1856     +static int firmware_uevent(struct device *dev, struct kobj_uevent_env *env)
1857     +{
1858     + struct firmware_priv *fw_priv = to_firmware_priv(dev);
1859     + int err = 0;
1860     +
1861     + mutex_lock(&fw_lock);
1862     + if (fw_priv->buf)
1863     + err = do_firmware_uevent(fw_priv, env);
1864     + mutex_unlock(&fw_lock);
1865     + return err;
1866     +}
1867     +
1868     static struct class firmware_class = {
1869     .name = "firmware",
1870     .class_attrs = firmware_class_attrs,
1871     diff --git a/drivers/base/power/clock_ops.c b/drivers/base/power/clock_ops.c
1872     index 7fdd0172605a..c7b0fcebf168 100644
1873     --- a/drivers/base/power/clock_ops.c
1874     +++ b/drivers/base/power/clock_ops.c
1875     @@ -93,7 +93,7 @@ static int __pm_clk_add(struct device *dev, const char *con_id,
1876     return -ENOMEM;
1877     }
1878     } else {
1879     - if (IS_ERR(ce->clk) || !__clk_get(clk)) {
1880     + if (IS_ERR(clk) || !__clk_get(clk)) {
1881     kfree(ce);
1882     return -ENOENT;
1883     }
1884     diff --git a/drivers/block/loop.c b/drivers/block/loop.c
1885     index d7173cb1ea76..cef6fa83a274 100644
1886     --- a/drivers/block/loop.c
1887     +++ b/drivers/block/loop.c
1888     @@ -86,8 +86,6 @@ static DEFINE_MUTEX(loop_index_mutex);
1889     static int max_part;
1890     static int part_shift;
1891    
1892     -static struct workqueue_struct *loop_wq;
1893     -
1894     static int transfer_xor(struct loop_device *lo, int cmd,
1895     struct page *raw_page, unsigned raw_off,
1896     struct page *loop_page, unsigned loop_off,
1897     @@ -725,6 +723,12 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode,
1898     size = get_loop_size(lo, file);
1899     if ((loff_t)(sector_t)size != size)
1900     goto out_putf;
1901     + error = -ENOMEM;
1902     + lo->wq = alloc_workqueue("kloopd%d",
1903     + WQ_MEM_RECLAIM | WQ_HIGHPRI | WQ_UNBOUND, 16,
1904     + lo->lo_number);
1905     + if (!lo->wq)
1906     + goto out_putf;
1907    
1908     error = 0;
1909    
1910     @@ -872,6 +876,8 @@ static int loop_clr_fd(struct loop_device *lo)
1911     lo->lo_flags = 0;
1912     if (!part_shift)
1913     lo->lo_disk->flags |= GENHD_FL_NO_PART_SCAN;
1914     + destroy_workqueue(lo->wq);
1915     + lo->wq = NULL;
1916     mutex_unlock(&lo->lo_ctl_mutex);
1917     /*
1918     * Need not hold lo_ctl_mutex to fput backing file.
1919     @@ -1425,9 +1431,13 @@ static int loop_queue_rq(struct blk_mq_hw_ctx *hctx,
1920     const struct blk_mq_queue_data *bd)
1921     {
1922     struct loop_cmd *cmd = blk_mq_rq_to_pdu(bd->rq);
1923     + struct loop_device *lo = cmd->rq->q->queuedata;
1924    
1925     blk_mq_start_request(bd->rq);
1926    
1927     + if (lo->lo_state != Lo_bound)
1928     + return -EIO;
1929     +
1930     if (cmd->rq->cmd_flags & REQ_WRITE) {
1931     struct loop_device *lo = cmd->rq->q->queuedata;
1932     bool need_sched = true;
1933     @@ -1441,9 +1451,9 @@ static int loop_queue_rq(struct blk_mq_hw_ctx *hctx,
1934     spin_unlock_irq(&lo->lo_lock);
1935    
1936     if (need_sched)
1937     - queue_work(loop_wq, &lo->write_work);
1938     + queue_work(lo->wq, &lo->write_work);
1939     } else {
1940     - queue_work(loop_wq, &cmd->read_work);
1941     + queue_work(lo->wq, &cmd->read_work);
1942     }
1943    
1944     return BLK_MQ_RQ_QUEUE_OK;
1945     @@ -1455,9 +1465,6 @@ static void loop_handle_cmd(struct loop_cmd *cmd)
1946     struct loop_device *lo = cmd->rq->q->queuedata;
1947     int ret = -EIO;
1948    
1949     - if (lo->lo_state != Lo_bound)
1950     - goto failed;
1951     -
1952     if (write && (lo->lo_flags & LO_FLAGS_READ_ONLY))
1953     goto failed;
1954    
1955     @@ -1806,13 +1813,6 @@ static int __init loop_init(void)
1956     goto misc_out;
1957     }
1958    
1959     - loop_wq = alloc_workqueue("kloopd",
1960     - WQ_MEM_RECLAIM | WQ_HIGHPRI | WQ_UNBOUND, 0);
1961     - if (!loop_wq) {
1962     - err = -ENOMEM;
1963     - goto misc_out;
1964     - }
1965     -
1966     blk_register_region(MKDEV(LOOP_MAJOR, 0), range,
1967     THIS_MODULE, loop_probe, NULL, NULL);
1968    
1969     @@ -1850,8 +1850,6 @@ static void __exit loop_exit(void)
1970     blk_unregister_region(MKDEV(LOOP_MAJOR, 0), range);
1971     unregister_blkdev(LOOP_MAJOR, "loop");
1972    
1973     - destroy_workqueue(loop_wq);
1974     -
1975     misc_deregister(&loop_misc);
1976     }
1977    
1978     diff --git a/drivers/block/loop.h b/drivers/block/loop.h
1979     index 301c27f8323f..49564edf5581 100644
1980     --- a/drivers/block/loop.h
1981     +++ b/drivers/block/loop.h
1982     @@ -54,6 +54,7 @@ struct loop_device {
1983     gfp_t old_gfp_mask;
1984    
1985     spinlock_t lo_lock;
1986     + struct workqueue_struct *wq;
1987     struct list_head write_cmd_head;
1988     struct work_struct write_work;
1989     bool write_started;
1990     diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
1991     index ec6c5c6e1ac9..53f253574abe 100644
1992     --- a/drivers/block/rbd.c
1993     +++ b/drivers/block/rbd.c
1994     @@ -2001,11 +2001,11 @@ static struct rbd_obj_request *rbd_obj_request_create(const char *object_name,
1995     rbd_assert(obj_request_type_valid(type));
1996    
1997     size = strlen(object_name) + 1;
1998     - name = kmalloc(size, GFP_KERNEL);
1999     + name = kmalloc(size, GFP_NOIO);
2000     if (!name)
2001     return NULL;
2002    
2003     - obj_request = kmem_cache_zalloc(rbd_obj_request_cache, GFP_KERNEL);
2004     + obj_request = kmem_cache_zalloc(rbd_obj_request_cache, GFP_NOIO);
2005     if (!obj_request) {
2006     kfree(name);
2007     return NULL;
2008     diff --git a/drivers/bluetooth/btbcm.c b/drivers/bluetooth/btbcm.c
2009     index 4bba86677adc..3f146c9911c1 100644
2010     --- a/drivers/bluetooth/btbcm.c
2011     +++ b/drivers/bluetooth/btbcm.c
2012     @@ -378,12 +378,11 @@ int btbcm_setup_apple(struct hci_dev *hdev)
2013    
2014     /* Read Verbose Config Version Info */
2015     skb = btbcm_read_verbose_config(hdev);
2016     - if (IS_ERR(skb))
2017     - return PTR_ERR(skb);
2018     -
2019     - BT_INFO("%s: BCM: chip id %u build %4.4u", hdev->name, skb->data[1],
2020     - get_unaligned_le16(skb->data + 5));
2021     - kfree_skb(skb);
2022     + if (!IS_ERR(skb)) {
2023     + BT_INFO("%s: BCM: chip id %u build %4.4u", hdev->name, skb->data[1],
2024     + get_unaligned_le16(skb->data + 5));
2025     + kfree_skb(skb);
2026     + }
2027    
2028     set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks);
2029    
2030     diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
2031     index 420cc9f3eb76..c65501539224 100644
2032     --- a/drivers/bluetooth/btusb.c
2033     +++ b/drivers/bluetooth/btusb.c
2034     @@ -268,7 +268,7 @@ static const struct usb_device_id blacklist_table[] = {
2035     { USB_DEVICE(0x0e5e, 0x6622), .driver_info = BTUSB_BROKEN_ISOC },
2036    
2037     /* Roper Class 1 Bluetooth Dongle (Silicon Wave based) */
2038     - { USB_DEVICE(0x1300, 0x0001), .driver_info = BTUSB_SWAVE },
2039     + { USB_DEVICE(0x1310, 0x0001), .driver_info = BTUSB_SWAVE },
2040    
2041     /* Digianswer devices */
2042     { USB_DEVICE(0x08fd, 0x0001), .driver_info = BTUSB_DIGIANSWER },
2043     @@ -1993,6 +1993,8 @@ static int btusb_setup_intel(struct hci_dev *hdev)
2044     }
2045     fw_ptr = fw->data;
2046    
2047     + kfree_skb(skb);
2048     +
2049     /* This Intel specific command enables the manufacturer mode of the
2050     * controller.
2051     *
2052     @@ -2334,6 +2336,7 @@ static int btusb_setup_intel_new(struct hci_dev *hdev)
2053     struct intel_boot_params *params;
2054     const struct firmware *fw;
2055     const u8 *fw_ptr;
2056     + u32 frag_len;
2057     char fwname[64];
2058     ktime_t calltime, delta, rettime;
2059     unsigned long long duration;
2060     @@ -2540,24 +2543,33 @@ static int btusb_setup_intel_new(struct hci_dev *hdev)
2061     }
2062    
2063     fw_ptr = fw->data + 644;
2064     + frag_len = 0;
2065    
2066     while (fw_ptr - fw->data < fw->size) {
2067     - struct hci_command_hdr *cmd = (void *)fw_ptr;
2068     - u8 cmd_len;
2069     + struct hci_command_hdr *cmd = (void *)(fw_ptr + frag_len);
2070    
2071     - cmd_len = sizeof(*cmd) + cmd->plen;
2072     + frag_len += sizeof(*cmd) + cmd->plen;
2073    
2074     - /* Send each command from the firmware data buffer as
2075     - * a single Data fragment.
2076     + /* The paramter length of the secure send command requires
2077     + * a 4 byte alignment. It happens so that the firmware file
2078     + * contains proper Intel_NOP commands to align the fragments
2079     + * as needed.
2080     + *
2081     + * Send set of commands with 4 byte alignment from the
2082     + * firmware data buffer as a single Data fragement.
2083     */
2084     - err = btusb_intel_secure_send(hdev, 0x01, cmd_len, fw_ptr);
2085     - if (err < 0) {
2086     - BT_ERR("%s: Failed to send firmware data (%d)",
2087     - hdev->name, err);
2088     - goto done;
2089     - }
2090     + if (!(frag_len % 4)) {
2091     + err = btusb_intel_secure_send(hdev, 0x01, frag_len,
2092     + fw_ptr);
2093     + if (err < 0) {
2094     + BT_ERR("%s: Failed to send firmware data (%d)",
2095     + hdev->name, err);
2096     + goto done;
2097     + }
2098    
2099     - fw_ptr += cmd_len;
2100     + fw_ptr += frag_len;
2101     + frag_len = 0;
2102     + }
2103     }
2104    
2105     set_bit(BTUSB_FIRMWARE_LOADED, &data->flags);
2106     diff --git a/drivers/bus/arm-ccn.c b/drivers/bus/arm-ccn.c
2107     index aaa0f2a87118..60397ec77ff7 100644
2108     --- a/drivers/bus/arm-ccn.c
2109     +++ b/drivers/bus/arm-ccn.c
2110     @@ -212,7 +212,7 @@ static int arm_ccn_node_to_xp_port(int node)
2111    
2112     static void arm_ccn_pmu_config_set(u64 *config, u32 node_xp, u32 type, u32 port)
2113     {
2114     - *config &= ~((0xff << 0) | (0xff << 8) | (0xff << 24));
2115     + *config &= ~((0xff << 0) | (0xff << 8) | (0x3 << 24));
2116     *config |= (node_xp << 0) | (type << 8) | (port << 24);
2117     }
2118    
2119     diff --git a/drivers/char/agp/intel-gtt.c b/drivers/char/agp/intel-gtt.c
2120     index 0b4188b9af7c..c6dea3f6917b 100644
2121     --- a/drivers/char/agp/intel-gtt.c
2122     +++ b/drivers/char/agp/intel-gtt.c
2123     @@ -581,7 +581,7 @@ static inline int needs_ilk_vtd_wa(void)
2124     /* Query intel_iommu to see if we need the workaround. Presumably that
2125     * was loaded first.
2126     */
2127     - if ((gpu_devid == PCI_DEVICE_ID_INTEL_IRONLAKE_M_HB ||
2128     + if ((gpu_devid == PCI_DEVICE_ID_INTEL_IRONLAKE_D_IG ||
2129     gpu_devid == PCI_DEVICE_ID_INTEL_IRONLAKE_M_IG) &&
2130     intel_iommu_gfx_mapped)
2131     return 1;
2132     diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
2133     index 283f00a7f036..1082d4bb016a 100644
2134     --- a/drivers/char/tpm/tpm-chip.c
2135     +++ b/drivers/char/tpm/tpm-chip.c
2136     @@ -129,8 +129,9 @@ struct tpm_chip *tpmm_chip_alloc(struct device *dev,
2137    
2138     device_initialize(&chip->dev);
2139    
2140     - chip->cdev.owner = chip->pdev->driver->owner;
2141     cdev_init(&chip->cdev, &tpm_fops);
2142     + chip->cdev.owner = chip->pdev->driver->owner;
2143     + chip->cdev.kobj.parent = &chip->dev.kobj;
2144    
2145     return chip;
2146     }
2147     diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
2148     index b26ceee3585e..1267322595da 100644
2149     --- a/drivers/char/tpm/tpm_crb.c
2150     +++ b/drivers/char/tpm/tpm_crb.c
2151     @@ -233,6 +233,14 @@ static int crb_acpi_add(struct acpi_device *device)
2152     return -ENODEV;
2153     }
2154    
2155     + /* At least some versions of AMI BIOS have a bug that TPM2 table has
2156     + * zero address for the control area and therefore we must fail.
2157     + */
2158     + if (!buf->control_area_pa) {
2159     + dev_err(dev, "TPM2 ACPI table has a zero address for the control area\n");
2160     + return -EINVAL;
2161     + }
2162     +
2163     if (buf->hdr.length < sizeof(struct acpi_tpm2)) {
2164     dev_err(dev, "TPM2 ACPI table has wrong size");
2165     return -EINVAL;
2166     @@ -267,7 +275,7 @@ static int crb_acpi_add(struct acpi_device *device)
2167    
2168     memcpy_fromio(&pa, &priv->cca->cmd_pa, 8);
2169     pa = le64_to_cpu(pa);
2170     - priv->cmd = devm_ioremap_nocache(dev, le64_to_cpu(pa),
2171     + priv->cmd = devm_ioremap_nocache(dev, pa,
2172     ioread32(&priv->cca->cmd_size));
2173     if (!priv->cmd) {
2174     dev_err(dev, "ioremap of the command buffer failed\n");
2175     @@ -276,7 +284,7 @@ static int crb_acpi_add(struct acpi_device *device)
2176    
2177     memcpy_fromio(&pa, &priv->cca->rsp_pa, 8);
2178     pa = le64_to_cpu(pa);
2179     - priv->rsp = devm_ioremap_nocache(dev, le64_to_cpu(pa),
2180     + priv->rsp = devm_ioremap_nocache(dev, pa,
2181     ioread32(&priv->cca->rsp_size));
2182     if (!priv->rsp) {
2183     dev_err(dev, "ioremap of the response buffer failed\n");
2184     diff --git a/drivers/char/tpm/tpm_ibmvtpm.c b/drivers/char/tpm/tpm_ibmvtpm.c
2185     index 42ffa5e7a1e0..27ebf9511cb4 100644
2186     --- a/drivers/char/tpm/tpm_ibmvtpm.c
2187     +++ b/drivers/char/tpm/tpm_ibmvtpm.c
2188     @@ -578,6 +578,9 @@ static int tpm_ibmvtpm_probe(struct vio_dev *vio_dev,
2189     goto cleanup;
2190     }
2191    
2192     + ibmvtpm->dev = dev;
2193     + ibmvtpm->vdev = vio_dev;
2194     +
2195     crq_q = &ibmvtpm->crq_queue;
2196     crq_q->crq_addr = (struct ibmvtpm_crq *)get_zeroed_page(GFP_KERNEL);
2197     if (!crq_q->crq_addr) {
2198     @@ -622,8 +625,6 @@ static int tpm_ibmvtpm_probe(struct vio_dev *vio_dev,
2199    
2200     crq_q->index = 0;
2201    
2202     - ibmvtpm->dev = dev;
2203     - ibmvtpm->vdev = vio_dev;
2204     TPM_VPRIV(chip) = (void *)ibmvtpm;
2205    
2206     spin_lock_init(&ibmvtpm->rtce_lock);
2207     diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
2208     index 5b0f41868b42..9f9cadd00bc8 100644
2209     --- a/drivers/clk/clk.c
2210     +++ b/drivers/clk/clk.c
2211     @@ -230,11 +230,12 @@ static void clk_dump_one(struct seq_file *s, struct clk_core *c, int level)
2212     if (!c)
2213     return;
2214    
2215     + /* This should be JSON format, i.e. elements separated with a comma */
2216     seq_printf(s, "\"%s\": { ", c->name);
2217     seq_printf(s, "\"enable_count\": %d,", c->enable_count);
2218     seq_printf(s, "\"prepare_count\": %d,", c->prepare_count);
2219     - seq_printf(s, "\"rate\": %lu", clk_core_get_rate(c));
2220     - seq_printf(s, "\"accuracy\": %lu", clk_core_get_accuracy(c));
2221     + seq_printf(s, "\"rate\": %lu,", clk_core_get_rate(c));
2222     + seq_printf(s, "\"accuracy\": %lu,", clk_core_get_accuracy(c));
2223     seq_printf(s, "\"phase\": %d", clk_core_get_phase(c));
2224     }
2225    
2226     diff --git a/drivers/clk/qcom/clk-rcg2.c b/drivers/clk/qcom/clk-rcg2.c
2227     index b95d17fbb8d7..92936f0912d2 100644
2228     --- a/drivers/clk/qcom/clk-rcg2.c
2229     +++ b/drivers/clk/qcom/clk-rcg2.c
2230     @@ -530,19 +530,16 @@ static int clk_pixel_set_rate(struct clk_hw *hw, unsigned long rate,
2231     struct clk_rcg2 *rcg = to_clk_rcg2(hw);
2232     struct freq_tbl f = *rcg->freq_tbl;
2233     const struct frac_entry *frac = frac_table_pixel;
2234     - unsigned long request, src_rate;
2235     + unsigned long request;
2236     int delta = 100000;
2237     u32 mask = BIT(rcg->hid_width) - 1;
2238     u32 hid_div;
2239     - int index = qcom_find_src_index(hw, rcg->parent_map, f.src);
2240     - struct clk *parent = clk_get_parent_by_index(hw->clk, index);
2241    
2242     for (; frac->num; frac++) {
2243     request = (rate * frac->den) / frac->num;
2244    
2245     - src_rate = __clk_round_rate(parent, request);
2246     - if ((src_rate < (request - delta)) ||
2247     - (src_rate > (request + delta)))
2248     + if ((parent_rate < (request - delta)) ||
2249     + (parent_rate > (request + delta)))
2250     continue;
2251    
2252     regmap_read(rcg->clkr.regmap, rcg->cmd_rcgr + CFG_REG,
2253     diff --git a/drivers/clk/ti/clk-dra7-atl.c b/drivers/clk/ti/clk-dra7-atl.c
2254     index d86bc46b93bd..0a1df821860f 100644
2255     --- a/drivers/clk/ti/clk-dra7-atl.c
2256     +++ b/drivers/clk/ti/clk-dra7-atl.c
2257     @@ -252,6 +252,11 @@ static int of_dra7_atl_clk_probe(struct platform_device *pdev)
2258     }
2259    
2260     clk = of_clk_get_from_provider(&clkspec);
2261     + if (IS_ERR(clk)) {
2262     + pr_err("%s: failed to get atl clock %d from provider\n",
2263     + __func__, i);
2264     + return PTR_ERR(clk);
2265     + }
2266    
2267     cdesc = to_atl_desc(__clk_get_hw(clk));
2268     cdesc->cinfo = cinfo;
2269     diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
2270     index 83564c9cfdbe..c844616028d2 100644
2271     --- a/drivers/clocksource/exynos_mct.c
2272     +++ b/drivers/clocksource/exynos_mct.c
2273     @@ -466,15 +466,12 @@ static int exynos4_local_timer_setup(struct clock_event_device *evt)
2274     exynos4_mct_write(TICK_BASE_CNT, mevt->base + MCT_L_TCNTB_OFFSET);
2275    
2276     if (mct_int_type == MCT_INT_SPI) {
2277     - evt->irq = mct_irqs[MCT_L0_IRQ + cpu];
2278     - if (request_irq(evt->irq, exynos4_mct_tick_isr,
2279     - IRQF_TIMER | IRQF_NOBALANCING,
2280     - evt->name, mevt)) {
2281     - pr_err("exynos-mct: cannot register IRQ %d\n",
2282     - evt->irq);
2283     +
2284     + if (evt->irq == -1)
2285     return -EIO;
2286     - }
2287     - irq_force_affinity(mct_irqs[MCT_L0_IRQ + cpu], cpumask_of(cpu));
2288     +
2289     + irq_force_affinity(evt->irq, cpumask_of(cpu));
2290     + enable_irq(evt->irq);
2291     } else {
2292     enable_percpu_irq(mct_irqs[MCT_L0_IRQ], 0);
2293     }
2294     @@ -487,10 +484,12 @@ static int exynos4_local_timer_setup(struct clock_event_device *evt)
2295     static void exynos4_local_timer_stop(struct clock_event_device *evt)
2296     {
2297     evt->set_mode(CLOCK_EVT_MODE_UNUSED, evt);
2298     - if (mct_int_type == MCT_INT_SPI)
2299     - free_irq(evt->irq, this_cpu_ptr(&percpu_mct_tick));
2300     - else
2301     + if (mct_int_type == MCT_INT_SPI) {
2302     + if (evt->irq != -1)
2303     + disable_irq_nosync(evt->irq);
2304     + } else {
2305     disable_percpu_irq(mct_irqs[MCT_L0_IRQ]);
2306     + }
2307     }
2308    
2309     static int exynos4_mct_cpu_notify(struct notifier_block *self,
2310     @@ -522,7 +521,7 @@ static struct notifier_block exynos4_mct_cpu_nb = {
2311    
2312     static void __init exynos4_timer_resources(struct device_node *np, void __iomem *base)
2313     {
2314     - int err;
2315     + int err, cpu;
2316     struct mct_clock_event_device *mevt = this_cpu_ptr(&percpu_mct_tick);
2317     struct clk *mct_clk, *tick_clk;
2318    
2319     @@ -549,7 +548,25 @@ static void __init exynos4_timer_resources(struct device_node *np, void __iomem
2320     WARN(err, "MCT: can't request IRQ %d (%d)\n",
2321     mct_irqs[MCT_L0_IRQ], err);
2322     } else {
2323     - irq_set_affinity(mct_irqs[MCT_L0_IRQ], cpumask_of(0));
2324     + for_each_possible_cpu(cpu) {
2325     + int mct_irq = mct_irqs[MCT_L0_IRQ + cpu];
2326     + struct mct_clock_event_device *pcpu_mevt =
2327     + per_cpu_ptr(&percpu_mct_tick, cpu);
2328     +
2329     + pcpu_mevt->evt.irq = -1;
2330     +
2331     + irq_set_status_flags(mct_irq, IRQ_NOAUTOEN);
2332     + if (request_irq(mct_irq,
2333     + exynos4_mct_tick_isr,
2334     + IRQF_TIMER | IRQF_NOBALANCING,
2335     + pcpu_mevt->name, pcpu_mevt)) {
2336     + pr_err("exynos-mct: cannot register IRQ (cpu%d)\n",
2337     + cpu);
2338     +
2339     + continue;
2340     + }
2341     + pcpu_mevt->evt.irq = mct_irq;
2342     + }
2343     }
2344    
2345     err = register_cpu_notifier(&exynos4_mct_cpu_nb);
2346     diff --git a/drivers/dma/mv_xor.c b/drivers/dma/mv_xor.c
2347     index 1c56001df676..50f1b422dee3 100644
2348     --- a/drivers/dma/mv_xor.c
2349     +++ b/drivers/dma/mv_xor.c
2350     @@ -273,7 +273,8 @@ static void mv_xor_slot_cleanup(struct mv_xor_chan *mv_chan)
2351     dma_cookie_t cookie = 0;
2352     int busy = mv_chan_is_busy(mv_chan);
2353     u32 current_desc = mv_chan_get_current_desc(mv_chan);
2354     - int seen_current = 0;
2355     + int current_cleaned = 0;
2356     + struct mv_xor_desc *hw_desc;
2357    
2358     dev_dbg(mv_chan_to_devp(mv_chan), "%s %d\n", __func__, __LINE__);
2359     dev_dbg(mv_chan_to_devp(mv_chan), "current_desc %x\n", current_desc);
2360     @@ -285,38 +286,57 @@ static void mv_xor_slot_cleanup(struct mv_xor_chan *mv_chan)
2361    
2362     list_for_each_entry_safe(iter, _iter, &mv_chan->chain,
2363     chain_node) {
2364     - prefetch(_iter);
2365     - prefetch(&_iter->async_tx);
2366    
2367     - /* do not advance past the current descriptor loaded into the
2368     - * hardware channel, subsequent descriptors are either in
2369     - * process or have not been submitted
2370     - */
2371     - if (seen_current)
2372     - break;
2373     + /* clean finished descriptors */
2374     + hw_desc = iter->hw_desc;
2375     + if (hw_desc->status & XOR_DESC_SUCCESS) {
2376     + cookie = mv_xor_run_tx_complete_actions(iter, mv_chan,
2377     + cookie);
2378    
2379     - /* stop the search if we reach the current descriptor and the
2380     - * channel is busy
2381     - */
2382     - if (iter->async_tx.phys == current_desc) {
2383     - seen_current = 1;
2384     - if (busy)
2385     + /* done processing desc, clean slot */
2386     + mv_xor_clean_slot(iter, mv_chan);
2387     +
2388     + /* break if we did cleaned the current */
2389     + if (iter->async_tx.phys == current_desc) {
2390     + current_cleaned = 1;
2391     + break;
2392     + }
2393     + } else {
2394     + if (iter->async_tx.phys == current_desc) {
2395     + current_cleaned = 0;
2396     break;
2397     + }
2398     }
2399     -
2400     - cookie = mv_xor_run_tx_complete_actions(iter, mv_chan, cookie);
2401     -
2402     - if (mv_xor_clean_slot(iter, mv_chan))
2403     - break;
2404     }
2405    
2406     if ((busy == 0) && !list_empty(&mv_chan->chain)) {
2407     - struct mv_xor_desc_slot *chain_head;
2408     - chain_head = list_entry(mv_chan->chain.next,
2409     - struct mv_xor_desc_slot,
2410     - chain_node);
2411     -
2412     - mv_xor_start_new_chain(mv_chan, chain_head);
2413     + if (current_cleaned) {
2414     + /*
2415     + * current descriptor cleaned and removed, run
2416     + * from list head
2417     + */
2418     + iter = list_entry(mv_chan->chain.next,
2419     + struct mv_xor_desc_slot,
2420     + chain_node);
2421     + mv_xor_start_new_chain(mv_chan, iter);
2422     + } else {
2423     + if (!list_is_last(&iter->chain_node, &mv_chan->chain)) {
2424     + /*
2425     + * descriptors are still waiting after
2426     + * current, trigger them
2427     + */
2428     + iter = list_entry(iter->chain_node.next,
2429     + struct mv_xor_desc_slot,
2430     + chain_node);
2431     + mv_xor_start_new_chain(mv_chan, iter);
2432     + } else {
2433     + /*
2434     + * some descriptors are still waiting
2435     + * to be cleaned
2436     + */
2437     + tasklet_schedule(&mv_chan->irq_tasklet);
2438     + }
2439     + }
2440     }
2441    
2442     if (cookie > 0)
2443     diff --git a/drivers/dma/mv_xor.h b/drivers/dma/mv_xor.h
2444     index 91958dba39a2..0e302b3a33ad 100644
2445     --- a/drivers/dma/mv_xor.h
2446     +++ b/drivers/dma/mv_xor.h
2447     @@ -31,6 +31,7 @@
2448     #define XOR_OPERATION_MODE_XOR 0
2449     #define XOR_OPERATION_MODE_MEMCPY 2
2450     #define XOR_DESCRIPTOR_SWAP BIT(14)
2451     +#define XOR_DESC_SUCCESS 0x40000000
2452    
2453     #define XOR_DESC_DMA_OWNED BIT(31)
2454     #define XOR_DESC_EOD_INT_EN BIT(31)
2455     diff --git a/drivers/edac/octeon_edac-l2c.c b/drivers/edac/octeon_edac-l2c.c
2456     index 7e98084d3645..afea7fc625cc 100644
2457     --- a/drivers/edac/octeon_edac-l2c.c
2458     +++ b/drivers/edac/octeon_edac-l2c.c
2459     @@ -151,7 +151,7 @@ static int octeon_l2c_probe(struct platform_device *pdev)
2460     l2c->ctl_name = "octeon_l2c_err";
2461    
2462    
2463     - if (OCTEON_IS_MODEL(OCTEON_FAM_1_PLUS)) {
2464     + if (OCTEON_IS_OCTEON1PLUS()) {
2465     union cvmx_l2t_err l2t_err;
2466     union cvmx_l2d_err l2d_err;
2467    
2468     diff --git a/drivers/edac/octeon_edac-lmc.c b/drivers/edac/octeon_edac-lmc.c
2469     index bb19e0732681..cda6dab5067a 100644
2470     --- a/drivers/edac/octeon_edac-lmc.c
2471     +++ b/drivers/edac/octeon_edac-lmc.c
2472     @@ -234,7 +234,7 @@ static int octeon_lmc_edac_probe(struct platform_device *pdev)
2473     layers[0].size = 1;
2474     layers[0].is_virt_csrow = false;
2475    
2476     - if (OCTEON_IS_MODEL(OCTEON_FAM_1_PLUS)) {
2477     + if (OCTEON_IS_OCTEON1PLUS()) {
2478     union cvmx_lmcx_mem_cfg0 cfg0;
2479    
2480     cfg0.u64 = cvmx_read_csr(CVMX_LMCX_MEM_CFG0(0));
2481     diff --git a/drivers/edac/octeon_edac-pc.c b/drivers/edac/octeon_edac-pc.c
2482     index 0f83c33a7d1f..2ab6cf24c959 100644
2483     --- a/drivers/edac/octeon_edac-pc.c
2484     +++ b/drivers/edac/octeon_edac-pc.c
2485     @@ -73,7 +73,7 @@ static int co_cache_error_event(struct notifier_block *this,
2486     edac_device_handle_ce(p->ed, cpu, 0, "dcache");
2487    
2488     /* Clear the error indication */
2489     - if (OCTEON_IS_MODEL(OCTEON_FAM_2))
2490     + if (OCTEON_IS_OCTEON2())
2491     write_octeon_c0_dcacheerr(1);
2492     else
2493     write_octeon_c0_dcacheerr(0);
2494     diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c
2495     index 97b1616aa391..bba843c2b0ac 100644
2496     --- a/drivers/firmware/dmi_scan.c
2497     +++ b/drivers/firmware/dmi_scan.c
2498     @@ -89,9 +89,9 @@ static void dmi_table(u8 *buf,
2499    
2500     /*
2501     * Stop when we have seen all the items the table claimed to have
2502     - * (SMBIOS < 3.0 only) OR we reach an end-of-table marker OR we run
2503     - * off the end of the table (should never happen but sometimes does
2504     - * on bogus implementations.)
2505     + * (SMBIOS < 3.0 only) OR we reach an end-of-table marker (SMBIOS
2506     + * >= 3.0 only) OR we run off the end of the table (should never
2507     + * happen but sometimes does on bogus implementations.)
2508     */
2509     while ((!dmi_num || i < dmi_num) &&
2510     (data - buf + sizeof(struct dmi_header)) <= dmi_len) {
2511     @@ -110,8 +110,13 @@ static void dmi_table(u8 *buf,
2512    
2513     /*
2514     * 7.45 End-of-Table (Type 127) [SMBIOS reference spec v3.0.0]
2515     + * For tables behind a 64-bit entry point, we have no item
2516     + * count and no exact table length, so stop on end-of-table
2517     + * marker. For tables behind a 32-bit entry point, we have
2518     + * seen OEM structures behind the end-of-table marker on
2519     + * some systems, so don't trust it.
2520     */
2521     - if (dm->type == DMI_ENTRY_END_OF_TABLE)
2522     + if (!dmi_num && dm->type == DMI_ENTRY_END_OF_TABLE)
2523     break;
2524    
2525     data += 2;
2526     diff --git a/drivers/gpu/drm/bridge/ptn3460.c b/drivers/gpu/drm/bridge/ptn3460.c
2527     index 9d2f053382e1..63a09e4079f3 100644
2528     --- a/drivers/gpu/drm/bridge/ptn3460.c
2529     +++ b/drivers/gpu/drm/bridge/ptn3460.c
2530     @@ -15,6 +15,7 @@
2531    
2532     #include <linux/delay.h>
2533     #include <linux/gpio.h>
2534     +#include <linux/gpio/consumer.h>
2535     #include <linux/i2c.h>
2536     #include <linux/module.h>
2537     #include <linux/of.h>
2538     diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
2539     index 3007b44e6bf4..800a025dd062 100644
2540     --- a/drivers/gpu/drm/drm_crtc.c
2541     +++ b/drivers/gpu/drm/drm_crtc.c
2542     @@ -2749,8 +2749,11 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
2543     if (!drm_core_check_feature(dev, DRIVER_MODESET))
2544     return -EINVAL;
2545    
2546     - /* For some reason crtc x/y offsets are signed internally. */
2547     - if (crtc_req->x > INT_MAX || crtc_req->y > INT_MAX)
2548     + /*
2549     + * Universal plane src offsets are only 16.16, prevent havoc for
2550     + * drivers using universal plane code internally.
2551     + */
2552     + if (crtc_req->x & 0xffff0000 || crtc_req->y & 0xffff0000)
2553     return -ERANGE;
2554    
2555     drm_modeset_lock_all(dev);
2556     @@ -5048,12 +5051,9 @@ void drm_mode_config_reset(struct drm_device *dev)
2557     if (encoder->funcs->reset)
2558     encoder->funcs->reset(encoder);
2559    
2560     - list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
2561     - connector->status = connector_status_unknown;
2562     -
2563     + list_for_each_entry(connector, &dev->mode_config.connector_list, head)
2564     if (connector->funcs->reset)
2565     connector->funcs->reset(connector);
2566     - }
2567     }
2568     EXPORT_SYMBOL(drm_mode_config_reset);
2569    
2570     diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c
2571     index 132581ca4ad8..778bbb6425b8 100644
2572     --- a/drivers/gpu/drm/drm_dp_mst_topology.c
2573     +++ b/drivers/gpu/drm/drm_dp_mst_topology.c
2574     @@ -867,8 +867,16 @@ static void drm_dp_destroy_port(struct kref *kref)
2575     port->vcpi.num_slots = 0;
2576    
2577     kfree(port->cached_edid);
2578     - if (port->connector)
2579     - (*port->mgr->cbs->destroy_connector)(mgr, port->connector);
2580     +
2581     + /* we can't destroy the connector here, as
2582     + we might be holding the mode_config.mutex
2583     + from an EDID retrieval */
2584     + if (port->connector) {
2585     + mutex_lock(&mgr->destroy_connector_lock);
2586     + list_add(&port->connector->destroy_list, &mgr->destroy_connector_list);
2587     + mutex_unlock(&mgr->destroy_connector_lock);
2588     + schedule_work(&mgr->destroy_connector_work);
2589     + }
2590     drm_dp_port_teardown_pdt(port, port->pdt);
2591    
2592     if (!port->input && port->vcpi.vcpi > 0)
2593     @@ -1163,6 +1171,8 @@ static struct drm_dp_mst_branch *drm_dp_get_mst_branch_device(struct drm_dp_mst_
2594     struct drm_dp_mst_port *port;
2595     int i;
2596     /* find the port by iterating down */
2597     +
2598     + mutex_lock(&mgr->lock);
2599     mstb = mgr->mst_primary;
2600    
2601     for (i = 0; i < lct - 1; i++) {
2602     @@ -1182,6 +1192,7 @@ static struct drm_dp_mst_branch *drm_dp_get_mst_branch_device(struct drm_dp_mst_
2603     }
2604     }
2605     kref_get(&mstb->kref);
2606     + mutex_unlock(&mgr->lock);
2607     return mstb;
2608     }
2609    
2610     @@ -1189,7 +1200,7 @@ static void drm_dp_check_and_send_link_address(struct drm_dp_mst_topology_mgr *m
2611     struct drm_dp_mst_branch *mstb)
2612     {
2613     struct drm_dp_mst_port *port;
2614     -
2615     + struct drm_dp_mst_branch *mstb_child;
2616     if (!mstb->link_address_sent) {
2617     drm_dp_send_link_address(mgr, mstb);
2618     mstb->link_address_sent = true;
2619     @@ -1204,17 +1215,31 @@ static void drm_dp_check_and_send_link_address(struct drm_dp_mst_topology_mgr *m
2620     if (!port->available_pbn)
2621     drm_dp_send_enum_path_resources(mgr, mstb, port);
2622    
2623     - if (port->mstb)
2624     - drm_dp_check_and_send_link_address(mgr, port->mstb);
2625     + if (port->mstb) {
2626     + mstb_child = drm_dp_get_validated_mstb_ref(mgr, port->mstb);
2627     + if (mstb_child) {
2628     + drm_dp_check_and_send_link_address(mgr, mstb_child);
2629     + drm_dp_put_mst_branch_device(mstb_child);
2630     + }
2631     + }
2632     }
2633     }
2634    
2635     static void drm_dp_mst_link_probe_work(struct work_struct *work)
2636     {
2637     struct drm_dp_mst_topology_mgr *mgr = container_of(work, struct drm_dp_mst_topology_mgr, work);
2638     + struct drm_dp_mst_branch *mstb;
2639    
2640     - drm_dp_check_and_send_link_address(mgr, mgr->mst_primary);
2641     -
2642     + mutex_lock(&mgr->lock);
2643     + mstb = mgr->mst_primary;
2644     + if (mstb) {
2645     + kref_get(&mstb->kref);
2646     + }
2647     + mutex_unlock(&mgr->lock);
2648     + if (mstb) {
2649     + drm_dp_check_and_send_link_address(mgr, mstb);
2650     + drm_dp_put_mst_branch_device(mstb);
2651     + }
2652     }
2653    
2654     static bool drm_dp_validate_guid(struct drm_dp_mst_topology_mgr *mgr,
2655     @@ -2632,6 +2657,30 @@ static void drm_dp_tx_work(struct work_struct *work)
2656     mutex_unlock(&mgr->qlock);
2657     }
2658    
2659     +static void drm_dp_destroy_connector_work(struct work_struct *work)
2660     +{
2661     + struct drm_dp_mst_topology_mgr *mgr = container_of(work, struct drm_dp_mst_topology_mgr, destroy_connector_work);
2662     + struct drm_connector *connector;
2663     +
2664     + /*
2665     + * Not a regular list traverse as we have to drop the destroy
2666     + * connector lock before destroying the connector, to avoid AB->BA
2667     + * ordering between this lock and the config mutex.
2668     + */
2669     + for (;;) {
2670     + mutex_lock(&mgr->destroy_connector_lock);
2671     + connector = list_first_entry_or_null(&mgr->destroy_connector_list, struct drm_connector, destroy_list);
2672     + if (!connector) {
2673     + mutex_unlock(&mgr->destroy_connector_lock);
2674     + break;
2675     + }
2676     + list_del(&connector->destroy_list);
2677     + mutex_unlock(&mgr->destroy_connector_lock);
2678     +
2679     + mgr->cbs->destroy_connector(mgr, connector);
2680     + }
2681     +}
2682     +
2683     /**
2684     * drm_dp_mst_topology_mgr_init - initialise a topology manager
2685     * @mgr: manager struct to initialise
2686     @@ -2651,10 +2700,13 @@ int drm_dp_mst_topology_mgr_init(struct drm_dp_mst_topology_mgr *mgr,
2687     mutex_init(&mgr->lock);
2688     mutex_init(&mgr->qlock);
2689     mutex_init(&mgr->payload_lock);
2690     + mutex_init(&mgr->destroy_connector_lock);
2691     INIT_LIST_HEAD(&mgr->tx_msg_upq);
2692     INIT_LIST_HEAD(&mgr->tx_msg_downq);
2693     + INIT_LIST_HEAD(&mgr->destroy_connector_list);
2694     INIT_WORK(&mgr->work, drm_dp_mst_link_probe_work);
2695     INIT_WORK(&mgr->tx_work, drm_dp_tx_work);
2696     + INIT_WORK(&mgr->destroy_connector_work, drm_dp_destroy_connector_work);
2697     init_waitqueue_head(&mgr->tx_waitq);
2698     mgr->dev = dev;
2699     mgr->aux = aux;
2700     @@ -2679,6 +2731,7 @@ EXPORT_SYMBOL(drm_dp_mst_topology_mgr_init);
2701     */
2702     void drm_dp_mst_topology_mgr_destroy(struct drm_dp_mst_topology_mgr *mgr)
2703     {
2704     + flush_work(&mgr->destroy_connector_work);
2705     mutex_lock(&mgr->payload_lock);
2706     kfree(mgr->payloads);
2707     mgr->payloads = NULL;
2708     diff --git a/drivers/gpu/drm/drm_ioc32.c b/drivers/gpu/drm/drm_ioc32.c
2709     index aa8bbb460c57..9cfcd0aef0df 100644
2710     --- a/drivers/gpu/drm/drm_ioc32.c
2711     +++ b/drivers/gpu/drm/drm_ioc32.c
2712     @@ -70,6 +70,8 @@
2713    
2714     #define DRM_IOCTL_WAIT_VBLANK32 DRM_IOWR(0x3a, drm_wait_vblank32_t)
2715    
2716     +#define DRM_IOCTL_MODE_ADDFB232 DRM_IOWR(0xb8, drm_mode_fb_cmd232_t)
2717     +
2718     typedef struct drm_version_32 {
2719     int version_major; /**< Major version */
2720     int version_minor; /**< Minor version */
2721     @@ -1016,6 +1018,63 @@ static int compat_drm_wait_vblank(struct file *file, unsigned int cmd,
2722     return 0;
2723     }
2724    
2725     +typedef struct drm_mode_fb_cmd232 {
2726     + u32 fb_id;
2727     + u32 width;
2728     + u32 height;
2729     + u32 pixel_format;
2730     + u32 flags;
2731     + u32 handles[4];
2732     + u32 pitches[4];
2733     + u32 offsets[4];
2734     + u64 modifier[4];
2735     +} __attribute__((packed)) drm_mode_fb_cmd232_t;
2736     +
2737     +static int compat_drm_mode_addfb2(struct file *file, unsigned int cmd,
2738     + unsigned long arg)
2739     +{
2740     + struct drm_mode_fb_cmd232 __user *argp = (void __user *)arg;
2741     + struct drm_mode_fb_cmd232 req32;
2742     + struct drm_mode_fb_cmd2 __user *req64;
2743     + int i;
2744     + int err;
2745     +
2746     + if (copy_from_user(&req32, argp, sizeof(req32)))
2747     + return -EFAULT;
2748     +
2749     + req64 = compat_alloc_user_space(sizeof(*req64));
2750     +
2751     + if (!access_ok(VERIFY_WRITE, req64, sizeof(*req64))
2752     + || __put_user(req32.width, &req64->width)
2753     + || __put_user(req32.height, &req64->height)
2754     + || __put_user(req32.pixel_format, &req64->pixel_format)
2755     + || __put_user(req32.flags, &req64->flags))
2756     + return -EFAULT;
2757     +
2758     + for (i = 0; i < 4; i++) {
2759     + if (__put_user(req32.handles[i], &req64->handles[i]))
2760     + return -EFAULT;
2761     + if (__put_user(req32.pitches[i], &req64->pitches[i]))
2762     + return -EFAULT;
2763     + if (__put_user(req32.offsets[i], &req64->offsets[i]))
2764     + return -EFAULT;
2765     + if (__put_user(req32.modifier[i], &req64->modifier[i]))
2766     + return -EFAULT;
2767     + }
2768     +
2769     + err = drm_ioctl(file, DRM_IOCTL_MODE_ADDFB2, (unsigned long)req64);
2770     + if (err)
2771     + return err;
2772     +
2773     + if (__get_user(req32.fb_id, &req64->fb_id))
2774     + return -EFAULT;
2775     +
2776     + if (copy_to_user(argp, &req32, sizeof(req32)))
2777     + return -EFAULT;
2778     +
2779     + return 0;
2780     +}
2781     +
2782     static drm_ioctl_compat_t *drm_compat_ioctls[] = {
2783     [DRM_IOCTL_NR(DRM_IOCTL_VERSION32)] = compat_drm_version,
2784     [DRM_IOCTL_NR(DRM_IOCTL_GET_UNIQUE32)] = compat_drm_getunique,
2785     @@ -1048,6 +1107,7 @@ static drm_ioctl_compat_t *drm_compat_ioctls[] = {
2786     [DRM_IOCTL_NR(DRM_IOCTL_UPDATE_DRAW32)] = compat_drm_update_draw,
2787     #endif
2788     [DRM_IOCTL_NR(DRM_IOCTL_WAIT_VBLANK32)] = compat_drm_wait_vblank,
2789     + [DRM_IOCTL_NR(DRM_IOCTL_MODE_ADDFB232)] = compat_drm_mode_addfb2,
2790     };
2791    
2792     /**
2793     diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
2794     index 2d0995e7afc3..596bce56e379 100644
2795     --- a/drivers/gpu/drm/i915/i915_gem.c
2796     +++ b/drivers/gpu/drm/i915/i915_gem.c
2797     @@ -2401,6 +2401,7 @@ int __i915_add_request(struct intel_engine_cs *ring,
2798     }
2799    
2800     request->emitted_jiffies = jiffies;
2801     + ring->last_submitted_seqno = request->seqno;
2802     list_add_tail(&request->list, &ring->request_list);
2803     request->file_priv = NULL;
2804    
2805     diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
2806     index 0239fbff7bf7..ad90fa3045e5 100644
2807     --- a/drivers/gpu/drm/i915/i915_gem_gtt.c
2808     +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
2809     @@ -502,17 +502,17 @@ static void gen8_ppgtt_clear_range(struct i915_address_space *vm,
2810     struct page *page_table;
2811    
2812     if (WARN_ON(!ppgtt->pdp.page_directory[pdpe]))
2813     - continue;
2814     + break;
2815    
2816     pd = ppgtt->pdp.page_directory[pdpe];
2817    
2818     if (WARN_ON(!pd->page_table[pde]))
2819     - continue;
2820     + break;
2821    
2822     pt = pd->page_table[pde];
2823    
2824     if (WARN_ON(!pt->page))
2825     - continue;
2826     + break;
2827    
2828     page_table = pt->page;
2829    
2830     diff --git a/drivers/gpu/drm/i915/i915_ioc32.c b/drivers/gpu/drm/i915/i915_ioc32.c
2831     index 176de6322e4d..23aa04cded6b 100644
2832     --- a/drivers/gpu/drm/i915/i915_ioc32.c
2833     +++ b/drivers/gpu/drm/i915/i915_ioc32.c
2834     @@ -204,7 +204,7 @@ long i915_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
2835     drm_ioctl_compat_t *fn = NULL;
2836     int ret;
2837    
2838     - if (nr < DRM_COMMAND_BASE)
2839     + if (nr < DRM_COMMAND_BASE || nr >= DRM_COMMAND_END)
2840     return drm_compat_ioctl(filp, cmd, arg);
2841    
2842     if (nr < DRM_COMMAND_BASE + ARRAY_SIZE(i915_compat_ioctls))
2843     diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
2844     index 6d494432b19f..b0df8d10482a 100644
2845     --- a/drivers/gpu/drm/i915/i915_irq.c
2846     +++ b/drivers/gpu/drm/i915/i915_irq.c
2847     @@ -2650,18 +2650,11 @@ static void gen8_disable_vblank(struct drm_device *dev, int pipe)
2848     spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
2849     }
2850    
2851     -static struct drm_i915_gem_request *
2852     -ring_last_request(struct intel_engine_cs *ring)
2853     -{
2854     - return list_entry(ring->request_list.prev,
2855     - struct drm_i915_gem_request, list);
2856     -}
2857     -
2858     static bool
2859     -ring_idle(struct intel_engine_cs *ring)
2860     +ring_idle(struct intel_engine_cs *ring, u32 seqno)
2861     {
2862     return (list_empty(&ring->request_list) ||
2863     - i915_gem_request_completed(ring_last_request(ring), false));
2864     + i915_seqno_passed(seqno, ring->last_submitted_seqno));
2865     }
2866    
2867     static bool
2868     @@ -2883,7 +2876,7 @@ static void i915_hangcheck_elapsed(struct work_struct *work)
2869     acthd = intel_ring_get_active_head(ring);
2870    
2871     if (ring->hangcheck.seqno == seqno) {
2872     - if (ring_idle(ring)) {
2873     + if (ring_idle(ring, seqno)) {
2874     ring->hangcheck.action = HANGCHECK_IDLE;
2875    
2876     if (waitqueue_active(&ring->irq_queue)) {
2877     diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
2878     index 773d1d24e604..a30db4b4050e 100644
2879     --- a/drivers/gpu/drm/i915/i915_reg.h
2880     +++ b/drivers/gpu/drm/i915/i915_reg.h
2881     @@ -3209,6 +3209,7 @@ enum skl_disp_power_wells {
2882     #define BLM_POLARITY_PNV (1 << 0) /* pnv only */
2883    
2884     #define BLC_HIST_CTL (dev_priv->info.display_mmio_offset + 0x61260)
2885     +#define BLM_HISTOGRAM_ENABLE (1 << 31)
2886    
2887     /* New registers for PCH-split platforms. Safe where new bits show up, the
2888     * register layout machtes with gen4 BLC_PWM_CTL[12]. */
2889     diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
2890     index d0f3cbc87474..57c887843dc3 100644
2891     --- a/drivers/gpu/drm/i915/intel_display.c
2892     +++ b/drivers/gpu/drm/i915/intel_display.c
2893     @@ -12499,6 +12499,16 @@ intel_check_primary_plane(struct drm_plane *plane,
2894     intel_crtc->atomic.wait_vblank = true;
2895     }
2896    
2897     + /*
2898     + * FIXME: Actually if we will still have any other plane enabled
2899     + * on the pipe we could let IPS enabled still, but for
2900     + * now lets consider that when we make primary invisible
2901     + * by setting DSPCNTR to 0 on update_primary_plane function
2902     + * IPS needs to be disable.
2903     + */
2904     + if (!state->visible || !fb)
2905     + intel_crtc->atomic.disable_ips = true;
2906     +
2907     intel_crtc->atomic.fb_bits |=
2908     INTEL_FRONTBUFFER_PRIMARY(intel_crtc->pipe);
2909    
2910     @@ -12590,6 +12600,9 @@ static void intel_begin_crtc_commit(struct drm_crtc *crtc)
2911     if (intel_crtc->atomic.disable_fbc)
2912     intel_fbc_disable(dev);
2913    
2914     + if (intel_crtc->atomic.disable_ips)
2915     + hsw_disable_ips(intel_crtc);
2916     +
2917     if (intel_crtc->atomic.pre_disable_primary)
2918     intel_pre_disable_primary(crtc);
2919    
2920     diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
2921     index 897f17db08af..68d1f74a7403 100644
2922     --- a/drivers/gpu/drm/i915/intel_drv.h
2923     +++ b/drivers/gpu/drm/i915/intel_drv.h
2924     @@ -424,6 +424,7 @@ struct intel_crtc_atomic_commit {
2925     /* Sleepable operations to perform before commit */
2926     bool wait_for_flips;
2927     bool disable_fbc;
2928     + bool disable_ips;
2929     bool pre_disable_primary;
2930     bool update_wm;
2931     unsigned disabled_planes;
2932     diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
2933     index 08532d4ffe0a..2bf92cba4a55 100644
2934     --- a/drivers/gpu/drm/i915/intel_panel.c
2935     +++ b/drivers/gpu/drm/i915/intel_panel.c
2936     @@ -879,6 +879,14 @@ static void i9xx_enable_backlight(struct intel_connector *connector)
2937    
2938     /* XXX: combine this into above write? */
2939     intel_panel_actually_set_backlight(connector, panel->backlight.level);
2940     +
2941     + /*
2942     + * Needed to enable backlight on some 855gm models. BLC_HIST_CTL is
2943     + * 855gm only, but checking for gen2 is safe, as 855gm is the only gen2
2944     + * that has backlight.
2945     + */
2946     + if (IS_GEN2(dev))
2947     + I915_WRITE(BLC_HIST_CTL, BLM_HISTOGRAM_ENABLE);
2948     }
2949    
2950     static void i965_enable_backlight(struct intel_connector *connector)
2951     diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h
2952     index c761fe05ad6f..94514d364d25 100644
2953     --- a/drivers/gpu/drm/i915/intel_ringbuffer.h
2954     +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
2955     @@ -266,6 +266,13 @@ struct intel_engine_cs {
2956     * Do we have some not yet emitted requests outstanding?
2957     */
2958     struct drm_i915_gem_request *outstanding_lazy_request;
2959     + /**
2960     + * Seqno of request most recently submitted to request_list.
2961     + * Used exclusively by hang checker to avoid grabbing lock while
2962     + * inspecting request list.
2963     + */
2964     + u32 last_submitted_seqno;
2965     +
2966     bool gpu_caches_dirty;
2967    
2968     wait_queue_head_t irq_queue;
2969     diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
2970     index ff2a74651dd4..a18807ec8371 100644
2971     --- a/drivers/gpu/drm/i915/intel_uncore.c
2972     +++ b/drivers/gpu/drm/i915/intel_uncore.c
2973     @@ -1220,10 +1220,12 @@ int i915_reg_read_ioctl(struct drm_device *dev,
2974     struct drm_i915_private *dev_priv = dev->dev_private;
2975     struct drm_i915_reg_read *reg = data;
2976     struct register_whitelist const *entry = whitelist;
2977     + unsigned size;
2978     + u64 offset;
2979     int i, ret = 0;
2980    
2981     for (i = 0; i < ARRAY_SIZE(whitelist); i++, entry++) {
2982     - if (entry->offset == reg->offset &&
2983     + if (entry->offset == (reg->offset & -entry->size) &&
2984     (1 << INTEL_INFO(dev)->gen & entry->gen_bitmask))
2985     break;
2986     }
2987     @@ -1231,23 +1233,33 @@ int i915_reg_read_ioctl(struct drm_device *dev,
2988     if (i == ARRAY_SIZE(whitelist))
2989     return -EINVAL;
2990    
2991     + /* We use the low bits to encode extra flags as the register should
2992     + * be naturally aligned (and those that are not so aligned merely
2993     + * limit the available flags for that register).
2994     + */
2995     + offset = entry->offset;
2996     + size = entry->size;
2997     + size |= reg->offset ^ offset;
2998     +
2999     intel_runtime_pm_get(dev_priv);
3000    
3001     - switch (entry->size) {
3002     + switch (size) {
3003     + case 8 | 1:
3004     + reg->val = I915_READ64_2x32(offset, offset+4);
3005     + break;
3006     case 8:
3007     - reg->val = I915_READ64(reg->offset);
3008     + reg->val = I915_READ64(offset);
3009     break;
3010     case 4:
3011     - reg->val = I915_READ(reg->offset);
3012     + reg->val = I915_READ(offset);
3013     break;
3014     case 2:
3015     - reg->val = I915_READ16(reg->offset);
3016     + reg->val = I915_READ16(offset);
3017     break;
3018     case 1:
3019     - reg->val = I915_READ8(reg->offset);
3020     + reg->val = I915_READ8(offset);
3021     break;
3022     default:
3023     - MISSING_CASE(entry->size);
3024     ret = -EINVAL;
3025     goto out;
3026     }
3027     diff --git a/drivers/gpu/drm/qxl/qxl_cmd.c b/drivers/gpu/drm/qxl/qxl_cmd.c
3028     index 97823644d347..f33251d67914 100644
3029     --- a/drivers/gpu/drm/qxl/qxl_cmd.c
3030     +++ b/drivers/gpu/drm/qxl/qxl_cmd.c
3031     @@ -505,6 +505,7 @@ int qxl_hw_surface_alloc(struct qxl_device *qdev,
3032    
3033     cmd = (struct qxl_surface_cmd *)qxl_release_map(qdev, release);
3034     cmd->type = QXL_SURFACE_CMD_CREATE;
3035     + cmd->flags = QXL_SURF_FLAG_KEEP_DATA;
3036     cmd->u.surface_create.format = surf->surf.format;
3037     cmd->u.surface_create.width = surf->surf.width;
3038     cmd->u.surface_create.height = surf->surf.height;
3039     diff --git a/drivers/gpu/drm/qxl/qxl_ioctl.c b/drivers/gpu/drm/qxl/qxl_ioctl.c
3040     index b110883f8253..7354a4cda59d 100644
3041     --- a/drivers/gpu/drm/qxl/qxl_ioctl.c
3042     +++ b/drivers/gpu/drm/qxl/qxl_ioctl.c
3043     @@ -122,8 +122,10 @@ static struct qxl_bo *qxlhw_handle_to_bo(struct qxl_device *qdev,
3044     qobj = gem_to_qxl_bo(gobj);
3045    
3046     ret = qxl_release_list_add(release, qobj);
3047     - if (ret)
3048     + if (ret) {
3049     + drm_gem_object_unreference_unlocked(gobj);
3050     return NULL;
3051     + }
3052    
3053     return qobj;
3054     }
3055     diff --git a/drivers/gpu/drm/radeon/ci_dpm.c b/drivers/gpu/drm/radeon/ci_dpm.c
3056     index 8730562323a8..4a09947be244 100644
3057     --- a/drivers/gpu/drm/radeon/ci_dpm.c
3058     +++ b/drivers/gpu/drm/radeon/ci_dpm.c
3059     @@ -5818,7 +5818,7 @@ int ci_dpm_init(struct radeon_device *rdev)
3060     tmp |= DPM_ENABLED;
3061     break;
3062     default:
3063     - DRM_ERROR("Invalid PCC GPIO: %u!\n", gpio.shift);
3064     + DRM_DEBUG("Invalid PCC GPIO: %u!\n", gpio.shift);
3065     break;
3066     }
3067     WREG32_SMC(CNB_PWRMGT_CNTL, tmp);
3068     diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c
3069     index ba50f3c1c2e0..845665362475 100644
3070     --- a/drivers/gpu/drm/radeon/cik.c
3071     +++ b/drivers/gpu/drm/radeon/cik.c
3072     @@ -4579,6 +4579,31 @@ void cik_compute_set_wptr(struct radeon_device *rdev,
3073     WDOORBELL32(ring->doorbell_index, ring->wptr);
3074     }
3075    
3076     +static void cik_compute_stop(struct radeon_device *rdev,
3077     + struct radeon_ring *ring)
3078     +{
3079     + u32 j, tmp;
3080     +
3081     + cik_srbm_select(rdev, ring->me, ring->pipe, ring->queue, 0);
3082     + /* Disable wptr polling. */
3083     + tmp = RREG32(CP_PQ_WPTR_POLL_CNTL);
3084     + tmp &= ~WPTR_POLL_EN;
3085     + WREG32(CP_PQ_WPTR_POLL_CNTL, tmp);
3086     + /* Disable HQD. */
3087     + if (RREG32(CP_HQD_ACTIVE) & 1) {
3088     + WREG32(CP_HQD_DEQUEUE_REQUEST, 1);
3089     + for (j = 0; j < rdev->usec_timeout; j++) {
3090     + if (!(RREG32(CP_HQD_ACTIVE) & 1))
3091     + break;
3092     + udelay(1);
3093     + }
3094     + WREG32(CP_HQD_DEQUEUE_REQUEST, 0);
3095     + WREG32(CP_HQD_PQ_RPTR, 0);
3096     + WREG32(CP_HQD_PQ_WPTR, 0);
3097     + }
3098     + cik_srbm_select(rdev, 0, 0, 0, 0);
3099     +}
3100     +
3101     /**
3102     * cik_cp_compute_enable - enable/disable the compute CP MEs
3103     *
3104     @@ -4592,6 +4617,15 @@ static void cik_cp_compute_enable(struct radeon_device *rdev, bool enable)
3105     if (enable)
3106     WREG32(CP_MEC_CNTL, 0);
3107     else {
3108     + /*
3109     + * To make hibernation reliable we need to clear compute ring
3110     + * configuration before halting the compute ring.
3111     + */
3112     + mutex_lock(&rdev->srbm_mutex);
3113     + cik_compute_stop(rdev,&rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX]);
3114     + cik_compute_stop(rdev,&rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX]);
3115     + mutex_unlock(&rdev->srbm_mutex);
3116     +
3117     WREG32(CP_MEC_CNTL, (MEC_ME1_HALT | MEC_ME2_HALT));
3118     rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX].ready = false;
3119     rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX].ready = false;
3120     @@ -7905,23 +7939,27 @@ restart_ih:
3121     case 1: /* D1 vblank/vline */
3122     switch (src_data) {
3123     case 0: /* D1 vblank */
3124     - if (rdev->irq.stat_regs.cik.disp_int & LB_D1_VBLANK_INTERRUPT) {
3125     - if (rdev->irq.crtc_vblank_int[0]) {
3126     - drm_handle_vblank(rdev->ddev, 0);
3127     - rdev->pm.vblank_sync = true;
3128     - wake_up(&rdev->irq.vblank_queue);
3129     - }
3130     - if (atomic_read(&rdev->irq.pflip[0]))
3131     - radeon_crtc_handle_vblank(rdev, 0);
3132     - rdev->irq.stat_regs.cik.disp_int &= ~LB_D1_VBLANK_INTERRUPT;
3133     - DRM_DEBUG("IH: D1 vblank\n");
3134     + if (!(rdev->irq.stat_regs.cik.disp_int & LB_D1_VBLANK_INTERRUPT))
3135     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3136     +
3137     + if (rdev->irq.crtc_vblank_int[0]) {
3138     + drm_handle_vblank(rdev->ddev, 0);
3139     + rdev->pm.vblank_sync = true;
3140     + wake_up(&rdev->irq.vblank_queue);
3141     }
3142     + if (atomic_read(&rdev->irq.pflip[0]))
3143     + radeon_crtc_handle_vblank(rdev, 0);
3144     + rdev->irq.stat_regs.cik.disp_int &= ~LB_D1_VBLANK_INTERRUPT;
3145     + DRM_DEBUG("IH: D1 vblank\n");
3146     +
3147     break;
3148     case 1: /* D1 vline */
3149     - if (rdev->irq.stat_regs.cik.disp_int & LB_D1_VLINE_INTERRUPT) {
3150     - rdev->irq.stat_regs.cik.disp_int &= ~LB_D1_VLINE_INTERRUPT;
3151     - DRM_DEBUG("IH: D1 vline\n");
3152     - }
3153     + if (!(rdev->irq.stat_regs.cik.disp_int & LB_D1_VLINE_INTERRUPT))
3154     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3155     +
3156     + rdev->irq.stat_regs.cik.disp_int &= ~LB_D1_VLINE_INTERRUPT;
3157     + DRM_DEBUG("IH: D1 vline\n");
3158     +
3159     break;
3160     default:
3161     DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
3162     @@ -7931,23 +7969,27 @@ restart_ih:
3163     case 2: /* D2 vblank/vline */
3164     switch (src_data) {
3165     case 0: /* D2 vblank */
3166     - if (rdev->irq.stat_regs.cik.disp_int_cont & LB_D2_VBLANK_INTERRUPT) {
3167     - if (rdev->irq.crtc_vblank_int[1]) {
3168     - drm_handle_vblank(rdev->ddev, 1);
3169     - rdev->pm.vblank_sync = true;
3170     - wake_up(&rdev->irq.vblank_queue);
3171     - }
3172     - if (atomic_read(&rdev->irq.pflip[1]))
3173     - radeon_crtc_handle_vblank(rdev, 1);
3174     - rdev->irq.stat_regs.cik.disp_int_cont &= ~LB_D2_VBLANK_INTERRUPT;
3175     - DRM_DEBUG("IH: D2 vblank\n");
3176     + if (!(rdev->irq.stat_regs.cik.disp_int_cont & LB_D2_VBLANK_INTERRUPT))
3177     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3178     +
3179     + if (rdev->irq.crtc_vblank_int[1]) {
3180     + drm_handle_vblank(rdev->ddev, 1);
3181     + rdev->pm.vblank_sync = true;
3182     + wake_up(&rdev->irq.vblank_queue);
3183     }
3184     + if (atomic_read(&rdev->irq.pflip[1]))
3185     + radeon_crtc_handle_vblank(rdev, 1);
3186     + rdev->irq.stat_regs.cik.disp_int_cont &= ~LB_D2_VBLANK_INTERRUPT;
3187     + DRM_DEBUG("IH: D2 vblank\n");
3188     +
3189     break;
3190     case 1: /* D2 vline */
3191     - if (rdev->irq.stat_regs.cik.disp_int_cont & LB_D2_VLINE_INTERRUPT) {
3192     - rdev->irq.stat_regs.cik.disp_int_cont &= ~LB_D2_VLINE_INTERRUPT;
3193     - DRM_DEBUG("IH: D2 vline\n");
3194     - }
3195     + if (!(rdev->irq.stat_regs.cik.disp_int_cont & LB_D2_VLINE_INTERRUPT))
3196     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3197     +
3198     + rdev->irq.stat_regs.cik.disp_int_cont &= ~LB_D2_VLINE_INTERRUPT;
3199     + DRM_DEBUG("IH: D2 vline\n");
3200     +
3201     break;
3202     default:
3203     DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
3204     @@ -7957,23 +7999,27 @@ restart_ih:
3205     case 3: /* D3 vblank/vline */
3206     switch (src_data) {
3207     case 0: /* D3 vblank */
3208     - if (rdev->irq.stat_regs.cik.disp_int_cont2 & LB_D3_VBLANK_INTERRUPT) {
3209     - if (rdev->irq.crtc_vblank_int[2]) {
3210     - drm_handle_vblank(rdev->ddev, 2);
3211     - rdev->pm.vblank_sync = true;
3212     - wake_up(&rdev->irq.vblank_queue);
3213     - }
3214     - if (atomic_read(&rdev->irq.pflip[2]))
3215     - radeon_crtc_handle_vblank(rdev, 2);
3216     - rdev->irq.stat_regs.cik.disp_int_cont2 &= ~LB_D3_VBLANK_INTERRUPT;
3217     - DRM_DEBUG("IH: D3 vblank\n");
3218     + if (!(rdev->irq.stat_regs.cik.disp_int_cont2 & LB_D3_VBLANK_INTERRUPT))
3219     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3220     +
3221     + if (rdev->irq.crtc_vblank_int[2]) {
3222     + drm_handle_vblank(rdev->ddev, 2);
3223     + rdev->pm.vblank_sync = true;
3224     + wake_up(&rdev->irq.vblank_queue);
3225     }
3226     + if (atomic_read(&rdev->irq.pflip[2]))
3227     + radeon_crtc_handle_vblank(rdev, 2);
3228     + rdev->irq.stat_regs.cik.disp_int_cont2 &= ~LB_D3_VBLANK_INTERRUPT;
3229     + DRM_DEBUG("IH: D3 vblank\n");
3230     +
3231     break;
3232     case 1: /* D3 vline */
3233     - if (rdev->irq.stat_regs.cik.disp_int_cont2 & LB_D3_VLINE_INTERRUPT) {
3234     - rdev->irq.stat_regs.cik.disp_int_cont2 &= ~LB_D3_VLINE_INTERRUPT;
3235     - DRM_DEBUG("IH: D3 vline\n");
3236     - }
3237     + if (!(rdev->irq.stat_regs.cik.disp_int_cont2 & LB_D3_VLINE_INTERRUPT))
3238     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3239     +
3240     + rdev->irq.stat_regs.cik.disp_int_cont2 &= ~LB_D3_VLINE_INTERRUPT;
3241     + DRM_DEBUG("IH: D3 vline\n");
3242     +
3243     break;
3244     default:
3245     DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
3246     @@ -7983,23 +8029,27 @@ restart_ih:
3247     case 4: /* D4 vblank/vline */
3248     switch (src_data) {
3249     case 0: /* D4 vblank */
3250     - if (rdev->irq.stat_regs.cik.disp_int_cont3 & LB_D4_VBLANK_INTERRUPT) {
3251     - if (rdev->irq.crtc_vblank_int[3]) {
3252     - drm_handle_vblank(rdev->ddev, 3);
3253     - rdev->pm.vblank_sync = true;
3254     - wake_up(&rdev->irq.vblank_queue);
3255     - }
3256     - if (atomic_read(&rdev->irq.pflip[3]))
3257     - radeon_crtc_handle_vblank(rdev, 3);
3258     - rdev->irq.stat_regs.cik.disp_int_cont3 &= ~LB_D4_VBLANK_INTERRUPT;
3259     - DRM_DEBUG("IH: D4 vblank\n");
3260     + if (!(rdev->irq.stat_regs.cik.disp_int_cont3 & LB_D4_VBLANK_INTERRUPT))
3261     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3262     +
3263     + if (rdev->irq.crtc_vblank_int[3]) {
3264     + drm_handle_vblank(rdev->ddev, 3);
3265     + rdev->pm.vblank_sync = true;
3266     + wake_up(&rdev->irq.vblank_queue);
3267     }
3268     + if (atomic_read(&rdev->irq.pflip[3]))
3269     + radeon_crtc_handle_vblank(rdev, 3);
3270     + rdev->irq.stat_regs.cik.disp_int_cont3 &= ~LB_D4_VBLANK_INTERRUPT;
3271     + DRM_DEBUG("IH: D4 vblank\n");
3272     +
3273     break;
3274     case 1: /* D4 vline */
3275     - if (rdev->irq.stat_regs.cik.disp_int_cont3 & LB_D4_VLINE_INTERRUPT) {
3276     - rdev->irq.stat_regs.cik.disp_int_cont3 &= ~LB_D4_VLINE_INTERRUPT;
3277     - DRM_DEBUG("IH: D4 vline\n");
3278     - }
3279     + if (!(rdev->irq.stat_regs.cik.disp_int_cont3 & LB_D4_VLINE_INTERRUPT))
3280     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3281     +
3282     + rdev->irq.stat_regs.cik.disp_int_cont3 &= ~LB_D4_VLINE_INTERRUPT;
3283     + DRM_DEBUG("IH: D4 vline\n");
3284     +
3285     break;
3286     default:
3287     DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
3288     @@ -8009,23 +8059,27 @@ restart_ih:
3289     case 5: /* D5 vblank/vline */
3290     switch (src_data) {
3291     case 0: /* D5 vblank */
3292     - if (rdev->irq.stat_regs.cik.disp_int_cont4 & LB_D5_VBLANK_INTERRUPT) {
3293     - if (rdev->irq.crtc_vblank_int[4]) {
3294     - drm_handle_vblank(rdev->ddev, 4);
3295     - rdev->pm.vblank_sync = true;
3296     - wake_up(&rdev->irq.vblank_queue);
3297     - }
3298     - if (atomic_read(&rdev->irq.pflip[4]))
3299     - radeon_crtc_handle_vblank(rdev, 4);
3300     - rdev->irq.stat_regs.cik.disp_int_cont4 &= ~LB_D5_VBLANK_INTERRUPT;
3301     - DRM_DEBUG("IH: D5 vblank\n");
3302     + if (!(rdev->irq.stat_regs.cik.disp_int_cont4 & LB_D5_VBLANK_INTERRUPT))
3303     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3304     +
3305     + if (rdev->irq.crtc_vblank_int[4]) {
3306     + drm_handle_vblank(rdev->ddev, 4);
3307     + rdev->pm.vblank_sync = true;
3308     + wake_up(&rdev->irq.vblank_queue);
3309     }
3310     + if (atomic_read(&rdev->irq.pflip[4]))
3311     + radeon_crtc_handle_vblank(rdev, 4);
3312     + rdev->irq.stat_regs.cik.disp_int_cont4 &= ~LB_D5_VBLANK_INTERRUPT;
3313     + DRM_DEBUG("IH: D5 vblank\n");
3314     +
3315     break;
3316     case 1: /* D5 vline */
3317     - if (rdev->irq.stat_regs.cik.disp_int_cont4 & LB_D5_VLINE_INTERRUPT) {
3318     - rdev->irq.stat_regs.cik.disp_int_cont4 &= ~LB_D5_VLINE_INTERRUPT;
3319     - DRM_DEBUG("IH: D5 vline\n");
3320     - }
3321     + if (!(rdev->irq.stat_regs.cik.disp_int_cont4 & LB_D5_VLINE_INTERRUPT))
3322     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3323     +
3324     + rdev->irq.stat_regs.cik.disp_int_cont4 &= ~LB_D5_VLINE_INTERRUPT;
3325     + DRM_DEBUG("IH: D5 vline\n");
3326     +
3327     break;
3328     default:
3329     DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
3330     @@ -8035,23 +8089,27 @@ restart_ih:
3331     case 6: /* D6 vblank/vline */
3332     switch (src_data) {
3333     case 0: /* D6 vblank */
3334     - if (rdev->irq.stat_regs.cik.disp_int_cont5 & LB_D6_VBLANK_INTERRUPT) {
3335     - if (rdev->irq.crtc_vblank_int[5]) {
3336     - drm_handle_vblank(rdev->ddev, 5);
3337     - rdev->pm.vblank_sync = true;
3338     - wake_up(&rdev->irq.vblank_queue);
3339     - }
3340     - if (atomic_read(&rdev->irq.pflip[5]))
3341     - radeon_crtc_handle_vblank(rdev, 5);
3342     - rdev->irq.stat_regs.cik.disp_int_cont5 &= ~LB_D6_VBLANK_INTERRUPT;
3343     - DRM_DEBUG("IH: D6 vblank\n");
3344     + if (!(rdev->irq.stat_regs.cik.disp_int_cont5 & LB_D6_VBLANK_INTERRUPT))
3345     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3346     +
3347     + if (rdev->irq.crtc_vblank_int[5]) {
3348     + drm_handle_vblank(rdev->ddev, 5);
3349     + rdev->pm.vblank_sync = true;
3350     + wake_up(&rdev->irq.vblank_queue);
3351     }
3352     + if (atomic_read(&rdev->irq.pflip[5]))
3353     + radeon_crtc_handle_vblank(rdev, 5);
3354     + rdev->irq.stat_regs.cik.disp_int_cont5 &= ~LB_D6_VBLANK_INTERRUPT;
3355     + DRM_DEBUG("IH: D6 vblank\n");
3356     +
3357     break;
3358     case 1: /* D6 vline */
3359     - if (rdev->irq.stat_regs.cik.disp_int_cont5 & LB_D6_VLINE_INTERRUPT) {
3360     - rdev->irq.stat_regs.cik.disp_int_cont5 &= ~LB_D6_VLINE_INTERRUPT;
3361     - DRM_DEBUG("IH: D6 vline\n");
3362     - }
3363     + if (!(rdev->irq.stat_regs.cik.disp_int_cont5 & LB_D6_VLINE_INTERRUPT))
3364     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3365     +
3366     + rdev->irq.stat_regs.cik.disp_int_cont5 &= ~LB_D6_VLINE_INTERRUPT;
3367     + DRM_DEBUG("IH: D6 vline\n");
3368     +
3369     break;
3370     default:
3371     DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
3372     @@ -8071,88 +8129,112 @@ restart_ih:
3373     case 42: /* HPD hotplug */
3374     switch (src_data) {
3375     case 0:
3376     - if (rdev->irq.stat_regs.cik.disp_int & DC_HPD1_INTERRUPT) {
3377     - rdev->irq.stat_regs.cik.disp_int &= ~DC_HPD1_INTERRUPT;
3378     - queue_hotplug = true;
3379     - DRM_DEBUG("IH: HPD1\n");
3380     - }
3381     + if (!(rdev->irq.stat_regs.cik.disp_int & DC_HPD1_INTERRUPT))
3382     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3383     +
3384     + rdev->irq.stat_regs.cik.disp_int &= ~DC_HPD1_INTERRUPT;
3385     + queue_hotplug = true;
3386     + DRM_DEBUG("IH: HPD1\n");
3387     +
3388     break;
3389     case 1:
3390     - if (rdev->irq.stat_regs.cik.disp_int_cont & DC_HPD2_INTERRUPT) {
3391     - rdev->irq.stat_regs.cik.disp_int_cont &= ~DC_HPD2_INTERRUPT;
3392     - queue_hotplug = true;
3393     - DRM_DEBUG("IH: HPD2\n");
3394     - }
3395     + if (!(rdev->irq.stat_regs.cik.disp_int_cont & DC_HPD2_INTERRUPT))
3396     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3397     +
3398     + rdev->irq.stat_regs.cik.disp_int_cont &= ~DC_HPD2_INTERRUPT;
3399     + queue_hotplug = true;
3400     + DRM_DEBUG("IH: HPD2\n");
3401     +
3402     break;
3403     case 2:
3404     - if (rdev->irq.stat_regs.cik.disp_int_cont2 & DC_HPD3_INTERRUPT) {
3405     - rdev->irq.stat_regs.cik.disp_int_cont2 &= ~DC_HPD3_INTERRUPT;
3406     - queue_hotplug = true;
3407     - DRM_DEBUG("IH: HPD3\n");
3408     - }
3409     + if (!(rdev->irq.stat_regs.cik.disp_int_cont2 & DC_HPD3_INTERRUPT))
3410     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3411     +
3412     + rdev->irq.stat_regs.cik.disp_int_cont2 &= ~DC_HPD3_INTERRUPT;
3413     + queue_hotplug = true;
3414     + DRM_DEBUG("IH: HPD3\n");
3415     +
3416     break;
3417     case 3:
3418     - if (rdev->irq.stat_regs.cik.disp_int_cont3 & DC_HPD4_INTERRUPT) {
3419     - rdev->irq.stat_regs.cik.disp_int_cont3 &= ~DC_HPD4_INTERRUPT;
3420     - queue_hotplug = true;
3421     - DRM_DEBUG("IH: HPD4\n");
3422     - }
3423     + if (!(rdev->irq.stat_regs.cik.disp_int_cont3 & DC_HPD4_INTERRUPT))
3424     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3425     +
3426     + rdev->irq.stat_regs.cik.disp_int_cont3 &= ~DC_HPD4_INTERRUPT;
3427     + queue_hotplug = true;
3428     + DRM_DEBUG("IH: HPD4\n");
3429     +
3430     break;
3431     case 4:
3432     - if (rdev->irq.stat_regs.cik.disp_int_cont4 & DC_HPD5_INTERRUPT) {
3433     - rdev->irq.stat_regs.cik.disp_int_cont4 &= ~DC_HPD5_INTERRUPT;
3434     - queue_hotplug = true;
3435     - DRM_DEBUG("IH: HPD5\n");
3436     - }
3437     + if (!(rdev->irq.stat_regs.cik.disp_int_cont4 & DC_HPD5_INTERRUPT))
3438     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3439     +
3440     + rdev->irq.stat_regs.cik.disp_int_cont4 &= ~DC_HPD5_INTERRUPT;
3441     + queue_hotplug = true;
3442     + DRM_DEBUG("IH: HPD5\n");
3443     +
3444     break;
3445     case 5:
3446     - if (rdev->irq.stat_regs.cik.disp_int_cont5 & DC_HPD6_INTERRUPT) {
3447     - rdev->irq.stat_regs.cik.disp_int_cont5 &= ~DC_HPD6_INTERRUPT;
3448     - queue_hotplug = true;
3449     - DRM_DEBUG("IH: HPD6\n");
3450     - }
3451     + if (!(rdev->irq.stat_regs.cik.disp_int_cont5 & DC_HPD6_INTERRUPT))
3452     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3453     +
3454     + rdev->irq.stat_regs.cik.disp_int_cont5 &= ~DC_HPD6_INTERRUPT;
3455     + queue_hotplug = true;
3456     + DRM_DEBUG("IH: HPD6\n");
3457     +
3458     break;
3459     case 6:
3460     - if (rdev->irq.stat_regs.cik.disp_int & DC_HPD1_RX_INTERRUPT) {
3461     - rdev->irq.stat_regs.cik.disp_int &= ~DC_HPD1_RX_INTERRUPT;
3462     - queue_dp = true;
3463     - DRM_DEBUG("IH: HPD_RX 1\n");
3464     - }
3465     + if (!(rdev->irq.stat_regs.cik.disp_int & DC_HPD1_RX_INTERRUPT))
3466     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3467     +
3468     + rdev->irq.stat_regs.cik.disp_int &= ~DC_HPD1_RX_INTERRUPT;
3469     + queue_dp = true;
3470     + DRM_DEBUG("IH: HPD_RX 1\n");
3471     +
3472     break;
3473     case 7:
3474     - if (rdev->irq.stat_regs.cik.disp_int_cont & DC_HPD2_RX_INTERRUPT) {
3475     - rdev->irq.stat_regs.cik.disp_int_cont &= ~DC_HPD2_RX_INTERRUPT;
3476     - queue_dp = true;
3477     - DRM_DEBUG("IH: HPD_RX 2\n");
3478     - }
3479     + if (!(rdev->irq.stat_regs.cik.disp_int_cont & DC_HPD2_RX_INTERRUPT))
3480     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3481     +
3482     + rdev->irq.stat_regs.cik.disp_int_cont &= ~DC_HPD2_RX_INTERRUPT;
3483     + queue_dp = true;
3484     + DRM_DEBUG("IH: HPD_RX 2\n");
3485     +
3486     break;
3487     case 8:
3488     - if (rdev->irq.stat_regs.cik.disp_int_cont2 & DC_HPD3_RX_INTERRUPT) {
3489     - rdev->irq.stat_regs.cik.disp_int_cont2 &= ~DC_HPD3_RX_INTERRUPT;
3490     - queue_dp = true;
3491     - DRM_DEBUG("IH: HPD_RX 3\n");
3492     - }
3493     + if (!(rdev->irq.stat_regs.cik.disp_int_cont2 & DC_HPD3_RX_INTERRUPT))
3494     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3495     +
3496     + rdev->irq.stat_regs.cik.disp_int_cont2 &= ~DC_HPD3_RX_INTERRUPT;
3497     + queue_dp = true;
3498     + DRM_DEBUG("IH: HPD_RX 3\n");
3499     +
3500     break;
3501     case 9:
3502     - if (rdev->irq.stat_regs.cik.disp_int_cont3 & DC_HPD4_RX_INTERRUPT) {
3503     - rdev->irq.stat_regs.cik.disp_int_cont3 &= ~DC_HPD4_RX_INTERRUPT;
3504     - queue_dp = true;
3505     - DRM_DEBUG("IH: HPD_RX 4\n");
3506     - }
3507     + if (!(rdev->irq.stat_regs.cik.disp_int_cont3 & DC_HPD4_RX_INTERRUPT))
3508     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3509     +
3510     + rdev->irq.stat_regs.cik.disp_int_cont3 &= ~DC_HPD4_RX_INTERRUPT;
3511     + queue_dp = true;
3512     + DRM_DEBUG("IH: HPD_RX 4\n");
3513     +
3514     break;
3515     case 10:
3516     - if (rdev->irq.stat_regs.cik.disp_int_cont4 & DC_HPD5_RX_INTERRUPT) {
3517     - rdev->irq.stat_regs.cik.disp_int_cont4 &= ~DC_HPD5_RX_INTERRUPT;
3518     - queue_dp = true;
3519     - DRM_DEBUG("IH: HPD_RX 5\n");
3520     - }
3521     + if (!(rdev->irq.stat_regs.cik.disp_int_cont4 & DC_HPD5_RX_INTERRUPT))
3522     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3523     +
3524     + rdev->irq.stat_regs.cik.disp_int_cont4 &= ~DC_HPD5_RX_INTERRUPT;
3525     + queue_dp = true;
3526     + DRM_DEBUG("IH: HPD_RX 5\n");
3527     +
3528     break;
3529     case 11:
3530     - if (rdev->irq.stat_regs.cik.disp_int_cont5 & DC_HPD6_RX_INTERRUPT) {
3531     - rdev->irq.stat_regs.cik.disp_int_cont5 &= ~DC_HPD6_RX_INTERRUPT;
3532     - queue_dp = true;
3533     - DRM_DEBUG("IH: HPD_RX 6\n");
3534     - }
3535     + if (!(rdev->irq.stat_regs.cik.disp_int_cont5 & DC_HPD6_RX_INTERRUPT))
3536     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3537     +
3538     + rdev->irq.stat_regs.cik.disp_int_cont5 &= ~DC_HPD6_RX_INTERRUPT;
3539     + queue_dp = true;
3540     + DRM_DEBUG("IH: HPD_RX 6\n");
3541     +
3542     break;
3543     default:
3544     DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
3545     diff --git a/drivers/gpu/drm/radeon/cik_sdma.c b/drivers/gpu/drm/radeon/cik_sdma.c
3546     index f86eb54e7763..d16f2eebd95e 100644
3547     --- a/drivers/gpu/drm/radeon/cik_sdma.c
3548     +++ b/drivers/gpu/drm/radeon/cik_sdma.c
3549     @@ -268,6 +268,17 @@ static void cik_sdma_gfx_stop(struct radeon_device *rdev)
3550     }
3551     rdev->ring[R600_RING_TYPE_DMA_INDEX].ready = false;
3552     rdev->ring[CAYMAN_RING_TYPE_DMA1_INDEX].ready = false;
3553     +
3554     + /* FIXME use something else than big hammer but after few days can not
3555     + * seem to find good combination so reset SDMA blocks as it seems we
3556     + * do not shut them down properly. This fix hibernation and does not
3557     + * affect suspend to ram.
3558     + */
3559     + WREG32(SRBM_SOFT_RESET, SOFT_RESET_SDMA | SOFT_RESET_SDMA1);
3560     + (void)RREG32(SRBM_SOFT_RESET);
3561     + udelay(50);
3562     + WREG32(SRBM_SOFT_RESET, 0);
3563     + (void)RREG32(SRBM_SOFT_RESET);
3564     }
3565    
3566     /**
3567     diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
3568     index f848acfd3fc8..feef136cdb55 100644
3569     --- a/drivers/gpu/drm/radeon/evergreen.c
3570     +++ b/drivers/gpu/drm/radeon/evergreen.c
3571     @@ -4855,7 +4855,7 @@ restart_ih:
3572     return IRQ_NONE;
3573    
3574     rptr = rdev->ih.rptr;
3575     - DRM_DEBUG("r600_irq_process start: rptr %d, wptr %d\n", rptr, wptr);
3576     + DRM_DEBUG("evergreen_irq_process start: rptr %d, wptr %d\n", rptr, wptr);
3577    
3578     /* Order reading of wptr vs. reading of IH ring data */
3579     rmb();
3580     @@ -4873,23 +4873,27 @@ restart_ih:
3581     case 1: /* D1 vblank/vline */
3582     switch (src_data) {
3583     case 0: /* D1 vblank */
3584     - if (rdev->irq.stat_regs.evergreen.disp_int & LB_D1_VBLANK_INTERRUPT) {
3585     - if (rdev->irq.crtc_vblank_int[0]) {
3586     - drm_handle_vblank(rdev->ddev, 0);
3587     - rdev->pm.vblank_sync = true;
3588     - wake_up(&rdev->irq.vblank_queue);
3589     - }
3590     - if (atomic_read(&rdev->irq.pflip[0]))
3591     - radeon_crtc_handle_vblank(rdev, 0);
3592     - rdev->irq.stat_regs.evergreen.disp_int &= ~LB_D1_VBLANK_INTERRUPT;
3593     - DRM_DEBUG("IH: D1 vblank\n");
3594     + if (!(rdev->irq.stat_regs.evergreen.disp_int & LB_D1_VBLANK_INTERRUPT))
3595     + DRM_DEBUG("IH: D1 vblank - IH event w/o asserted irq bit?\n");
3596     +
3597     + if (rdev->irq.crtc_vblank_int[0]) {
3598     + drm_handle_vblank(rdev->ddev, 0);
3599     + rdev->pm.vblank_sync = true;
3600     + wake_up(&rdev->irq.vblank_queue);
3601     }
3602     + if (atomic_read(&rdev->irq.pflip[0]))
3603     + radeon_crtc_handle_vblank(rdev, 0);
3604     + rdev->irq.stat_regs.evergreen.disp_int &= ~LB_D1_VBLANK_INTERRUPT;
3605     + DRM_DEBUG("IH: D1 vblank\n");
3606     +
3607     break;
3608     case 1: /* D1 vline */
3609     - if (rdev->irq.stat_regs.evergreen.disp_int & LB_D1_VLINE_INTERRUPT) {
3610     - rdev->irq.stat_regs.evergreen.disp_int &= ~LB_D1_VLINE_INTERRUPT;
3611     - DRM_DEBUG("IH: D1 vline\n");
3612     - }
3613     + if (!(rdev->irq.stat_regs.evergreen.disp_int & LB_D1_VLINE_INTERRUPT))
3614     + DRM_DEBUG("IH: D1 vline - IH event w/o asserted irq bit?\n");
3615     +
3616     + rdev->irq.stat_regs.evergreen.disp_int &= ~LB_D1_VLINE_INTERRUPT;
3617     + DRM_DEBUG("IH: D1 vline\n");
3618     +
3619     break;
3620     default:
3621     DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
3622     @@ -4899,23 +4903,27 @@ restart_ih:
3623     case 2: /* D2 vblank/vline */
3624     switch (src_data) {
3625     case 0: /* D2 vblank */
3626     - if (rdev->irq.stat_regs.evergreen.disp_int_cont & LB_D2_VBLANK_INTERRUPT) {
3627     - if (rdev->irq.crtc_vblank_int[1]) {
3628     - drm_handle_vblank(rdev->ddev, 1);
3629     - rdev->pm.vblank_sync = true;
3630     - wake_up(&rdev->irq.vblank_queue);
3631     - }
3632     - if (atomic_read(&rdev->irq.pflip[1]))
3633     - radeon_crtc_handle_vblank(rdev, 1);
3634     - rdev->irq.stat_regs.evergreen.disp_int_cont &= ~LB_D2_VBLANK_INTERRUPT;
3635     - DRM_DEBUG("IH: D2 vblank\n");
3636     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont & LB_D2_VBLANK_INTERRUPT))
3637     + DRM_DEBUG("IH: D2 vblank - IH event w/o asserted irq bit?\n");
3638     +
3639     + if (rdev->irq.crtc_vblank_int[1]) {
3640     + drm_handle_vblank(rdev->ddev, 1);
3641     + rdev->pm.vblank_sync = true;
3642     + wake_up(&rdev->irq.vblank_queue);
3643     }
3644     + if (atomic_read(&rdev->irq.pflip[1]))
3645     + radeon_crtc_handle_vblank(rdev, 1);
3646     + rdev->irq.stat_regs.evergreen.disp_int_cont &= ~LB_D2_VBLANK_INTERRUPT;
3647     + DRM_DEBUG("IH: D2 vblank\n");
3648     +
3649     break;
3650     case 1: /* D2 vline */
3651     - if (rdev->irq.stat_regs.evergreen.disp_int_cont & LB_D2_VLINE_INTERRUPT) {
3652     - rdev->irq.stat_regs.evergreen.disp_int_cont &= ~LB_D2_VLINE_INTERRUPT;
3653     - DRM_DEBUG("IH: D2 vline\n");
3654     - }
3655     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont & LB_D2_VLINE_INTERRUPT))
3656     + DRM_DEBUG("IH: D2 vline - IH event w/o asserted irq bit?\n");
3657     +
3658     + rdev->irq.stat_regs.evergreen.disp_int_cont &= ~LB_D2_VLINE_INTERRUPT;
3659     + DRM_DEBUG("IH: D2 vline\n");
3660     +
3661     break;
3662     default:
3663     DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
3664     @@ -4925,23 +4933,27 @@ restart_ih:
3665     case 3: /* D3 vblank/vline */
3666     switch (src_data) {
3667     case 0: /* D3 vblank */
3668     - if (rdev->irq.stat_regs.evergreen.disp_int_cont2 & LB_D3_VBLANK_INTERRUPT) {
3669     - if (rdev->irq.crtc_vblank_int[2]) {
3670     - drm_handle_vblank(rdev->ddev, 2);
3671     - rdev->pm.vblank_sync = true;
3672     - wake_up(&rdev->irq.vblank_queue);
3673     - }
3674     - if (atomic_read(&rdev->irq.pflip[2]))
3675     - radeon_crtc_handle_vblank(rdev, 2);
3676     - rdev->irq.stat_regs.evergreen.disp_int_cont2 &= ~LB_D3_VBLANK_INTERRUPT;
3677     - DRM_DEBUG("IH: D3 vblank\n");
3678     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont2 & LB_D3_VBLANK_INTERRUPT))
3679     + DRM_DEBUG("IH: D3 vblank - IH event w/o asserted irq bit?\n");
3680     +
3681     + if (rdev->irq.crtc_vblank_int[2]) {
3682     + drm_handle_vblank(rdev->ddev, 2);
3683     + rdev->pm.vblank_sync = true;
3684     + wake_up(&rdev->irq.vblank_queue);
3685     }
3686     + if (atomic_read(&rdev->irq.pflip[2]))
3687     + radeon_crtc_handle_vblank(rdev, 2);
3688     + rdev->irq.stat_regs.evergreen.disp_int_cont2 &= ~LB_D3_VBLANK_INTERRUPT;
3689     + DRM_DEBUG("IH: D3 vblank\n");
3690     +
3691     break;
3692     case 1: /* D3 vline */
3693     - if (rdev->irq.stat_regs.evergreen.disp_int_cont2 & LB_D3_VLINE_INTERRUPT) {
3694     - rdev->irq.stat_regs.evergreen.disp_int_cont2 &= ~LB_D3_VLINE_INTERRUPT;
3695     - DRM_DEBUG("IH: D3 vline\n");
3696     - }
3697     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont2 & LB_D3_VLINE_INTERRUPT))
3698     + DRM_DEBUG("IH: D3 vline - IH event w/o asserted irq bit?\n");
3699     +
3700     + rdev->irq.stat_regs.evergreen.disp_int_cont2 &= ~LB_D3_VLINE_INTERRUPT;
3701     + DRM_DEBUG("IH: D3 vline\n");
3702     +
3703     break;
3704     default:
3705     DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
3706     @@ -4951,23 +4963,27 @@ restart_ih:
3707     case 4: /* D4 vblank/vline */
3708     switch (src_data) {
3709     case 0: /* D4 vblank */
3710     - if (rdev->irq.stat_regs.evergreen.disp_int_cont3 & LB_D4_VBLANK_INTERRUPT) {
3711     - if (rdev->irq.crtc_vblank_int[3]) {
3712     - drm_handle_vblank(rdev->ddev, 3);
3713     - rdev->pm.vblank_sync = true;
3714     - wake_up(&rdev->irq.vblank_queue);
3715     - }
3716     - if (atomic_read(&rdev->irq.pflip[3]))
3717     - radeon_crtc_handle_vblank(rdev, 3);
3718     - rdev->irq.stat_regs.evergreen.disp_int_cont3 &= ~LB_D4_VBLANK_INTERRUPT;
3719     - DRM_DEBUG("IH: D4 vblank\n");
3720     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont3 & LB_D4_VBLANK_INTERRUPT))
3721     + DRM_DEBUG("IH: D4 vblank - IH event w/o asserted irq bit?\n");
3722     +
3723     + if (rdev->irq.crtc_vblank_int[3]) {
3724     + drm_handle_vblank(rdev->ddev, 3);
3725     + rdev->pm.vblank_sync = true;
3726     + wake_up(&rdev->irq.vblank_queue);
3727     }
3728     + if (atomic_read(&rdev->irq.pflip[3]))
3729     + radeon_crtc_handle_vblank(rdev, 3);
3730     + rdev->irq.stat_regs.evergreen.disp_int_cont3 &= ~LB_D4_VBLANK_INTERRUPT;
3731     + DRM_DEBUG("IH: D4 vblank\n");
3732     +
3733     break;
3734     case 1: /* D4 vline */
3735     - if (rdev->irq.stat_regs.evergreen.disp_int_cont3 & LB_D4_VLINE_INTERRUPT) {
3736     - rdev->irq.stat_regs.evergreen.disp_int_cont3 &= ~LB_D4_VLINE_INTERRUPT;
3737     - DRM_DEBUG("IH: D4 vline\n");
3738     - }
3739     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont3 & LB_D4_VLINE_INTERRUPT))
3740     + DRM_DEBUG("IH: D4 vline - IH event w/o asserted irq bit?\n");
3741     +
3742     + rdev->irq.stat_regs.evergreen.disp_int_cont3 &= ~LB_D4_VLINE_INTERRUPT;
3743     + DRM_DEBUG("IH: D4 vline\n");
3744     +
3745     break;
3746     default:
3747     DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
3748     @@ -4977,23 +4993,27 @@ restart_ih:
3749     case 5: /* D5 vblank/vline */
3750     switch (src_data) {
3751     case 0: /* D5 vblank */
3752     - if (rdev->irq.stat_regs.evergreen.disp_int_cont4 & LB_D5_VBLANK_INTERRUPT) {
3753     - if (rdev->irq.crtc_vblank_int[4]) {
3754     - drm_handle_vblank(rdev->ddev, 4);
3755     - rdev->pm.vblank_sync = true;
3756     - wake_up(&rdev->irq.vblank_queue);
3757     - }
3758     - if (atomic_read(&rdev->irq.pflip[4]))
3759     - radeon_crtc_handle_vblank(rdev, 4);
3760     - rdev->irq.stat_regs.evergreen.disp_int_cont4 &= ~LB_D5_VBLANK_INTERRUPT;
3761     - DRM_DEBUG("IH: D5 vblank\n");
3762     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont4 & LB_D5_VBLANK_INTERRUPT))
3763     + DRM_DEBUG("IH: D5 vblank - IH event w/o asserted irq bit?\n");
3764     +
3765     + if (rdev->irq.crtc_vblank_int[4]) {
3766     + drm_handle_vblank(rdev->ddev, 4);
3767     + rdev->pm.vblank_sync = true;
3768     + wake_up(&rdev->irq.vblank_queue);
3769     }
3770     + if (atomic_read(&rdev->irq.pflip[4]))
3771     + radeon_crtc_handle_vblank(rdev, 4);
3772     + rdev->irq.stat_regs.evergreen.disp_int_cont4 &= ~LB_D5_VBLANK_INTERRUPT;
3773     + DRM_DEBUG("IH: D5 vblank\n");
3774     +
3775     break;
3776     case 1: /* D5 vline */
3777     - if (rdev->irq.stat_regs.evergreen.disp_int_cont4 & LB_D5_VLINE_INTERRUPT) {
3778     - rdev->irq.stat_regs.evergreen.disp_int_cont4 &= ~LB_D5_VLINE_INTERRUPT;
3779     - DRM_DEBUG("IH: D5 vline\n");
3780     - }
3781     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont4 & LB_D5_VLINE_INTERRUPT))
3782     + DRM_DEBUG("IH: D5 vline - IH event w/o asserted irq bit?\n");
3783     +
3784     + rdev->irq.stat_regs.evergreen.disp_int_cont4 &= ~LB_D5_VLINE_INTERRUPT;
3785     + DRM_DEBUG("IH: D5 vline\n");
3786     +
3787     break;
3788     default:
3789     DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
3790     @@ -5003,23 +5023,27 @@ restart_ih:
3791     case 6: /* D6 vblank/vline */
3792     switch (src_data) {
3793     case 0: /* D6 vblank */
3794     - if (rdev->irq.stat_regs.evergreen.disp_int_cont5 & LB_D6_VBLANK_INTERRUPT) {
3795     - if (rdev->irq.crtc_vblank_int[5]) {
3796     - drm_handle_vblank(rdev->ddev, 5);
3797     - rdev->pm.vblank_sync = true;
3798     - wake_up(&rdev->irq.vblank_queue);
3799     - }
3800     - if (atomic_read(&rdev->irq.pflip[5]))
3801     - radeon_crtc_handle_vblank(rdev, 5);
3802     - rdev->irq.stat_regs.evergreen.disp_int_cont5 &= ~LB_D6_VBLANK_INTERRUPT;
3803     - DRM_DEBUG("IH: D6 vblank\n");
3804     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont5 & LB_D6_VBLANK_INTERRUPT))
3805     + DRM_DEBUG("IH: D6 vblank - IH event w/o asserted irq bit?\n");
3806     +
3807     + if (rdev->irq.crtc_vblank_int[5]) {
3808     + drm_handle_vblank(rdev->ddev, 5);
3809     + rdev->pm.vblank_sync = true;
3810     + wake_up(&rdev->irq.vblank_queue);
3811     }
3812     + if (atomic_read(&rdev->irq.pflip[5]))
3813     + radeon_crtc_handle_vblank(rdev, 5);
3814     + rdev->irq.stat_regs.evergreen.disp_int_cont5 &= ~LB_D6_VBLANK_INTERRUPT;
3815     + DRM_DEBUG("IH: D6 vblank\n");
3816     +
3817     break;
3818     case 1: /* D6 vline */
3819     - if (rdev->irq.stat_regs.evergreen.disp_int_cont5 & LB_D6_VLINE_INTERRUPT) {
3820     - rdev->irq.stat_regs.evergreen.disp_int_cont5 &= ~LB_D6_VLINE_INTERRUPT;
3821     - DRM_DEBUG("IH: D6 vline\n");
3822     - }
3823     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont5 & LB_D6_VLINE_INTERRUPT))
3824     + DRM_DEBUG("IH: D6 vline - IH event w/o asserted irq bit?\n");
3825     +
3826     + rdev->irq.stat_regs.evergreen.disp_int_cont5 &= ~LB_D6_VLINE_INTERRUPT;
3827     + DRM_DEBUG("IH: D6 vline\n");
3828     +
3829     break;
3830     default:
3831     DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
3832     @@ -5039,88 +5063,100 @@ restart_ih:
3833     case 42: /* HPD hotplug */
3834     switch (src_data) {
3835     case 0:
3836     - if (rdev->irq.stat_regs.evergreen.disp_int & DC_HPD1_INTERRUPT) {
3837     - rdev->irq.stat_regs.evergreen.disp_int &= ~DC_HPD1_INTERRUPT;
3838     - queue_hotplug = true;
3839     - DRM_DEBUG("IH: HPD1\n");
3840     - }
3841     + if (!(rdev->irq.stat_regs.evergreen.disp_int & DC_HPD1_INTERRUPT))
3842     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3843     +
3844     + rdev->irq.stat_regs.evergreen.disp_int &= ~DC_HPD1_INTERRUPT;
3845     + queue_hotplug = true;
3846     + DRM_DEBUG("IH: HPD1\n");
3847     break;
3848     case 1:
3849     - if (rdev->irq.stat_regs.evergreen.disp_int_cont & DC_HPD2_INTERRUPT) {
3850     - rdev->irq.stat_regs.evergreen.disp_int_cont &= ~DC_HPD2_INTERRUPT;
3851     - queue_hotplug = true;
3852     - DRM_DEBUG("IH: HPD2\n");
3853     - }
3854     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont & DC_HPD2_INTERRUPT))
3855     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3856     +
3857     + rdev->irq.stat_regs.evergreen.disp_int_cont &= ~DC_HPD2_INTERRUPT;
3858     + queue_hotplug = true;
3859     + DRM_DEBUG("IH: HPD2\n");
3860     break;
3861     case 2:
3862     - if (rdev->irq.stat_regs.evergreen.disp_int_cont2 & DC_HPD3_INTERRUPT) {
3863     - rdev->irq.stat_regs.evergreen.disp_int_cont2 &= ~DC_HPD3_INTERRUPT;
3864     - queue_hotplug = true;
3865     - DRM_DEBUG("IH: HPD3\n");
3866     - }
3867     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont2 & DC_HPD3_INTERRUPT))
3868     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3869     +
3870     + rdev->irq.stat_regs.evergreen.disp_int_cont2 &= ~DC_HPD3_INTERRUPT;
3871     + queue_hotplug = true;
3872     + DRM_DEBUG("IH: HPD3\n");
3873     break;
3874     case 3:
3875     - if (rdev->irq.stat_regs.evergreen.disp_int_cont3 & DC_HPD4_INTERRUPT) {
3876     - rdev->irq.stat_regs.evergreen.disp_int_cont3 &= ~DC_HPD4_INTERRUPT;
3877     - queue_hotplug = true;
3878     - DRM_DEBUG("IH: HPD4\n");
3879     - }
3880     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont3 & DC_HPD4_INTERRUPT))
3881     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3882     +
3883     + rdev->irq.stat_regs.evergreen.disp_int_cont3 &= ~DC_HPD4_INTERRUPT;
3884     + queue_hotplug = true;
3885     + DRM_DEBUG("IH: HPD4\n");
3886     break;
3887     case 4:
3888     - if (rdev->irq.stat_regs.evergreen.disp_int_cont4 & DC_HPD5_INTERRUPT) {
3889     - rdev->irq.stat_regs.evergreen.disp_int_cont4 &= ~DC_HPD5_INTERRUPT;
3890     - queue_hotplug = true;
3891     - DRM_DEBUG("IH: HPD5\n");
3892     - }
3893     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont4 & DC_HPD5_INTERRUPT))
3894     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3895     +
3896     + rdev->irq.stat_regs.evergreen.disp_int_cont4 &= ~DC_HPD5_INTERRUPT;
3897     + queue_hotplug = true;
3898     + DRM_DEBUG("IH: HPD5\n");
3899     break;
3900     case 5:
3901     - if (rdev->irq.stat_regs.evergreen.disp_int_cont5 & DC_HPD6_INTERRUPT) {
3902     - rdev->irq.stat_regs.evergreen.disp_int_cont5 &= ~DC_HPD6_INTERRUPT;
3903     - queue_hotplug = true;
3904     - DRM_DEBUG("IH: HPD6\n");
3905     - }
3906     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont5 & DC_HPD6_INTERRUPT))
3907     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3908     +
3909     + rdev->irq.stat_regs.evergreen.disp_int_cont5 &= ~DC_HPD6_INTERRUPT;
3910     + queue_hotplug = true;
3911     + DRM_DEBUG("IH: HPD6\n");
3912     break;
3913     case 6:
3914     - if (rdev->irq.stat_regs.evergreen.disp_int & DC_HPD1_RX_INTERRUPT) {
3915     - rdev->irq.stat_regs.evergreen.disp_int &= ~DC_HPD1_RX_INTERRUPT;
3916     - queue_dp = true;
3917     - DRM_DEBUG("IH: HPD_RX 1\n");
3918     - }
3919     + if (!(rdev->irq.stat_regs.evergreen.disp_int & DC_HPD1_RX_INTERRUPT))
3920     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3921     +
3922     + rdev->irq.stat_regs.evergreen.disp_int &= ~DC_HPD1_RX_INTERRUPT;
3923     + queue_dp = true;
3924     + DRM_DEBUG("IH: HPD_RX 1\n");
3925     break;
3926     case 7:
3927     - if (rdev->irq.stat_regs.evergreen.disp_int_cont & DC_HPD2_RX_INTERRUPT) {
3928     - rdev->irq.stat_regs.evergreen.disp_int_cont &= ~DC_HPD2_RX_INTERRUPT;
3929     - queue_dp = true;
3930     - DRM_DEBUG("IH: HPD_RX 2\n");
3931     - }
3932     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont & DC_HPD2_RX_INTERRUPT))
3933     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3934     +
3935     + rdev->irq.stat_regs.evergreen.disp_int_cont &= ~DC_HPD2_RX_INTERRUPT;
3936     + queue_dp = true;
3937     + DRM_DEBUG("IH: HPD_RX 2\n");
3938     break;
3939     case 8:
3940     - if (rdev->irq.stat_regs.evergreen.disp_int_cont2 & DC_HPD3_RX_INTERRUPT) {
3941     - rdev->irq.stat_regs.evergreen.disp_int_cont2 &= ~DC_HPD3_RX_INTERRUPT;
3942     - queue_dp = true;
3943     - DRM_DEBUG("IH: HPD_RX 3\n");
3944     - }
3945     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont2 & DC_HPD3_RX_INTERRUPT))
3946     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3947     +
3948     + rdev->irq.stat_regs.evergreen.disp_int_cont2 &= ~DC_HPD3_RX_INTERRUPT;
3949     + queue_dp = true;
3950     + DRM_DEBUG("IH: HPD_RX 3\n");
3951     break;
3952     case 9:
3953     - if (rdev->irq.stat_regs.evergreen.disp_int_cont3 & DC_HPD4_RX_INTERRUPT) {
3954     - rdev->irq.stat_regs.evergreen.disp_int_cont3 &= ~DC_HPD4_RX_INTERRUPT;
3955     - queue_dp = true;
3956     - DRM_DEBUG("IH: HPD_RX 4\n");
3957     - }
3958     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont3 & DC_HPD4_RX_INTERRUPT))
3959     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3960     +
3961     + rdev->irq.stat_regs.evergreen.disp_int_cont3 &= ~DC_HPD4_RX_INTERRUPT;
3962     + queue_dp = true;
3963     + DRM_DEBUG("IH: HPD_RX 4\n");
3964     break;
3965     case 10:
3966     - if (rdev->irq.stat_regs.evergreen.disp_int_cont4 & DC_HPD5_RX_INTERRUPT) {
3967     - rdev->irq.stat_regs.evergreen.disp_int_cont4 &= ~DC_HPD5_RX_INTERRUPT;
3968     - queue_dp = true;
3969     - DRM_DEBUG("IH: HPD_RX 5\n");
3970     - }
3971     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont4 & DC_HPD5_RX_INTERRUPT))
3972     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3973     +
3974     + rdev->irq.stat_regs.evergreen.disp_int_cont4 &= ~DC_HPD5_RX_INTERRUPT;
3975     + queue_dp = true;
3976     + DRM_DEBUG("IH: HPD_RX 5\n");
3977     break;
3978     case 11:
3979     - if (rdev->irq.stat_regs.evergreen.disp_int_cont5 & DC_HPD6_RX_INTERRUPT) {
3980     - rdev->irq.stat_regs.evergreen.disp_int_cont5 &= ~DC_HPD6_RX_INTERRUPT;
3981     - queue_dp = true;
3982     - DRM_DEBUG("IH: HPD_RX 6\n");
3983     - }
3984     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont5 & DC_HPD6_RX_INTERRUPT))
3985     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
3986     +
3987     + rdev->irq.stat_regs.evergreen.disp_int_cont5 &= ~DC_HPD6_RX_INTERRUPT;
3988     + queue_dp = true;
3989     + DRM_DEBUG("IH: HPD_RX 6\n");
3990     break;
3991     default:
3992     DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
3993     @@ -5130,46 +5166,52 @@ restart_ih:
3994     case 44: /* hdmi */
3995     switch (src_data) {
3996     case 0:
3997     - if (rdev->irq.stat_regs.evergreen.afmt_status1 & AFMT_AZ_FORMAT_WTRIG) {
3998     - rdev->irq.stat_regs.evergreen.afmt_status1 &= ~AFMT_AZ_FORMAT_WTRIG;
3999     - queue_hdmi = true;
4000     - DRM_DEBUG("IH: HDMI0\n");
4001     - }
4002     + if (!(rdev->irq.stat_regs.evergreen.afmt_status1 & AFMT_AZ_FORMAT_WTRIG))
4003     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
4004     +
4005     + rdev->irq.stat_regs.evergreen.afmt_status1 &= ~AFMT_AZ_FORMAT_WTRIG;
4006     + queue_hdmi = true;
4007     + DRM_DEBUG("IH: HDMI0\n");
4008     break;
4009     case 1:
4010     - if (rdev->irq.stat_regs.evergreen.afmt_status2 & AFMT_AZ_FORMAT_WTRIG) {
4011     - rdev->irq.stat_regs.evergreen.afmt_status2 &= ~AFMT_AZ_FORMAT_WTRIG;
4012     - queue_hdmi = true;
4013     - DRM_DEBUG("IH: HDMI1\n");
4014     - }
4015     + if (!(rdev->irq.stat_regs.evergreen.afmt_status2 & AFMT_AZ_FORMAT_WTRIG))
4016     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
4017     +
4018     + rdev->irq.stat_regs.evergreen.afmt_status2 &= ~AFMT_AZ_FORMAT_WTRIG;
4019     + queue_hdmi = true;
4020     + DRM_DEBUG("IH: HDMI1\n");
4021     break;
4022     case 2:
4023     - if (rdev->irq.stat_regs.evergreen.afmt_status3 & AFMT_AZ_FORMAT_WTRIG) {
4024     - rdev->irq.stat_regs.evergreen.afmt_status3 &= ~AFMT_AZ_FORMAT_WTRIG;
4025     - queue_hdmi = true;
4026     - DRM_DEBUG("IH: HDMI2\n");
4027     - }
4028     + if (!(rdev->irq.stat_regs.evergreen.afmt_status3 & AFMT_AZ_FORMAT_WTRIG))
4029     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
4030     +
4031     + rdev->irq.stat_regs.evergreen.afmt_status3 &= ~AFMT_AZ_FORMAT_WTRIG;
4032     + queue_hdmi = true;
4033     + DRM_DEBUG("IH: HDMI2\n");
4034     break;
4035     case 3:
4036     - if (rdev->irq.stat_regs.evergreen.afmt_status4 & AFMT_AZ_FORMAT_WTRIG) {
4037     - rdev->irq.stat_regs.evergreen.afmt_status4 &= ~AFMT_AZ_FORMAT_WTRIG;
4038     - queue_hdmi = true;
4039     - DRM_DEBUG("IH: HDMI3\n");
4040     - }
4041     + if (!(rdev->irq.stat_regs.evergreen.afmt_status4 & AFMT_AZ_FORMAT_WTRIG))
4042     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
4043     +
4044     + rdev->irq.stat_regs.evergreen.afmt_status4 &= ~AFMT_AZ_FORMAT_WTRIG;
4045     + queue_hdmi = true;
4046     + DRM_DEBUG("IH: HDMI3\n");
4047     break;
4048     case 4:
4049     - if (rdev->irq.stat_regs.evergreen.afmt_status5 & AFMT_AZ_FORMAT_WTRIG) {
4050     - rdev->irq.stat_regs.evergreen.afmt_status5 &= ~AFMT_AZ_FORMAT_WTRIG;
4051     - queue_hdmi = true;
4052     - DRM_DEBUG("IH: HDMI4\n");
4053     - }
4054     + if (!(rdev->irq.stat_regs.evergreen.afmt_status5 & AFMT_AZ_FORMAT_WTRIG))
4055     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
4056     +
4057     + rdev->irq.stat_regs.evergreen.afmt_status5 &= ~AFMT_AZ_FORMAT_WTRIG;
4058     + queue_hdmi = true;
4059     + DRM_DEBUG("IH: HDMI4\n");
4060     break;
4061     case 5:
4062     - if (rdev->irq.stat_regs.evergreen.afmt_status6 & AFMT_AZ_FORMAT_WTRIG) {
4063     - rdev->irq.stat_regs.evergreen.afmt_status6 &= ~AFMT_AZ_FORMAT_WTRIG;
4064     - queue_hdmi = true;
4065     - DRM_DEBUG("IH: HDMI5\n");
4066     - }
4067     + if (!(rdev->irq.stat_regs.evergreen.afmt_status6 & AFMT_AZ_FORMAT_WTRIG))
4068     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
4069     +
4070     + rdev->irq.stat_regs.evergreen.afmt_status6 &= ~AFMT_AZ_FORMAT_WTRIG;
4071     + queue_hdmi = true;
4072     + DRM_DEBUG("IH: HDMI5\n");
4073     break;
4074     default:
4075     DRM_ERROR("Unhandled interrupt: %d %d\n", src_id, src_data);
4076     diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
4077     index 8f6d862a1882..21e479fefcab 100644
4078     --- a/drivers/gpu/drm/radeon/r600.c
4079     +++ b/drivers/gpu/drm/radeon/r600.c
4080     @@ -4039,23 +4039,27 @@ restart_ih:
4081     case 1: /* D1 vblank/vline */
4082     switch (src_data) {
4083     case 0: /* D1 vblank */
4084     - if (rdev->irq.stat_regs.r600.disp_int & LB_D1_VBLANK_INTERRUPT) {
4085     - if (rdev->irq.crtc_vblank_int[0]) {
4086     - drm_handle_vblank(rdev->ddev, 0);
4087     - rdev->pm.vblank_sync = true;
4088     - wake_up(&rdev->irq.vblank_queue);
4089     - }
4090     - if (atomic_read(&rdev->irq.pflip[0]))
4091     - radeon_crtc_handle_vblank(rdev, 0);
4092     - rdev->irq.stat_regs.r600.disp_int &= ~LB_D1_VBLANK_INTERRUPT;
4093     - DRM_DEBUG("IH: D1 vblank\n");
4094     + if (!(rdev->irq.stat_regs.r600.disp_int & LB_D1_VBLANK_INTERRUPT))
4095     + DRM_DEBUG("IH: D1 vblank - IH event w/o asserted irq bit?\n");
4096     +
4097     + if (rdev->irq.crtc_vblank_int[0]) {
4098     + drm_handle_vblank(rdev->ddev, 0);
4099     + rdev->pm.vblank_sync = true;
4100     + wake_up(&rdev->irq.vblank_queue);
4101     }
4102     + if (atomic_read(&rdev->irq.pflip[0]))
4103     + radeon_crtc_handle_vblank(rdev, 0);
4104     + rdev->irq.stat_regs.r600.disp_int &= ~LB_D1_VBLANK_INTERRUPT;
4105     + DRM_DEBUG("IH: D1 vblank\n");
4106     +
4107     break;
4108     case 1: /* D1 vline */
4109     - if (rdev->irq.stat_regs.r600.disp_int & LB_D1_VLINE_INTERRUPT) {
4110     - rdev->irq.stat_regs.r600.disp_int &= ~LB_D1_VLINE_INTERRUPT;
4111     - DRM_DEBUG("IH: D1 vline\n");
4112     - }
4113     + if (!(rdev->irq.stat_regs.r600.disp_int & LB_D1_VLINE_INTERRUPT))
4114     + DRM_DEBUG("IH: D1 vline - IH event w/o asserted irq bit?\n");
4115     +
4116     + rdev->irq.stat_regs.r600.disp_int &= ~LB_D1_VLINE_INTERRUPT;
4117     + DRM_DEBUG("IH: D1 vline\n");
4118     +
4119     break;
4120     default:
4121     DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
4122     @@ -4065,23 +4069,27 @@ restart_ih:
4123     case 5: /* D2 vblank/vline */
4124     switch (src_data) {
4125     case 0: /* D2 vblank */
4126     - if (rdev->irq.stat_regs.r600.disp_int & LB_D2_VBLANK_INTERRUPT) {
4127     - if (rdev->irq.crtc_vblank_int[1]) {
4128     - drm_handle_vblank(rdev->ddev, 1);
4129     - rdev->pm.vblank_sync = true;
4130     - wake_up(&rdev->irq.vblank_queue);
4131     - }
4132     - if (atomic_read(&rdev->irq.pflip[1]))
4133     - radeon_crtc_handle_vblank(rdev, 1);
4134     - rdev->irq.stat_regs.r600.disp_int &= ~LB_D2_VBLANK_INTERRUPT;
4135     - DRM_DEBUG("IH: D2 vblank\n");
4136     + if (!(rdev->irq.stat_regs.r600.disp_int & LB_D2_VBLANK_INTERRUPT))
4137     + DRM_DEBUG("IH: D2 vblank - IH event w/o asserted irq bit?\n");
4138     +
4139     + if (rdev->irq.crtc_vblank_int[1]) {
4140     + drm_handle_vblank(rdev->ddev, 1);
4141     + rdev->pm.vblank_sync = true;
4142     + wake_up(&rdev->irq.vblank_queue);
4143     }
4144     + if (atomic_read(&rdev->irq.pflip[1]))
4145     + radeon_crtc_handle_vblank(rdev, 1);
4146     + rdev->irq.stat_regs.r600.disp_int &= ~LB_D2_VBLANK_INTERRUPT;
4147     + DRM_DEBUG("IH: D2 vblank\n");
4148     +
4149     break;
4150     case 1: /* D1 vline */
4151     - if (rdev->irq.stat_regs.r600.disp_int & LB_D2_VLINE_INTERRUPT) {
4152     - rdev->irq.stat_regs.r600.disp_int &= ~LB_D2_VLINE_INTERRUPT;
4153     - DRM_DEBUG("IH: D2 vline\n");
4154     - }
4155     + if (!(rdev->irq.stat_regs.r600.disp_int & LB_D2_VLINE_INTERRUPT))
4156     + DRM_DEBUG("IH: D2 vline - IH event w/o asserted irq bit?\n");
4157     +
4158     + rdev->irq.stat_regs.r600.disp_int &= ~LB_D2_VLINE_INTERRUPT;
4159     + DRM_DEBUG("IH: D2 vline\n");
4160     +
4161     break;
4162     default:
4163     DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
4164     @@ -4101,46 +4109,53 @@ restart_ih:
4165     case 19: /* HPD/DAC hotplug */
4166     switch (src_data) {
4167     case 0:
4168     - if (rdev->irq.stat_regs.r600.disp_int & DC_HPD1_INTERRUPT) {
4169     - rdev->irq.stat_regs.r600.disp_int &= ~DC_HPD1_INTERRUPT;
4170     - queue_hotplug = true;
4171     - DRM_DEBUG("IH: HPD1\n");
4172     - }
4173     + if (!(rdev->irq.stat_regs.r600.disp_int & DC_HPD1_INTERRUPT))
4174     + DRM_DEBUG("IH: HPD1 - IH event w/o asserted irq bit?\n");
4175     +
4176     + rdev->irq.stat_regs.r600.disp_int &= ~DC_HPD1_INTERRUPT;
4177     + queue_hotplug = true;
4178     + DRM_DEBUG("IH: HPD1\n");
4179     break;
4180     case 1:
4181     - if (rdev->irq.stat_regs.r600.disp_int & DC_HPD2_INTERRUPT) {
4182     - rdev->irq.stat_regs.r600.disp_int &= ~DC_HPD2_INTERRUPT;
4183     - queue_hotplug = true;
4184     - DRM_DEBUG("IH: HPD2\n");
4185     - }
4186     + if (!(rdev->irq.stat_regs.r600.disp_int & DC_HPD2_INTERRUPT))
4187     + DRM_DEBUG("IH: HPD2 - IH event w/o asserted irq bit?\n");
4188     +
4189     + rdev->irq.stat_regs.r600.disp_int &= ~DC_HPD2_INTERRUPT;
4190     + queue_hotplug = true;
4191     + DRM_DEBUG("IH: HPD2\n");
4192     break;
4193     case 4:
4194     - if (rdev->irq.stat_regs.r600.disp_int_cont & DC_HPD3_INTERRUPT) {
4195     - rdev->irq.stat_regs.r600.disp_int_cont &= ~DC_HPD3_INTERRUPT;
4196     - queue_hotplug = true;
4197     - DRM_DEBUG("IH: HPD3\n");
4198     - }
4199     + if (!(rdev->irq.stat_regs.r600.disp_int_cont & DC_HPD3_INTERRUPT))
4200     + DRM_DEBUG("IH: HPD3 - IH event w/o asserted irq bit?\n");
4201     +
4202     + rdev->irq.stat_regs.r600.disp_int_cont &= ~DC_HPD3_INTERRUPT;
4203     + queue_hotplug = true;
4204     + DRM_DEBUG("IH: HPD3\n");
4205     break;
4206     case 5:
4207     - if (rdev->irq.stat_regs.r600.disp_int_cont & DC_HPD4_INTERRUPT) {
4208     - rdev->irq.stat_regs.r600.disp_int_cont &= ~DC_HPD4_INTERRUPT;
4209     - queue_hotplug = true;
4210     - DRM_DEBUG("IH: HPD4\n");
4211     - }
4212     + if (!(rdev->irq.stat_regs.r600.disp_int_cont & DC_HPD4_INTERRUPT))
4213     + DRM_DEBUG("IH: HPD4 - IH event w/o asserted irq bit?\n");
4214     +
4215     + rdev->irq.stat_regs.r600.disp_int_cont &= ~DC_HPD4_INTERRUPT;
4216     + queue_hotplug = true;
4217     + DRM_DEBUG("IH: HPD4\n");
4218     break;
4219     case 10:
4220     - if (rdev->irq.stat_regs.r600.disp_int_cont2 & DC_HPD5_INTERRUPT) {
4221     - rdev->irq.stat_regs.r600.disp_int_cont2 &= ~DC_HPD5_INTERRUPT;
4222     - queue_hotplug = true;
4223     - DRM_DEBUG("IH: HPD5\n");
4224     - }
4225     + if (!(rdev->irq.stat_regs.r600.disp_int_cont2 & DC_HPD5_INTERRUPT))
4226     + DRM_DEBUG("IH: HPD5 - IH event w/o asserted irq bit?\n");
4227     +
4228     + rdev->irq.stat_regs.r600.disp_int_cont2 &= ~DC_HPD5_INTERRUPT;
4229     + queue_hotplug = true;
4230     + DRM_DEBUG("IH: HPD5\n");
4231     break;
4232     case 12:
4233     - if (rdev->irq.stat_regs.r600.disp_int_cont2 & DC_HPD6_INTERRUPT) {
4234     - rdev->irq.stat_regs.r600.disp_int_cont2 &= ~DC_HPD6_INTERRUPT;
4235     - queue_hotplug = true;
4236     - DRM_DEBUG("IH: HPD6\n");
4237     - }
4238     + if (!(rdev->irq.stat_regs.r600.disp_int_cont2 & DC_HPD6_INTERRUPT))
4239     + DRM_DEBUG("IH: HPD6 - IH event w/o asserted irq bit?\n");
4240     +
4241     + rdev->irq.stat_regs.r600.disp_int_cont2 &= ~DC_HPD6_INTERRUPT;
4242     + queue_hotplug = true;
4243     + DRM_DEBUG("IH: HPD6\n");
4244     +
4245     break;
4246     default:
4247     DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
4248     @@ -4150,18 +4165,22 @@ restart_ih:
4249     case 21: /* hdmi */
4250     switch (src_data) {
4251     case 4:
4252     - if (rdev->irq.stat_regs.r600.hdmi0_status & HDMI0_AZ_FORMAT_WTRIG) {
4253     - rdev->irq.stat_regs.r600.hdmi0_status &= ~HDMI0_AZ_FORMAT_WTRIG;
4254     - queue_hdmi = true;
4255     - DRM_DEBUG("IH: HDMI0\n");
4256     - }
4257     + if (!(rdev->irq.stat_regs.r600.hdmi0_status & HDMI0_AZ_FORMAT_WTRIG))
4258     + DRM_DEBUG("IH: HDMI0 - IH event w/o asserted irq bit?\n");
4259     +
4260     + rdev->irq.stat_regs.r600.hdmi0_status &= ~HDMI0_AZ_FORMAT_WTRIG;
4261     + queue_hdmi = true;
4262     + DRM_DEBUG("IH: HDMI0\n");
4263     +
4264     break;
4265     case 5:
4266     - if (rdev->irq.stat_regs.r600.hdmi1_status & HDMI0_AZ_FORMAT_WTRIG) {
4267     - rdev->irq.stat_regs.r600.hdmi1_status &= ~HDMI0_AZ_FORMAT_WTRIG;
4268     - queue_hdmi = true;
4269     - DRM_DEBUG("IH: HDMI1\n");
4270     - }
4271     + if (!(rdev->irq.stat_regs.r600.hdmi1_status & HDMI0_AZ_FORMAT_WTRIG))
4272     + DRM_DEBUG("IH: HDMI1 - IH event w/o asserted irq bit?\n");
4273     +
4274     + rdev->irq.stat_regs.r600.hdmi1_status &= ~HDMI0_AZ_FORMAT_WTRIG;
4275     + queue_hdmi = true;
4276     + DRM_DEBUG("IH: HDMI1\n");
4277     +
4278     break;
4279     default:
4280     DRM_ERROR("Unhandled interrupt: %d %d\n", src_id, src_data);
4281     diff --git a/drivers/gpu/drm/radeon/radeon_audio.c b/drivers/gpu/drm/radeon/radeon_audio.c
4282     index 25191f126f3b..fa719c53449b 100644
4283     --- a/drivers/gpu/drm/radeon/radeon_audio.c
4284     +++ b/drivers/gpu/drm/radeon/radeon_audio.c
4285     @@ -242,6 +242,13 @@ static struct radeon_audio_funcs dce6_dp_funcs = {
4286     .dpms = evergreen_dp_enable,
4287     };
4288    
4289     +static void radeon_audio_enable(struct radeon_device *rdev,
4290     + struct r600_audio_pin *pin, u8 enable_mask)
4291     +{
4292     + if (rdev->audio.funcs->enable)
4293     + rdev->audio.funcs->enable(rdev, pin, enable_mask);
4294     +}
4295     +
4296     static void radeon_audio_interface_init(struct radeon_device *rdev)
4297     {
4298     if (ASIC_IS_DCE6(rdev)) {
4299     @@ -307,7 +314,7 @@ int radeon_audio_init(struct radeon_device *rdev)
4300    
4301     /* disable audio. it will be set up later */
4302     for (i = 0; i < rdev->audio.num_pins; i++)
4303     - radeon_audio_enable(rdev, &rdev->audio.pin[i], false);
4304     + radeon_audio_enable(rdev, &rdev->audio.pin[i], 0);
4305    
4306     return 0;
4307     }
4308     @@ -443,13 +450,6 @@ static void radeon_audio_select_pin(struct drm_encoder *encoder)
4309     radeon_encoder->audio->select_pin(encoder);
4310     }
4311    
4312     -void radeon_audio_enable(struct radeon_device *rdev,
4313     - struct r600_audio_pin *pin, u8 enable_mask)
4314     -{
4315     - if (rdev->audio.funcs->enable)
4316     - rdev->audio.funcs->enable(rdev, pin, enable_mask);
4317     -}
4318     -
4319     void radeon_audio_detect(struct drm_connector *connector,
4320     enum drm_connector_status status)
4321     {
4322     @@ -469,22 +469,22 @@ void radeon_audio_detect(struct drm_connector *connector,
4323     dig = radeon_encoder->enc_priv;
4324    
4325     if (status == connector_status_connected) {
4326     - struct radeon_connector *radeon_connector;
4327     - int sink_type;
4328     -
4329     if (!drm_detect_monitor_audio(radeon_connector_edid(connector))) {
4330     radeon_encoder->audio = NULL;
4331     return;
4332     }
4333    
4334     - radeon_connector = to_radeon_connector(connector);
4335     - sink_type = radeon_dp_getsinktype(radeon_connector);
4336     + if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) {
4337     + struct radeon_connector *radeon_connector = to_radeon_connector(connector);
4338    
4339     - if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort &&
4340     - sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT)
4341     - radeon_encoder->audio = rdev->audio.dp_funcs;
4342     - else
4343     + if (radeon_dp_getsinktype(radeon_connector) ==
4344     + CONNECTOR_OBJECT_ID_DISPLAYPORT)
4345     + radeon_encoder->audio = rdev->audio.dp_funcs;
4346     + else
4347     + radeon_encoder->audio = rdev->audio.hdmi_funcs;
4348     + } else {
4349     radeon_encoder->audio = rdev->audio.hdmi_funcs;
4350     + }
4351    
4352     dig->afmt->pin = radeon_audio_get_pin(connector->encoder);
4353     radeon_audio_enable(rdev, dig->afmt->pin, 0xf);
4354     @@ -502,7 +502,7 @@ void radeon_audio_fini(struct radeon_device *rdev)
4355     return;
4356    
4357     for (i = 0; i < rdev->audio.num_pins; i++)
4358     - radeon_audio_enable(rdev, &rdev->audio.pin[i], false);
4359     + radeon_audio_enable(rdev, &rdev->audio.pin[i], 0);
4360    
4361     rdev->audio.enabled = false;
4362     }
4363     diff --git a/drivers/gpu/drm/radeon/radeon_audio.h b/drivers/gpu/drm/radeon/radeon_audio.h
4364     index c92d059ab204..8438304f7139 100644
4365     --- a/drivers/gpu/drm/radeon/radeon_audio.h
4366     +++ b/drivers/gpu/drm/radeon/radeon_audio.h
4367     @@ -74,8 +74,6 @@ u32 radeon_audio_endpoint_rreg(struct radeon_device *rdev,
4368     void radeon_audio_endpoint_wreg(struct radeon_device *rdev,
4369     u32 offset, u32 reg, u32 v);
4370     struct r600_audio_pin *radeon_audio_get_pin(struct drm_encoder *encoder);
4371     -void radeon_audio_enable(struct radeon_device *rdev,
4372     - struct r600_audio_pin *pin, u8 enable_mask);
4373     void radeon_audio_fini(struct radeon_device *rdev);
4374     void radeon_audio_mode_set(struct drm_encoder *encoder,
4375     struct drm_display_mode *mode);
4376     diff --git a/drivers/gpu/drm/radeon/radeon_cursor.c b/drivers/gpu/drm/radeon/radeon_cursor.c
4377     index 45e54060ee97..fa661744a1f5 100644
4378     --- a/drivers/gpu/drm/radeon/radeon_cursor.c
4379     +++ b/drivers/gpu/drm/radeon/radeon_cursor.c
4380     @@ -205,8 +205,9 @@ static int radeon_cursor_move_locked(struct drm_crtc *crtc, int x, int y)
4381     | (x << 16)
4382     | y));
4383     /* offset is from DISP(2)_BASE_ADDRESS */
4384     - WREG32(RADEON_CUR_OFFSET + radeon_crtc->crtc_offset, (radeon_crtc->legacy_cursor_offset +
4385     - (yorigin * 256)));
4386     + WREG32(RADEON_CUR_OFFSET + radeon_crtc->crtc_offset,
4387     + radeon_crtc->cursor_addr - radeon_crtc->legacy_display_base_addr +
4388     + yorigin * 256);
4389     }
4390    
4391     radeon_crtc->cursor_x = x;
4392     @@ -227,51 +228,32 @@ int radeon_crtc_cursor_move(struct drm_crtc *crtc,
4393     return ret;
4394     }
4395    
4396     -static int radeon_set_cursor(struct drm_crtc *crtc, struct drm_gem_object *obj)
4397     +static void radeon_set_cursor(struct drm_crtc *crtc)
4398     {
4399     struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
4400     struct radeon_device *rdev = crtc->dev->dev_private;
4401     - struct radeon_bo *robj = gem_to_radeon_bo(obj);
4402     - uint64_t gpu_addr;
4403     - int ret;
4404     -
4405     - ret = radeon_bo_reserve(robj, false);
4406     - if (unlikely(ret != 0))
4407     - goto fail;
4408     - /* Only 27 bit offset for legacy cursor */
4409     - ret = radeon_bo_pin_restricted(robj, RADEON_GEM_DOMAIN_VRAM,
4410     - ASIC_IS_AVIVO(rdev) ? 0 : 1 << 27,
4411     - &gpu_addr);
4412     - radeon_bo_unreserve(robj);
4413     - if (ret)
4414     - goto fail;
4415    
4416     if (ASIC_IS_DCE4(rdev)) {
4417     WREG32(EVERGREEN_CUR_SURFACE_ADDRESS_HIGH + radeon_crtc->crtc_offset,
4418     - upper_32_bits(gpu_addr));
4419     + upper_32_bits(radeon_crtc->cursor_addr));
4420     WREG32(EVERGREEN_CUR_SURFACE_ADDRESS + radeon_crtc->crtc_offset,
4421     - gpu_addr & 0xffffffff);
4422     + lower_32_bits(radeon_crtc->cursor_addr));
4423     } else if (ASIC_IS_AVIVO(rdev)) {
4424     if (rdev->family >= CHIP_RV770) {
4425     if (radeon_crtc->crtc_id)
4426     - WREG32(R700_D2CUR_SURFACE_ADDRESS_HIGH, upper_32_bits(gpu_addr));
4427     + WREG32(R700_D2CUR_SURFACE_ADDRESS_HIGH,
4428     + upper_32_bits(radeon_crtc->cursor_addr));
4429     else
4430     - WREG32(R700_D1CUR_SURFACE_ADDRESS_HIGH, upper_32_bits(gpu_addr));
4431     + WREG32(R700_D1CUR_SURFACE_ADDRESS_HIGH,
4432     + upper_32_bits(radeon_crtc->cursor_addr));
4433     }
4434     WREG32(AVIVO_D1CUR_SURFACE_ADDRESS + radeon_crtc->crtc_offset,
4435     - gpu_addr & 0xffffffff);
4436     + lower_32_bits(radeon_crtc->cursor_addr));
4437     } else {
4438     - radeon_crtc->legacy_cursor_offset = gpu_addr - radeon_crtc->legacy_display_base_addr;
4439     /* offset is from DISP(2)_BASE_ADDRESS */
4440     - WREG32(RADEON_CUR_OFFSET + radeon_crtc->crtc_offset, radeon_crtc->legacy_cursor_offset);
4441     + WREG32(RADEON_CUR_OFFSET + radeon_crtc->crtc_offset,
4442     + radeon_crtc->cursor_addr - radeon_crtc->legacy_display_base_addr);
4443     }
4444     -
4445     - return 0;
4446     -
4447     -fail:
4448     - drm_gem_object_unreference_unlocked(obj);
4449     -
4450     - return ret;
4451     }
4452    
4453     int radeon_crtc_cursor_set2(struct drm_crtc *crtc,
4454     @@ -283,7 +265,9 @@ int radeon_crtc_cursor_set2(struct drm_crtc *crtc,
4455     int32_t hot_y)
4456     {
4457     struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
4458     + struct radeon_device *rdev = crtc->dev->dev_private;
4459     struct drm_gem_object *obj;
4460     + struct radeon_bo *robj;
4461     int ret;
4462    
4463     if (!handle) {
4464     @@ -305,6 +289,23 @@ int radeon_crtc_cursor_set2(struct drm_crtc *crtc,
4465     return -ENOENT;
4466     }
4467    
4468     + robj = gem_to_radeon_bo(obj);
4469     + ret = radeon_bo_reserve(robj, false);
4470     + if (ret != 0) {
4471     + drm_gem_object_unreference_unlocked(obj);
4472     + return ret;
4473     + }
4474     + /* Only 27 bit offset for legacy cursor */
4475     + ret = radeon_bo_pin_restricted(robj, RADEON_GEM_DOMAIN_VRAM,
4476     + ASIC_IS_AVIVO(rdev) ? 0 : 1 << 27,
4477     + &radeon_crtc->cursor_addr);
4478     + radeon_bo_unreserve(robj);
4479     + if (ret) {
4480     + DRM_ERROR("Failed to pin new cursor BO (%d)\n", ret);
4481     + drm_gem_object_unreference_unlocked(obj);
4482     + return ret;
4483     + }
4484     +
4485     radeon_crtc->cursor_width = width;
4486     radeon_crtc->cursor_height = height;
4487    
4488     @@ -323,13 +324,8 @@ int radeon_crtc_cursor_set2(struct drm_crtc *crtc,
4489     radeon_crtc->cursor_hot_y = hot_y;
4490     }
4491    
4492     - ret = radeon_set_cursor(crtc, obj);
4493     -
4494     - if (ret)
4495     - DRM_ERROR("radeon_set_cursor returned %d, not changing cursor\n",
4496     - ret);
4497     - else
4498     - radeon_show_cursor(crtc);
4499     + radeon_set_cursor(crtc);
4500     + radeon_show_cursor(crtc);
4501    
4502     radeon_lock_cursor(crtc, false);
4503    
4504     @@ -341,8 +337,7 @@ unpin:
4505     radeon_bo_unpin(robj);
4506     radeon_bo_unreserve(robj);
4507     }
4508     - if (radeon_crtc->cursor_bo != obj)
4509     - drm_gem_object_unreference_unlocked(radeon_crtc->cursor_bo);
4510     + drm_gem_object_unreference_unlocked(radeon_crtc->cursor_bo);
4511     }
4512    
4513     radeon_crtc->cursor_bo = obj;
4514     @@ -360,7 +355,6 @@ unpin:
4515     void radeon_cursor_reset(struct drm_crtc *crtc)
4516     {
4517     struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
4518     - int ret;
4519    
4520     if (radeon_crtc->cursor_bo) {
4521     radeon_lock_cursor(crtc, true);
4522     @@ -368,12 +362,8 @@ void radeon_cursor_reset(struct drm_crtc *crtc)
4523     radeon_cursor_move_locked(crtc, radeon_crtc->cursor_x,
4524     radeon_crtc->cursor_y);
4525    
4526     - ret = radeon_set_cursor(crtc, radeon_crtc->cursor_bo);
4527     - if (ret)
4528     - DRM_ERROR("radeon_set_cursor returned %d, not showing "
4529     - "cursor\n", ret);
4530     - else
4531     - radeon_show_cursor(crtc);
4532     + radeon_set_cursor(crtc);
4533     + radeon_show_cursor(crtc);
4534    
4535     radeon_lock_cursor(crtc, false);
4536     }
4537     diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
4538     index a7fdfa4f0857..604c44d88e7a 100644
4539     --- a/drivers/gpu/drm/radeon/radeon_device.c
4540     +++ b/drivers/gpu/drm/radeon/radeon_device.c
4541     @@ -1572,11 +1572,21 @@ int radeon_suspend_kms(struct drm_device *dev, bool suspend, bool fbcon)
4542     drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
4543     }
4544    
4545     - /* unpin the front buffers */
4546     + /* unpin the front buffers and cursors */
4547     list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
4548     + struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
4549     struct radeon_framebuffer *rfb = to_radeon_framebuffer(crtc->primary->fb);
4550     struct radeon_bo *robj;
4551    
4552     + if (radeon_crtc->cursor_bo) {
4553     + struct radeon_bo *robj = gem_to_radeon_bo(radeon_crtc->cursor_bo);
4554     + r = radeon_bo_reserve(robj, false);
4555     + if (r == 0) {
4556     + radeon_bo_unpin(robj);
4557     + radeon_bo_unreserve(robj);
4558     + }
4559     + }
4560     +
4561     if (rfb == NULL || rfb->obj == NULL) {
4562     continue;
4563     }
4564     @@ -1639,6 +1649,7 @@ int radeon_resume_kms(struct drm_device *dev, bool resume, bool fbcon)
4565     {
4566     struct drm_connector *connector;
4567     struct radeon_device *rdev = dev->dev_private;
4568     + struct drm_crtc *crtc;
4569     int r;
4570    
4571     if (dev->switch_power_state == DRM_SWITCH_POWER_OFF)
4572     @@ -1678,6 +1689,27 @@ int radeon_resume_kms(struct drm_device *dev, bool resume, bool fbcon)
4573    
4574     radeon_restore_bios_scratch_regs(rdev);
4575    
4576     + /* pin cursors */
4577     + list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
4578     + struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
4579     +
4580     + if (radeon_crtc->cursor_bo) {
4581     + struct radeon_bo *robj = gem_to_radeon_bo(radeon_crtc->cursor_bo);
4582     + r = radeon_bo_reserve(robj, false);
4583     + if (r == 0) {
4584     + /* Only 27 bit offset for legacy cursor */
4585     + r = radeon_bo_pin_restricted(robj,
4586     + RADEON_GEM_DOMAIN_VRAM,
4587     + ASIC_IS_AVIVO(rdev) ?
4588     + 0 : 1 << 27,
4589     + &radeon_crtc->cursor_addr);
4590     + if (r != 0)
4591     + DRM_ERROR("Failed to pin cursor BO (%d)\n", r);
4592     + radeon_bo_unreserve(robj);
4593     + }
4594     + }
4595     + }
4596     +
4597     /* init dig PHYs, disp eng pll */
4598     if (rdev->is_atom_bios) {
4599     radeon_atom_encoder_init(rdev);
4600     diff --git a/drivers/gpu/drm/radeon/radeon_fb.c b/drivers/gpu/drm/radeon/radeon_fb.c
4601     index aeb676708e60..634793ea8418 100644
4602     --- a/drivers/gpu/drm/radeon/radeon_fb.c
4603     +++ b/drivers/gpu/drm/radeon/radeon_fb.c
4604     @@ -257,7 +257,6 @@ static int radeonfb_create(struct drm_fb_helper *helper,
4605     }
4606    
4607     info->par = rfbdev;
4608     - info->skip_vt_switch = true;
4609    
4610     ret = radeon_framebuffer_init(rdev->ddev, &rfbdev->rfb, &mode_cmd, gobj);
4611     if (ret) {
4612     diff --git a/drivers/gpu/drm/radeon/radeon_gart.c b/drivers/gpu/drm/radeon/radeon_gart.c
4613     index 5450fa95a47e..c4777c8d0312 100644
4614     --- a/drivers/gpu/drm/radeon/radeon_gart.c
4615     +++ b/drivers/gpu/drm/radeon/radeon_gart.c
4616     @@ -260,8 +260,10 @@ void radeon_gart_unbind(struct radeon_device *rdev, unsigned offset,
4617     }
4618     }
4619     }
4620     - mb();
4621     - radeon_gart_tlb_flush(rdev);
4622     + if (rdev->gart.ptr) {
4623     + mb();
4624     + radeon_gart_tlb_flush(rdev);
4625     + }
4626     }
4627    
4628     /**
4629     @@ -306,8 +308,10 @@ int radeon_gart_bind(struct radeon_device *rdev, unsigned offset,
4630     page_base += RADEON_GPU_PAGE_SIZE;
4631     }
4632     }
4633     - mb();
4634     - radeon_gart_tlb_flush(rdev);
4635     + if (rdev->gart.ptr) {
4636     + mb();
4637     + radeon_gart_tlb_flush(rdev);
4638     + }
4639     return 0;
4640     }
4641    
4642     diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c
4643     index ac3c1310b953..186d0b792a02 100644
4644     --- a/drivers/gpu/drm/radeon/radeon_gem.c
4645     +++ b/drivers/gpu/drm/radeon/radeon_gem.c
4646     @@ -36,6 +36,7 @@ void radeon_gem_object_free(struct drm_gem_object *gobj)
4647     if (robj) {
4648     if (robj->gem_base.import_attach)
4649     drm_prime_gem_destroy(&robj->gem_base, robj->tbo.sg);
4650     + radeon_mn_unregister(robj);
4651     radeon_bo_unref(&robj);
4652     }
4653     }
4654     @@ -471,6 +472,7 @@ int radeon_gem_wait_idle_ioctl(struct drm_device *dev, void *data,
4655     r = ret;
4656    
4657     /* Flush HDP cache via MMIO if necessary */
4658     + cur_placement = ACCESS_ONCE(robj->tbo.mem.mem_type);
4659     if (rdev->asic->mmio_hdp_flush &&
4660     radeon_mem_type_to_domain(cur_placement) == RADEON_GEM_DOMAIN_VRAM)
4661     robj->rdev->asic->mmio_hdp_flush(rdev);
4662     diff --git a/drivers/gpu/drm/radeon/radeon_irq_kms.c b/drivers/gpu/drm/radeon/radeon_irq_kms.c
4663     index 7162c935371c..f682e5351252 100644
4664     --- a/drivers/gpu/drm/radeon/radeon_irq_kms.c
4665     +++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c
4666     @@ -79,10 +79,12 @@ static void radeon_hotplug_work_func(struct work_struct *work)
4667     struct drm_mode_config *mode_config = &dev->mode_config;
4668     struct drm_connector *connector;
4669    
4670     + mutex_lock(&mode_config->mutex);
4671     if (mode_config->num_connector) {
4672     list_for_each_entry(connector, &mode_config->connector_list, head)
4673     radeon_connector_hotplug(connector);
4674     }
4675     + mutex_unlock(&mode_config->mutex);
4676     /* Just fire off a uevent and let userspace tell us what to do */
4677     drm_helper_hpd_irq_event(dev);
4678     }
4679     diff --git a/drivers/gpu/drm/radeon/radeon_mode.h b/drivers/gpu/drm/radeon/radeon_mode.h
4680     index fa91a17b81b6..f01c797b78cf 100644
4681     --- a/drivers/gpu/drm/radeon/radeon_mode.h
4682     +++ b/drivers/gpu/drm/radeon/radeon_mode.h
4683     @@ -343,7 +343,6 @@ struct radeon_crtc {
4684     int max_cursor_width;
4685     int max_cursor_height;
4686     uint32_t legacy_display_base_addr;
4687     - uint32_t legacy_cursor_offset;
4688     enum radeon_rmx_type rmx_type;
4689     u8 h_border;
4690     u8 v_border;
4691     diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
4692     index 318165d4855c..676362769b8d 100644
4693     --- a/drivers/gpu/drm/radeon/radeon_object.c
4694     +++ b/drivers/gpu/drm/radeon/radeon_object.c
4695     @@ -75,7 +75,6 @@ static void radeon_ttm_bo_destroy(struct ttm_buffer_object *tbo)
4696     bo = container_of(tbo, struct radeon_bo, tbo);
4697    
4698     radeon_update_memory_usage(bo, bo->tbo.mem.mem_type, -1);
4699     - radeon_mn_unregister(bo);
4700    
4701     mutex_lock(&bo->rdev->gem.mutex);
4702     list_del_init(&bo->list);
4703     diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
4704     index 4c679b802bc8..e15185b16504 100644
4705     --- a/drivers/gpu/drm/radeon/si.c
4706     +++ b/drivers/gpu/drm/radeon/si.c
4707     @@ -6466,23 +6466,27 @@ restart_ih:
4708     case 1: /* D1 vblank/vline */
4709     switch (src_data) {
4710     case 0: /* D1 vblank */
4711     - if (rdev->irq.stat_regs.evergreen.disp_int & LB_D1_VBLANK_INTERRUPT) {
4712     - if (rdev->irq.crtc_vblank_int[0]) {
4713     - drm_handle_vblank(rdev->ddev, 0);
4714     - rdev->pm.vblank_sync = true;
4715     - wake_up(&rdev->irq.vblank_queue);
4716     - }
4717     - if (atomic_read(&rdev->irq.pflip[0]))
4718     - radeon_crtc_handle_vblank(rdev, 0);
4719     - rdev->irq.stat_regs.evergreen.disp_int &= ~LB_D1_VBLANK_INTERRUPT;
4720     - DRM_DEBUG("IH: D1 vblank\n");
4721     + if (!(rdev->irq.stat_regs.evergreen.disp_int & LB_D1_VBLANK_INTERRUPT))
4722     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
4723     +
4724     + if (rdev->irq.crtc_vblank_int[0]) {
4725     + drm_handle_vblank(rdev->ddev, 0);
4726     + rdev->pm.vblank_sync = true;
4727     + wake_up(&rdev->irq.vblank_queue);
4728     }
4729     + if (atomic_read(&rdev->irq.pflip[0]))
4730     + radeon_crtc_handle_vblank(rdev, 0);
4731     + rdev->irq.stat_regs.evergreen.disp_int &= ~LB_D1_VBLANK_INTERRUPT;
4732     + DRM_DEBUG("IH: D1 vblank\n");
4733     +
4734     break;
4735     case 1: /* D1 vline */
4736     - if (rdev->irq.stat_regs.evergreen.disp_int & LB_D1_VLINE_INTERRUPT) {
4737     - rdev->irq.stat_regs.evergreen.disp_int &= ~LB_D1_VLINE_INTERRUPT;
4738     - DRM_DEBUG("IH: D1 vline\n");
4739     - }
4740     + if (!(rdev->irq.stat_regs.evergreen.disp_int & LB_D1_VLINE_INTERRUPT))
4741     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
4742     +
4743     + rdev->irq.stat_regs.evergreen.disp_int &= ~LB_D1_VLINE_INTERRUPT;
4744     + DRM_DEBUG("IH: D1 vline\n");
4745     +
4746     break;
4747     default:
4748     DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
4749     @@ -6492,23 +6496,27 @@ restart_ih:
4750     case 2: /* D2 vblank/vline */
4751     switch (src_data) {
4752     case 0: /* D2 vblank */
4753     - if (rdev->irq.stat_regs.evergreen.disp_int_cont & LB_D2_VBLANK_INTERRUPT) {
4754     - if (rdev->irq.crtc_vblank_int[1]) {
4755     - drm_handle_vblank(rdev->ddev, 1);
4756     - rdev->pm.vblank_sync = true;
4757     - wake_up(&rdev->irq.vblank_queue);
4758     - }
4759     - if (atomic_read(&rdev->irq.pflip[1]))
4760     - radeon_crtc_handle_vblank(rdev, 1);
4761     - rdev->irq.stat_regs.evergreen.disp_int_cont &= ~LB_D2_VBLANK_INTERRUPT;
4762     - DRM_DEBUG("IH: D2 vblank\n");
4763     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont & LB_D2_VBLANK_INTERRUPT))
4764     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
4765     +
4766     + if (rdev->irq.crtc_vblank_int[1]) {
4767     + drm_handle_vblank(rdev->ddev, 1);
4768     + rdev->pm.vblank_sync = true;
4769     + wake_up(&rdev->irq.vblank_queue);
4770     }
4771     + if (atomic_read(&rdev->irq.pflip[1]))
4772     + radeon_crtc_handle_vblank(rdev, 1);
4773     + rdev->irq.stat_regs.evergreen.disp_int_cont &= ~LB_D2_VBLANK_INTERRUPT;
4774     + DRM_DEBUG("IH: D2 vblank\n");
4775     +
4776     break;
4777     case 1: /* D2 vline */
4778     - if (rdev->irq.stat_regs.evergreen.disp_int_cont & LB_D2_VLINE_INTERRUPT) {
4779     - rdev->irq.stat_regs.evergreen.disp_int_cont &= ~LB_D2_VLINE_INTERRUPT;
4780     - DRM_DEBUG("IH: D2 vline\n");
4781     - }
4782     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont & LB_D2_VLINE_INTERRUPT))
4783     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
4784     +
4785     + rdev->irq.stat_regs.evergreen.disp_int_cont &= ~LB_D2_VLINE_INTERRUPT;
4786     + DRM_DEBUG("IH: D2 vline\n");
4787     +
4788     break;
4789     default:
4790     DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
4791     @@ -6518,23 +6526,27 @@ restart_ih:
4792     case 3: /* D3 vblank/vline */
4793     switch (src_data) {
4794     case 0: /* D3 vblank */
4795     - if (rdev->irq.stat_regs.evergreen.disp_int_cont2 & LB_D3_VBLANK_INTERRUPT) {
4796     - if (rdev->irq.crtc_vblank_int[2]) {
4797     - drm_handle_vblank(rdev->ddev, 2);
4798     - rdev->pm.vblank_sync = true;
4799     - wake_up(&rdev->irq.vblank_queue);
4800     - }
4801     - if (atomic_read(&rdev->irq.pflip[2]))
4802     - radeon_crtc_handle_vblank(rdev, 2);
4803     - rdev->irq.stat_regs.evergreen.disp_int_cont2 &= ~LB_D3_VBLANK_INTERRUPT;
4804     - DRM_DEBUG("IH: D3 vblank\n");
4805     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont2 & LB_D3_VBLANK_INTERRUPT))
4806     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
4807     +
4808     + if (rdev->irq.crtc_vblank_int[2]) {
4809     + drm_handle_vblank(rdev->ddev, 2);
4810     + rdev->pm.vblank_sync = true;
4811     + wake_up(&rdev->irq.vblank_queue);
4812     }
4813     + if (atomic_read(&rdev->irq.pflip[2]))
4814     + radeon_crtc_handle_vblank(rdev, 2);
4815     + rdev->irq.stat_regs.evergreen.disp_int_cont2 &= ~LB_D3_VBLANK_INTERRUPT;
4816     + DRM_DEBUG("IH: D3 vblank\n");
4817     +
4818     break;
4819     case 1: /* D3 vline */
4820     - if (rdev->irq.stat_regs.evergreen.disp_int_cont2 & LB_D3_VLINE_INTERRUPT) {
4821     - rdev->irq.stat_regs.evergreen.disp_int_cont2 &= ~LB_D3_VLINE_INTERRUPT;
4822     - DRM_DEBUG("IH: D3 vline\n");
4823     - }
4824     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont2 & LB_D3_VLINE_INTERRUPT))
4825     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
4826     +
4827     + rdev->irq.stat_regs.evergreen.disp_int_cont2 &= ~LB_D3_VLINE_INTERRUPT;
4828     + DRM_DEBUG("IH: D3 vline\n");
4829     +
4830     break;
4831     default:
4832     DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
4833     @@ -6544,23 +6556,27 @@ restart_ih:
4834     case 4: /* D4 vblank/vline */
4835     switch (src_data) {
4836     case 0: /* D4 vblank */
4837     - if (rdev->irq.stat_regs.evergreen.disp_int_cont3 & LB_D4_VBLANK_INTERRUPT) {
4838     - if (rdev->irq.crtc_vblank_int[3]) {
4839     - drm_handle_vblank(rdev->ddev, 3);
4840     - rdev->pm.vblank_sync = true;
4841     - wake_up(&rdev->irq.vblank_queue);
4842     - }
4843     - if (atomic_read(&rdev->irq.pflip[3]))
4844     - radeon_crtc_handle_vblank(rdev, 3);
4845     - rdev->irq.stat_regs.evergreen.disp_int_cont3 &= ~LB_D4_VBLANK_INTERRUPT;
4846     - DRM_DEBUG("IH: D4 vblank\n");
4847     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont3 & LB_D4_VBLANK_INTERRUPT))
4848     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
4849     +
4850     + if (rdev->irq.crtc_vblank_int[3]) {
4851     + drm_handle_vblank(rdev->ddev, 3);
4852     + rdev->pm.vblank_sync = true;
4853     + wake_up(&rdev->irq.vblank_queue);
4854     }
4855     + if (atomic_read(&rdev->irq.pflip[3]))
4856     + radeon_crtc_handle_vblank(rdev, 3);
4857     + rdev->irq.stat_regs.evergreen.disp_int_cont3 &= ~LB_D4_VBLANK_INTERRUPT;
4858     + DRM_DEBUG("IH: D4 vblank\n");
4859     +
4860     break;
4861     case 1: /* D4 vline */
4862     - if (rdev->irq.stat_regs.evergreen.disp_int_cont3 & LB_D4_VLINE_INTERRUPT) {
4863     - rdev->irq.stat_regs.evergreen.disp_int_cont3 &= ~LB_D4_VLINE_INTERRUPT;
4864     - DRM_DEBUG("IH: D4 vline\n");
4865     - }
4866     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont3 & LB_D4_VLINE_INTERRUPT))
4867     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
4868     +
4869     + rdev->irq.stat_regs.evergreen.disp_int_cont3 &= ~LB_D4_VLINE_INTERRUPT;
4870     + DRM_DEBUG("IH: D4 vline\n");
4871     +
4872     break;
4873     default:
4874     DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
4875     @@ -6570,23 +6586,27 @@ restart_ih:
4876     case 5: /* D5 vblank/vline */
4877     switch (src_data) {
4878     case 0: /* D5 vblank */
4879     - if (rdev->irq.stat_regs.evergreen.disp_int_cont4 & LB_D5_VBLANK_INTERRUPT) {
4880     - if (rdev->irq.crtc_vblank_int[4]) {
4881     - drm_handle_vblank(rdev->ddev, 4);
4882     - rdev->pm.vblank_sync = true;
4883     - wake_up(&rdev->irq.vblank_queue);
4884     - }
4885     - if (atomic_read(&rdev->irq.pflip[4]))
4886     - radeon_crtc_handle_vblank(rdev, 4);
4887     - rdev->irq.stat_regs.evergreen.disp_int_cont4 &= ~LB_D5_VBLANK_INTERRUPT;
4888     - DRM_DEBUG("IH: D5 vblank\n");
4889     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont4 & LB_D5_VBLANK_INTERRUPT))
4890     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
4891     +
4892     + if (rdev->irq.crtc_vblank_int[4]) {
4893     + drm_handle_vblank(rdev->ddev, 4);
4894     + rdev->pm.vblank_sync = true;
4895     + wake_up(&rdev->irq.vblank_queue);
4896     }
4897     + if (atomic_read(&rdev->irq.pflip[4]))
4898     + radeon_crtc_handle_vblank(rdev, 4);
4899     + rdev->irq.stat_regs.evergreen.disp_int_cont4 &= ~LB_D5_VBLANK_INTERRUPT;
4900     + DRM_DEBUG("IH: D5 vblank\n");
4901     +
4902     break;
4903     case 1: /* D5 vline */
4904     - if (rdev->irq.stat_regs.evergreen.disp_int_cont4 & LB_D5_VLINE_INTERRUPT) {
4905     - rdev->irq.stat_regs.evergreen.disp_int_cont4 &= ~LB_D5_VLINE_INTERRUPT;
4906     - DRM_DEBUG("IH: D5 vline\n");
4907     - }
4908     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont4 & LB_D5_VLINE_INTERRUPT))
4909     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
4910     +
4911     + rdev->irq.stat_regs.evergreen.disp_int_cont4 &= ~LB_D5_VLINE_INTERRUPT;
4912     + DRM_DEBUG("IH: D5 vline\n");
4913     +
4914     break;
4915     default:
4916     DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
4917     @@ -6596,23 +6616,27 @@ restart_ih:
4918     case 6: /* D6 vblank/vline */
4919     switch (src_data) {
4920     case 0: /* D6 vblank */
4921     - if (rdev->irq.stat_regs.evergreen.disp_int_cont5 & LB_D6_VBLANK_INTERRUPT) {
4922     - if (rdev->irq.crtc_vblank_int[5]) {
4923     - drm_handle_vblank(rdev->ddev, 5);
4924     - rdev->pm.vblank_sync = true;
4925     - wake_up(&rdev->irq.vblank_queue);
4926     - }
4927     - if (atomic_read(&rdev->irq.pflip[5]))
4928     - radeon_crtc_handle_vblank(rdev, 5);
4929     - rdev->irq.stat_regs.evergreen.disp_int_cont5 &= ~LB_D6_VBLANK_INTERRUPT;
4930     - DRM_DEBUG("IH: D6 vblank\n");
4931     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont5 & LB_D6_VBLANK_INTERRUPT))
4932     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
4933     +
4934     + if (rdev->irq.crtc_vblank_int[5]) {
4935     + drm_handle_vblank(rdev->ddev, 5);
4936     + rdev->pm.vblank_sync = true;
4937     + wake_up(&rdev->irq.vblank_queue);
4938     }
4939     + if (atomic_read(&rdev->irq.pflip[5]))
4940     + radeon_crtc_handle_vblank(rdev, 5);
4941     + rdev->irq.stat_regs.evergreen.disp_int_cont5 &= ~LB_D6_VBLANK_INTERRUPT;
4942     + DRM_DEBUG("IH: D6 vblank\n");
4943     +
4944     break;
4945     case 1: /* D6 vline */
4946     - if (rdev->irq.stat_regs.evergreen.disp_int_cont5 & LB_D6_VLINE_INTERRUPT) {
4947     - rdev->irq.stat_regs.evergreen.disp_int_cont5 &= ~LB_D6_VLINE_INTERRUPT;
4948     - DRM_DEBUG("IH: D6 vline\n");
4949     - }
4950     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont5 & LB_D6_VLINE_INTERRUPT))
4951     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
4952     +
4953     + rdev->irq.stat_regs.evergreen.disp_int_cont5 &= ~LB_D6_VLINE_INTERRUPT;
4954     + DRM_DEBUG("IH: D6 vline\n");
4955     +
4956     break;
4957     default:
4958     DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
4959     @@ -6632,88 +6656,112 @@ restart_ih:
4960     case 42: /* HPD hotplug */
4961     switch (src_data) {
4962     case 0:
4963     - if (rdev->irq.stat_regs.evergreen.disp_int & DC_HPD1_INTERRUPT) {
4964     - rdev->irq.stat_regs.evergreen.disp_int &= ~DC_HPD1_INTERRUPT;
4965     - queue_hotplug = true;
4966     - DRM_DEBUG("IH: HPD1\n");
4967     - }
4968     + if (!(rdev->irq.stat_regs.evergreen.disp_int & DC_HPD1_INTERRUPT))
4969     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
4970     +
4971     + rdev->irq.stat_regs.evergreen.disp_int &= ~DC_HPD1_INTERRUPT;
4972     + queue_hotplug = true;
4973     + DRM_DEBUG("IH: HPD1\n");
4974     +
4975     break;
4976     case 1:
4977     - if (rdev->irq.stat_regs.evergreen.disp_int_cont & DC_HPD2_INTERRUPT) {
4978     - rdev->irq.stat_regs.evergreen.disp_int_cont &= ~DC_HPD2_INTERRUPT;
4979     - queue_hotplug = true;
4980     - DRM_DEBUG("IH: HPD2\n");
4981     - }
4982     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont & DC_HPD2_INTERRUPT))
4983     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
4984     +
4985     + rdev->irq.stat_regs.evergreen.disp_int_cont &= ~DC_HPD2_INTERRUPT;
4986     + queue_hotplug = true;
4987     + DRM_DEBUG("IH: HPD2\n");
4988     +
4989     break;
4990     case 2:
4991     - if (rdev->irq.stat_regs.evergreen.disp_int_cont2 & DC_HPD3_INTERRUPT) {
4992     - rdev->irq.stat_regs.evergreen.disp_int_cont2 &= ~DC_HPD3_INTERRUPT;
4993     - queue_hotplug = true;
4994     - DRM_DEBUG("IH: HPD3\n");
4995     - }
4996     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont2 & DC_HPD3_INTERRUPT))
4997     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
4998     +
4999     + rdev->irq.stat_regs.evergreen.disp_int_cont2 &= ~DC_HPD3_INTERRUPT;
5000     + queue_hotplug = true;
5001     + DRM_DEBUG("IH: HPD3\n");
5002     +
5003     break;
5004     case 3:
5005     - if (rdev->irq.stat_regs.evergreen.disp_int_cont3 & DC_HPD4_INTERRUPT) {
5006     - rdev->irq.stat_regs.evergreen.disp_int_cont3 &= ~DC_HPD4_INTERRUPT;
5007     - queue_hotplug = true;
5008     - DRM_DEBUG("IH: HPD4\n");
5009     - }
5010     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont3 & DC_HPD4_INTERRUPT))
5011     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
5012     +
5013     + rdev->irq.stat_regs.evergreen.disp_int_cont3 &= ~DC_HPD4_INTERRUPT;
5014     + queue_hotplug = true;
5015     + DRM_DEBUG("IH: HPD4\n");
5016     +
5017     break;
5018     case 4:
5019     - if (rdev->irq.stat_regs.evergreen.disp_int_cont4 & DC_HPD5_INTERRUPT) {
5020     - rdev->irq.stat_regs.evergreen.disp_int_cont4 &= ~DC_HPD5_INTERRUPT;
5021     - queue_hotplug = true;
5022     - DRM_DEBUG("IH: HPD5\n");
5023     - }
5024     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont4 & DC_HPD5_INTERRUPT))
5025     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
5026     +
5027     + rdev->irq.stat_regs.evergreen.disp_int_cont4 &= ~DC_HPD5_INTERRUPT;
5028     + queue_hotplug = true;
5029     + DRM_DEBUG("IH: HPD5\n");
5030     +
5031     break;
5032     case 5:
5033     - if (rdev->irq.stat_regs.evergreen.disp_int_cont5 & DC_HPD6_INTERRUPT) {
5034     - rdev->irq.stat_regs.evergreen.disp_int_cont5 &= ~DC_HPD6_INTERRUPT;
5035     - queue_hotplug = true;
5036     - DRM_DEBUG("IH: HPD6\n");
5037     - }
5038     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont5 & DC_HPD6_INTERRUPT))
5039     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
5040     +
5041     + rdev->irq.stat_regs.evergreen.disp_int_cont5 &= ~DC_HPD6_INTERRUPT;
5042     + queue_hotplug = true;
5043     + DRM_DEBUG("IH: HPD6\n");
5044     +
5045     break;
5046     case 6:
5047     - if (rdev->irq.stat_regs.evergreen.disp_int & DC_HPD1_RX_INTERRUPT) {
5048     - rdev->irq.stat_regs.evergreen.disp_int &= ~DC_HPD1_RX_INTERRUPT;
5049     - queue_dp = true;
5050     - DRM_DEBUG("IH: HPD_RX 1\n");
5051     - }
5052     + if (!(rdev->irq.stat_regs.evergreen.disp_int & DC_HPD1_RX_INTERRUPT))
5053     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
5054     +
5055     + rdev->irq.stat_regs.evergreen.disp_int &= ~DC_HPD1_RX_INTERRUPT;
5056     + queue_dp = true;
5057     + DRM_DEBUG("IH: HPD_RX 1\n");
5058     +
5059     break;
5060     case 7:
5061     - if (rdev->irq.stat_regs.evergreen.disp_int_cont & DC_HPD2_RX_INTERRUPT) {
5062     - rdev->irq.stat_regs.evergreen.disp_int_cont &= ~DC_HPD2_RX_INTERRUPT;
5063     - queue_dp = true;
5064     - DRM_DEBUG("IH: HPD_RX 2\n");
5065     - }
5066     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont & DC_HPD2_RX_INTERRUPT))
5067     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
5068     +
5069     + rdev->irq.stat_regs.evergreen.disp_int_cont &= ~DC_HPD2_RX_INTERRUPT;
5070     + queue_dp = true;
5071     + DRM_DEBUG("IH: HPD_RX 2\n");
5072     +
5073     break;
5074     case 8:
5075     - if (rdev->irq.stat_regs.evergreen.disp_int_cont2 & DC_HPD3_RX_INTERRUPT) {
5076     - rdev->irq.stat_regs.evergreen.disp_int_cont2 &= ~DC_HPD3_RX_INTERRUPT;
5077     - queue_dp = true;
5078     - DRM_DEBUG("IH: HPD_RX 3\n");
5079     - }
5080     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont2 & DC_HPD3_RX_INTERRUPT))
5081     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
5082     +
5083     + rdev->irq.stat_regs.evergreen.disp_int_cont2 &= ~DC_HPD3_RX_INTERRUPT;
5084     + queue_dp = true;
5085     + DRM_DEBUG("IH: HPD_RX 3\n");
5086     +
5087     break;
5088     case 9:
5089     - if (rdev->irq.stat_regs.evergreen.disp_int_cont3 & DC_HPD4_RX_INTERRUPT) {
5090     - rdev->irq.stat_regs.evergreen.disp_int_cont3 &= ~DC_HPD4_RX_INTERRUPT;
5091     - queue_dp = true;
5092     - DRM_DEBUG("IH: HPD_RX 4\n");
5093     - }
5094     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont3 & DC_HPD4_RX_INTERRUPT))
5095     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
5096     +
5097     + rdev->irq.stat_regs.evergreen.disp_int_cont3 &= ~DC_HPD4_RX_INTERRUPT;
5098     + queue_dp = true;
5099     + DRM_DEBUG("IH: HPD_RX 4\n");
5100     +
5101     break;
5102     case 10:
5103     - if (rdev->irq.stat_regs.evergreen.disp_int_cont4 & DC_HPD5_RX_INTERRUPT) {
5104     - rdev->irq.stat_regs.evergreen.disp_int_cont4 &= ~DC_HPD5_RX_INTERRUPT;
5105     - queue_dp = true;
5106     - DRM_DEBUG("IH: HPD_RX 5\n");
5107     - }
5108     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont4 & DC_HPD5_RX_INTERRUPT))
5109     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
5110     +
5111     + rdev->irq.stat_regs.evergreen.disp_int_cont4 &= ~DC_HPD5_RX_INTERRUPT;
5112     + queue_dp = true;
5113     + DRM_DEBUG("IH: HPD_RX 5\n");
5114     +
5115     break;
5116     case 11:
5117     - if (rdev->irq.stat_regs.evergreen.disp_int_cont5 & DC_HPD6_RX_INTERRUPT) {
5118     - rdev->irq.stat_regs.evergreen.disp_int_cont5 &= ~DC_HPD6_RX_INTERRUPT;
5119     - queue_dp = true;
5120     - DRM_DEBUG("IH: HPD_RX 6\n");
5121     - }
5122     + if (!(rdev->irq.stat_regs.evergreen.disp_int_cont5 & DC_HPD6_RX_INTERRUPT))
5123     + DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
5124     +
5125     + rdev->irq.stat_regs.evergreen.disp_int_cont5 &= ~DC_HPD6_RX_INTERRUPT;
5126     + queue_dp = true;
5127     + DRM_DEBUG("IH: HPD_RX 6\n");
5128     +
5129     break;
5130     default:
5131     DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
5132     diff --git a/drivers/gpu/drm/radeon/si_dpm.c b/drivers/gpu/drm/radeon/si_dpm.c
5133     index ff8b83f5e929..9dfcedec05a6 100644
5134     --- a/drivers/gpu/drm/radeon/si_dpm.c
5135     +++ b/drivers/gpu/drm/radeon/si_dpm.c
5136     @@ -2925,6 +2925,7 @@ static struct si_dpm_quirk si_dpm_quirk_list[] = {
5137     /* PITCAIRN - https://bugs.freedesktop.org/show_bug.cgi?id=76490 */
5138     { PCI_VENDOR_ID_ATI, 0x6810, 0x1462, 0x3036, 0, 120000 },
5139     { PCI_VENDOR_ID_ATI, 0x6811, 0x174b, 0xe271, 0, 120000 },
5140     + { PCI_VENDOR_ID_ATI, 0x6810, 0x174b, 0xe271, 85000, 90000 },
5141     { 0, 0, 0, 0 },
5142     };
5143    
5144     diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
5145     index eb2282cc4a56..eba5f8a52fbd 100644
5146     --- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
5147     +++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
5148     @@ -54,55 +54,56 @@ static void rockchip_gem_free_buf(struct rockchip_gem_object *rk_obj)
5149     &rk_obj->dma_attrs);
5150     }
5151    
5152     -int rockchip_gem_mmap_buf(struct drm_gem_object *obj,
5153     - struct vm_area_struct *vma)
5154     +static int rockchip_drm_gem_object_mmap(struct drm_gem_object *obj,
5155     + struct vm_area_struct *vma)
5156     +
5157     {
5158     + int ret;
5159     struct rockchip_gem_object *rk_obj = to_rockchip_obj(obj);
5160     struct drm_device *drm = obj->dev;
5161     - unsigned long vm_size;
5162    
5163     - vma->vm_flags |= VM_IO | VM_DONTEXPAND | VM_DONTDUMP;
5164     - vm_size = vma->vm_end - vma->vm_start;
5165     -
5166     - if (vm_size > obj->size)
5167     - return -EINVAL;
5168     + /*
5169     + * dma_alloc_attrs() allocated a struct page table for rk_obj, so clear
5170     + * VM_PFNMAP flag that was set by drm_gem_mmap_obj()/drm_gem_mmap().
5171     + */
5172     + vma->vm_flags &= ~VM_PFNMAP;
5173    
5174     - return dma_mmap_attrs(drm->dev, vma, rk_obj->kvaddr, rk_obj->dma_addr,
5175     + ret = dma_mmap_attrs(drm->dev, vma, rk_obj->kvaddr, rk_obj->dma_addr,
5176     obj->size, &rk_obj->dma_attrs);
5177     + if (ret)
5178     + drm_gem_vm_close(vma);
5179     +
5180     + return ret;
5181     }
5182    
5183     -/* drm driver mmap file operations */
5184     -int rockchip_gem_mmap(struct file *filp, struct vm_area_struct *vma)
5185     +int rockchip_gem_mmap_buf(struct drm_gem_object *obj,
5186     + struct vm_area_struct *vma)
5187     {
5188     - struct drm_file *priv = filp->private_data;
5189     - struct drm_device *dev = priv->minor->dev;
5190     - struct drm_gem_object *obj;
5191     - struct drm_vma_offset_node *node;
5192     + struct drm_device *drm = obj->dev;
5193     int ret;
5194    
5195     - if (drm_device_is_unplugged(dev))
5196     - return -ENODEV;
5197     + mutex_lock(&drm->struct_mutex);
5198     + ret = drm_gem_mmap_obj(obj, obj->size, vma);
5199     + mutex_unlock(&drm->struct_mutex);
5200     + if (ret)
5201     + return ret;
5202    
5203     - mutex_lock(&dev->struct_mutex);
5204     + return rockchip_drm_gem_object_mmap(obj, vma);
5205     +}
5206    
5207     - node = drm_vma_offset_exact_lookup(dev->vma_offset_manager,
5208     - vma->vm_pgoff,
5209     - vma_pages(vma));
5210     - if (!node) {
5211     - mutex_unlock(&dev->struct_mutex);
5212     - DRM_ERROR("failed to find vma node.\n");
5213     - return -EINVAL;
5214     - } else if (!drm_vma_node_is_allowed(node, filp)) {
5215     - mutex_unlock(&dev->struct_mutex);
5216     - return -EACCES;
5217     - }
5218     +/* drm driver mmap file operations */
5219     +int rockchip_gem_mmap(struct file *filp, struct vm_area_struct *vma)
5220     +{
5221     + struct drm_gem_object *obj;
5222     + int ret;
5223    
5224     - obj = container_of(node, struct drm_gem_object, vma_node);
5225     - ret = rockchip_gem_mmap_buf(obj, vma);
5226     + ret = drm_gem_mmap(filp, vma);
5227     + if (ret)
5228     + return ret;
5229    
5230     - mutex_unlock(&dev->struct_mutex);
5231     + obj = vma->vm_private_data;
5232    
5233     - return ret;
5234     + return rockchip_drm_gem_object_mmap(obj, vma);
5235     }
5236    
5237     struct rockchip_gem_object *
5238     diff --git a/drivers/gpu/drm/tegra/dpaux.c b/drivers/gpu/drm/tegra/dpaux.c
5239     index d6b55e3e3716..a43a836e6f88 100644
5240     --- a/drivers/gpu/drm/tegra/dpaux.c
5241     +++ b/drivers/gpu/drm/tegra/dpaux.c
5242     @@ -72,34 +72,32 @@ static inline void tegra_dpaux_writel(struct tegra_dpaux *dpaux,
5243     static void tegra_dpaux_write_fifo(struct tegra_dpaux *dpaux, const u8 *buffer,
5244     size_t size)
5245     {
5246     - unsigned long offset = DPAUX_DP_AUXDATA_WRITE(0);
5247     size_t i, j;
5248    
5249     - for (i = 0; i < size; i += 4) {
5250     - size_t num = min_t(size_t, size - i, 4);
5251     + for (i = 0; i < DIV_ROUND_UP(size, 4); i++) {
5252     + size_t num = min_t(size_t, size - i * 4, 4);
5253     unsigned long value = 0;
5254    
5255     for (j = 0; j < num; j++)
5256     - value |= buffer[i + j] << (j * 8);
5257     + value |= buffer[i * 4 + j] << (j * 8);
5258    
5259     - tegra_dpaux_writel(dpaux, value, offset++);
5260     + tegra_dpaux_writel(dpaux, value, DPAUX_DP_AUXDATA_WRITE(i));
5261     }
5262     }
5263    
5264     static void tegra_dpaux_read_fifo(struct tegra_dpaux *dpaux, u8 *buffer,
5265     size_t size)
5266     {
5267     - unsigned long offset = DPAUX_DP_AUXDATA_READ(0);
5268     size_t i, j;
5269    
5270     - for (i = 0; i < size; i += 4) {
5271     - size_t num = min_t(size_t, size - i, 4);
5272     + for (i = 0; i < DIV_ROUND_UP(size, 4); i++) {
5273     + size_t num = min_t(size_t, size - i * 4, 4);
5274     unsigned long value;
5275    
5276     - value = tegra_dpaux_readl(dpaux, offset++);
5277     + value = tegra_dpaux_readl(dpaux, DPAUX_DP_AUXDATA_READ(i));
5278    
5279     for (j = 0; j < num; j++)
5280     - buffer[i + j] = value >> (j * 8);
5281     + buffer[i * 4 + j] = value >> (j * 8);
5282     }
5283     }
5284    
5285     diff --git a/drivers/gpu/drm/vgem/vgem_drv.c b/drivers/gpu/drm/vgem/vgem_drv.c
5286     index 7a207ca547be..6394547cf67a 100644
5287     --- a/drivers/gpu/drm/vgem/vgem_drv.c
5288     +++ b/drivers/gpu/drm/vgem/vgem_drv.c
5289     @@ -328,6 +328,8 @@ static int __init vgem_init(void)
5290     goto out;
5291     }
5292    
5293     + drm_dev_set_unique(vgem_device, "vgem");
5294     +
5295     ret = drm_dev_register(vgem_device, 0);
5296    
5297     if (ret)
5298     diff --git a/drivers/hwmon/mcp3021.c b/drivers/hwmon/mcp3021.c
5299     index d219c06a857b..972444a14cca 100644
5300     --- a/drivers/hwmon/mcp3021.c
5301     +++ b/drivers/hwmon/mcp3021.c
5302     @@ -31,14 +31,11 @@
5303     /* output format */
5304     #define MCP3021_SAR_SHIFT 2
5305     #define MCP3021_SAR_MASK 0x3ff
5306     -
5307     #define MCP3021_OUTPUT_RES 10 /* 10-bit resolution */
5308     -#define MCP3021_OUTPUT_SCALE 4
5309    
5310     #define MCP3221_SAR_SHIFT 0
5311     #define MCP3221_SAR_MASK 0xfff
5312     #define MCP3221_OUTPUT_RES 12 /* 12-bit resolution */
5313     -#define MCP3221_OUTPUT_SCALE 1
5314    
5315     enum chips {
5316     mcp3021,
5317     @@ -54,7 +51,6 @@ struct mcp3021_data {
5318     u16 sar_shift;
5319     u16 sar_mask;
5320     u8 output_res;
5321     - u8 output_scale;
5322     };
5323    
5324     static int mcp3021_read16(struct i2c_client *client)
5325     @@ -84,13 +80,7 @@ static int mcp3021_read16(struct i2c_client *client)
5326    
5327     static inline u16 volts_from_reg(struct mcp3021_data *data, u16 val)
5328     {
5329     - if (val == 0)
5330     - return 0;
5331     -
5332     - val = val * data->output_scale - data->output_scale / 2;
5333     -
5334     - return val * DIV_ROUND_CLOSEST(data->vdd,
5335     - (1 << data->output_res) * data->output_scale);
5336     + return DIV_ROUND_CLOSEST(data->vdd * val, 1 << data->output_res);
5337     }
5338    
5339     static ssize_t show_in_input(struct device *dev, struct device_attribute *attr,
5340     @@ -132,14 +122,12 @@ static int mcp3021_probe(struct i2c_client *client,
5341     data->sar_shift = MCP3021_SAR_SHIFT;
5342     data->sar_mask = MCP3021_SAR_MASK;
5343     data->output_res = MCP3021_OUTPUT_RES;
5344     - data->output_scale = MCP3021_OUTPUT_SCALE;
5345     break;
5346    
5347     case mcp3221:
5348     data->sar_shift = MCP3221_SAR_SHIFT;
5349     data->sar_mask = MCP3221_SAR_MASK;
5350     data->output_res = MCP3221_OUTPUT_RES;
5351     - data->output_scale = MCP3221_OUTPUT_SCALE;
5352     break;
5353     }
5354    
5355     diff --git a/drivers/hwmon/nct7802.c b/drivers/hwmon/nct7802.c
5356     index 55765790907b..28fcb2e246d5 100644
5357     --- a/drivers/hwmon/nct7802.c
5358     +++ b/drivers/hwmon/nct7802.c
5359     @@ -547,7 +547,7 @@ static umode_t nct7802_temp_is_visible(struct kobject *kobj,
5360     if (index >= 9 && index < 18 &&
5361     (reg & 0x0c) != 0x04 && (reg & 0x0c) != 0x08) /* RD2 */
5362     return 0;
5363     - if (index >= 18 && index < 27 && (reg & 0x30) != 0x10) /* RD3 */
5364     + if (index >= 18 && index < 27 && (reg & 0x30) != 0x20) /* RD3 */
5365     return 0;
5366     if (index >= 27 && index < 35) /* local */
5367     return attr->mode;
5368     diff --git a/drivers/i2c/busses/i2c-at91.c b/drivers/i2c/busses/i2c-at91.c
5369     index ff23d1bdd230..9bd10a9b4b50 100644
5370     --- a/drivers/i2c/busses/i2c-at91.c
5371     +++ b/drivers/i2c/busses/i2c-at91.c
5372     @@ -65,6 +65,9 @@
5373     #define AT91_TWI_UNRE 0x0080 /* Underrun Error */
5374     #define AT91_TWI_NACK 0x0100 /* Not Acknowledged */
5375    
5376     +#define AT91_TWI_INT_MASK \
5377     + (AT91_TWI_TXCOMP | AT91_TWI_RXRDY | AT91_TWI_TXRDY | AT91_TWI_NACK)
5378     +
5379     #define AT91_TWI_IER 0x0024 /* Interrupt Enable Register */
5380     #define AT91_TWI_IDR 0x0028 /* Interrupt Disable Register */
5381     #define AT91_TWI_IMR 0x002c /* Interrupt Mask Register */
5382     @@ -119,13 +122,12 @@ static void at91_twi_write(struct at91_twi_dev *dev, unsigned reg, unsigned val)
5383    
5384     static void at91_disable_twi_interrupts(struct at91_twi_dev *dev)
5385     {
5386     - at91_twi_write(dev, AT91_TWI_IDR,
5387     - AT91_TWI_TXCOMP | AT91_TWI_RXRDY | AT91_TWI_TXRDY);
5388     + at91_twi_write(dev, AT91_TWI_IDR, AT91_TWI_INT_MASK);
5389     }
5390    
5391     static void at91_twi_irq_save(struct at91_twi_dev *dev)
5392     {
5393     - dev->imr = at91_twi_read(dev, AT91_TWI_IMR) & 0x7;
5394     + dev->imr = at91_twi_read(dev, AT91_TWI_IMR) & AT91_TWI_INT_MASK;
5395     at91_disable_twi_interrupts(dev);
5396     }
5397    
5398     @@ -215,6 +217,14 @@ static void at91_twi_write_data_dma_callback(void *data)
5399     dma_unmap_single(dev->dev, sg_dma_address(&dev->dma.sg),
5400     dev->buf_len, DMA_TO_DEVICE);
5401    
5402     + /*
5403     + * When this callback is called, THR/TX FIFO is likely not to be empty
5404     + * yet. So we have to wait for TXCOMP or NACK bits to be set into the
5405     + * Status Register to be sure that the STOP bit has been sent and the
5406     + * transfer is completed. The NACK interrupt has already been enabled,
5407     + * we just have to enable TXCOMP one.
5408     + */
5409     + at91_twi_write(dev, AT91_TWI_IER, AT91_TWI_TXCOMP);
5410     at91_twi_write(dev, AT91_TWI_CR, AT91_TWI_STOP);
5411     }
5412    
5413     @@ -309,7 +319,7 @@ static void at91_twi_read_data_dma_callback(void *data)
5414     /* The last two bytes have to be read without using dma */
5415     dev->buf += dev->buf_len - 2;
5416     dev->buf_len = 2;
5417     - at91_twi_write(dev, AT91_TWI_IER, AT91_TWI_RXRDY);
5418     + at91_twi_write(dev, AT91_TWI_IER, AT91_TWI_RXRDY | AT91_TWI_TXCOMP);
5419     }
5420    
5421     static void at91_twi_read_data_dma(struct at91_twi_dev *dev)
5422     @@ -370,7 +380,7 @@ static irqreturn_t atmel_twi_interrupt(int irq, void *dev_id)
5423     /* catch error flags */
5424     dev->transfer_status |= status;
5425    
5426     - if (irqstatus & AT91_TWI_TXCOMP) {
5427     + if (irqstatus & (AT91_TWI_TXCOMP | AT91_TWI_NACK)) {
5428     at91_disable_twi_interrupts(dev);
5429     complete(&dev->cmd_complete);
5430     }
5431     @@ -384,6 +394,34 @@ static int at91_do_twi_transfer(struct at91_twi_dev *dev)
5432     unsigned long time_left;
5433     bool has_unre_flag = dev->pdata->has_unre_flag;
5434    
5435     + /*
5436     + * WARNING: the TXCOMP bit in the Status Register is NOT a clear on
5437     + * read flag but shows the state of the transmission at the time the
5438     + * Status Register is read. According to the programmer datasheet,
5439     + * TXCOMP is set when both holding register and internal shifter are
5440     + * empty and STOP condition has been sent.
5441     + * Consequently, we should enable NACK interrupt rather than TXCOMP to
5442     + * detect transmission failure.
5443     + *
5444     + * Besides, the TXCOMP bit is already set before the i2c transaction
5445     + * has been started. For read transactions, this bit is cleared when
5446     + * writing the START bit into the Control Register. So the
5447     + * corresponding interrupt can safely be enabled just after.
5448     + * However for write transactions managed by the CPU, we first write
5449     + * into THR, so TXCOMP is cleared. Then we can safely enable TXCOMP
5450     + * interrupt. If TXCOMP interrupt were enabled before writing into THR,
5451     + * the interrupt handler would be called immediately and the i2c command
5452     + * would be reported as completed.
5453     + * Also when a write transaction is managed by the DMA controller,
5454     + * enabling the TXCOMP interrupt in this function may lead to a race
5455     + * condition since we don't know whether the TXCOMP interrupt is enabled
5456     + * before or after the DMA has started to write into THR. So the TXCOMP
5457     + * interrupt is enabled later by at91_twi_write_data_dma_callback().
5458     + * Immediately after in that DMA callback, we still need to send the
5459     + * STOP condition manually writing the corresponding bit into the
5460     + * Control Register.
5461     + */
5462     +
5463     dev_dbg(dev->dev, "transfer: %s %d bytes.\n",
5464     (dev->msg->flags & I2C_M_RD) ? "read" : "write", dev->buf_len);
5465    
5466     @@ -414,26 +452,24 @@ static int at91_do_twi_transfer(struct at91_twi_dev *dev)
5467     * seems to be the best solution.
5468     */
5469     if (dev->use_dma && (dev->buf_len > AT91_I2C_DMA_THRESHOLD)) {
5470     + at91_twi_write(dev, AT91_TWI_IER, AT91_TWI_NACK);
5471     at91_twi_read_data_dma(dev);
5472     - /*
5473     - * It is important to enable TXCOMP irq here because
5474     - * doing it only when transferring the last two bytes
5475     - * will mask NACK errors since TXCOMP is set when a
5476     - * NACK occurs.
5477     - */
5478     - at91_twi_write(dev, AT91_TWI_IER,
5479     - AT91_TWI_TXCOMP);
5480     - } else
5481     + } else {
5482     at91_twi_write(dev, AT91_TWI_IER,
5483     - AT91_TWI_TXCOMP | AT91_TWI_RXRDY);
5484     + AT91_TWI_TXCOMP |
5485     + AT91_TWI_NACK |
5486     + AT91_TWI_RXRDY);
5487     + }
5488     } else {
5489     if (dev->use_dma && (dev->buf_len > AT91_I2C_DMA_THRESHOLD)) {
5490     + at91_twi_write(dev, AT91_TWI_IER, AT91_TWI_NACK);
5491     at91_twi_write_data_dma(dev);
5492     - at91_twi_write(dev, AT91_TWI_IER, AT91_TWI_TXCOMP);
5493     } else {
5494     at91_twi_write_next_byte(dev);
5495     at91_twi_write(dev, AT91_TWI_IER,
5496     - AT91_TWI_TXCOMP | AT91_TWI_TXRDY);
5497     + AT91_TWI_TXCOMP |
5498     + AT91_TWI_NACK |
5499     + AT91_TWI_TXRDY);
5500     }
5501     }
5502    
5503     diff --git a/drivers/i2c/i2c-mux.c b/drivers/i2c/i2c-mux.c
5504     index 06cc1ff088f1..2ba7c0fbc615 100644
5505     --- a/drivers/i2c/i2c-mux.c
5506     +++ b/drivers/i2c/i2c-mux.c
5507     @@ -51,7 +51,7 @@ static int i2c_mux_master_xfer(struct i2c_adapter *adap,
5508    
5509     ret = priv->select(parent, priv->mux_priv, priv->chan_id);
5510     if (ret >= 0)
5511     - ret = parent->algo->master_xfer(parent, msgs, num);
5512     + ret = __i2c_transfer(parent, msgs, num);
5513     if (priv->deselect)
5514     priv->deselect(parent, priv->mux_priv, priv->chan_id);
5515    
5516     @@ -144,6 +144,7 @@ struct i2c_adapter *i2c_add_mux_adapter(struct i2c_adapter *parent,
5517     priv->adap.dev.parent = &parent->dev;
5518     priv->adap.retries = parent->retries;
5519     priv->adap.timeout = parent->timeout;
5520     + priv->adap.quirks = parent->quirks;
5521    
5522     /* Sanity check on class */
5523     if (i2c_mux_parent_classes(parent) & class)
5524     diff --git a/drivers/i2c/muxes/i2c-mux-pca9541.c b/drivers/i2c/muxes/i2c-mux-pca9541.c
5525     index cb772775da43..0c8d4d2cbdaf 100644
5526     --- a/drivers/i2c/muxes/i2c-mux-pca9541.c
5527     +++ b/drivers/i2c/muxes/i2c-mux-pca9541.c
5528     @@ -104,7 +104,7 @@ static int pca9541_reg_write(struct i2c_client *client, u8 command, u8 val)
5529     buf[0] = command;
5530     buf[1] = val;
5531     msg.buf = buf;
5532     - ret = adap->algo->master_xfer(adap, &msg, 1);
5533     + ret = __i2c_transfer(adap, &msg, 1);
5534     } else {
5535     union i2c_smbus_data data;
5536    
5537     @@ -144,7 +144,7 @@ static int pca9541_reg_read(struct i2c_client *client, u8 command)
5538     .buf = &val
5539     }
5540     };
5541     - ret = adap->algo->master_xfer(adap, msg, 2);
5542     + ret = __i2c_transfer(adap, msg, 2);
5543     if (ret == 2)
5544     ret = val;
5545     else if (ret >= 0)
5546     diff --git a/drivers/i2c/muxes/i2c-mux-pca954x.c b/drivers/i2c/muxes/i2c-mux-pca954x.c
5547     index bea0d2de2993..ea4aa9dfcea9 100644
5548     --- a/drivers/i2c/muxes/i2c-mux-pca954x.c
5549     +++ b/drivers/i2c/muxes/i2c-mux-pca954x.c
5550     @@ -134,7 +134,7 @@ static int pca954x_reg_write(struct i2c_adapter *adap,
5551     msg.len = 1;
5552     buf[0] = val;
5553     msg.buf = buf;
5554     - ret = adap->algo->master_xfer(adap, &msg, 1);
5555     + ret = __i2c_transfer(adap, &msg, 1);
5556     } else {
5557     union i2c_smbus_data data;
5558     ret = adap->algo->smbus_xfer(adap, client->addr,
5559     diff --git a/drivers/iio/accel/bmc150-accel.c b/drivers/iio/accel/bmc150-accel.c
5560     index 73e87739d219..bf827d012a71 100644
5561     --- a/drivers/iio/accel/bmc150-accel.c
5562     +++ b/drivers/iio/accel/bmc150-accel.c
5563     @@ -1465,7 +1465,7 @@ static void bmc150_accel_unregister_triggers(struct bmc150_accel_data *data,
5564     {
5565     int i;
5566    
5567     - for (i = from; i >= 0; i++) {
5568     + for (i = from; i >= 0; i--) {
5569     if (data->triggers[i].indio_trig) {
5570     iio_trigger_unregister(data->triggers[i].indio_trig);
5571     data->triggers[i].indio_trig = NULL;
5572     diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig
5573     index e36a73e7c3a8..1bcb65b8d4a1 100644
5574     --- a/drivers/iio/adc/Kconfig
5575     +++ b/drivers/iio/adc/Kconfig
5576     @@ -146,8 +146,7 @@ config DA9150_GPADC
5577    
5578     config CC10001_ADC
5579     tristate "Cosmic Circuits 10001 ADC driver"
5580     - depends on HAVE_CLK || REGULATOR
5581     - depends on HAS_IOMEM
5582     + depends on HAS_IOMEM && HAVE_CLK && REGULATOR
5583     select IIO_BUFFER
5584     select IIO_TRIGGERED_BUFFER
5585     help
5586     diff --git a/drivers/iio/adc/at91_adc.c b/drivers/iio/adc/at91_adc.c
5587     index 8a0eb4a04fb5..7b40925dd4ff 100644
5588     --- a/drivers/iio/adc/at91_adc.c
5589     +++ b/drivers/iio/adc/at91_adc.c
5590     @@ -182,7 +182,7 @@ struct at91_adc_caps {
5591     u8 ts_pen_detect_sensitivity;
5592    
5593     /* startup time calculate function */
5594     - u32 (*calc_startup_ticks)(u8 startup_time, u32 adc_clk_khz);
5595     + u32 (*calc_startup_ticks)(u32 startup_time, u32 adc_clk_khz);
5596    
5597     u8 num_channels;
5598     struct at91_adc_reg_desc registers;
5599     @@ -201,7 +201,7 @@ struct at91_adc_state {
5600     u8 num_channels;
5601     void __iomem *reg_base;
5602     struct at91_adc_reg_desc *registers;
5603     - u8 startup_time;
5604     + u32 startup_time;
5605     u8 sample_hold_time;
5606     bool sleep_mode;
5607     struct iio_trigger **trig;
5608     @@ -779,7 +779,7 @@ ret:
5609     return ret;
5610     }
5611    
5612     -static u32 calc_startup_ticks_9260(u8 startup_time, u32 adc_clk_khz)
5613     +static u32 calc_startup_ticks_9260(u32 startup_time, u32 adc_clk_khz)
5614     {
5615     /*
5616     * Number of ticks needed to cover the startup time of the ADC
5617     @@ -790,7 +790,7 @@ static u32 calc_startup_ticks_9260(u8 startup_time, u32 adc_clk_khz)
5618     return round_up((startup_time * adc_clk_khz / 1000) - 1, 8) / 8;
5619     }
5620    
5621     -static u32 calc_startup_ticks_9x5(u8 startup_time, u32 adc_clk_khz)
5622     +static u32 calc_startup_ticks_9x5(u32 startup_time, u32 adc_clk_khz)
5623     {
5624     /*
5625     * For sama5d3x and at91sam9x5, the formula changes to:
5626     diff --git a/drivers/iio/adc/rockchip_saradc.c b/drivers/iio/adc/rockchip_saradc.c
5627     index 8d4e019ea4ca..9c311c1e1ac7 100644
5628     --- a/drivers/iio/adc/rockchip_saradc.c
5629     +++ b/drivers/iio/adc/rockchip_saradc.c
5630     @@ -349,3 +349,7 @@ static struct platform_driver rockchip_saradc_driver = {
5631     };
5632    
5633     module_platform_driver(rockchip_saradc_driver);
5634     +
5635     +MODULE_AUTHOR("Heiko Stuebner <heiko@sntech.de>");
5636     +MODULE_DESCRIPTION("Rockchip SARADC driver");
5637     +MODULE_LICENSE("GPL v2");
5638     diff --git a/drivers/iio/adc/twl4030-madc.c b/drivers/iio/adc/twl4030-madc.c
5639     index 94c5f05b4bc1..4caecbea4c97 100644
5640     --- a/drivers/iio/adc/twl4030-madc.c
5641     +++ b/drivers/iio/adc/twl4030-madc.c
5642     @@ -835,7 +835,8 @@ static int twl4030_madc_probe(struct platform_device *pdev)
5643     irq = platform_get_irq(pdev, 0);
5644     ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
5645     twl4030_madc_threaded_irq_handler,
5646     - IRQF_TRIGGER_RISING, "twl4030_madc", madc);
5647     + IRQF_TRIGGER_RISING | IRQF_ONESHOT,
5648     + "twl4030_madc", madc);
5649     if (ret) {
5650     dev_err(&pdev->dev, "could not request irq\n");
5651     goto err_i2c;
5652     diff --git a/drivers/iio/common/hid-sensors/hid-sensor-trigger.c b/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
5653     index 610fc98f88ef..595511022795 100644
5654     --- a/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
5655     +++ b/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
5656     @@ -36,6 +36,8 @@ static int _hid_sensor_power_state(struct hid_sensor_common *st, bool state)
5657     s32 poll_value = 0;
5658    
5659     if (state) {
5660     + if (!atomic_read(&st->user_requested_state))
5661     + return 0;
5662     if (sensor_hub_device_open(st->hsdev))
5663     return -EIO;
5664    
5665     @@ -52,8 +54,12 @@ static int _hid_sensor_power_state(struct hid_sensor_common *st, bool state)
5666    
5667     poll_value = hid_sensor_read_poll_value(st);
5668     } else {
5669     - if (!atomic_dec_and_test(&st->data_ready))
5670     + int val;
5671     +
5672     + val = atomic_dec_if_positive(&st->data_ready);
5673     + if (val < 0)
5674     return 0;
5675     +
5676     sensor_hub_device_close(st->hsdev);
5677     state_val = hid_sensor_get_usage_index(st->hsdev,
5678     st->power_state.report_id,
5679     @@ -92,9 +98,11 @@ EXPORT_SYMBOL(hid_sensor_power_state);
5680    
5681     int hid_sensor_power_state(struct hid_sensor_common *st, bool state)
5682     {
5683     +
5684     #ifdef CONFIG_PM
5685     int ret;
5686    
5687     + atomic_set(&st->user_requested_state, state);
5688     if (state)
5689     ret = pm_runtime_get_sync(&st->pdev->dev);
5690     else {
5691     @@ -109,6 +117,7 @@ int hid_sensor_power_state(struct hid_sensor_common *st, bool state)
5692    
5693     return 0;
5694     #else
5695     + atomic_set(&st->user_requested_state, state);
5696     return _hid_sensor_power_state(st, state);
5697     #endif
5698     }
5699     diff --git a/drivers/iio/dac/ad5624r_spi.c b/drivers/iio/dac/ad5624r_spi.c
5700     index 61bb9d4239ea..e98428df0d44 100644
5701     --- a/drivers/iio/dac/ad5624r_spi.c
5702     +++ b/drivers/iio/dac/ad5624r_spi.c
5703     @@ -22,7 +22,7 @@
5704     #include "ad5624r.h"
5705    
5706     static int ad5624r_spi_write(struct spi_device *spi,
5707     - u8 cmd, u8 addr, u16 val, u8 len)
5708     + u8 cmd, u8 addr, u16 val, u8 shift)
5709     {
5710     u32 data;
5711     u8 msg[3];
5712     @@ -35,7 +35,7 @@ static int ad5624r_spi_write(struct spi_device *spi,
5713     * 14-, 12-bit input code followed by 0, 2, or 4 don't care bits,
5714     * for the AD5664R, AD5644R, and AD5624R, respectively.
5715     */
5716     - data = (0 << 22) | (cmd << 19) | (addr << 16) | (val << (16 - len));
5717     + data = (0 << 22) | (cmd << 19) | (addr << 16) | (val << shift);
5718     msg[0] = data >> 16;
5719     msg[1] = data >> 8;
5720     msg[2] = data;
5721     diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
5722     index 17d4bb15be4d..65ce86837177 100644
5723     --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
5724     +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
5725     @@ -431,6 +431,23 @@ static int inv_mpu6050_write_gyro_scale(struct inv_mpu6050_state *st, int val)
5726     return -EINVAL;
5727     }
5728    
5729     +static int inv_write_raw_get_fmt(struct iio_dev *indio_dev,
5730     + struct iio_chan_spec const *chan, long mask)
5731     +{
5732     + switch (mask) {
5733     + case IIO_CHAN_INFO_SCALE:
5734     + switch (chan->type) {
5735     + case IIO_ANGL_VEL:
5736     + return IIO_VAL_INT_PLUS_NANO;
5737     + default:
5738     + return IIO_VAL_INT_PLUS_MICRO;
5739     + }
5740     + default:
5741     + return IIO_VAL_INT_PLUS_MICRO;
5742     + }
5743     +
5744     + return -EINVAL;
5745     +}
5746     static int inv_mpu6050_write_accel_scale(struct inv_mpu6050_state *st, int val)
5747     {
5748     int result, i;
5749     @@ -696,6 +713,7 @@ static const struct iio_info mpu_info = {
5750     .driver_module = THIS_MODULE,
5751     .read_raw = &inv_mpu6050_read_raw,
5752     .write_raw = &inv_mpu6050_write_raw,
5753     + .write_raw_get_fmt = &inv_write_raw_get_fmt,
5754     .attrs = &inv_attribute_group,
5755     .validate_trigger = inv_mpu6050_validate_trigger,
5756     };
5757     diff --git a/drivers/iio/light/cm3323.c b/drivers/iio/light/cm3323.c
5758     index 869033e48a1f..a1d4905cc9d2 100644
5759     --- a/drivers/iio/light/cm3323.c
5760     +++ b/drivers/iio/light/cm3323.c
5761     @@ -123,7 +123,7 @@ static int cm3323_set_it_bits(struct cm3323_data *data, int val, int val2)
5762     for (i = 0; i < ARRAY_SIZE(cm3323_int_time); i++) {
5763     if (val == cm3323_int_time[i].val &&
5764     val2 == cm3323_int_time[i].val2) {
5765     - reg_conf = data->reg_conf;
5766     + reg_conf = data->reg_conf & ~CM3323_CONF_IT_MASK;
5767     reg_conf |= i << CM3323_CONF_IT_SHIFT;
5768    
5769     ret = i2c_smbus_write_word_data(data->client,
5770     diff --git a/drivers/iio/light/tcs3414.c b/drivers/iio/light/tcs3414.c
5771     index 71c2bde275aa..f8b1df018abe 100644
5772     --- a/drivers/iio/light/tcs3414.c
5773     +++ b/drivers/iio/light/tcs3414.c
5774     @@ -185,7 +185,7 @@ static int tcs3414_write_raw(struct iio_dev *indio_dev,
5775     if (val != 0)
5776     return -EINVAL;
5777     for (i = 0; i < ARRAY_SIZE(tcs3414_times); i++) {
5778     - if (val == tcs3414_times[i] * 1000) {
5779     + if (val2 == tcs3414_times[i] * 1000) {
5780     data->timing &= ~TCS3414_INTEG_MASK;
5781     data->timing |= i;
5782     return i2c_smbus_write_byte_data(
5783     diff --git a/drivers/iio/proximity/sx9500.c b/drivers/iio/proximity/sx9500.c
5784     index fa40f6d0ca39..bd26a484abcc 100644
5785     --- a/drivers/iio/proximity/sx9500.c
5786     +++ b/drivers/iio/proximity/sx9500.c
5787     @@ -206,7 +206,7 @@ static int sx9500_read_proximity(struct sx9500_data *data,
5788     if (ret < 0)
5789     return ret;
5790    
5791     - *val = 32767 - (s16)be16_to_cpu(regval);
5792     + *val = be16_to_cpu(regval);
5793    
5794     return IIO_VAL_INT;
5795     }
5796     diff --git a/drivers/iio/temperature/tmp006.c b/drivers/iio/temperature/tmp006.c
5797     index 84a0789c3d96..7a8050996b4e 100644
5798     --- a/drivers/iio/temperature/tmp006.c
5799     +++ b/drivers/iio/temperature/tmp006.c
5800     @@ -132,6 +132,9 @@ static int tmp006_write_raw(struct iio_dev *indio_dev,
5801     struct tmp006_data *data = iio_priv(indio_dev);
5802     int i;
5803    
5804     + if (mask != IIO_CHAN_INFO_SAMP_FREQ)
5805     + return -EINVAL;
5806     +
5807     for (i = 0; i < ARRAY_SIZE(tmp006_freqs); i++)
5808     if ((val == tmp006_freqs[i][0]) &&
5809     (val2 == tmp006_freqs[i][1])) {
5810     diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
5811     index 9dcb66077d6c..219f2122f9b9 100644
5812     --- a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
5813     +++ b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
5814     @@ -679,7 +679,6 @@ err:
5815     ocrdma_release_ucontext_pd(uctx);
5816     } else {
5817     status = _ocrdma_dealloc_pd(dev, pd);
5818     - kfree(pd);
5819     }
5820     exit:
5821     return ERR_PTR(status);
5822     diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c
5823     index 135a0907e9de..c90118e90708 100644
5824     --- a/drivers/md/bitmap.c
5825     +++ b/drivers/md/bitmap.c
5826     @@ -494,7 +494,7 @@ static int bitmap_new_disk_sb(struct bitmap *bitmap)
5827     bitmap_super_t *sb;
5828     unsigned long chunksize, daemon_sleep, write_behind;
5829    
5830     - bitmap->storage.sb_page = alloc_page(GFP_KERNEL);
5831     + bitmap->storage.sb_page = alloc_page(GFP_KERNEL | __GFP_ZERO);
5832     if (bitmap->storage.sb_page == NULL)
5833     return -ENOMEM;
5834     bitmap->storage.sb_page->index = 0;
5835     @@ -541,6 +541,7 @@ static int bitmap_new_disk_sb(struct bitmap *bitmap)
5836     sb->state = cpu_to_le32(bitmap->flags);
5837     bitmap->events_cleared = bitmap->mddev->events;
5838     sb->events_cleared = cpu_to_le64(bitmap->mddev->events);
5839     + bitmap->mddev->bitmap_info.nodes = 0;
5840    
5841     kunmap_atomic(sb);
5842    
5843     @@ -611,8 +612,16 @@ re_read:
5844     daemon_sleep = le32_to_cpu(sb->daemon_sleep) * HZ;
5845     write_behind = le32_to_cpu(sb->write_behind);
5846     sectors_reserved = le32_to_cpu(sb->sectors_reserved);
5847     - nodes = le32_to_cpu(sb->nodes);
5848     - strlcpy(bitmap->mddev->bitmap_info.cluster_name, sb->cluster_name, 64);
5849     + /* XXX: This is a hack to ensure that we don't use clustering
5850     + * in case:
5851     + * - dm-raid is in use and
5852     + * - the nodes written in bitmap_sb is erroneous.
5853     + */
5854     + if (!bitmap->mddev->sync_super) {
5855     + nodes = le32_to_cpu(sb->nodes);
5856     + strlcpy(bitmap->mddev->bitmap_info.cluster_name,
5857     + sb->cluster_name, 64);
5858     + }
5859    
5860     /* verify that the bitmap-specific fields are valid */
5861     if (sb->magic != cpu_to_le32(BITMAP_MAGIC))
5862     diff --git a/drivers/md/dm-cache-policy-cleaner.c b/drivers/md/dm-cache-policy-cleaner.c
5863     index b04d1f904d07..004e463c9423 100644
5864     --- a/drivers/md/dm-cache-policy-cleaner.c
5865     +++ b/drivers/md/dm-cache-policy-cleaner.c
5866     @@ -171,7 +171,8 @@ static void remove_cache_hash_entry(struct wb_cache_entry *e)
5867     /* Public interface (see dm-cache-policy.h */
5868     static int wb_map(struct dm_cache_policy *pe, dm_oblock_t oblock,
5869     bool can_block, bool can_migrate, bool discarded_oblock,
5870     - struct bio *bio, struct policy_result *result)
5871     + struct bio *bio, struct policy_locker *locker,
5872     + struct policy_result *result)
5873     {
5874     struct policy *p = to_policy(pe);
5875     struct wb_cache_entry *e;
5876     diff --git a/drivers/md/dm-cache-policy-internal.h b/drivers/md/dm-cache-policy-internal.h
5877     index 2256a1f24f73..c198e6defb9c 100644
5878     --- a/drivers/md/dm-cache-policy-internal.h
5879     +++ b/drivers/md/dm-cache-policy-internal.h
5880     @@ -16,9 +16,10 @@
5881     */
5882     static inline int policy_map(struct dm_cache_policy *p, dm_oblock_t oblock,
5883     bool can_block, bool can_migrate, bool discarded_oblock,
5884     - struct bio *bio, struct policy_result *result)
5885     + struct bio *bio, struct policy_locker *locker,
5886     + struct policy_result *result)
5887     {
5888     - return p->map(p, oblock, can_block, can_migrate, discarded_oblock, bio, result);
5889     + return p->map(p, oblock, can_block, can_migrate, discarded_oblock, bio, locker, result);
5890     }
5891    
5892     static inline int policy_lookup(struct dm_cache_policy *p, dm_oblock_t oblock, dm_cblock_t *cblock)
5893     diff --git a/drivers/md/dm-cache-policy-mq.c b/drivers/md/dm-cache-policy-mq.c
5894     index 3ddd1162334d..515d44bf24d3 100644
5895     --- a/drivers/md/dm-cache-policy-mq.c
5896     +++ b/drivers/md/dm-cache-policy-mq.c
5897     @@ -693,9 +693,10 @@ static void requeue(struct mq_policy *mq, struct entry *e)
5898     * - set the hit count to a hard coded value other than 1, eg, is it better
5899     * if it goes in at level 2?
5900     */
5901     -static int demote_cblock(struct mq_policy *mq, dm_oblock_t *oblock)
5902     +static int demote_cblock(struct mq_policy *mq,
5903     + struct policy_locker *locker, dm_oblock_t *oblock)
5904     {
5905     - struct entry *demoted = pop(mq, &mq->cache_clean);
5906     + struct entry *demoted = peek(&mq->cache_clean);
5907    
5908     if (!demoted)
5909     /*
5910     @@ -707,6 +708,13 @@ static int demote_cblock(struct mq_policy *mq, dm_oblock_t *oblock)
5911     */
5912     return -ENOSPC;
5913    
5914     + if (locker->fn(locker, demoted->oblock))
5915     + /*
5916     + * We couldn't lock the demoted block.
5917     + */
5918     + return -EBUSY;
5919     +
5920     + del(mq, demoted);
5921     *oblock = demoted->oblock;
5922     free_entry(&mq->cache_pool, demoted);
5923    
5924     @@ -795,6 +803,7 @@ static int cache_entry_found(struct mq_policy *mq,
5925     * finding which cache block to use.
5926     */
5927     static int pre_cache_to_cache(struct mq_policy *mq, struct entry *e,
5928     + struct policy_locker *locker,
5929     struct policy_result *result)
5930     {
5931     int r;
5932     @@ -803,11 +812,12 @@ static int pre_cache_to_cache(struct mq_policy *mq, struct entry *e,
5933     /* Ensure there's a free cblock in the cache */
5934     if (epool_empty(&mq->cache_pool)) {
5935     result->op = POLICY_REPLACE;
5936     - r = demote_cblock(mq, &result->old_oblock);
5937     + r = demote_cblock(mq, locker, &result->old_oblock);
5938     if (r) {
5939     result->op = POLICY_MISS;
5940     return 0;
5941     }
5942     +
5943     } else
5944     result->op = POLICY_NEW;
5945    
5946     @@ -829,7 +839,8 @@ static int pre_cache_to_cache(struct mq_policy *mq, struct entry *e,
5947    
5948     static int pre_cache_entry_found(struct mq_policy *mq, struct entry *e,
5949     bool can_migrate, bool discarded_oblock,
5950     - int data_dir, struct policy_result *result)
5951     + int data_dir, struct policy_locker *locker,
5952     + struct policy_result *result)
5953     {
5954     int r = 0;
5955    
5956     @@ -842,7 +853,7 @@ static int pre_cache_entry_found(struct mq_policy *mq, struct entry *e,
5957    
5958     else {
5959     requeue(mq, e);
5960     - r = pre_cache_to_cache(mq, e, result);
5961     + r = pre_cache_to_cache(mq, e, locker, result);
5962     }
5963    
5964     return r;
5965     @@ -872,6 +883,7 @@ static void insert_in_pre_cache(struct mq_policy *mq,
5966     }
5967    
5968     static void insert_in_cache(struct mq_policy *mq, dm_oblock_t oblock,
5969     + struct policy_locker *locker,
5970     struct policy_result *result)
5971     {
5972     int r;
5973     @@ -879,7 +891,7 @@ static void insert_in_cache(struct mq_policy *mq, dm_oblock_t oblock,
5974    
5975     if (epool_empty(&mq->cache_pool)) {
5976     result->op = POLICY_REPLACE;
5977     - r = demote_cblock(mq, &result->old_oblock);
5978     + r = demote_cblock(mq, locker, &result->old_oblock);
5979     if (unlikely(r)) {
5980     result->op = POLICY_MISS;
5981     insert_in_pre_cache(mq, oblock);
5982     @@ -907,11 +919,12 @@ static void insert_in_cache(struct mq_policy *mq, dm_oblock_t oblock,
5983    
5984     static int no_entry_found(struct mq_policy *mq, dm_oblock_t oblock,
5985     bool can_migrate, bool discarded_oblock,
5986     - int data_dir, struct policy_result *result)
5987     + int data_dir, struct policy_locker *locker,
5988     + struct policy_result *result)
5989     {
5990     if (adjusted_promote_threshold(mq, discarded_oblock, data_dir) <= 1) {
5991     if (can_migrate)
5992     - insert_in_cache(mq, oblock, result);
5993     + insert_in_cache(mq, oblock, locker, result);
5994     else
5995     return -EWOULDBLOCK;
5996     } else {
5997     @@ -928,7 +941,8 @@ static int no_entry_found(struct mq_policy *mq, dm_oblock_t oblock,
5998     */
5999     static int map(struct mq_policy *mq, dm_oblock_t oblock,
6000     bool can_migrate, bool discarded_oblock,
6001     - int data_dir, struct policy_result *result)
6002     + int data_dir, struct policy_locker *locker,
6003     + struct policy_result *result)
6004     {
6005     int r = 0;
6006     struct entry *e = hash_lookup(mq, oblock);
6007     @@ -942,11 +956,11 @@ static int map(struct mq_policy *mq, dm_oblock_t oblock,
6008    
6009     else if (e)
6010     r = pre_cache_entry_found(mq, e, can_migrate, discarded_oblock,
6011     - data_dir, result);
6012     + data_dir, locker, result);
6013    
6014     else
6015     r = no_entry_found(mq, oblock, can_migrate, discarded_oblock,
6016     - data_dir, result);
6017     + data_dir, locker, result);
6018    
6019     if (r == -EWOULDBLOCK)
6020     result->op = POLICY_MISS;
6021     @@ -1012,7 +1026,8 @@ static void copy_tick(struct mq_policy *mq)
6022    
6023     static int mq_map(struct dm_cache_policy *p, dm_oblock_t oblock,
6024     bool can_block, bool can_migrate, bool discarded_oblock,
6025     - struct bio *bio, struct policy_result *result)
6026     + struct bio *bio, struct policy_locker *locker,
6027     + struct policy_result *result)
6028     {
6029     int r;
6030     struct mq_policy *mq = to_mq_policy(p);
6031     @@ -1028,7 +1043,7 @@ static int mq_map(struct dm_cache_policy *p, dm_oblock_t oblock,
6032    
6033     iot_examine_bio(&mq->tracker, bio);
6034     r = map(mq, oblock, can_migrate, discarded_oblock,
6035     - bio_data_dir(bio), result);
6036     + bio_data_dir(bio), locker, result);
6037    
6038     mutex_unlock(&mq->lock);
6039    
6040     diff --git a/drivers/md/dm-cache-policy.h b/drivers/md/dm-cache-policy.h
6041     index f50fe360c546..5524e21e4836 100644
6042     --- a/drivers/md/dm-cache-policy.h
6043     +++ b/drivers/md/dm-cache-policy.h
6044     @@ -70,6 +70,18 @@ enum policy_operation {
6045     };
6046    
6047     /*
6048     + * When issuing a POLICY_REPLACE the policy needs to make a callback to
6049     + * lock the block being demoted. This doesn't need to occur during a
6050     + * writeback operation since the block remains in the cache.
6051     + */
6052     +struct policy_locker;
6053     +typedef int (*policy_lock_fn)(struct policy_locker *l, dm_oblock_t oblock);
6054     +
6055     +struct policy_locker {
6056     + policy_lock_fn fn;
6057     +};
6058     +
6059     +/*
6060     * This is the instruction passed back to the core target.
6061     */
6062     struct policy_result {
6063     @@ -122,7 +134,8 @@ struct dm_cache_policy {
6064     */
6065     int (*map)(struct dm_cache_policy *p, dm_oblock_t oblock,
6066     bool can_block, bool can_migrate, bool discarded_oblock,
6067     - struct bio *bio, struct policy_result *result);
6068     + struct bio *bio, struct policy_locker *locker,
6069     + struct policy_result *result);
6070    
6071     /*
6072     * Sometimes we want to see if a block is in the cache, without
6073     diff --git a/drivers/md/dm-cache-target.c b/drivers/md/dm-cache-target.c
6074     index 7755af351867..e049becaaf2d 100644
6075     --- a/drivers/md/dm-cache-target.c
6076     +++ b/drivers/md/dm-cache-target.c
6077     @@ -1445,16 +1445,43 @@ static void inc_miss_counter(struct cache *cache, struct bio *bio)
6078     &cache->stats.read_miss : &cache->stats.write_miss);
6079     }
6080    
6081     +/*----------------------------------------------------------------*/
6082     +
6083     +struct old_oblock_lock {
6084     + struct policy_locker locker;
6085     + struct cache *cache;
6086     + struct prealloc *structs;
6087     + struct dm_bio_prison_cell *cell;
6088     +};
6089     +
6090     +static int null_locker(struct policy_locker *locker, dm_oblock_t b)
6091     +{
6092     + /* This should never be called */
6093     + BUG();
6094     + return 0;
6095     +}
6096     +
6097     +static int cell_locker(struct policy_locker *locker, dm_oblock_t b)
6098     +{
6099     + struct old_oblock_lock *l = container_of(locker, struct old_oblock_lock, locker);
6100     + struct dm_bio_prison_cell *cell_prealloc = prealloc_get_cell(l->structs);
6101     +
6102     + return bio_detain(l->cache, b, NULL, cell_prealloc,
6103     + (cell_free_fn) prealloc_put_cell,
6104     + l->structs, &l->cell);
6105     +}
6106     +
6107     static void process_bio(struct cache *cache, struct prealloc *structs,
6108     struct bio *bio)
6109     {
6110     int r;
6111     bool release_cell = true;
6112     dm_oblock_t block = get_bio_block(cache, bio);
6113     - struct dm_bio_prison_cell *cell_prealloc, *old_ocell, *new_ocell;
6114     + struct dm_bio_prison_cell *cell_prealloc, *new_ocell;
6115     struct policy_result lookup_result;
6116     bool passthrough = passthrough_mode(&cache->features);
6117     bool discarded_block, can_migrate;
6118     + struct old_oblock_lock ool;
6119    
6120     /*
6121     * Check to see if that block is currently migrating.
6122     @@ -1469,8 +1496,12 @@ static void process_bio(struct cache *cache, struct prealloc *structs,
6123     discarded_block = is_discarded_oblock(cache, block);
6124     can_migrate = !passthrough && (discarded_block || spare_migration_bandwidth(cache));
6125    
6126     + ool.locker.fn = cell_locker;
6127     + ool.cache = cache;
6128     + ool.structs = structs;
6129     + ool.cell = NULL;
6130     r = policy_map(cache->policy, block, true, can_migrate, discarded_block,
6131     - bio, &lookup_result);
6132     + bio, &ool.locker, &lookup_result);
6133    
6134     if (r == -EWOULDBLOCK)
6135     /* migration has been denied */
6136     @@ -1527,27 +1558,11 @@ static void process_bio(struct cache *cache, struct prealloc *structs,
6137     break;
6138    
6139     case POLICY_REPLACE:
6140     - cell_prealloc = prealloc_get_cell(structs);
6141     - r = bio_detain(cache, lookup_result.old_oblock, bio, cell_prealloc,
6142     - (cell_free_fn) prealloc_put_cell,
6143     - structs, &old_ocell);
6144     - if (r > 0) {
6145     - /*
6146     - * We have to be careful to avoid lock inversion of
6147     - * the cells. So we back off, and wait for the
6148     - * old_ocell to become free.
6149     - */
6150     - policy_force_mapping(cache->policy, block,
6151     - lookup_result.old_oblock);
6152     - atomic_inc(&cache->stats.cache_cell_clash);
6153     - break;
6154     - }
6155     atomic_inc(&cache->stats.demotion);
6156     atomic_inc(&cache->stats.promotion);
6157     -
6158     demote_then_promote(cache, structs, lookup_result.old_oblock,
6159     block, lookup_result.cblock,
6160     - old_ocell, new_ocell);
6161     + ool.cell, new_ocell);
6162     release_cell = false;
6163     break;
6164    
6165     @@ -2595,6 +2610,9 @@ static int __cache_map(struct cache *cache, struct bio *bio, struct dm_bio_priso
6166     bool discarded_block;
6167     struct policy_result lookup_result;
6168     struct per_bio_data *pb = init_per_bio_data(bio, pb_data_size);
6169     + struct old_oblock_lock ool;
6170     +
6171     + ool.locker.fn = null_locker;
6172    
6173     if (unlikely(from_oblock(block) >= from_oblock(cache->origin_blocks))) {
6174     /*
6175     @@ -2633,7 +2651,7 @@ static int __cache_map(struct cache *cache, struct bio *bio, struct dm_bio_priso
6176     discarded_block = is_discarded_oblock(cache, block);
6177    
6178     r = policy_map(cache->policy, block, false, can_migrate, discarded_block,
6179     - bio, &lookup_result);
6180     + bio, &ool.locker, &lookup_result);
6181     if (r == -EWOULDBLOCK) {
6182     cell_defer(cache, *cell, true);
6183     return DM_MAPIO_SUBMITTED;
6184     diff --git a/drivers/md/dm-stats.c b/drivers/md/dm-stats.c
6185     index f478a4c96d2f..419bdd4fc8b8 100644
6186     --- a/drivers/md/dm-stats.c
6187     +++ b/drivers/md/dm-stats.c
6188     @@ -795,6 +795,8 @@ static int message_stats_create(struct mapped_device *md,
6189     return -EINVAL;
6190    
6191     if (sscanf(argv[2], "/%u%c", &divisor, &dummy) == 1) {
6192     + if (!divisor)
6193     + return -EINVAL;
6194     step = end - start;
6195     if (do_div(step, divisor))
6196     step++;
6197     diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
6198     index 921aafd12aee..e22e6c892b8a 100644
6199     --- a/drivers/md/dm-thin.c
6200     +++ b/drivers/md/dm-thin.c
6201     @@ -18,6 +18,7 @@
6202     #include <linux/init.h>
6203     #include <linux/module.h>
6204     #include <linux/slab.h>
6205     +#include <linux/vmalloc.h>
6206     #include <linux/sort.h>
6207     #include <linux/rbtree.h>
6208    
6209     @@ -260,7 +261,7 @@ struct pool {
6210     process_mapping_fn process_prepared_mapping;
6211     process_mapping_fn process_prepared_discard;
6212    
6213     - struct dm_bio_prison_cell *cell_sort_array[CELL_SORT_ARRAY_SIZE];
6214     + struct dm_bio_prison_cell **cell_sort_array;
6215     };
6216    
6217     static enum pool_mode get_pool_mode(struct pool *pool);
6218     @@ -2499,6 +2500,7 @@ static void __pool_destroy(struct pool *pool)
6219     {
6220     __pool_table_remove(pool);
6221    
6222     + vfree(pool->cell_sort_array);
6223     if (dm_pool_metadata_close(pool->pmd) < 0)
6224     DMWARN("%s: dm_pool_metadata_close() failed.", __func__);
6225    
6226     @@ -2611,6 +2613,13 @@ static struct pool *pool_create(struct mapped_device *pool_md,
6227     goto bad_mapping_pool;
6228     }
6229    
6230     + pool->cell_sort_array = vmalloc(sizeof(*pool->cell_sort_array) * CELL_SORT_ARRAY_SIZE);
6231     + if (!pool->cell_sort_array) {
6232     + *error = "Error allocating cell sort array";
6233     + err_p = ERR_PTR(-ENOMEM);
6234     + goto bad_sort_array;
6235     + }
6236     +
6237     pool->ref_count = 1;
6238     pool->last_commit_jiffies = jiffies;
6239     pool->pool_md = pool_md;
6240     @@ -2619,6 +2628,8 @@ static struct pool *pool_create(struct mapped_device *pool_md,
6241    
6242     return pool;
6243    
6244     +bad_sort_array:
6245     + mempool_destroy(pool->mapping_pool);
6246     bad_mapping_pool:
6247     dm_deferred_set_destroy(pool->all_io_ds);
6248     bad_all_io_ds:
6249     diff --git a/drivers/md/md.c b/drivers/md/md.c
6250     index 4dbed4a67aaf..b9200282fd77 100644
6251     --- a/drivers/md/md.c
6252     +++ b/drivers/md/md.c
6253     @@ -4005,8 +4005,10 @@ new_dev_store(struct mddev *mddev, const char *buf, size_t len)
6254     else
6255     rdev = md_import_device(dev, -1, -1);
6256    
6257     - if (IS_ERR(rdev))
6258     + if (IS_ERR(rdev)) {
6259     + mddev_unlock(mddev);
6260     return PTR_ERR(rdev);
6261     + }
6262     err = bind_rdev_to_array(rdev, mddev);
6263     out:
6264     if (err)
6265     @@ -5159,6 +5161,7 @@ int md_run(struct mddev *mddev)
6266     mddev_detach(mddev);
6267     if (mddev->private)
6268     pers->free(mddev, mddev->private);
6269     + mddev->private = NULL;
6270     module_put(pers->owner);
6271     bitmap_destroy(mddev);
6272     return err;
6273     @@ -5294,6 +5297,7 @@ static void md_clean(struct mddev *mddev)
6274     mddev->changed = 0;
6275     mddev->degraded = 0;
6276     mddev->safemode = 0;
6277     + mddev->private = NULL;
6278     mddev->merge_check_needed = 0;
6279     mddev->bitmap_info.offset = 0;
6280     mddev->bitmap_info.default_offset = 0;
6281     @@ -5366,6 +5370,7 @@ static void __md_stop(struct mddev *mddev)
6282     mddev->pers = NULL;
6283     spin_unlock(&mddev->lock);
6284     pers->free(mddev, mddev->private);
6285     + mddev->private = NULL;
6286     if (pers->sync_request && mddev->to_remove == NULL)
6287     mddev->to_remove = &md_redundancy_group;
6288     module_put(pers->owner);
6289     @@ -6375,7 +6380,7 @@ static int update_array_info(struct mddev *mddev, mdu_array_info_t *info)
6290     mddev->ctime != info->ctime ||
6291     mddev->level != info->level ||
6292     /* mddev->layout != info->layout || */
6293     - !mddev->persistent != info->not_persistent||
6294     + mddev->persistent != !info->not_persistent ||
6295     mddev->chunk_sectors != info->chunk_size >> 9 ||
6296     /* ignore bottom 8 bits of state, and allow SB_BITMAP_PRESENT to change */
6297     ((state^info->state) & 0xfffffe00)
6298     diff --git a/drivers/md/persistent-data/dm-btree-remove.c b/drivers/md/persistent-data/dm-btree-remove.c
6299     index b88757cd0d1d..a03178e91a79 100644
6300     --- a/drivers/md/persistent-data/dm-btree-remove.c
6301     +++ b/drivers/md/persistent-data/dm-btree-remove.c
6302     @@ -309,8 +309,8 @@ static void redistribute3(struct dm_btree_info *info, struct btree_node *parent,
6303    
6304     if (s < 0 && nr_center < -s) {
6305     /* not enough in central node */
6306     - shift(left, center, nr_center);
6307     - s = nr_center - target;
6308     + shift(left, center, -nr_center);
6309     + s += nr_center;
6310     shift(left, right, s);
6311     nr_right += s;
6312     } else
6313     @@ -323,7 +323,7 @@ static void redistribute3(struct dm_btree_info *info, struct btree_node *parent,
6314     if (s > 0 && nr_center < s) {
6315     /* not enough in central node */
6316     shift(center, right, nr_center);
6317     - s = target - nr_center;
6318     + s -= nr_center;
6319     shift(left, right, s);
6320     nr_left -= s;
6321     } else
6322     diff --git a/drivers/md/persistent-data/dm-btree.c b/drivers/md/persistent-data/dm-btree.c
6323     index 200ac12a1d40..fdd3793e22f9 100644
6324     --- a/drivers/md/persistent-data/dm-btree.c
6325     +++ b/drivers/md/persistent-data/dm-btree.c
6326     @@ -255,7 +255,7 @@ int dm_btree_del(struct dm_btree_info *info, dm_block_t root)
6327     int r;
6328     struct del_stack *s;
6329    
6330     - s = kmalloc(sizeof(*s), GFP_KERNEL);
6331     + s = kmalloc(sizeof(*s), GFP_NOIO);
6332     if (!s)
6333     return -ENOMEM;
6334     s->info = info;
6335     diff --git a/drivers/md/persistent-data/dm-space-map-metadata.c b/drivers/md/persistent-data/dm-space-map-metadata.c
6336     index e8a904298887..53091295fce9 100644
6337     --- a/drivers/md/persistent-data/dm-space-map-metadata.c
6338     +++ b/drivers/md/persistent-data/dm-space-map-metadata.c
6339     @@ -204,6 +204,27 @@ static void in(struct sm_metadata *smm)
6340     smm->recursion_count++;
6341     }
6342    
6343     +static int apply_bops(struct sm_metadata *smm)
6344     +{
6345     + int r = 0;
6346     +
6347     + while (!brb_empty(&smm->uncommitted)) {
6348     + struct block_op bop;
6349     +
6350     + r = brb_pop(&smm->uncommitted, &bop);
6351     + if (r) {
6352     + DMERR("bug in bop ring buffer");
6353     + break;
6354     + }
6355     +
6356     + r = commit_bop(smm, &bop);
6357     + if (r)
6358     + break;
6359     + }
6360     +
6361     + return r;
6362     +}
6363     +
6364     static int out(struct sm_metadata *smm)
6365     {
6366     int r = 0;
6367     @@ -216,21 +237,8 @@ static int out(struct sm_metadata *smm)
6368     return -ENOMEM;
6369     }
6370    
6371     - if (smm->recursion_count == 1) {
6372     - while (!brb_empty(&smm->uncommitted)) {
6373     - struct block_op bop;
6374     -
6375     - r = brb_pop(&smm->uncommitted, &bop);
6376     - if (r) {
6377     - DMERR("bug in bop ring buffer");
6378     - break;
6379     - }
6380     -
6381     - r = commit_bop(smm, &bop);
6382     - if (r)
6383     - break;
6384     - }
6385     - }
6386     + if (smm->recursion_count == 1)
6387     + apply_bops(smm);
6388    
6389     smm->recursion_count--;
6390    
6391     @@ -704,6 +712,12 @@ static int sm_metadata_extend(struct dm_space_map *sm, dm_block_t extra_blocks)
6392     }
6393     old_len = smm->begin;
6394    
6395     + r = apply_bops(smm);
6396     + if (r) {
6397     + DMERR("%s: apply_bops failed", __func__);
6398     + goto out;
6399     + }
6400     +
6401     r = sm_ll_commit(&smm->ll);
6402     if (r)
6403     goto out;
6404     @@ -773,6 +787,12 @@ int dm_sm_metadata_create(struct dm_space_map *sm,
6405     if (r)
6406     return r;
6407    
6408     + r = apply_bops(smm);
6409     + if (r) {
6410     + DMERR("%s: apply_bops failed", __func__);
6411     + return r;
6412     + }
6413     +
6414     return sm_metadata_commit(sm);
6415     }
6416    
6417     diff --git a/drivers/media/dvb-frontends/af9013.c b/drivers/media/dvb-frontends/af9013.c
6418     index 8001690d7576..ba6c8f6c42a1 100644
6419     --- a/drivers/media/dvb-frontends/af9013.c
6420     +++ b/drivers/media/dvb-frontends/af9013.c
6421     @@ -605,6 +605,10 @@ static int af9013_set_frontend(struct dvb_frontend *fe)
6422     }
6423     }
6424    
6425     + /* Return an error if can't find bandwidth or the right clock */
6426     + if (i == ARRAY_SIZE(coeff_lut))
6427     + return -EINVAL;
6428     +
6429     ret = af9013_wr_regs(state, 0xae00, coeff_lut[i].val,
6430     sizeof(coeff_lut[i].val));
6431     }
6432     diff --git a/drivers/media/dvb-frontends/cx24116.c b/drivers/media/dvb-frontends/cx24116.c
6433     index 2916d7c74a1d..7bc68b355c0b 100644
6434     --- a/drivers/media/dvb-frontends/cx24116.c
6435     +++ b/drivers/media/dvb-frontends/cx24116.c
6436     @@ -963,6 +963,10 @@ static int cx24116_send_diseqc_msg(struct dvb_frontend *fe,
6437     struct cx24116_state *state = fe->demodulator_priv;
6438     int i, ret;
6439    
6440     + /* Validate length */
6441     + if (d->msg_len > sizeof(d->msg))
6442     + return -EINVAL;
6443     +
6444     /* Dump DiSEqC message */
6445     if (debug) {
6446     printk(KERN_INFO "cx24116: %s(", __func__);
6447     @@ -974,10 +978,6 @@ static int cx24116_send_diseqc_msg(struct dvb_frontend *fe,
6448     printk(") toneburst=%d\n", toneburst);
6449     }
6450    
6451     - /* Validate length */
6452     - if (d->msg_len > (CX24116_ARGLEN - CX24116_DISEQC_MSGOFS))
6453     - return -EINVAL;
6454     -
6455     /* DiSEqC message */
6456     for (i = 0; i < d->msg_len; i++)
6457     state->dsec_cmd.args[CX24116_DISEQC_MSGOFS + i] = d->msg[i];
6458     diff --git a/drivers/media/dvb-frontends/cx24117.c b/drivers/media/dvb-frontends/cx24117.c
6459     index acb965ce0358..af6363573efd 100644
6460     --- a/drivers/media/dvb-frontends/cx24117.c
6461     +++ b/drivers/media/dvb-frontends/cx24117.c
6462     @@ -1043,7 +1043,7 @@ static int cx24117_send_diseqc_msg(struct dvb_frontend *fe,
6463     dev_dbg(&state->priv->i2c->dev, ")\n");
6464    
6465     /* Validate length */
6466     - if (d->msg_len > 15)
6467     + if (d->msg_len > sizeof(d->msg))
6468     return -EINVAL;
6469    
6470     /* DiSEqC message */
6471     diff --git a/drivers/media/dvb-frontends/s5h1420.c b/drivers/media/dvb-frontends/s5h1420.c
6472     index 93eeaf7118fd..0b4f8fe6bf99 100644
6473     --- a/drivers/media/dvb-frontends/s5h1420.c
6474     +++ b/drivers/media/dvb-frontends/s5h1420.c
6475     @@ -180,7 +180,7 @@ static int s5h1420_send_master_cmd (struct dvb_frontend* fe,
6476     int result = 0;
6477    
6478     dprintk("enter %s\n", __func__);
6479     - if (cmd->msg_len > 8)
6480     + if (cmd->msg_len > sizeof(cmd->msg))
6481     return -EINVAL;
6482    
6483     /* setup for DISEQC */
6484     diff --git a/drivers/media/pci/cx18/cx18-streams.c b/drivers/media/pci/cx18/cx18-streams.c
6485     index c82d25d53341..c9860845264f 100644
6486     --- a/drivers/media/pci/cx18/cx18-streams.c
6487     +++ b/drivers/media/pci/cx18/cx18-streams.c
6488     @@ -90,6 +90,7 @@ static struct {
6489     "encoder PCM audio",
6490     VFL_TYPE_GRABBER, CX18_V4L2_ENC_PCM_OFFSET,
6491     PCI_DMA_FROMDEVICE,
6492     + V4L2_CAP_TUNER | V4L2_CAP_AUDIO | V4L2_CAP_READWRITE,
6493     },
6494     { /* CX18_ENC_STREAM_TYPE_IDX */
6495     "encoder IDX",
6496     diff --git a/drivers/media/pci/saa7164/saa7164-encoder.c b/drivers/media/pci/saa7164/saa7164-encoder.c
6497     index 9266965412c3..7a0a65146723 100644
6498     --- a/drivers/media/pci/saa7164/saa7164-encoder.c
6499     +++ b/drivers/media/pci/saa7164/saa7164-encoder.c
6500     @@ -721,13 +721,14 @@ static int vidioc_querycap(struct file *file, void *priv,
6501     sizeof(cap->card));
6502     sprintf(cap->bus_info, "PCI:%s", pci_name(dev->pci));
6503    
6504     - cap->capabilities =
6505     + cap->device_caps =
6506     V4L2_CAP_VIDEO_CAPTURE |
6507     - V4L2_CAP_READWRITE |
6508     - 0;
6509     + V4L2_CAP_READWRITE |
6510     + V4L2_CAP_TUNER;
6511    
6512     - cap->capabilities |= V4L2_CAP_TUNER;
6513     - cap->version = 0;
6514     + cap->capabilities = cap->device_caps |
6515     + V4L2_CAP_VBI_CAPTURE |
6516     + V4L2_CAP_DEVICE_CAPS;
6517    
6518     return 0;
6519     }
6520     diff --git a/drivers/media/pci/saa7164/saa7164-vbi.c b/drivers/media/pci/saa7164/saa7164-vbi.c
6521     index 6e025fea2542..06117e6c0596 100644
6522     --- a/drivers/media/pci/saa7164/saa7164-vbi.c
6523     +++ b/drivers/media/pci/saa7164/saa7164-vbi.c
6524     @@ -660,13 +660,14 @@ static int vidioc_querycap(struct file *file, void *priv,
6525     sizeof(cap->card));
6526     sprintf(cap->bus_info, "PCI:%s", pci_name(dev->pci));
6527    
6528     - cap->capabilities =
6529     + cap->device_caps =
6530     V4L2_CAP_VBI_CAPTURE |
6531     - V4L2_CAP_READWRITE |
6532     - 0;
6533     + V4L2_CAP_READWRITE |
6534     + V4L2_CAP_TUNER;
6535    
6536     - cap->capabilities |= V4L2_CAP_TUNER;
6537     - cap->version = 0;
6538     + cap->capabilities = cap->device_caps |
6539     + V4L2_CAP_VIDEO_CAPTURE |
6540     + V4L2_CAP_DEVICE_CAPS;
6541    
6542     return 0;
6543     }
6544     diff --git a/drivers/media/usb/dvb-usb/dib0700_core.c b/drivers/media/usb/dvb-usb/dib0700_core.c
6545     index 2b40393836ff..0d248ce02a9b 100644
6546     --- a/drivers/media/usb/dvb-usb/dib0700_core.c
6547     +++ b/drivers/media/usb/dvb-usb/dib0700_core.c
6548     @@ -655,10 +655,20 @@ out:
6549     struct dib0700_rc_response {
6550     u8 report_id;
6551     u8 data_state;
6552     - u8 system;
6553     - u8 not_system;
6554     - u8 data;
6555     - u8 not_data;
6556     + union {
6557     + struct {
6558     + u8 system;
6559     + u8 not_system;
6560     + u8 data;
6561     + u8 not_data;
6562     + } nec;
6563     + struct {
6564     + u8 not_used;
6565     + u8 system;
6566     + u8 data;
6567     + u8 not_data;
6568     + } rc5;
6569     + };
6570     };
6571     #define RC_MSG_SIZE_V1_20 6
6572    
6573     @@ -694,8 +704,8 @@ static void dib0700_rc_urb_completion(struct urb *purb)
6574    
6575     deb_data("IR ID = %02X state = %02X System = %02X %02X Cmd = %02X %02X (len %d)\n",
6576     poll_reply->report_id, poll_reply->data_state,
6577     - poll_reply->system, poll_reply->not_system,
6578     - poll_reply->data, poll_reply->not_data,
6579     + poll_reply->nec.system, poll_reply->nec.not_system,
6580     + poll_reply->nec.data, poll_reply->nec.not_data,
6581     purb->actual_length);
6582    
6583     switch (d->props.rc.core.protocol) {
6584     @@ -704,30 +714,30 @@ static void dib0700_rc_urb_completion(struct urb *purb)
6585     toggle = 0;
6586    
6587     /* NEC protocol sends repeat code as 0 0 0 FF */
6588     - if (poll_reply->system == 0x00 &&
6589     - poll_reply->not_system == 0x00 &&
6590     - poll_reply->data == 0x00 &&
6591     - poll_reply->not_data == 0xff) {
6592     + if (poll_reply->nec.system == 0x00 &&
6593     + poll_reply->nec.not_system == 0x00 &&
6594     + poll_reply->nec.data == 0x00 &&
6595     + poll_reply->nec.not_data == 0xff) {
6596     poll_reply->data_state = 2;
6597     break;
6598     }
6599    
6600     - if ((poll_reply->data ^ poll_reply->not_data) != 0xff) {
6601     + if ((poll_reply->nec.data ^ poll_reply->nec.not_data) != 0xff) {
6602     deb_data("NEC32 protocol\n");
6603     - keycode = RC_SCANCODE_NEC32(poll_reply->system << 24 |
6604     - poll_reply->not_system << 16 |
6605     - poll_reply->data << 8 |
6606     - poll_reply->not_data);
6607     - } else if ((poll_reply->system ^ poll_reply->not_system) != 0xff) {
6608     + keycode = RC_SCANCODE_NEC32(poll_reply->nec.system << 24 |
6609     + poll_reply->nec.not_system << 16 |
6610     + poll_reply->nec.data << 8 |
6611     + poll_reply->nec.not_data);
6612     + } else if ((poll_reply->nec.system ^ poll_reply->nec.not_system) != 0xff) {
6613     deb_data("NEC extended protocol\n");
6614     - keycode = RC_SCANCODE_NECX(poll_reply->system << 8 |
6615     - poll_reply->not_system,
6616     - poll_reply->data);
6617     + keycode = RC_SCANCODE_NECX(poll_reply->nec.system << 8 |
6618     + poll_reply->nec.not_system,
6619     + poll_reply->nec.data);
6620    
6621     } else {
6622     deb_data("NEC normal protocol\n");
6623     - keycode = RC_SCANCODE_NEC(poll_reply->system,
6624     - poll_reply->data);
6625     + keycode = RC_SCANCODE_NEC(poll_reply->nec.system,
6626     + poll_reply->nec.data);
6627     }
6628    
6629     break;
6630     @@ -735,19 +745,19 @@ static void dib0700_rc_urb_completion(struct urb *purb)
6631     deb_data("RC5 protocol\n");
6632     protocol = RC_TYPE_RC5;
6633     toggle = poll_reply->report_id;
6634     - keycode = RC_SCANCODE_RC5(poll_reply->system, poll_reply->data);
6635     + keycode = RC_SCANCODE_RC5(poll_reply->rc5.system, poll_reply->rc5.data);
6636     +
6637     + if ((poll_reply->rc5.data ^ poll_reply->rc5.not_data) != 0xff) {
6638     + /* Key failed integrity check */
6639     + err("key failed integrity check: %02x %02x %02x %02x",
6640     + poll_reply->rc5.not_used, poll_reply->rc5.system,
6641     + poll_reply->rc5.data, poll_reply->rc5.not_data);
6642     + goto resubmit;
6643     + }
6644    
6645     break;
6646     }
6647    
6648     - if ((poll_reply->data + poll_reply->not_data) != 0xff) {
6649     - /* Key failed integrity check */
6650     - err("key failed integrity check: %02x %02x %02x %02x",
6651     - poll_reply->system, poll_reply->not_system,
6652     - poll_reply->data, poll_reply->not_data);
6653     - goto resubmit;
6654     - }
6655     -
6656     rc_keydown(d->rc_dev, protocol, keycode, toggle);
6657    
6658     resubmit:
6659     diff --git a/drivers/media/usb/dvb-usb/dib0700_devices.c b/drivers/media/usb/dvb-usb/dib0700_devices.c
6660     index d7d55a20e959..c170523226aa 100644
6661     --- a/drivers/media/usb/dvb-usb/dib0700_devices.c
6662     +++ b/drivers/media/usb/dvb-usb/dib0700_devices.c
6663     @@ -3944,6 +3944,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
6664    
6665     DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
6666     }},
6667     + .size_of_priv = sizeof(struct
6668     + dib0700_adapter_state),
6669     }, {
6670     .num_frontends = 1,
6671     .fe = {{
6672     @@ -3956,6 +3958,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
6673    
6674     DIB0700_DEFAULT_STREAMING_CONFIG(0x03),
6675     }},
6676     + .size_of_priv = sizeof(struct
6677     + dib0700_adapter_state),
6678     }
6679     },
6680    
6681     @@ -4009,6 +4013,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
6682    
6683     DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
6684     }},
6685     + .size_of_priv = sizeof(struct
6686     + dib0700_adapter_state),
6687     },
6688     },
6689    
6690     diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c
6691     index 66ada01c796c..cf9d644a8aff 100644
6692     --- a/drivers/media/v4l2-core/videobuf2-core.c
6693     +++ b/drivers/media/v4l2-core/videobuf2-core.c
6694     @@ -1237,6 +1237,23 @@ void vb2_discard_done(struct vb2_queue *q)
6695     }
6696     EXPORT_SYMBOL_GPL(vb2_discard_done);
6697    
6698     +static void vb2_warn_zero_bytesused(struct vb2_buffer *vb)
6699     +{
6700     + static bool __check_once __read_mostly;
6701     +
6702     + if (__check_once)
6703     + return;
6704     +
6705     + __check_once = true;
6706     + __WARN();
6707     +
6708     + pr_warn_once("use of bytesused == 0 is deprecated and will be removed in the future,\n");
6709     + if (vb->vb2_queue->allow_zero_bytesused)
6710     + pr_warn_once("use VIDIOC_DECODER_CMD(V4L2_DEC_CMD_STOP) instead.\n");
6711     + else
6712     + pr_warn_once("use the actual size instead.\n");
6713     +}
6714     +
6715     /**
6716     * __fill_vb2_buffer() - fill a vb2_buffer with information provided in a
6717     * v4l2_buffer by the userspace. The caller has already verified that struct
6718     @@ -1247,16 +1264,6 @@ static void __fill_vb2_buffer(struct vb2_buffer *vb, const struct v4l2_buffer *b
6719     {
6720     unsigned int plane;
6721    
6722     - if (V4L2_TYPE_IS_OUTPUT(b->type)) {
6723     - if (WARN_ON_ONCE(b->bytesused == 0)) {
6724     - pr_warn_once("use of bytesused == 0 is deprecated and will be removed in the future,\n");
6725     - if (vb->vb2_queue->allow_zero_bytesused)
6726     - pr_warn_once("use VIDIOC_DECODER_CMD(V4L2_DEC_CMD_STOP) instead.\n");
6727     - else
6728     - pr_warn_once("use the actual size instead.\n");
6729     - }
6730     - }
6731     -
6732     if (V4L2_TYPE_IS_MULTIPLANAR(b->type)) {
6733     if (b->memory == V4L2_MEMORY_USERPTR) {
6734     for (plane = 0; plane < vb->num_planes; ++plane) {
6735     @@ -1297,6 +1304,9 @@ static void __fill_vb2_buffer(struct vb2_buffer *vb, const struct v4l2_buffer *b
6736     struct v4l2_plane *pdst = &v4l2_planes[plane];
6737     struct v4l2_plane *psrc = &b->m.planes[plane];
6738    
6739     + if (psrc->bytesused == 0)
6740     + vb2_warn_zero_bytesused(vb);
6741     +
6742     if (vb->vb2_queue->allow_zero_bytesused)
6743     pdst->bytesused = psrc->bytesused;
6744     else
6745     @@ -1331,6 +1341,9 @@ static void __fill_vb2_buffer(struct vb2_buffer *vb, const struct v4l2_buffer *b
6746     }
6747    
6748     if (V4L2_TYPE_IS_OUTPUT(b->type)) {
6749     + if (b->bytesused == 0)
6750     + vb2_warn_zero_bytesused(vb);
6751     +
6752     if (vb->vb2_queue->allow_zero_bytesused)
6753     v4l2_planes[0].bytesused = b->bytesused;
6754     else
6755     diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
6756     index 60f7141a6b02..31d2627d9d4d 100644
6757     --- a/drivers/mmc/card/block.c
6758     +++ b/drivers/mmc/card/block.c
6759     @@ -208,6 +208,8 @@ static ssize_t power_ro_lock_show(struct device *dev,
6760    
6761     ret = snprintf(buf, PAGE_SIZE, "%d\n", locked);
6762    
6763     + mmc_blk_put(md);
6764     +
6765     return ret;
6766     }
6767    
6768     @@ -1910,9 +1912,11 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *rqc)
6769     break;
6770     case MMC_BLK_CMD_ERR:
6771     ret = mmc_blk_cmd_err(md, card, brq, req, ret);
6772     - if (!mmc_blk_reset(md, card->host, type))
6773     - break;
6774     - goto cmd_abort;
6775     + if (mmc_blk_reset(md, card->host, type))
6776     + goto cmd_abort;
6777     + if (!ret)
6778     + goto start_new_req;
6779     + break;
6780     case MMC_BLK_RETRY:
6781     if (retry++ < 5)
6782     break;
6783     diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
6784     index 9231cdfe2757..d3dbb28057e9 100644
6785     --- a/drivers/mmc/host/sdhci.c
6786     +++ b/drivers/mmc/host/sdhci.c
6787     @@ -3315,13 +3315,14 @@ int sdhci_add_host(struct sdhci_host *host)
6788     SDHCI_MAX_CURRENT_MULTIPLIER;
6789     }
6790    
6791     - /* If OCR set by external regulators, use it instead */
6792     + /* If OCR set by host, use it instead. */
6793     + if (host->ocr_mask)
6794     + ocr_avail = host->ocr_mask;
6795     +
6796     + /* If OCR set by external regulators, give it highest prio. */
6797     if (mmc->ocr_avail)
6798     ocr_avail = mmc->ocr_avail;
6799    
6800     - if (host->ocr_mask)
6801     - ocr_avail &= host->ocr_mask;
6802     -
6803     mmc->ocr_avail = ocr_avail;
6804     mmc->ocr_avail_sdio = ocr_avail;
6805     if (host->ocr_avail_sdio)
6806     diff --git a/drivers/net/ethernet/intel/e1000e/82571.c b/drivers/net/ethernet/intel/e1000e/82571.c
6807     index dc79ed85030b..32e77755a9c6 100644
6808     --- a/drivers/net/ethernet/intel/e1000e/82571.c
6809     +++ b/drivers/net/ethernet/intel/e1000e/82571.c
6810     @@ -2010,7 +2010,7 @@ const struct e1000_info e1000_82573_info = {
6811     .flags2 = FLAG2_DISABLE_ASPM_L1
6812     | FLAG2_DISABLE_ASPM_L0S,
6813     .pba = 20,
6814     - .max_hw_frame_size = ETH_FRAME_LEN + ETH_FCS_LEN,
6815     + .max_hw_frame_size = VLAN_ETH_FRAME_LEN + ETH_FCS_LEN,
6816     .get_variants = e1000_get_variants_82571,
6817     .mac_ops = &e82571_mac_ops,
6818     .phy_ops = &e82_phy_ops_m88,
6819     diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c
6820     index 9d81c0317433..e2498dbf3c3b 100644
6821     --- a/drivers/net/ethernet/intel/e1000e/ich8lan.c
6822     +++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c
6823     @@ -1563,7 +1563,7 @@ static s32 e1000_get_variants_ich8lan(struct e1000_adapter *adapter)
6824     ((adapter->hw.mac.type >= e1000_pch2lan) &&
6825     (!(er32(CTRL_EXT) & E1000_CTRL_EXT_LSECCK)))) {
6826     adapter->flags &= ~FLAG_HAS_JUMBO_FRAMES;
6827     - adapter->max_hw_frame_size = ETH_FRAME_LEN + ETH_FCS_LEN;
6828     + adapter->max_hw_frame_size = VLAN_ETH_FRAME_LEN + ETH_FCS_LEN;
6829    
6830     hw->mac.ops.blink_led = NULL;
6831     }
6832     @@ -5681,7 +5681,7 @@ const struct e1000_info e1000_ich8_info = {
6833     | FLAG_HAS_FLASH
6834     | FLAG_APME_IN_WUC,
6835     .pba = 8,
6836     - .max_hw_frame_size = ETH_FRAME_LEN + ETH_FCS_LEN,
6837     + .max_hw_frame_size = VLAN_ETH_FRAME_LEN + ETH_FCS_LEN,
6838     .get_variants = e1000_get_variants_ich8lan,
6839     .mac_ops = &ich8_mac_ops,
6840     .phy_ops = &ich8_phy_ops,
6841     @@ -5754,7 +5754,7 @@ const struct e1000_info e1000_pch2_info = {
6842     .flags2 = FLAG2_HAS_PHY_STATS
6843     | FLAG2_HAS_EEE,
6844     .pba = 26,
6845     - .max_hw_frame_size = 9018,
6846     + .max_hw_frame_size = 9022,
6847     .get_variants = e1000_get_variants_ich8lan,
6848     .mac_ops = &ich8_mac_ops,
6849     .phy_ops = &ich8_phy_ops,
6850     @@ -5774,7 +5774,7 @@ const struct e1000_info e1000_pch_lpt_info = {
6851     .flags2 = FLAG2_HAS_PHY_STATS
6852     | FLAG2_HAS_EEE,
6853     .pba = 26,
6854     - .max_hw_frame_size = 9018,
6855     + .max_hw_frame_size = 9022,
6856     .get_variants = e1000_get_variants_ich8lan,
6857     .mac_ops = &ich8_mac_ops,
6858     .phy_ops = &ich8_phy_ops,
6859     @@ -5794,7 +5794,7 @@ const struct e1000_info e1000_pch_spt_info = {
6860     .flags2 = FLAG2_HAS_PHY_STATS
6861     | FLAG2_HAS_EEE,
6862     .pba = 26,
6863     - .max_hw_frame_size = 9018,
6864     + .max_hw_frame_size = 9022,
6865     .get_variants = e1000_get_variants_ich8lan,
6866     .mac_ops = &ich8_mac_ops,
6867     .phy_ops = &ich8_phy_ops,
6868     diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
6869     index c509a5c900f5..68913d103542 100644
6870     --- a/drivers/net/ethernet/intel/e1000e/netdev.c
6871     +++ b/drivers/net/ethernet/intel/e1000e/netdev.c
6872     @@ -3807,7 +3807,7 @@ void e1000e_reset(struct e1000_adapter *adapter)
6873     /* reset Packet Buffer Allocation to default */
6874     ew32(PBA, pba);
6875    
6876     - if (adapter->max_frame_size > ETH_FRAME_LEN + ETH_FCS_LEN) {
6877     + if (adapter->max_frame_size > (VLAN_ETH_FRAME_LEN + ETH_FCS_LEN)) {
6878     /* To maintain wire speed transmits, the Tx FIFO should be
6879     * large enough to accommodate two full transmit packets,
6880     * rounded up to the next 1KB and expressed in KB. Likewise,
6881     @@ -4196,9 +4196,9 @@ static int e1000_sw_init(struct e1000_adapter *adapter)
6882     {
6883     struct net_device *netdev = adapter->netdev;
6884    
6885     - adapter->rx_buffer_len = ETH_FRAME_LEN + VLAN_HLEN + ETH_FCS_LEN;
6886     + adapter->rx_buffer_len = VLAN_ETH_FRAME_LEN + ETH_FCS_LEN;
6887     adapter->rx_ps_bsize0 = 128;
6888     - adapter->max_frame_size = netdev->mtu + ETH_HLEN + ETH_FCS_LEN;
6889     + adapter->max_frame_size = netdev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN;
6890     adapter->min_frame_size = ETH_ZLEN + ETH_FCS_LEN;
6891     adapter->tx_ring_count = E1000_DEFAULT_TXD;
6892     adapter->rx_ring_count = E1000_DEFAULT_RXD;
6893     @@ -5781,17 +5781,17 @@ struct rtnl_link_stats64 *e1000e_get_stats64(struct net_device *netdev,
6894     static int e1000_change_mtu(struct net_device *netdev, int new_mtu)
6895     {
6896     struct e1000_adapter *adapter = netdev_priv(netdev);
6897     - int max_frame = new_mtu + VLAN_HLEN + ETH_HLEN + ETH_FCS_LEN;
6898     + int max_frame = new_mtu + VLAN_ETH_HLEN + ETH_FCS_LEN;
6899    
6900     /* Jumbo frame support */
6901     - if ((max_frame > ETH_FRAME_LEN + ETH_FCS_LEN) &&
6902     + if ((max_frame > (VLAN_ETH_FRAME_LEN + ETH_FCS_LEN)) &&
6903     !(adapter->flags & FLAG_HAS_JUMBO_FRAMES)) {
6904     e_err("Jumbo Frames not supported.\n");
6905     return -EINVAL;
6906     }
6907    
6908     /* Supported frame sizes */
6909     - if ((new_mtu < ETH_ZLEN + ETH_FCS_LEN + VLAN_HLEN) ||
6910     + if ((new_mtu < (VLAN_ETH_ZLEN + ETH_FCS_LEN)) ||
6911     (max_frame > adapter->max_hw_frame_size)) {
6912     e_err("Unsupported MTU setting\n");
6913     return -EINVAL;
6914     @@ -5831,10 +5831,8 @@ static int e1000_change_mtu(struct net_device *netdev, int new_mtu)
6915     adapter->rx_buffer_len = 4096;
6916    
6917     /* adjust allocation if LPE protects us, and we aren't using SBP */
6918     - if ((max_frame == ETH_FRAME_LEN + ETH_FCS_LEN) ||
6919     - (max_frame == ETH_FRAME_LEN + VLAN_HLEN + ETH_FCS_LEN))
6920     - adapter->rx_buffer_len = ETH_FRAME_LEN + VLAN_HLEN
6921     - + ETH_FCS_LEN;
6922     + if (max_frame <= (VLAN_ETH_FRAME_LEN + ETH_FCS_LEN))
6923     + adapter->rx_buffer_len = VLAN_ETH_FRAME_LEN + ETH_FCS_LEN;
6924    
6925     if (netif_running(netdev))
6926     e1000e_up(adapter);
6927     diff --git a/drivers/net/wireless/ath/ath9k/htc.h b/drivers/net/wireless/ath/ath9k/htc.h
6928     index e82a0d4ce23f..5dbc617ecf8a 100644
6929     --- a/drivers/net/wireless/ath/ath9k/htc.h
6930     +++ b/drivers/net/wireless/ath/ath9k/htc.h
6931     @@ -440,9 +440,9 @@ static inline void ath9k_htc_stop_btcoex(struct ath9k_htc_priv *priv)
6932     }
6933     #endif /* CONFIG_ATH9K_BTCOEX_SUPPORT */
6934    
6935     -#define OP_BT_PRIORITY_DETECTED BIT(3)
6936     -#define OP_BT_SCAN BIT(4)
6937     -#define OP_TSF_RESET BIT(6)
6938     +#define OP_BT_PRIORITY_DETECTED 3
6939     +#define OP_BT_SCAN 4
6940     +#define OP_TSF_RESET 6
6941    
6942     enum htc_op_flags {
6943     HTC_FWFLAG_NO_RMW,
6944     diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
6945     index b0badef71ce7..d5f2fbf62d72 100644
6946     --- a/drivers/net/wireless/ath/ath9k/main.c
6947     +++ b/drivers/net/wireless/ath/ath9k/main.c
6948     @@ -216,11 +216,13 @@ static bool ath_prepare_reset(struct ath_softc *sc)
6949     ath_stop_ani(sc);
6950     ath9k_hw_disable_interrupts(ah);
6951    
6952     - if (!ath_drain_all_txq(sc))
6953     - ret = false;
6954     -
6955     - if (!ath_stoprecv(sc))
6956     - ret = false;
6957     + if (AR_SREV_9300_20_OR_LATER(ah)) {
6958     + ret &= ath_stoprecv(sc);
6959     + ret &= ath_drain_all_txq(sc);
6960     + } else {
6961     + ret &= ath_drain_all_txq(sc);
6962     + ret &= ath_stoprecv(sc);
6963     + }
6964    
6965     return ret;
6966     }
6967     diff --git a/drivers/net/wireless/iwlwifi/mvm/debugfs.c b/drivers/net/wireless/iwlwifi/mvm/debugfs.c
6968     index 9ac04c1ea706..8c17b943cc6f 100644
6969     --- a/drivers/net/wireless/iwlwifi/mvm/debugfs.c
6970     +++ b/drivers/net/wireless/iwlwifi/mvm/debugfs.c
6971     @@ -6,7 +6,7 @@
6972     * GPL LICENSE SUMMARY
6973     *
6974     * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
6975     - * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH
6976     + * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
6977     *
6978     * This program is free software; you can redistribute it and/or modify
6979     * it under the terms of version 2 of the GNU General Public License as
6980     @@ -32,7 +32,7 @@
6981     * BSD LICENSE
6982     *
6983     * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
6984     - * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH
6985     + * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
6986     * All rights reserved.
6987     *
6988     * Redistribution and use in source and binary forms, with or without
6989     @@ -1356,6 +1356,7 @@ static ssize_t iwl_dbgfs_d0i3_refs_read(struct file *file,
6990     PRINT_MVM_REF(IWL_MVM_REF_UCODE_DOWN);
6991     PRINT_MVM_REF(IWL_MVM_REF_SCAN);
6992     PRINT_MVM_REF(IWL_MVM_REF_ROC);
6993     + PRINT_MVM_REF(IWL_MVM_REF_ROC_AUX);
6994     PRINT_MVM_REF(IWL_MVM_REF_P2P_CLIENT);
6995     PRINT_MVM_REF(IWL_MVM_REF_AP_IBSS);
6996     PRINT_MVM_REF(IWL_MVM_REF_USER);
6997     diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
6998     index dda9f7b5f342..60c138a9bf4f 100644
6999     --- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
7000     +++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
7001     @@ -1404,7 +1404,7 @@ void __iwl_mvm_mac_stop(struct iwl_mvm *mvm)
7002     * The work item could be running or queued if the
7003     * ROC time event stops just as we get here.
7004     */
7005     - cancel_work_sync(&mvm->roc_done_wk);
7006     + flush_work(&mvm->roc_done_wk);
7007    
7008     iwl_trans_stop_device(mvm->trans);
7009    
7010     diff --git a/drivers/net/wireless/iwlwifi/mvm/mvm.h b/drivers/net/wireless/iwlwifi/mvm/mvm.h
7011     index cf70f681d1ac..6af21daaaaef 100644
7012     --- a/drivers/net/wireless/iwlwifi/mvm/mvm.h
7013     +++ b/drivers/net/wireless/iwlwifi/mvm/mvm.h
7014     @@ -275,6 +275,7 @@ enum iwl_mvm_ref_type {
7015     IWL_MVM_REF_UCODE_DOWN,
7016     IWL_MVM_REF_SCAN,
7017     IWL_MVM_REF_ROC,
7018     + IWL_MVM_REF_ROC_AUX,
7019     IWL_MVM_REF_P2P_CLIENT,
7020     IWL_MVM_REF_AP_IBSS,
7021     IWL_MVM_REF_USER,
7022     diff --git a/drivers/net/wireless/iwlwifi/mvm/time-event.c b/drivers/net/wireless/iwlwifi/mvm/time-event.c
7023     index fd7b0d36f9a6..a7448cf01688 100644
7024     --- a/drivers/net/wireless/iwlwifi/mvm/time-event.c
7025     +++ b/drivers/net/wireless/iwlwifi/mvm/time-event.c
7026     @@ -6,7 +6,7 @@
7027     * GPL LICENSE SUMMARY
7028     *
7029     * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
7030     - * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH
7031     + * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
7032     *
7033     * This program is free software; you can redistribute it and/or modify
7034     * it under the terms of version 2 of the GNU General Public License as
7035     @@ -32,7 +32,7 @@
7036     * BSD LICENSE
7037     *
7038     * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
7039     - * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH
7040     + * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
7041     * All rights reserved.
7042     *
7043     * Redistribution and use in source and binary forms, with or without
7044     @@ -108,12 +108,14 @@ void iwl_mvm_roc_done_wk(struct work_struct *wk)
7045     * in the case that the time event actually completed in the firmware
7046     * (which is handled in iwl_mvm_te_handle_notif).
7047     */
7048     - if (test_and_clear_bit(IWL_MVM_STATUS_ROC_RUNNING, &mvm->status))
7049     + if (test_and_clear_bit(IWL_MVM_STATUS_ROC_RUNNING, &mvm->status)) {
7050     queues |= BIT(IWL_MVM_OFFCHANNEL_QUEUE);
7051     - if (test_and_clear_bit(IWL_MVM_STATUS_ROC_AUX_RUNNING, &mvm->status))
7052     + iwl_mvm_unref(mvm, IWL_MVM_REF_ROC);
7053     + }
7054     + if (test_and_clear_bit(IWL_MVM_STATUS_ROC_AUX_RUNNING, &mvm->status)) {
7055     queues |= BIT(mvm->aux_queue);
7056     -
7057     - iwl_mvm_unref(mvm, IWL_MVM_REF_ROC);
7058     + iwl_mvm_unref(mvm, IWL_MVM_REF_ROC_AUX);
7059     + }
7060    
7061     synchronize_net();
7062    
7063     @@ -393,6 +395,7 @@ static int iwl_mvm_aux_roc_te_handle_notif(struct iwl_mvm *mvm,
7064     } else if (le32_to_cpu(notif->action) == TE_V2_NOTIF_HOST_EVENT_START) {
7065     set_bit(IWL_MVM_STATUS_ROC_AUX_RUNNING, &mvm->status);
7066     te_data->running = true;
7067     + iwl_mvm_ref(mvm, IWL_MVM_REF_ROC_AUX);
7068     ieee80211_ready_on_channel(mvm->hw); /* Start TE */
7069     } else {
7070     IWL_DEBUG_TE(mvm,
7071     diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/hw.c b/drivers/net/wireless/rtlwifi/rtl8188ee/hw.c
7072     index 86ce5b1930e6..e5d8108f1987 100644
7073     --- a/drivers/net/wireless/rtlwifi/rtl8188ee/hw.c
7074     +++ b/drivers/net/wireless/rtlwifi/rtl8188ee/hw.c
7075     @@ -1354,27 +1354,11 @@ void rtl88ee_set_qos(struct ieee80211_hw *hw, int aci)
7076     }
7077     }
7078    
7079     -static void rtl88ee_clear_interrupt(struct ieee80211_hw *hw)
7080     -{
7081     - struct rtl_priv *rtlpriv = rtl_priv(hw);
7082     - u32 tmp;
7083     -
7084     - tmp = rtl_read_dword(rtlpriv, REG_HISR);
7085     - rtl_write_dword(rtlpriv, REG_HISR, tmp);
7086     -
7087     - tmp = rtl_read_dword(rtlpriv, REG_HISRE);
7088     - rtl_write_dword(rtlpriv, REG_HISRE, tmp);
7089     -
7090     - tmp = rtl_read_dword(rtlpriv, REG_HSISR);
7091     - rtl_write_dword(rtlpriv, REG_HSISR, tmp);
7092     -}
7093     -
7094     void rtl88ee_enable_interrupt(struct ieee80211_hw *hw)
7095     {
7096     struct rtl_priv *rtlpriv = rtl_priv(hw);
7097     struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
7098    
7099     - rtl88ee_clear_interrupt(hw);/*clear it here first*/
7100     rtl_write_dword(rtlpriv, REG_HIMR,
7101     rtlpci->irq_mask[0] & 0xFFFFFFFF);
7102     rtl_write_dword(rtlpriv, REG_HIMRE,
7103     diff --git a/drivers/net/wireless/rtlwifi/rtl8192ee/hw.c b/drivers/net/wireless/rtlwifi/rtl8192ee/hw.c
7104     index da0a6125f314..cbf2ca7c7c6d 100644
7105     --- a/drivers/net/wireless/rtlwifi/rtl8192ee/hw.c
7106     +++ b/drivers/net/wireless/rtlwifi/rtl8192ee/hw.c
7107     @@ -1584,28 +1584,11 @@ void rtl92ee_set_qos(struct ieee80211_hw *hw, int aci)
7108     }
7109     }
7110    
7111     -static void rtl92ee_clear_interrupt(struct ieee80211_hw *hw)
7112     -{
7113     - struct rtl_priv *rtlpriv = rtl_priv(hw);
7114     - u32 tmp;
7115     -
7116     - tmp = rtl_read_dword(rtlpriv, REG_HISR);
7117     - rtl_write_dword(rtlpriv, REG_HISR, tmp);
7118     -
7119     - tmp = rtl_read_dword(rtlpriv, REG_HISRE);
7120     - rtl_write_dword(rtlpriv, REG_HISRE, tmp);
7121     -
7122     - tmp = rtl_read_dword(rtlpriv, REG_HSISR);
7123     - rtl_write_dword(rtlpriv, REG_HSISR, tmp);
7124     -}
7125     -
7126     void rtl92ee_enable_interrupt(struct ieee80211_hw *hw)
7127     {
7128     struct rtl_priv *rtlpriv = rtl_priv(hw);
7129     struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
7130    
7131     - rtl92ee_clear_interrupt(hw);/*clear it here first*/
7132     -
7133     rtl_write_dword(rtlpriv, REG_HIMR, rtlpci->irq_mask[0] & 0xFFFFFFFF);
7134     rtl_write_dword(rtlpriv, REG_HIMRE, rtlpci->irq_mask[1] & 0xFFFFFFFF);
7135     rtlpci->irq_enabled = true;
7136     diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/hw.c b/drivers/net/wireless/rtlwifi/rtl8723ae/hw.c
7137     index 67bb47d77b68..a4b7eac6856f 100644
7138     --- a/drivers/net/wireless/rtlwifi/rtl8723ae/hw.c
7139     +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/hw.c
7140     @@ -1258,18 +1258,6 @@ void rtl8723e_set_qos(struct ieee80211_hw *hw, int aci)
7141     }
7142     }
7143    
7144     -static void rtl8723e_clear_interrupt(struct ieee80211_hw *hw)
7145     -{
7146     - struct rtl_priv *rtlpriv = rtl_priv(hw);
7147     - u32 tmp;
7148     -
7149     - tmp = rtl_read_dword(rtlpriv, REG_HISR);
7150     - rtl_write_dword(rtlpriv, REG_HISR, tmp);
7151     -
7152     - tmp = rtl_read_dword(rtlpriv, REG_HISRE);
7153     - rtl_write_dword(rtlpriv, REG_HISRE, tmp);
7154     -}
7155     -
7156     void rtl8723e_enable_interrupt(struct ieee80211_hw *hw)
7157     {
7158     struct rtl_priv *rtlpriv = rtl_priv(hw);
7159     @@ -1284,7 +1272,6 @@ void rtl8723e_disable_interrupt(struct ieee80211_hw *hw)
7160     {
7161     struct rtl_priv *rtlpriv = rtl_priv(hw);
7162     struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
7163     - rtl8723e_clear_interrupt(hw);/*clear it here first*/
7164     rtl_write_dword(rtlpriv, 0x3a8, IMR8190_DISABLED);
7165     rtl_write_dword(rtlpriv, 0x3ac, IMR8190_DISABLED);
7166     rtlpci->irq_enabled = false;
7167     diff --git a/drivers/net/wireless/rtlwifi/rtl8723be/hw.c b/drivers/net/wireless/rtlwifi/rtl8723be/hw.c
7168     index b681af3c7a35..b9417268427e 100644
7169     --- a/drivers/net/wireless/rtlwifi/rtl8723be/hw.c
7170     +++ b/drivers/net/wireless/rtlwifi/rtl8723be/hw.c
7171     @@ -1634,28 +1634,11 @@ void rtl8723be_set_qos(struct ieee80211_hw *hw, int aci)
7172     }
7173     }
7174    
7175     -static void rtl8723be_clear_interrupt(struct ieee80211_hw *hw)
7176     -{
7177     - struct rtl_priv *rtlpriv = rtl_priv(hw);
7178     - u32 tmp;
7179     -
7180     - tmp = rtl_read_dword(rtlpriv, REG_HISR);
7181     - rtl_write_dword(rtlpriv, REG_HISR, tmp);
7182     -
7183     - tmp = rtl_read_dword(rtlpriv, REG_HISRE);
7184     - rtl_write_dword(rtlpriv, REG_HISRE, tmp);
7185     -
7186     - tmp = rtl_read_dword(rtlpriv, REG_HSISR);
7187     - rtl_write_dword(rtlpriv, REG_HSISR, tmp);
7188     -}
7189     -
7190     void rtl8723be_enable_interrupt(struct ieee80211_hw *hw)
7191     {
7192     struct rtl_priv *rtlpriv = rtl_priv(hw);
7193     struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
7194    
7195     - rtl8723be_clear_interrupt(hw);/*clear it here first*/
7196     -
7197     rtl_write_dword(rtlpriv, REG_HIMR, rtlpci->irq_mask[0] & 0xFFFFFFFF);
7198     rtl_write_dword(rtlpriv, REG_HIMRE, rtlpci->irq_mask[1] & 0xFFFFFFFF);
7199     rtlpci->irq_enabled = true;
7200     diff --git a/drivers/net/wireless/rtlwifi/rtl8821ae/hw.c b/drivers/net/wireless/rtlwifi/rtl8821ae/hw.c
7201     index 8704eee9f3a4..57966e3c8e8d 100644
7202     --- a/drivers/net/wireless/rtlwifi/rtl8821ae/hw.c
7203     +++ b/drivers/net/wireless/rtlwifi/rtl8821ae/hw.c
7204     @@ -2253,31 +2253,11 @@ void rtl8821ae_set_qos(struct ieee80211_hw *hw, int aci)
7205     }
7206     }
7207    
7208     -static void rtl8821ae_clear_interrupt(struct ieee80211_hw *hw)
7209     -{
7210     - struct rtl_priv *rtlpriv = rtl_priv(hw);
7211     - u32 tmp;
7212     - tmp = rtl_read_dword(rtlpriv, REG_HISR);
7213     - /*printk("clear interrupt first:\n");
7214     - printk("0x%x = 0x%08x\n",REG_HISR, tmp);*/
7215     - rtl_write_dword(rtlpriv, REG_HISR, tmp);
7216     -
7217     - tmp = rtl_read_dword(rtlpriv, REG_HISRE);
7218     - /*printk("0x%x = 0x%08x\n",REG_HISRE, tmp);*/
7219     - rtl_write_dword(rtlpriv, REG_HISRE, tmp);
7220     -
7221     - tmp = rtl_read_dword(rtlpriv, REG_HSISR);
7222     - /*printk("0x%x = 0x%08x\n",REG_HSISR, tmp);*/
7223     - rtl_write_dword(rtlpriv, REG_HSISR, tmp);
7224     -}
7225     -
7226     void rtl8821ae_enable_interrupt(struct ieee80211_hw *hw)
7227     {
7228     struct rtl_priv *rtlpriv = rtl_priv(hw);
7229     struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
7230    
7231     - rtl8821ae_clear_interrupt(hw);/*clear it here first*/
7232     -
7233     rtl_write_dword(rtlpriv, REG_HIMR, rtlpci->irq_mask[0] & 0xFFFFFFFF);
7234     rtl_write_dword(rtlpriv, REG_HIMRE, rtlpci->irq_mask[1] & 0xFFFFFFFF);
7235     rtlpci->irq_enabled = true;
7236     diff --git a/drivers/nfc/st21nfcb/i2c.c b/drivers/nfc/st21nfcb/i2c.c
7237     index 76a4cad41cec..c44f8cf5391a 100644
7238     --- a/drivers/nfc/st21nfcb/i2c.c
7239     +++ b/drivers/nfc/st21nfcb/i2c.c
7240     @@ -87,11 +87,6 @@ static void st21nfcb_nci_i2c_disable(void *phy_id)
7241     gpio_set_value(phy->gpio_reset, 1);
7242     }
7243    
7244     -static void st21nfcb_nci_remove_header(struct sk_buff *skb)
7245     -{
7246     - skb_pull(skb, ST21NFCB_FRAME_HEADROOM);
7247     -}
7248     -
7249     /*
7250     * Writing a frame must not return the number of written bytes.
7251     * It must return either zero for success, or <0 for error.
7252     @@ -121,8 +116,6 @@ static int st21nfcb_nci_i2c_write(void *phy_id, struct sk_buff *skb)
7253     r = 0;
7254     }
7255    
7256     - st21nfcb_nci_remove_header(skb);
7257     -
7258     return r;
7259     }
7260    
7261     @@ -366,9 +359,6 @@ static int st21nfcb_nci_i2c_remove(struct i2c_client *client)
7262    
7263     ndlc_remove(phy->ndlc);
7264    
7265     - if (phy->powered)
7266     - st21nfcb_nci_i2c_disable(phy);
7267     -
7268     return 0;
7269     }
7270    
7271     diff --git a/drivers/nfc/st21nfcb/st21nfcb.c b/drivers/nfc/st21nfcb/st21nfcb.c
7272     index ca9871ab3fb3..c7dc282d5c3b 100644
7273     --- a/drivers/nfc/st21nfcb/st21nfcb.c
7274     +++ b/drivers/nfc/st21nfcb/st21nfcb.c
7275     @@ -131,11 +131,8 @@ EXPORT_SYMBOL_GPL(st21nfcb_nci_probe);
7276    
7277     void st21nfcb_nci_remove(struct nci_dev *ndev)
7278     {
7279     - struct st21nfcb_nci_info *info = nci_get_drvdata(ndev);
7280     -
7281     nci_unregister_device(ndev);
7282     nci_free_device(ndev);
7283     - kfree(info);
7284     }
7285     EXPORT_SYMBOL_GPL(st21nfcb_nci_remove);
7286    
7287     diff --git a/drivers/of/address.c b/drivers/of/address.c
7288     index 6906a3f61bd8..8bfda6ade2c0 100644
7289     --- a/drivers/of/address.c
7290     +++ b/drivers/of/address.c
7291     @@ -712,7 +712,7 @@ int __weak pci_register_io_range(phys_addr_t addr, resource_size_t size)
7292     }
7293    
7294     /* add the range to the list */
7295     - range = kzalloc(sizeof(*range), GFP_KERNEL);
7296     + range = kzalloc(sizeof(*range), GFP_ATOMIC);
7297     if (!range) {
7298     err = -ENOMEM;
7299     goto end_register;
7300     diff --git a/drivers/of/base.c b/drivers/of/base.c
7301     index f0650265febf..5ed97246c2e7 100644
7302     --- a/drivers/of/base.c
7303     +++ b/drivers/of/base.c
7304     @@ -89,7 +89,7 @@ EXPORT_SYMBOL(of_n_size_cells);
7305     #ifdef CONFIG_NUMA
7306     int __weak of_node_to_nid(struct device_node *np)
7307     {
7308     - return numa_node_id();
7309     + return NUMA_NO_NODE;
7310     }
7311     #endif
7312    
7313     diff --git a/drivers/phy/phy-berlin-usb.c b/drivers/phy/phy-berlin-usb.c
7314     index c6fc95b53083..ab54f2864451 100644
7315     --- a/drivers/phy/phy-berlin-usb.c
7316     +++ b/drivers/phy/phy-berlin-usb.c
7317     @@ -106,8 +106,8 @@
7318     static const u32 phy_berlin_pll_dividers[] = {
7319     /* Berlin 2 */
7320     CLK_REF_DIV(0xc) | FEEDBACK_CLK_DIV(0x54),
7321     - /* Berlin 2CD */
7322     - CLK_REF_DIV(0x6) | FEEDBACK_CLK_DIV(0x55),
7323     + /* Berlin 2CD/Q */
7324     + CLK_REF_DIV(0xc) | FEEDBACK_CLK_DIV(0x54),
7325     };
7326    
7327     struct phy_berlin_usb_priv {
7328     diff --git a/drivers/phy/phy-twl4030-usb.c b/drivers/phy/phy-twl4030-usb.c
7329     index bc42d6a8939f..8882afbef688 100644
7330     --- a/drivers/phy/phy-twl4030-usb.c
7331     +++ b/drivers/phy/phy-twl4030-usb.c
7332     @@ -711,7 +711,6 @@ static int twl4030_usb_probe(struct platform_device *pdev)
7333     pm_runtime_use_autosuspend(&pdev->dev);
7334     pm_runtime_set_autosuspend_delay(&pdev->dev, 2000);
7335     pm_runtime_enable(&pdev->dev);
7336     - pm_runtime_get_sync(&pdev->dev);
7337    
7338     /* Our job is to use irqs and status from the power module
7339     * to keep the transceiver disabled when nothing's connected.
7340     diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-370.c b/drivers/pinctrl/mvebu/pinctrl-armada-370.c
7341     index 03aa58c4cb85..1eb084c3b0c9 100644
7342     --- a/drivers/pinctrl/mvebu/pinctrl-armada-370.c
7343     +++ b/drivers/pinctrl/mvebu/pinctrl-armada-370.c
7344     @@ -370,11 +370,11 @@ static struct mvebu_mpp_mode mv88f6710_mpp_modes[] = {
7345     MPP_MODE(64,
7346     MPP_FUNCTION(0x0, "gpio", NULL),
7347     MPP_FUNCTION(0x1, "spi0", "miso"),
7348     - MPP_FUNCTION(0x2, "spi0-1", "cs1")),
7349     + MPP_FUNCTION(0x2, "spi0", "cs1")),
7350     MPP_MODE(65,
7351     MPP_FUNCTION(0x0, "gpio", NULL),
7352     MPP_FUNCTION(0x1, "spi0", "mosi"),
7353     - MPP_FUNCTION(0x2, "spi0-1", "cs2")),
7354     + MPP_FUNCTION(0x2, "spi0", "cs2")),
7355     };
7356    
7357     static struct mvebu_pinctrl_soc_info armada_370_pinctrl_info;
7358     diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-375.c b/drivers/pinctrl/mvebu/pinctrl-armada-375.c
7359     index ca1e7571fedb..203291bde608 100644
7360     --- a/drivers/pinctrl/mvebu/pinctrl-armada-375.c
7361     +++ b/drivers/pinctrl/mvebu/pinctrl-armada-375.c
7362     @@ -92,19 +92,17 @@ static struct mvebu_mpp_mode mv88f6720_mpp_modes[] = {
7363     MPP_FUNCTION(0x5, "nand", "io1")),
7364     MPP_MODE(8,
7365     MPP_FUNCTION(0x0, "gpio", NULL),
7366     - MPP_FUNCTION(0x1, "dev ", "bootcs"),
7367     + MPP_FUNCTION(0x1, "dev", "bootcs"),
7368     MPP_FUNCTION(0x2, "spi0", "cs0"),
7369     MPP_FUNCTION(0x3, "spi1", "cs0"),
7370     MPP_FUNCTION(0x5, "nand", "ce")),
7371     MPP_MODE(9,
7372     MPP_FUNCTION(0x0, "gpio", NULL),
7373     - MPP_FUNCTION(0x1, "nf", "wen"),
7374     MPP_FUNCTION(0x2, "spi0", "sck"),
7375     MPP_FUNCTION(0x3, "spi1", "sck"),
7376     MPP_FUNCTION(0x5, "nand", "we")),
7377     MPP_MODE(10,
7378     MPP_FUNCTION(0x0, "gpio", NULL),
7379     - MPP_FUNCTION(0x1, "nf", "ren"),
7380     MPP_FUNCTION(0x2, "dram", "vttctrl"),
7381     MPP_FUNCTION(0x3, "led", "c1"),
7382     MPP_FUNCTION(0x5, "nand", "re"),
7383     diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-38x.c b/drivers/pinctrl/mvebu/pinctrl-armada-38x.c
7384     index 83bbcc72be1f..ff411a53b5a4 100644
7385     --- a/drivers/pinctrl/mvebu/pinctrl-armada-38x.c
7386     +++ b/drivers/pinctrl/mvebu/pinctrl-armada-38x.c
7387     @@ -94,37 +94,39 @@ static struct mvebu_mpp_mode armada_38x_mpp_modes[] = {
7388     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
7389     MPP_VAR_FUNCTION(1, "ge0", "rxd0", V_88F6810_PLUS),
7390     MPP_VAR_FUNCTION(2, "pcie0", "rstout", V_88F6810_PLUS),
7391     - MPP_VAR_FUNCTION(3, "pcie1", "rstout", V_88F6820_PLUS),
7392     MPP_VAR_FUNCTION(4, "spi0", "cs1", V_88F6810_PLUS),
7393     - MPP_VAR_FUNCTION(5, "dev", "ad14", V_88F6810_PLUS)),
7394     + MPP_VAR_FUNCTION(5, "dev", "ad14", V_88F6810_PLUS),
7395     + MPP_VAR_FUNCTION(6, "pcie3", "clkreq", V_88F6810_PLUS)),
7396     MPP_MODE(13,
7397     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
7398     MPP_VAR_FUNCTION(1, "ge0", "rxd1", V_88F6810_PLUS),
7399     MPP_VAR_FUNCTION(2, "pcie0", "clkreq", V_88F6810_PLUS),
7400     MPP_VAR_FUNCTION(3, "pcie1", "clkreq", V_88F6820_PLUS),
7401     MPP_VAR_FUNCTION(4, "spi0", "cs2", V_88F6810_PLUS),
7402     - MPP_VAR_FUNCTION(5, "dev", "ad15", V_88F6810_PLUS)),
7403     + MPP_VAR_FUNCTION(5, "dev", "ad15", V_88F6810_PLUS),
7404     + MPP_VAR_FUNCTION(6, "pcie2", "clkreq", V_88F6810_PLUS)),
7405     MPP_MODE(14,
7406     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
7407     MPP_VAR_FUNCTION(1, "ge0", "rxd2", V_88F6810_PLUS),
7408     MPP_VAR_FUNCTION(2, "ptp", "clk", V_88F6810_PLUS),
7409     MPP_VAR_FUNCTION(3, "m", "vtt_ctrl", V_88F6810_PLUS),
7410     MPP_VAR_FUNCTION(4, "spi0", "cs3", V_88F6810_PLUS),
7411     - MPP_VAR_FUNCTION(5, "dev", "wen1", V_88F6810_PLUS)),
7412     + MPP_VAR_FUNCTION(5, "dev", "wen1", V_88F6810_PLUS),
7413     + MPP_VAR_FUNCTION(6, "pcie3", "clkreq", V_88F6810_PLUS)),
7414     MPP_MODE(15,
7415     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
7416     MPP_VAR_FUNCTION(1, "ge0", "rxd3", V_88F6810_PLUS),
7417     MPP_VAR_FUNCTION(2, "ge", "mdc slave", V_88F6810_PLUS),
7418     MPP_VAR_FUNCTION(3, "pcie0", "rstout", V_88F6810_PLUS),
7419     - MPP_VAR_FUNCTION(4, "spi0", "mosi", V_88F6810_PLUS),
7420     - MPP_VAR_FUNCTION(5, "pcie1", "rstout", V_88F6820_PLUS)),
7421     + MPP_VAR_FUNCTION(4, "spi0", "mosi", V_88F6810_PLUS)),
7422     MPP_MODE(16,
7423     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
7424     MPP_VAR_FUNCTION(1, "ge0", "rxctl", V_88F6810_PLUS),
7425     MPP_VAR_FUNCTION(2, "ge", "mdio slave", V_88F6810_PLUS),
7426     MPP_VAR_FUNCTION(3, "m", "decc_err", V_88F6810_PLUS),
7427     MPP_VAR_FUNCTION(4, "spi0", "miso", V_88F6810_PLUS),
7428     - MPP_VAR_FUNCTION(5, "pcie0", "clkreq", V_88F6810_PLUS)),
7429     + MPP_VAR_FUNCTION(5, "pcie0", "clkreq", V_88F6810_PLUS),
7430     + MPP_VAR_FUNCTION(6, "pcie1", "clkreq", V_88F6820_PLUS)),
7431     MPP_MODE(17,
7432     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
7433     MPP_VAR_FUNCTION(1, "ge0", "rxclk", V_88F6810_PLUS),
7434     @@ -137,13 +139,12 @@ static struct mvebu_mpp_mode armada_38x_mpp_modes[] = {
7435     MPP_VAR_FUNCTION(1, "ge0", "rxerr", V_88F6810_PLUS),
7436     MPP_VAR_FUNCTION(2, "ptp", "trig_gen", V_88F6810_PLUS),
7437     MPP_VAR_FUNCTION(3, "ua1", "txd", V_88F6810_PLUS),
7438     - MPP_VAR_FUNCTION(4, "spi0", "cs0", V_88F6810_PLUS),
7439     - MPP_VAR_FUNCTION(5, "pcie1", "rstout", V_88F6820_PLUS)),
7440     + MPP_VAR_FUNCTION(4, "spi0", "cs0", V_88F6810_PLUS)),
7441     MPP_MODE(19,
7442     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
7443     MPP_VAR_FUNCTION(1, "ge0", "col", V_88F6810_PLUS),
7444     MPP_VAR_FUNCTION(2, "ptp", "event_req", V_88F6810_PLUS),
7445     - MPP_VAR_FUNCTION(3, "pcie0", "clkreq", V_88F6810_PLUS),
7446     + MPP_VAR_FUNCTION(3, "ge0", "txerr", V_88F6810_PLUS),
7447     MPP_VAR_FUNCTION(4, "sata1", "prsnt", V_88F6810_PLUS),
7448     MPP_VAR_FUNCTION(5, "ua0", "cts", V_88F6810_PLUS),
7449     MPP_VAR_FUNCTION(6, "ua1", "rxd", V_88F6810_PLUS)),
7450     @@ -151,7 +152,6 @@ static struct mvebu_mpp_mode armada_38x_mpp_modes[] = {
7451     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
7452     MPP_VAR_FUNCTION(1, "ge0", "txclk", V_88F6810_PLUS),
7453     MPP_VAR_FUNCTION(2, "ptp", "clk", V_88F6810_PLUS),
7454     - MPP_VAR_FUNCTION(3, "pcie1", "rstout", V_88F6820_PLUS),
7455     MPP_VAR_FUNCTION(4, "sata0", "prsnt", V_88F6810_PLUS),
7456     MPP_VAR_FUNCTION(5, "ua0", "rts", V_88F6810_PLUS),
7457     MPP_VAR_FUNCTION(6, "ua1", "txd", V_88F6810_PLUS)),
7458     @@ -277,35 +277,27 @@ static struct mvebu_mpp_mode armada_38x_mpp_modes[] = {
7459     MPP_VAR_FUNCTION(1, "pcie0", "clkreq", V_88F6810_PLUS),
7460     MPP_VAR_FUNCTION(2, "m", "vtt_ctrl", V_88F6810_PLUS),
7461     MPP_VAR_FUNCTION(3, "m", "decc_err", V_88F6810_PLUS),
7462     - MPP_VAR_FUNCTION(4, "pcie0", "rstout", V_88F6810_PLUS),
7463     + MPP_VAR_FUNCTION(4, "spi1", "cs2", V_88F6810_PLUS),
7464     MPP_VAR_FUNCTION(5, "dev", "clkout", V_88F6810_PLUS)),
7465     MPP_MODE(44,
7466     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
7467     MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6810_PLUS),
7468     MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6810_PLUS),
7469     MPP_VAR_FUNCTION(3, "sata2", "prsnt", V_88F6828),
7470     - MPP_VAR_FUNCTION(4, "sata3", "prsnt", V_88F6828),
7471     - MPP_VAR_FUNCTION(5, "pcie0", "rstout", V_88F6810_PLUS)),
7472     + MPP_VAR_FUNCTION(4, "sata3", "prsnt", V_88F6828)),
7473     MPP_MODE(45,
7474     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
7475     MPP_VAR_FUNCTION(1, "ref", "clk_out0", V_88F6810_PLUS),
7476     - MPP_VAR_FUNCTION(2, "pcie0", "rstout", V_88F6810_PLUS),
7477     - MPP_VAR_FUNCTION(3, "pcie1", "rstout", V_88F6820_PLUS),
7478     - MPP_VAR_FUNCTION(4, "pcie2", "rstout", V_88F6810_PLUS),
7479     - MPP_VAR_FUNCTION(5, "pcie3", "rstout", V_88F6810_PLUS)),
7480     + MPP_VAR_FUNCTION(2, "pcie0", "rstout", V_88F6810_PLUS)),
7481     MPP_MODE(46,
7482     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
7483     MPP_VAR_FUNCTION(1, "ref", "clk_out1", V_88F6810_PLUS),
7484     - MPP_VAR_FUNCTION(2, "pcie0", "rstout", V_88F6810_PLUS),
7485     - MPP_VAR_FUNCTION(3, "pcie1", "rstout", V_88F6820_PLUS),
7486     - MPP_VAR_FUNCTION(4, "pcie2", "rstout", V_88F6810_PLUS),
7487     - MPP_VAR_FUNCTION(5, "pcie3", "rstout", V_88F6810_PLUS)),
7488     + MPP_VAR_FUNCTION(2, "pcie0", "rstout", V_88F6810_PLUS)),
7489     MPP_MODE(47,
7490     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
7491     MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6810_PLUS),
7492     MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6810_PLUS),
7493     MPP_VAR_FUNCTION(3, "sata2", "prsnt", V_88F6828),
7494     - MPP_VAR_FUNCTION(4, "spi1", "cs2", V_88F6810_PLUS),
7495     MPP_VAR_FUNCTION(5, "sata3", "prsnt", V_88F6828)),
7496     MPP_MODE(48,
7497     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
7498     @@ -313,18 +305,19 @@ static struct mvebu_mpp_mode armada_38x_mpp_modes[] = {
7499     MPP_VAR_FUNCTION(2, "m", "vtt_ctrl", V_88F6810_PLUS),
7500     MPP_VAR_FUNCTION(3, "tdm2c", "pclk", V_88F6810_PLUS),
7501     MPP_VAR_FUNCTION(4, "audio", "mclk", V_88F6810_PLUS),
7502     - MPP_VAR_FUNCTION(5, "sd0", "d4", V_88F6810_PLUS)),
7503     + MPP_VAR_FUNCTION(5, "sd0", "d4", V_88F6810_PLUS),
7504     + MPP_VAR_FUNCTION(6, "pcie0", "clkreq", V_88F6810_PLUS)),
7505     MPP_MODE(49,
7506     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
7507     MPP_VAR_FUNCTION(1, "sata2", "prsnt", V_88F6828),
7508     MPP_VAR_FUNCTION(2, "sata3", "prsnt", V_88F6828),
7509     MPP_VAR_FUNCTION(3, "tdm2c", "fsync", V_88F6810_PLUS),
7510     MPP_VAR_FUNCTION(4, "audio", "lrclk", V_88F6810_PLUS),
7511     - MPP_VAR_FUNCTION(5, "sd0", "d5", V_88F6810_PLUS)),
7512     + MPP_VAR_FUNCTION(5, "sd0", "d5", V_88F6810_PLUS),
7513     + MPP_VAR_FUNCTION(6, "pcie1", "clkreq", V_88F6820_PLUS)),
7514     MPP_MODE(50,
7515     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
7516     MPP_VAR_FUNCTION(1, "pcie0", "rstout", V_88F6810_PLUS),
7517     - MPP_VAR_FUNCTION(2, "pcie1", "rstout", V_88F6820_PLUS),
7518     MPP_VAR_FUNCTION(3, "tdm2c", "drx", V_88F6810_PLUS),
7519     MPP_VAR_FUNCTION(4, "audio", "extclk", V_88F6810_PLUS),
7520     MPP_VAR_FUNCTION(5, "sd0", "cmd", V_88F6810_PLUS)),
7521     @@ -336,7 +329,6 @@ static struct mvebu_mpp_mode armada_38x_mpp_modes[] = {
7522     MPP_MODE(52,
7523     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
7524     MPP_VAR_FUNCTION(1, "pcie0", "rstout", V_88F6810_PLUS),
7525     - MPP_VAR_FUNCTION(2, "pcie1", "rstout", V_88F6820_PLUS),
7526     MPP_VAR_FUNCTION(3, "tdm2c", "intn", V_88F6810_PLUS),
7527     MPP_VAR_FUNCTION(4, "audio", "sdi", V_88F6810_PLUS),
7528     MPP_VAR_FUNCTION(5, "sd0", "d6", V_88F6810_PLUS)),
7529     @@ -352,7 +344,7 @@ static struct mvebu_mpp_mode armada_38x_mpp_modes[] = {
7530     MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6810_PLUS),
7531     MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6810_PLUS),
7532     MPP_VAR_FUNCTION(3, "pcie0", "rstout", V_88F6810_PLUS),
7533     - MPP_VAR_FUNCTION(4, "pcie1", "rstout", V_88F6820_PLUS),
7534     + MPP_VAR_FUNCTION(4, "ge0", "txerr", V_88F6810_PLUS),
7535     MPP_VAR_FUNCTION(5, "sd0", "d3", V_88F6810_PLUS)),
7536     MPP_MODE(55,
7537     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
7538     @@ -382,7 +374,6 @@ static struct mvebu_mpp_mode armada_38x_mpp_modes[] = {
7539     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
7540     MPP_VAR_FUNCTION(1, "pcie0", "rstout", V_88F6810_PLUS),
7541     MPP_VAR_FUNCTION(2, "i2c1", "sda", V_88F6810_PLUS),
7542     - MPP_VAR_FUNCTION(3, "pcie1", "rstout", V_88F6820_PLUS),
7543     MPP_VAR_FUNCTION(4, "spi1", "cs0", V_88F6810_PLUS),
7544     MPP_VAR_FUNCTION(5, "sd0", "d2", V_88F6810_PLUS)),
7545     };
7546     @@ -411,7 +402,7 @@ static struct mvebu_mpp_ctrl armada_38x_mpp_controls[] = {
7547    
7548     static struct pinctrl_gpio_range armada_38x_mpp_gpio_ranges[] = {
7549     MPP_GPIO_RANGE(0, 0, 0, 32),
7550     - MPP_GPIO_RANGE(1, 32, 32, 27),
7551     + MPP_GPIO_RANGE(1, 32, 32, 28),
7552     };
7553    
7554     static int armada_38x_pinctrl_probe(struct platform_device *pdev)
7555     diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-39x.c b/drivers/pinctrl/mvebu/pinctrl-armada-39x.c
7556     index 42491624d660..2dcf9b41e01e 100644
7557     --- a/drivers/pinctrl/mvebu/pinctrl-armada-39x.c
7558     +++ b/drivers/pinctrl/mvebu/pinctrl-armada-39x.c
7559     @@ -380,7 +380,7 @@ static struct mvebu_mpp_ctrl armada_39x_mpp_controls[] = {
7560    
7561     static struct pinctrl_gpio_range armada_39x_mpp_gpio_ranges[] = {
7562     MPP_GPIO_RANGE(0, 0, 0, 32),
7563     - MPP_GPIO_RANGE(1, 32, 32, 27),
7564     + MPP_GPIO_RANGE(1, 32, 32, 28),
7565     };
7566    
7567     static int armada_39x_pinctrl_probe(struct platform_device *pdev)
7568     diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-xp.c b/drivers/pinctrl/mvebu/pinctrl-armada-xp.c
7569     index 578db9f033b2..d7cdb146f44d 100644
7570     --- a/drivers/pinctrl/mvebu/pinctrl-armada-xp.c
7571     +++ b/drivers/pinctrl/mvebu/pinctrl-armada-xp.c
7572     @@ -14,10 +14,7 @@
7573     * available: mv78230, mv78260 and mv78460. From a pin muxing
7574     * perspective, the mv78230 has 49 MPP pins. The mv78260 and mv78460
7575     * both have 67 MPP pins (more GPIOs and address lines for the memory
7576     - * bus mainly). The only difference between the mv78260 and the
7577     - * mv78460 in terms of pin muxing is the addition of two functions on
7578     - * pins 43 and 56 to access the VDD of the CPU2 and 3 (mv78260 has two
7579     - * cores, mv78460 has four cores).
7580     + * bus mainly).
7581     */
7582    
7583     #include <linux/err.h>
7584     @@ -172,20 +169,17 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
7585     MPP_MODE(24,
7586     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
7587     MPP_VAR_FUNCTION(0x1, "sata1", "prsnt", V_MV78230_PLUS),
7588     - MPP_VAR_FUNCTION(0x2, "nf", "bootcs-re", V_MV78230_PLUS),
7589     MPP_VAR_FUNCTION(0x3, "tdm", "rst", V_MV78230_PLUS),
7590     MPP_VAR_FUNCTION(0x4, "lcd", "hsync", V_MV78230_PLUS)),
7591     MPP_MODE(25,
7592     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
7593     MPP_VAR_FUNCTION(0x1, "sata0", "prsnt", V_MV78230_PLUS),
7594     - MPP_VAR_FUNCTION(0x2, "nf", "bootcs-we", V_MV78230_PLUS),
7595     MPP_VAR_FUNCTION(0x3, "tdm", "pclk", V_MV78230_PLUS),
7596     MPP_VAR_FUNCTION(0x4, "lcd", "vsync", V_MV78230_PLUS)),
7597     MPP_MODE(26,
7598     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
7599     MPP_VAR_FUNCTION(0x3, "tdm", "fsync", V_MV78230_PLUS),
7600     - MPP_VAR_FUNCTION(0x4, "lcd", "clk", V_MV78230_PLUS),
7601     - MPP_VAR_FUNCTION(0x5, "vdd", "cpu1-pd", V_MV78230_PLUS)),
7602     + MPP_VAR_FUNCTION(0x4, "lcd", "clk", V_MV78230_PLUS)),
7603     MPP_MODE(27,
7604     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
7605     MPP_VAR_FUNCTION(0x1, "ptp", "trig", V_MV78230_PLUS),
7606     @@ -200,8 +194,7 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
7607     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
7608     MPP_VAR_FUNCTION(0x1, "ptp", "clk", V_MV78230_PLUS),
7609     MPP_VAR_FUNCTION(0x3, "tdm", "int0", V_MV78230_PLUS),
7610     - MPP_VAR_FUNCTION(0x4, "lcd", "ref-clk", V_MV78230_PLUS),
7611     - MPP_VAR_FUNCTION(0x5, "vdd", "cpu0-pd", V_MV78230_PLUS)),
7612     + MPP_VAR_FUNCTION(0x4, "lcd", "ref-clk", V_MV78230_PLUS)),
7613     MPP_MODE(30,
7614     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
7615     MPP_VAR_FUNCTION(0x1, "sd0", "clk", V_MV78230_PLUS),
7616     @@ -209,13 +202,11 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
7617     MPP_MODE(31,
7618     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
7619     MPP_VAR_FUNCTION(0x1, "sd0", "cmd", V_MV78230_PLUS),
7620     - MPP_VAR_FUNCTION(0x3, "tdm", "int2", V_MV78230_PLUS),
7621     - MPP_VAR_FUNCTION(0x5, "vdd", "cpu0-pd", V_MV78230_PLUS)),
7622     + MPP_VAR_FUNCTION(0x3, "tdm", "int2", V_MV78230_PLUS)),
7623     MPP_MODE(32,
7624     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
7625     MPP_VAR_FUNCTION(0x1, "sd0", "d0", V_MV78230_PLUS),
7626     - MPP_VAR_FUNCTION(0x3, "tdm", "int3", V_MV78230_PLUS),
7627     - MPP_VAR_FUNCTION(0x5, "vdd", "cpu1-pd", V_MV78230_PLUS)),
7628     + MPP_VAR_FUNCTION(0x3, "tdm", "int3", V_MV78230_PLUS)),
7629     MPP_MODE(33,
7630     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
7631     MPP_VAR_FUNCTION(0x1, "sd0", "d1", V_MV78230_PLUS),
7632     @@ -247,7 +238,6 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
7633     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
7634     MPP_VAR_FUNCTION(0x1, "spi", "cs1", V_MV78230_PLUS),
7635     MPP_VAR_FUNCTION(0x2, "uart2", "cts", V_MV78230_PLUS),
7636     - MPP_VAR_FUNCTION(0x3, "vdd", "cpu1-pd", V_MV78230_PLUS),
7637     MPP_VAR_FUNCTION(0x4, "lcd", "vga-hsync", V_MV78230_PLUS),
7638     MPP_VAR_FUNCTION(0x5, "pcie", "clkreq0", V_MV78230_PLUS)),
7639     MPP_MODE(41,
7640     @@ -262,15 +252,13 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
7641     MPP_VAR_FUNCTION(0x1, "uart2", "rxd", V_MV78230_PLUS),
7642     MPP_VAR_FUNCTION(0x2, "uart0", "cts", V_MV78230_PLUS),
7643     MPP_VAR_FUNCTION(0x3, "tdm", "int7", V_MV78230_PLUS),
7644     - MPP_VAR_FUNCTION(0x4, "tdm-1", "timer", V_MV78230_PLUS),
7645     - MPP_VAR_FUNCTION(0x5, "vdd", "cpu0-pd", V_MV78230_PLUS)),
7646     + MPP_VAR_FUNCTION(0x4, "tdm-1", "timer", V_MV78230_PLUS)),
7647     MPP_MODE(43,
7648     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
7649     MPP_VAR_FUNCTION(0x1, "uart2", "txd", V_MV78230_PLUS),
7650     MPP_VAR_FUNCTION(0x2, "uart0", "rts", V_MV78230_PLUS),
7651     MPP_VAR_FUNCTION(0x3, "spi", "cs3", V_MV78230_PLUS),
7652     - MPP_VAR_FUNCTION(0x4, "pcie", "rstout", V_MV78230_PLUS),
7653     - MPP_VAR_FUNCTION(0x5, "vdd", "cpu2-3-pd", V_MV78460)),
7654     + MPP_VAR_FUNCTION(0x4, "pcie", "rstout", V_MV78230_PLUS)),
7655     MPP_MODE(44,
7656     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
7657     MPP_VAR_FUNCTION(0x1, "uart2", "cts", V_MV78230_PLUS),
7658     @@ -299,7 +287,7 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
7659     MPP_VAR_FUNCTION(0x5, "pcie", "clkreq3", V_MV78230_PLUS)),
7660     MPP_MODE(48,
7661     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
7662     - MPP_VAR_FUNCTION(0x1, "tclk", NULL, V_MV78230_PLUS),
7663     + MPP_VAR_FUNCTION(0x1, "dev", "clkout", V_MV78230_PLUS),
7664     MPP_VAR_FUNCTION(0x2, "dev", "burst/last", V_MV78230_PLUS)),
7665     MPP_MODE(49,
7666     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78260_PLUS),
7667     @@ -321,16 +309,13 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
7668     MPP_VAR_FUNCTION(0x1, "dev", "ad19", V_MV78260_PLUS)),
7669     MPP_MODE(55,
7670     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78260_PLUS),
7671     - MPP_VAR_FUNCTION(0x1, "dev", "ad20", V_MV78260_PLUS),
7672     - MPP_VAR_FUNCTION(0x2, "vdd", "cpu0-pd", V_MV78260_PLUS)),
7673     + MPP_VAR_FUNCTION(0x1, "dev", "ad20", V_MV78260_PLUS)),
7674     MPP_MODE(56,
7675     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78260_PLUS),
7676     - MPP_VAR_FUNCTION(0x1, "dev", "ad21", V_MV78260_PLUS),
7677     - MPP_VAR_FUNCTION(0x2, "vdd", "cpu1-pd", V_MV78260_PLUS)),
7678     + MPP_VAR_FUNCTION(0x1, "dev", "ad21", V_MV78260_PLUS)),
7679     MPP_MODE(57,
7680     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78260_PLUS),
7681     - MPP_VAR_FUNCTION(0x1, "dev", "ad22", V_MV78260_PLUS),
7682     - MPP_VAR_FUNCTION(0x2, "vdd", "cpu2-3-pd", V_MV78460)),
7683     + MPP_VAR_FUNCTION(0x1, "dev", "ad22", V_MV78260_PLUS)),
7684     MPP_MODE(58,
7685     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78260_PLUS),
7686     MPP_VAR_FUNCTION(0x1, "dev", "ad23", V_MV78260_PLUS)),
7687     diff --git a/drivers/pinctrl/pinctrl-zynq.c b/drivers/pinctrl/pinctrl-zynq.c
7688     index 22280bddb9e2..8c51a3c65513 100644
7689     --- a/drivers/pinctrl/pinctrl-zynq.c
7690     +++ b/drivers/pinctrl/pinctrl-zynq.c
7691     @@ -714,12 +714,13 @@ static const char * const gpio0_groups[] = {"gpio0_0_grp",
7692     .mux_val = mval, \
7693     }
7694    
7695     -#define DEFINE_ZYNQ_PINMUX_FUNCTION_MUX(fname, mval, mux, mask, shift) \
7696     +#define DEFINE_ZYNQ_PINMUX_FUNCTION_MUX(fname, mval, offset, mask, shift)\
7697     [ZYNQ_PMUX_##fname] = { \
7698     .name = #fname, \
7699     .groups = fname##_groups, \
7700     .ngroups = ARRAY_SIZE(fname##_groups), \
7701     .mux_val = mval, \
7702     + .mux = offset, \
7703     .mux_mask = mask, \
7704     .mux_shift = shift, \
7705     }
7706     @@ -744,15 +745,15 @@ static const struct zynq_pinmux_function zynq_pmux_functions[] = {
7707     DEFINE_ZYNQ_PINMUX_FUNCTION(spi1, 0x50),
7708     DEFINE_ZYNQ_PINMUX_FUNCTION(sdio0, 0x40),
7709     DEFINE_ZYNQ_PINMUX_FUNCTION(sdio0_pc, 0xc),
7710     - DEFINE_ZYNQ_PINMUX_FUNCTION_MUX(sdio0_wp, 0, 130, ZYNQ_SDIO_WP_MASK,
7711     + DEFINE_ZYNQ_PINMUX_FUNCTION_MUX(sdio0_wp, 0, 0x130, ZYNQ_SDIO_WP_MASK,
7712     ZYNQ_SDIO_WP_SHIFT),
7713     - DEFINE_ZYNQ_PINMUX_FUNCTION_MUX(sdio0_cd, 0, 130, ZYNQ_SDIO_CD_MASK,
7714     + DEFINE_ZYNQ_PINMUX_FUNCTION_MUX(sdio0_cd, 0, 0x130, ZYNQ_SDIO_CD_MASK,
7715     ZYNQ_SDIO_CD_SHIFT),
7716     DEFINE_ZYNQ_PINMUX_FUNCTION(sdio1, 0x40),
7717     DEFINE_ZYNQ_PINMUX_FUNCTION(sdio1_pc, 0xc),
7718     - DEFINE_ZYNQ_PINMUX_FUNCTION_MUX(sdio1_wp, 0, 134, ZYNQ_SDIO_WP_MASK,
7719     + DEFINE_ZYNQ_PINMUX_FUNCTION_MUX(sdio1_wp, 0, 0x134, ZYNQ_SDIO_WP_MASK,
7720     ZYNQ_SDIO_WP_SHIFT),
7721     - DEFINE_ZYNQ_PINMUX_FUNCTION_MUX(sdio1_cd, 0, 134, ZYNQ_SDIO_CD_MASK,
7722     + DEFINE_ZYNQ_PINMUX_FUNCTION_MUX(sdio1_cd, 0, 0x134, ZYNQ_SDIO_CD_MASK,
7723     ZYNQ_SDIO_CD_SHIFT),
7724     DEFINE_ZYNQ_PINMUX_FUNCTION(smc0_nor, 4),
7725     DEFINE_ZYNQ_PINMUX_FUNCTION(smc0_nor_cs1, 8),
7726     diff --git a/drivers/platform/x86/dell-laptop.c b/drivers/platform/x86/dell-laptop.c
7727     index d688d806a8a5..2c1d5f5432a9 100644
7728     --- a/drivers/platform/x86/dell-laptop.c
7729     +++ b/drivers/platform/x86/dell-laptop.c
7730     @@ -305,7 +305,6 @@ static const struct dmi_system_id dell_quirks[] __initconst = {
7731     };
7732    
7733     static struct calling_interface_buffer *buffer;
7734     -static struct page *bufferpage;
7735     static DEFINE_MUTEX(buffer_mutex);
7736    
7737     static int hwswitch_state;
7738     @@ -1896,12 +1895,11 @@ static int __init dell_init(void)
7739     * Allocate buffer below 4GB for SMI data--only 32-bit physical addr
7740     * is passed to SMI handler.
7741     */
7742     - bufferpage = alloc_page(GFP_KERNEL | GFP_DMA32);
7743     - if (!bufferpage) {
7744     + buffer = (void *)__get_free_page(GFP_KERNEL | GFP_DMA32);
7745     + if (!buffer) {
7746     ret = -ENOMEM;
7747     goto fail_buffer;
7748     }
7749     - buffer = page_address(bufferpage);
7750    
7751     ret = dell_setup_rfkill();
7752    
7753     @@ -1965,7 +1963,7 @@ fail_backlight:
7754     cancel_delayed_work_sync(&dell_rfkill_work);
7755     dell_cleanup_rfkill();
7756     fail_rfkill:
7757     - free_page((unsigned long)bufferpage);
7758     + free_page((unsigned long)buffer);
7759     fail_buffer:
7760     platform_device_del(platform_device);
7761     fail_platform_device2:
7762     diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
7763     index b496db87bc05..cb7cd8d79329 100644
7764     --- a/drivers/platform/x86/ideapad-laptop.c
7765     +++ b/drivers/platform/x86/ideapad-laptop.c
7766     @@ -464,8 +464,9 @@ static const struct ideapad_rfk_data ideapad_rfk_data[] = {
7767     static int ideapad_rfk_set(void *data, bool blocked)
7768     {
7769     struct ideapad_rfk_priv *priv = data;
7770     + int opcode = ideapad_rfk_data[priv->dev].opcode;
7771    
7772     - return write_ec_cmd(priv->priv->adev->handle, priv->dev, !blocked);
7773     + return write_ec_cmd(priv->priv->adev->handle, opcode, !blocked);
7774     }
7775    
7776     static struct rfkill_ops ideapad_rfk_ops = {
7777     @@ -837,6 +838,13 @@ static const struct dmi_system_id no_hw_rfkill_list[] = {
7778     },
7779     },
7780     {
7781     + .ident = "Lenovo G50-30",
7782     + .matches = {
7783     + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
7784     + DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo G50-30"),
7785     + },
7786     + },
7787     + {
7788     .ident = "Lenovo Yoga 2 11 / 13 / Pro",
7789     .matches = {
7790     DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
7791     diff --git a/drivers/pnp/system.c b/drivers/pnp/system.c
7792     index 515f33882ab8..49c1720df59a 100644
7793     --- a/drivers/pnp/system.c
7794     +++ b/drivers/pnp/system.c
7795     @@ -7,7 +7,6 @@
7796     * Bjorn Helgaas <bjorn.helgaas@hp.com>
7797     */
7798    
7799     -#include <linux/acpi.h>
7800     #include <linux/pnp.h>
7801     #include <linux/device.h>
7802     #include <linux/init.h>
7803     @@ -23,41 +22,25 @@ static const struct pnp_device_id pnp_dev_table[] = {
7804     {"", 0}
7805     };
7806    
7807     -#ifdef CONFIG_ACPI
7808     -static bool __reserve_range(u64 start, unsigned int length, bool io, char *desc)
7809     -{
7810     - u8 space_id = io ? ACPI_ADR_SPACE_SYSTEM_IO : ACPI_ADR_SPACE_SYSTEM_MEMORY;
7811     - return !acpi_reserve_region(start, length, space_id, IORESOURCE_BUSY, desc);
7812     -}
7813     -#else
7814     -static bool __reserve_range(u64 start, unsigned int length, bool io, char *desc)
7815     -{
7816     - struct resource *res;
7817     -
7818     - res = io ? request_region(start, length, desc) :
7819     - request_mem_region(start, length, desc);
7820     - if (res) {
7821     - res->flags &= ~IORESOURCE_BUSY;
7822     - return true;
7823     - }
7824     - return false;
7825     -}
7826     -#endif
7827     -
7828     static void reserve_range(struct pnp_dev *dev, struct resource *r, int port)
7829     {
7830     char *regionid;
7831     const char *pnpid = dev_name(&dev->dev);
7832     resource_size_t start = r->start, end = r->end;
7833     - bool reserved;
7834     + struct resource *res;
7835    
7836     regionid = kmalloc(16, GFP_KERNEL);
7837     if (!regionid)
7838     return;
7839    
7840     snprintf(regionid, 16, "pnp %s", pnpid);
7841     - reserved = __reserve_range(start, end - start + 1, !!port, regionid);
7842     - if (!reserved)
7843     + if (port)
7844     + res = request_region(start, end - start + 1, regionid);
7845     + else
7846     + res = request_mem_region(start, end - start + 1, regionid);
7847     + if (res)
7848     + res->flags &= ~IORESOURCE_BUSY;
7849     + else
7850     kfree(regionid);
7851    
7852     /*
7853     @@ -66,7 +49,7 @@ static void reserve_range(struct pnp_dev *dev, struct resource *r, int port)
7854     * have double reservations.
7855     */
7856     dev_info(&dev->dev, "%pR %s reserved\n", r,
7857     - reserved ? "has been" : "could not be");
7858     + res ? "has been" : "could not be");
7859     }
7860    
7861     static void reserve_resources_of_dev(struct pnp_dev *dev)
7862     diff --git a/drivers/rtc/rtc-snvs.c b/drivers/rtc/rtc-snvs.c
7863     index 0479e807a776..d87a85cefb66 100644
7864     --- a/drivers/rtc/rtc-snvs.c
7865     +++ b/drivers/rtc/rtc-snvs.c
7866     @@ -322,6 +322,13 @@ static int snvs_rtc_suspend(struct device *dev)
7867     if (device_may_wakeup(dev))
7868     enable_irq_wake(data->irq);
7869    
7870     + return 0;
7871     +}
7872     +
7873     +static int snvs_rtc_suspend_noirq(struct device *dev)
7874     +{
7875     + struct snvs_rtc_data *data = dev_get_drvdata(dev);
7876     +
7877     if (data->clk)
7878     clk_disable_unprepare(data->clk);
7879    
7880     @@ -331,23 +338,28 @@ static int snvs_rtc_suspend(struct device *dev)
7881     static int snvs_rtc_resume(struct device *dev)
7882     {
7883     struct snvs_rtc_data *data = dev_get_drvdata(dev);
7884     - int ret;
7885    
7886     if (device_may_wakeup(dev))
7887     - disable_irq_wake(data->irq);
7888     + return disable_irq_wake(data->irq);
7889    
7890     - if (data->clk) {
7891     - ret = clk_prepare_enable(data->clk);
7892     - if (ret)
7893     - return ret;
7894     - }
7895     + return 0;
7896     +}
7897     +
7898     +static int snvs_rtc_resume_noirq(struct device *dev)
7899     +{
7900     + struct snvs_rtc_data *data = dev_get_drvdata(dev);
7901     +
7902     + if (data->clk)
7903     + return clk_prepare_enable(data->clk);
7904    
7905     return 0;
7906     }
7907    
7908     static const struct dev_pm_ops snvs_rtc_pm_ops = {
7909     - .suspend_noirq = snvs_rtc_suspend,
7910     - .resume_noirq = snvs_rtc_resume,
7911     + .suspend = snvs_rtc_suspend,
7912     + .suspend_noirq = snvs_rtc_suspend_noirq,
7913     + .resume = snvs_rtc_resume,
7914     + .resume_noirq = snvs_rtc_resume_noirq,
7915     };
7916    
7917     #define SNVS_RTC_PM_OPS (&snvs_rtc_pm_ops)
7918     diff --git a/drivers/staging/comedi/drivers/cb_pcimdas.c b/drivers/staging/comedi/drivers/cb_pcimdas.c
7919     index c458e5010a74..4ebf5aae5019 100644
7920     --- a/drivers/staging/comedi/drivers/cb_pcimdas.c
7921     +++ b/drivers/staging/comedi/drivers/cb_pcimdas.c
7922     @@ -243,7 +243,7 @@ static int cb_pcimdas_ao_insn_write(struct comedi_device *dev,
7923     return insn->n;
7924     }
7925    
7926     -static int cb_pcimdas_di_insn_read(struct comedi_device *dev,
7927     +static int cb_pcimdas_di_insn_bits(struct comedi_device *dev,
7928     struct comedi_subdevice *s,
7929     struct comedi_insn *insn,
7930     unsigned int *data)
7931     @@ -258,7 +258,7 @@ static int cb_pcimdas_di_insn_read(struct comedi_device *dev,
7932     return insn->n;
7933     }
7934    
7935     -static int cb_pcimdas_do_insn_write(struct comedi_device *dev,
7936     +static int cb_pcimdas_do_insn_bits(struct comedi_device *dev,
7937     struct comedi_subdevice *s,
7938     struct comedi_insn *insn,
7939     unsigned int *data)
7940     @@ -424,7 +424,7 @@ static int cb_pcimdas_auto_attach(struct comedi_device *dev,
7941     s->n_chan = 4;
7942     s->maxdata = 1;
7943     s->range_table = &range_digital;
7944     - s->insn_read = cb_pcimdas_di_insn_read;
7945     + s->insn_bits = cb_pcimdas_di_insn_bits;
7946    
7947     /* Digital Output subdevice (main connector) */
7948     s = &dev->subdevices[4];
7949     @@ -433,7 +433,7 @@ static int cb_pcimdas_auto_attach(struct comedi_device *dev,
7950     s->n_chan = 4;
7951     s->maxdata = 1;
7952     s->range_table = &range_digital;
7953     - s->insn_write = cb_pcimdas_do_insn_write;
7954     + s->insn_bits = cb_pcimdas_do_insn_bits;
7955    
7956     /* Counter subdevice (8254) */
7957     s = &dev->subdevices[5];
7958     diff --git a/drivers/staging/rtl8712/rtl8712_recv.c b/drivers/staging/rtl8712/rtl8712_recv.c
7959     index 50227b598e0c..fcb8c61b2884 100644
7960     --- a/drivers/staging/rtl8712/rtl8712_recv.c
7961     +++ b/drivers/staging/rtl8712/rtl8712_recv.c
7962     @@ -1056,7 +1056,8 @@ static int recvbuf2recvframe(struct _adapter *padapter, struct sk_buff *pskb)
7963     /* for first fragment packet, driver need allocate 1536 +
7964     * drvinfo_sz + RXDESC_SIZE to defrag packet. */
7965     if ((mf == 1) && (frag == 0))
7966     - alloc_sz = 1658;/*1658+6=1664, 1664 is 128 alignment.*/
7967     + /*1658+6=1664, 1664 is 128 alignment.*/
7968     + alloc_sz = max_t(u16, tmp_len, 1658);
7969     else
7970     alloc_sz = tmp_len;
7971     /* 2 is for IP header 4 bytes alignment in QoS packet case.
7972     diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c
7973     index 0343ae386f03..15baacb126ad 100644
7974     --- a/drivers/staging/vt6655/device_main.c
7975     +++ b/drivers/staging/vt6655/device_main.c
7976     @@ -807,6 +807,10 @@ static int device_rx_srv(struct vnt_private *pDevice, unsigned int uIdx)
7977     pRD = pRD->next) {
7978     if (works++ > 15)
7979     break;
7980     +
7981     + if (!pRD->pRDInfo->skb)
7982     + break;
7983     +
7984     if (vnt_receive_frame(pDevice, pRD)) {
7985     if (!device_alloc_rx_buf(pDevice, pRD)) {
7986     dev_err(&pDevice->pcid->dev,
7987     @@ -1417,7 +1421,7 @@ static void vnt_bss_info_changed(struct ieee80211_hw *hw,
7988    
7989     priv->current_aid = conf->aid;
7990    
7991     - if (changed & BSS_CHANGED_BSSID) {
7992     + if (changed & BSS_CHANGED_BSSID && conf->bssid) {
7993     unsigned long flags;
7994    
7995     spin_lock_irqsave(&priv->lock, flags);
7996     diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c
7997     index ab3ab84cb0a7..766fdcece074 100644
7998     --- a/drivers/staging/vt6656/main_usb.c
7999     +++ b/drivers/staging/vt6656/main_usb.c
8000     @@ -701,7 +701,7 @@ static void vnt_bss_info_changed(struct ieee80211_hw *hw,
8001    
8002     priv->current_aid = conf->aid;
8003    
8004     - if (changed & BSS_CHANGED_BSSID)
8005     + if (changed & BSS_CHANGED_BSSID && conf->bssid)
8006     vnt_mac_set_bssid_addr(priv, (u8 *)conf->bssid);
8007    
8008    
8009     diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig
8010     index f8120c1bde14..8cd35348fc19 100644
8011     --- a/drivers/tty/serial/Kconfig
8012     +++ b/drivers/tty/serial/Kconfig
8013     @@ -241,7 +241,6 @@ config SERIAL_SAMSUNG
8014     tristate "Samsung SoC serial support"
8015     depends on PLAT_SAMSUNG || ARCH_EXYNOS
8016     select SERIAL_CORE
8017     - select SERIAL_EARLYCON
8018     help
8019     Support for the on-chip UARTs on the Samsung S3C24XX series CPUs,
8020     providing /dev/ttySAC0, 1 and 2 (note, some machines may not
8021     @@ -277,6 +276,7 @@ config SERIAL_SAMSUNG_CONSOLE
8022     bool "Support for console on Samsung SoC serial port"
8023     depends on SERIAL_SAMSUNG=y
8024     select SERIAL_CORE_CONSOLE
8025     + select SERIAL_EARLYCON
8026     help
8027     Allow selection of the S3C24XX on-board serial ports for use as
8028     an virtual console.
8029     diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c
8030     index 27dade29646b..5ca1dfb0561c 100644
8031     --- a/drivers/tty/serial/atmel_serial.c
8032     +++ b/drivers/tty/serial/atmel_serial.c
8033     @@ -315,8 +315,7 @@ static int atmel_config_rs485(struct uart_port *port,
8034     if (rs485conf->flags & SER_RS485_ENABLED) {
8035     dev_dbg(port->dev, "Setting UART to RS485\n");
8036     atmel_port->tx_done_mask = ATMEL_US_TXEMPTY;
8037     - if ((rs485conf->delay_rts_after_send) > 0)
8038     - UART_PUT_TTGR(port, rs485conf->delay_rts_after_send);
8039     + UART_PUT_TTGR(port, rs485conf->delay_rts_after_send);
8040     mode |= ATMEL_US_USMODE_RS485;
8041     } else {
8042     dev_dbg(port->dev, "Setting UART to RS232\n");
8043     @@ -354,8 +353,7 @@ static void atmel_set_mctrl(struct uart_port *port, u_int mctrl)
8044    
8045     /* override mode to RS485 if needed, otherwise keep the current mode */
8046     if (port->rs485.flags & SER_RS485_ENABLED) {
8047     - if ((port->rs485.delay_rts_after_send) > 0)
8048     - UART_PUT_TTGR(port, port->rs485.delay_rts_after_send);
8049     + UART_PUT_TTGR(port, port->rs485.delay_rts_after_send);
8050     mode &= ~ATMEL_US_USMODE;
8051     mode |= ATMEL_US_USMODE_RS485;
8052     }
8053     @@ -2061,8 +2059,7 @@ static void atmel_set_termios(struct uart_port *port, struct ktermios *termios,
8054    
8055     /* mode */
8056     if (port->rs485.flags & SER_RS485_ENABLED) {
8057     - if ((port->rs485.delay_rts_after_send) > 0)
8058     - UART_PUT_TTGR(port, port->rs485.delay_rts_after_send);
8059     + UART_PUT_TTGR(port, port->rs485.delay_rts_after_send);
8060     mode |= ATMEL_US_USMODE_RS485;
8061     } else if (termios->c_cflag & CRTSCTS) {
8062     /* RS232 with hardware handshake (RTS/CTS) */
8063     diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c
8064     index 843f2cdc280b..9ffdfcf2ec6e 100644
8065     --- a/drivers/tty/sysrq.c
8066     +++ b/drivers/tty/sysrq.c
8067     @@ -55,9 +55,6 @@
8068     static int __read_mostly sysrq_enabled = CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE;
8069     static bool __read_mostly sysrq_always_enabled;
8070    
8071     -unsigned short platform_sysrq_reset_seq[] __weak = { KEY_RESERVED };
8072     -int sysrq_reset_downtime_ms __weak;
8073     -
8074     static bool sysrq_on(void)
8075     {
8076     return sysrq_enabled || sysrq_always_enabled;
8077     @@ -569,6 +566,7 @@ void handle_sysrq(int key)
8078     EXPORT_SYMBOL(handle_sysrq);
8079    
8080     #ifdef CONFIG_INPUT
8081     +static int sysrq_reset_downtime_ms;
8082    
8083     /* Simple translation table for the SysRq keys */
8084     static const unsigned char sysrq_xlate[KEY_CNT] =
8085     @@ -949,23 +947,8 @@ static bool sysrq_handler_registered;
8086    
8087     static inline void sysrq_register_handler(void)
8088     {
8089     - unsigned short key;
8090     int error;
8091     - int i;
8092     -
8093     - /* First check if a __weak interface was instantiated. */
8094     - for (i = 0; i < ARRAY_SIZE(sysrq_reset_seq); i++) {
8095     - key = platform_sysrq_reset_seq[i];
8096     - if (key == KEY_RESERVED || key > KEY_MAX)
8097     - break;
8098     -
8099     - sysrq_reset_seq[sysrq_reset_seq_len++] = key;
8100     - }
8101    
8102     - /*
8103     - * DT configuration takes precedence over anything that would
8104     - * have been defined via the __weak interface.
8105     - */
8106     sysrq_of_get_keyreset_config();
8107    
8108     error = input_register_handler(&sysrq_handler);
8109     diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
8110     index 4b0448c26810..986abde07683 100644
8111     --- a/drivers/usb/core/devio.c
8112     +++ b/drivers/usb/core/devio.c
8113     @@ -513,7 +513,7 @@ static void async_completed(struct urb *urb)
8114     snoop(&urb->dev->dev, "urb complete\n");
8115     snoop_urb(urb->dev, as->userurb, urb->pipe, urb->actual_length,
8116     as->status, COMPLETE, NULL, 0);
8117     - if ((urb->transfer_flags & URB_DIR_MASK) == USB_DIR_IN)
8118     + if ((urb->transfer_flags & URB_DIR_MASK) == URB_DIR_IN)
8119     snoop_urb_data(urb, urb->actual_length);
8120    
8121     if (as->status < 0 && as->bulk_addr && as->status != -ECONNRESET &&
8122     diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
8123     index 45a915ccd71c..1c1385e3a824 100644
8124     --- a/drivers/usb/core/hcd.c
8125     +++ b/drivers/usb/core/hcd.c
8126     @@ -1022,9 +1022,12 @@ static int register_root_hub(struct usb_hcd *hcd)
8127     dev_name(&usb_dev->dev), retval);
8128     return (retval < 0) ? retval : -EMSGSIZE;
8129     }
8130     - if (usb_dev->speed == USB_SPEED_SUPER) {
8131     +
8132     + if (le16_to_cpu(usb_dev->descriptor.bcdUSB) >= 0x0201) {
8133     retval = usb_get_bos_descriptor(usb_dev);
8134     - if (retval < 0) {
8135     + if (!retval) {
8136     + usb_dev->lpm_capable = usb_device_supports_lpm(usb_dev);
8137     + } else if (usb_dev->speed == USB_SPEED_SUPER) {
8138     mutex_unlock(&usb_bus_list_lock);
8139     dev_dbg(parent_dev, "can't read %s bos descriptor %d\n",
8140     dev_name(&usb_dev->dev), retval);
8141     diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
8142     index 3b7151687776..1e9a8c9aa531 100644
8143     --- a/drivers/usb/core/hub.c
8144     +++ b/drivers/usb/core/hub.c
8145     @@ -122,7 +122,7 @@ struct usb_hub *usb_hub_to_struct_hub(struct usb_device *hdev)
8146     return usb_get_intfdata(hdev->actconfig->interface[0]);
8147     }
8148    
8149     -static int usb_device_supports_lpm(struct usb_device *udev)
8150     +int usb_device_supports_lpm(struct usb_device *udev)
8151     {
8152     /* USB 2.1 (and greater) devices indicate LPM support through
8153     * their USB 2.0 Extended Capabilities BOS descriptor.
8154     @@ -2616,9 +2616,6 @@ static bool use_new_scheme(struct usb_device *udev, int retry)
8155     return USE_NEW_SCHEME(retry);
8156     }
8157    
8158     -static int hub_port_reset(struct usb_hub *hub, int port1,
8159     - struct usb_device *udev, unsigned int delay, bool warm);
8160     -
8161     /* Is a USB 3.0 port in the Inactive or Compliance Mode state?
8162     * Port worm reset is required to recover
8163     */
8164     @@ -2706,44 +2703,6 @@ static int hub_port_wait_reset(struct usb_hub *hub, int port1,
8165     return 0;
8166     }
8167    
8168     -static void hub_port_finish_reset(struct usb_hub *hub, int port1,
8169     - struct usb_device *udev, int *status)
8170     -{
8171     - switch (*status) {
8172     - case 0:
8173     - /* TRSTRCY = 10 ms; plus some extra */
8174     - msleep(10 + 40);
8175     - if (udev) {
8176     - struct usb_hcd *hcd = bus_to_hcd(udev->bus);
8177     -
8178     - update_devnum(udev, 0);
8179     - /* The xHC may think the device is already reset,
8180     - * so ignore the status.
8181     - */
8182     - if (hcd->driver->reset_device)
8183     - hcd->driver->reset_device(hcd, udev);
8184     - }
8185     - /* FALL THROUGH */
8186     - case -ENOTCONN:
8187     - case -ENODEV:
8188     - usb_clear_port_feature(hub->hdev,
8189     - port1, USB_PORT_FEAT_C_RESET);
8190     - if (hub_is_superspeed(hub->hdev)) {
8191     - usb_clear_port_feature(hub->hdev, port1,
8192     - USB_PORT_FEAT_C_BH_PORT_RESET);
8193     - usb_clear_port_feature(hub->hdev, port1,
8194     - USB_PORT_FEAT_C_PORT_LINK_STATE);
8195     - usb_clear_port_feature(hub->hdev, port1,
8196     - USB_PORT_FEAT_C_CONNECTION);
8197     - }
8198     - if (udev)
8199     - usb_set_device_state(udev, *status
8200     - ? USB_STATE_NOTATTACHED
8201     - : USB_STATE_DEFAULT);
8202     - break;
8203     - }
8204     -}
8205     -
8206     /* Handle port reset and port warm(BH) reset (for USB3 protocol ports) */
8207     static int hub_port_reset(struct usb_hub *hub, int port1,
8208     struct usb_device *udev, unsigned int delay, bool warm)
8209     @@ -2767,13 +2726,10 @@ static int hub_port_reset(struct usb_hub *hub, int port1,
8210     * If the caller hasn't explicitly requested a warm reset,
8211     * double check and see if one is needed.
8212     */
8213     - status = hub_port_status(hub, port1,
8214     - &portstatus, &portchange);
8215     - if (status < 0)
8216     - goto done;
8217     -
8218     - if (hub_port_warm_reset_required(hub, port1, portstatus))
8219     - warm = true;
8220     + if (hub_port_status(hub, port1, &portstatus, &portchange) == 0)
8221     + if (hub_port_warm_reset_required(hub, port1,
8222     + portstatus))
8223     + warm = true;
8224     }
8225     clear_bit(port1, hub->warm_reset_bits);
8226    
8227     @@ -2799,11 +2755,19 @@ static int hub_port_reset(struct usb_hub *hub, int port1,
8228    
8229     /* Check for disconnect or reset */
8230     if (status == 0 || status == -ENOTCONN || status == -ENODEV) {
8231     - hub_port_finish_reset(hub, port1, udev, &status);
8232     + usb_clear_port_feature(hub->hdev, port1,
8233     + USB_PORT_FEAT_C_RESET);
8234    
8235     if (!hub_is_superspeed(hub->hdev))
8236     goto done;
8237    
8238     + usb_clear_port_feature(hub->hdev, port1,
8239     + USB_PORT_FEAT_C_BH_PORT_RESET);
8240     + usb_clear_port_feature(hub->hdev, port1,
8241     + USB_PORT_FEAT_C_PORT_LINK_STATE);
8242     + usb_clear_port_feature(hub->hdev, port1,
8243     + USB_PORT_FEAT_C_CONNECTION);
8244     +
8245     /*
8246     * If a USB 3.0 device migrates from reset to an error
8247     * state, re-issue the warm reset.
8248     @@ -2836,6 +2800,26 @@ static int hub_port_reset(struct usb_hub *hub, int port1,
8249     dev_err(&port_dev->dev, "Cannot enable. Maybe the USB cable is bad?\n");
8250    
8251     done:
8252     + if (status == 0) {
8253     + /* TRSTRCY = 10 ms; plus some extra */
8254     + msleep(10 + 40);
8255     + if (udev) {
8256     + struct usb_hcd *hcd = bus_to_hcd(udev->bus);
8257     +
8258     + update_devnum(udev, 0);
8259     + /* The xHC may think the device is already reset,
8260     + * so ignore the status.
8261     + */
8262     + if (hcd->driver->reset_device)
8263     + hcd->driver->reset_device(hcd, udev);
8264     +
8265     + usb_set_device_state(udev, USB_STATE_DEFAULT);
8266     + }
8267     + } else {
8268     + if (udev)
8269     + usb_set_device_state(udev, USB_STATE_NOTATTACHED);
8270     + }
8271     +
8272     if (!hub_is_superspeed(hub->hdev))
8273     up_read(&ehci_cf_port_reset_rwsem);
8274    
8275     diff --git a/drivers/usb/core/usb.h b/drivers/usb/core/usb.h
8276     index 7eb1e26798e5..457255a3306a 100644
8277     --- a/drivers/usb/core/usb.h
8278     +++ b/drivers/usb/core/usb.h
8279     @@ -65,6 +65,7 @@ extern int usb_hub_init(void);
8280     extern void usb_hub_cleanup(void);
8281     extern int usb_major_init(void);
8282     extern void usb_major_cleanup(void);
8283     +extern int usb_device_supports_lpm(struct usb_device *udev);
8284    
8285     #ifdef CONFIG_PM
8286    
8287     diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c
8288     index 2ef3c8d6a9db..69e769c35cf5 100644
8289     --- a/drivers/usb/dwc3/ep0.c
8290     +++ b/drivers/usb/dwc3/ep0.c
8291     @@ -727,6 +727,10 @@ static int dwc3_ep0_std_request(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
8292     dwc3_trace(trace_dwc3_ep0, "USB_REQ_SET_ISOCH_DELAY");
8293     ret = dwc3_ep0_set_isoch_delay(dwc, ctrl);
8294     break;
8295     + case USB_REQ_SET_INTERFACE:
8296     + dwc3_trace(trace_dwc3_ep0, "USB_REQ_SET_INTERFACE");
8297     + dwc->start_config_issued = false;
8298     + /* Fall through */
8299     default:
8300     dwc3_trace(trace_dwc3_ep0, "Forwarding to gadget driver");
8301     ret = dwc3_ep0_delegate_req(dwc, ctrl);
8302     diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
8303     index 8946c32047e9..333a7c0078fc 100644
8304     --- a/drivers/usb/dwc3/gadget.c
8305     +++ b/drivers/usb/dwc3/gadget.c
8306     @@ -291,6 +291,8 @@ int dwc3_send_gadget_generic_command(struct dwc3 *dwc, unsigned cmd, u32 param)
8307     dwc3_trace(trace_dwc3_gadget,
8308     "Command Complete --> %d",
8309     DWC3_DGCMD_STATUS(reg));
8310     + if (DWC3_DGCMD_STATUS(reg))
8311     + return -EINVAL;
8312     return 0;
8313     }
8314    
8315     @@ -328,6 +330,8 @@ int dwc3_send_gadget_ep_cmd(struct dwc3 *dwc, unsigned ep,
8316     dwc3_trace(trace_dwc3_gadget,
8317     "Command Complete --> %d",
8318     DWC3_DEPCMD_STATUS(reg));
8319     + if (DWC3_DEPCMD_STATUS(reg))
8320     + return -EINVAL;
8321     return 0;
8322     }
8323    
8324     @@ -1902,12 +1906,16 @@ static void dwc3_endpoint_transfer_complete(struct dwc3 *dwc,
8325     {
8326     unsigned status = 0;
8327     int clean_busy;
8328     + u32 is_xfer_complete;
8329     +
8330     + is_xfer_complete = (event->endpoint_event == DWC3_DEPEVT_XFERCOMPLETE);
8331    
8332     if (event->status & DEPEVT_STATUS_BUSERR)
8333     status = -ECONNRESET;
8334    
8335     clean_busy = dwc3_cleanup_done_reqs(dwc, dep, event, status);
8336     - if (clean_busy)
8337     + if (clean_busy && (is_xfer_complete ||
8338     + usb_endpoint_xfer_isoc(dep->endpoint.desc)))
8339     dep->flags &= ~DWC3_EP_BUSY;
8340    
8341     /*
8342     diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
8343     index 4e3447bbd097..58b4657fc721 100644
8344     --- a/drivers/usb/gadget/composite.c
8345     +++ b/drivers/usb/gadget/composite.c
8346     @@ -1758,10 +1758,13 @@ unknown:
8347     * take such requests too, if that's ever needed: to work
8348     * in config 0, etc.
8349     */
8350     - list_for_each_entry(f, &cdev->config->functions, list)
8351     - if (f->req_match && f->req_match(f, ctrl))
8352     - goto try_fun_setup;
8353     - f = NULL;
8354     + if (cdev->config) {
8355     + list_for_each_entry(f, &cdev->config->functions, list)
8356     + if (f->req_match && f->req_match(f, ctrl))
8357     + goto try_fun_setup;
8358     + f = NULL;
8359     + }
8360     +
8361     switch (ctrl->bRequestType & USB_RECIP_MASK) {
8362     case USB_RECIP_INTERFACE:
8363     if (!cdev->config || intf >= MAX_CONFIG_INTERFACES)
8364     diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
8365     index 45b8c8b338df..6e7be91e6097 100644
8366     --- a/drivers/usb/gadget/function/f_fs.c
8367     +++ b/drivers/usb/gadget/function/f_fs.c
8368     @@ -924,7 +924,8 @@ static ssize_t ffs_epfile_write_iter(struct kiocb *kiocb, struct iov_iter *from)
8369    
8370     kiocb->private = p;
8371    
8372     - kiocb_set_cancel_fn(kiocb, ffs_aio_cancel);
8373     + if (p->aio)
8374     + kiocb_set_cancel_fn(kiocb, ffs_aio_cancel);
8375    
8376     res = ffs_epfile_io(kiocb->ki_filp, p);
8377     if (res == -EIOCBQUEUED)
8378     @@ -968,7 +969,8 @@ static ssize_t ffs_epfile_read_iter(struct kiocb *kiocb, struct iov_iter *to)
8379    
8380     kiocb->private = p;
8381    
8382     - kiocb_set_cancel_fn(kiocb, ffs_aio_cancel);
8383     + if (p->aio)
8384     + kiocb_set_cancel_fn(kiocb, ffs_aio_cancel);
8385    
8386     res = ffs_epfile_io(kiocb->ki_filp, p);
8387     if (res == -EIOCBQUEUED)
8388     diff --git a/drivers/usb/gadget/function/f_mass_storage.c b/drivers/usb/gadget/function/f_mass_storage.c
8389     index 3cc109f3c9c8..15c307155037 100644
8390     --- a/drivers/usb/gadget/function/f_mass_storage.c
8391     +++ b/drivers/usb/gadget/function/f_mass_storage.c
8392     @@ -2786,7 +2786,7 @@ int fsg_common_set_nluns(struct fsg_common *common, int nluns)
8393     return -EINVAL;
8394     }
8395    
8396     - curlun = kcalloc(nluns, sizeof(*curlun), GFP_KERNEL);
8397     + curlun = kcalloc(FSG_MAX_LUNS, sizeof(*curlun), GFP_KERNEL);
8398     if (unlikely(!curlun))
8399     return -ENOMEM;
8400    
8401     @@ -2796,8 +2796,6 @@ int fsg_common_set_nluns(struct fsg_common *common, int nluns)
8402     common->luns = curlun;
8403     common->nluns = nluns;
8404    
8405     - pr_info("Number of LUNs=%d\n", common->nluns);
8406     -
8407     return 0;
8408     }
8409     EXPORT_SYMBOL_GPL(fsg_common_set_nluns);
8410     @@ -3563,14 +3561,26 @@ static struct usb_function *fsg_alloc(struct usb_function_instance *fi)
8411     struct fsg_opts *opts = fsg_opts_from_func_inst(fi);
8412     struct fsg_common *common = opts->common;
8413     struct fsg_dev *fsg;
8414     + unsigned nluns, i;
8415    
8416     fsg = kzalloc(sizeof(*fsg), GFP_KERNEL);
8417     if (unlikely(!fsg))
8418     return ERR_PTR(-ENOMEM);
8419    
8420     mutex_lock(&opts->lock);
8421     + if (!opts->refcnt) {
8422     + for (nluns = i = 0; i < FSG_MAX_LUNS; ++i)
8423     + if (common->luns[i])
8424     + nluns = i + 1;
8425     + if (!nluns)
8426     + pr_warn("No LUNS defined, continuing anyway\n");
8427     + else
8428     + common->nluns = nluns;
8429     + pr_info("Number of LUNs=%u\n", common->nluns);
8430     + }
8431     opts->refcnt++;
8432     mutex_unlock(&opts->lock);
8433     +
8434     fsg->function.name = FSG_DRIVER_DESC;
8435     fsg->function.bind = fsg_bind;
8436     fsg->function.unbind = fsg_unbind;
8437     diff --git a/drivers/usb/gadget/udc/mv_udc_core.c b/drivers/usb/gadget/udc/mv_udc_core.c
8438     index d32160d6463f..5da37c957b53 100644
8439     --- a/drivers/usb/gadget/udc/mv_udc_core.c
8440     +++ b/drivers/usb/gadget/udc/mv_udc_core.c
8441     @@ -2167,7 +2167,7 @@ static int mv_udc_probe(struct platform_device *pdev)
8442     return -ENODEV;
8443     }
8444    
8445     - udc->phy_regs = ioremap(r->start, resource_size(r));
8446     + udc->phy_regs = devm_ioremap(&pdev->dev, r->start, resource_size(r));
8447     if (udc->phy_regs == NULL) {
8448     dev_err(&pdev->dev, "failed to map phy I/O memory\n");
8449     return -EBUSY;
8450     diff --git a/drivers/usb/host/ohci-q.c b/drivers/usb/host/ohci-q.c
8451     index 1463c398d322..fe1d5fc7da2d 100644
8452     --- a/drivers/usb/host/ohci-q.c
8453     +++ b/drivers/usb/host/ohci-q.c
8454     @@ -980,10 +980,6 @@ rescan_all:
8455     int completed, modified;
8456     __hc32 *prev;
8457    
8458     - /* Is this ED already invisible to the hardware? */
8459     - if (ed->state == ED_IDLE)
8460     - goto ed_idle;
8461     -
8462     /* only take off EDs that the HC isn't using, accounting for
8463     * frame counter wraps and EDs with partially retired TDs
8464     */
8465     @@ -1011,12 +1007,10 @@ skip_ed:
8466     }
8467    
8468     /* ED's now officially unlinked, hc doesn't see */
8469     - ed->state = ED_IDLE;
8470     ed->hwHeadP &= ~cpu_to_hc32(ohci, ED_H);
8471     ed->hwNextED = 0;
8472     wmb();
8473     ed->hwINFO &= ~cpu_to_hc32(ohci, ED_SKIP | ED_DEQUEUE);
8474     -ed_idle:
8475    
8476     /* reentrancy: if we drop the schedule lock, someone might
8477     * have modified this list. normally it's just prepending
8478     @@ -1087,6 +1081,7 @@ rescan_this:
8479     if (list_empty(&ed->td_list)) {
8480     *last = ed->ed_next;
8481     ed->ed_next = NULL;
8482     + ed->state = ED_IDLE;
8483     list_del(&ed->in_use_list);
8484     } else if (ohci->rh_state == OHCI_RH_RUNNING) {
8485     *last = ed->ed_next;
8486     diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
8487     index f8336408ef07..3e442f77a2b9 100644
8488     --- a/drivers/usb/host/xhci-mem.c
8489     +++ b/drivers/usb/host/xhci-mem.c
8490     @@ -1427,10 +1427,10 @@ int xhci_endpoint_init(struct xhci_hcd *xhci,
8491     /* Attempt to use the ring cache */
8492     if (virt_dev->num_rings_cached == 0)
8493     return -ENOMEM;
8494     + virt_dev->num_rings_cached--;
8495     virt_dev->eps[ep_index].new_ring =
8496     virt_dev->ring_cache[virt_dev->num_rings_cached];
8497     virt_dev->ring_cache[virt_dev->num_rings_cached] = NULL;
8498     - virt_dev->num_rings_cached--;
8499     xhci_reinit_cached_ring(xhci, virt_dev->eps[ep_index].new_ring,
8500     1, type);
8501     }
8502     diff --git a/drivers/usb/musb/musb_virthub.c b/drivers/usb/musb/musb_virthub.c
8503     index 86c4b533e90b..4731baca377f 100644
8504     --- a/drivers/usb/musb/musb_virthub.c
8505     +++ b/drivers/usb/musb/musb_virthub.c
8506     @@ -273,9 +273,7 @@ static int musb_has_gadget(struct musb *musb)
8507     #ifdef CONFIG_USB_MUSB_HOST
8508     return 1;
8509     #else
8510     - if (musb->port_mode == MUSB_PORT_MODE_HOST)
8511     - return 1;
8512     - return musb->g.dev.driver != NULL;
8513     + return musb->port_mode == MUSB_PORT_MODE_HOST;
8514     #endif
8515     }
8516    
8517     diff --git a/drivers/usb/phy/phy-mxs-usb.c b/drivers/usb/phy/phy-mxs-usb.c
8518     index 8f7cb068d29b..3fcc0483a081 100644
8519     --- a/drivers/usb/phy/phy-mxs-usb.c
8520     +++ b/drivers/usb/phy/phy-mxs-usb.c
8521     @@ -217,6 +217,9 @@ static bool mxs_phy_get_vbus_status(struct mxs_phy *mxs_phy)
8522     {
8523     unsigned int vbus_value;
8524    
8525     + if (!mxs_phy->regmap_anatop)
8526     + return false;
8527     +
8528     if (mxs_phy->port_id == 0)
8529     regmap_read(mxs_phy->regmap_anatop,
8530     ANADIG_USB1_VBUS_DET_STAT,
8531     diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
8532     index ffd739e31bfc..eac7ccaa3c85 100644
8533     --- a/drivers/usb/serial/cp210x.c
8534     +++ b/drivers/usb/serial/cp210x.c
8535     @@ -187,6 +187,7 @@ static const struct usb_device_id id_table[] = {
8536     { USB_DEVICE(0x1FB9, 0x0602) }, /* Lake Shore Model 648 Magnet Power Supply */
8537     { USB_DEVICE(0x1FB9, 0x0700) }, /* Lake Shore Model 737 VSM Controller */
8538     { USB_DEVICE(0x1FB9, 0x0701) }, /* Lake Shore Model 776 Hall Matrix */
8539     + { USB_DEVICE(0x2626, 0xEA60) }, /* Aruba Networks 7xxx USB Serial Console */
8540     { USB_DEVICE(0x3195, 0xF190) }, /* Link Instruments MSO-19 */
8541     { USB_DEVICE(0x3195, 0xF280) }, /* Link Instruments MSO-28 */
8542     { USB_DEVICE(0x3195, 0xF281) }, /* Link Instruments MSO-28 */
8543     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
8544     index f0c0c53359ad..19b85ee98a72 100644
8545     --- a/drivers/usb/serial/option.c
8546     +++ b/drivers/usb/serial/option.c
8547     @@ -1765,6 +1765,7 @@ static const struct usb_device_id option_ids[] = {
8548     { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x00, 0x00) },
8549     { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* D-Link DWM-152/C1 */
8550     { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/C1 */
8551     + { USB_DEVICE_INTERFACE_CLASS(0x2020, 0x4000, 0xff) }, /* OLICARD300 - MT6225 */
8552     { USB_DEVICE(INOVIA_VENDOR_ID, INOVIA_SEW858) },
8553     { USB_DEVICE(VIATELECOM_VENDOR_ID, VIATELECOM_PRODUCT_CDS7) },
8554     { } /* Terminating entry */
8555     diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
8556     index 529066bbc7e8..46f1f13b41f1 100644
8557     --- a/drivers/usb/serial/usb-serial.c
8558     +++ b/drivers/usb/serial/usb-serial.c
8559     @@ -1306,6 +1306,7 @@ static void __exit usb_serial_exit(void)
8560     tty_unregister_driver(usb_serial_tty_driver);
8561     put_tty_driver(usb_serial_tty_driver);
8562     bus_unregister(&usb_serial_bus_type);
8563     + idr_destroy(&serial_minors);
8564     }
8565    
8566    
8567     diff --git a/drivers/w1/slaves/w1_therm.c b/drivers/w1/slaves/w1_therm.c
8568     index 1f11a20a8ab9..55eb86c9e214 100644
8569     --- a/drivers/w1/slaves/w1_therm.c
8570     +++ b/drivers/w1/slaves/w1_therm.c
8571     @@ -59,16 +59,32 @@ MODULE_ALIAS("w1-family-" __stringify(W1_THERM_DS28EA00));
8572     static int w1_strong_pullup = 1;
8573     module_param_named(strong_pullup, w1_strong_pullup, int, 0);
8574    
8575     +struct w1_therm_family_data {
8576     + uint8_t rom[9];
8577     + atomic_t refcnt;
8578     +};
8579     +
8580     +/* return the address of the refcnt in the family data */
8581     +#define THERM_REFCNT(family_data) \
8582     + (&((struct w1_therm_family_data*)family_data)->refcnt)
8583     +
8584     static int w1_therm_add_slave(struct w1_slave *sl)
8585     {
8586     - sl->family_data = kzalloc(9, GFP_KERNEL);
8587     + sl->family_data = kzalloc(sizeof(struct w1_therm_family_data),
8588     + GFP_KERNEL);
8589     if (!sl->family_data)
8590     return -ENOMEM;
8591     + atomic_set(THERM_REFCNT(sl->family_data), 1);
8592     return 0;
8593     }
8594    
8595     static void w1_therm_remove_slave(struct w1_slave *sl)
8596     {
8597     + int refcnt = atomic_sub_return(1, THERM_REFCNT(sl->family_data));
8598     + while(refcnt) {
8599     + msleep(1000);
8600     + refcnt = atomic_read(THERM_REFCNT(sl->family_data));
8601     + }
8602     kfree(sl->family_data);
8603     sl->family_data = NULL;
8604     }
8605     @@ -194,13 +210,22 @@ static ssize_t w1_slave_show(struct device *device,
8606     struct w1_slave *sl = dev_to_w1_slave(device);
8607     struct w1_master *dev = sl->master;
8608     u8 rom[9], crc, verdict, external_power;
8609     - int i, max_trying = 10;
8610     + int i, ret, max_trying = 10;
8611     ssize_t c = PAGE_SIZE;
8612     + u8 *family_data = sl->family_data;
8613     +
8614     + ret = mutex_lock_interruptible(&dev->bus_mutex);
8615     + if (ret != 0)
8616     + goto post_unlock;
8617    
8618     - i = mutex_lock_interruptible(&dev->bus_mutex);
8619     - if (i != 0)
8620     - return i;
8621     + if(!sl->family_data)
8622     + {
8623     + ret = -ENODEV;
8624     + goto pre_unlock;
8625     + }
8626    
8627     + /* prevent the slave from going away in sleep */
8628     + atomic_inc(THERM_REFCNT(family_data));
8629     memset(rom, 0, sizeof(rom));
8630    
8631     while (max_trying--) {
8632     @@ -230,17 +255,19 @@ static ssize_t w1_slave_show(struct device *device,
8633     mutex_unlock(&dev->bus_mutex);
8634    
8635     sleep_rem = msleep_interruptible(tm);
8636     - if (sleep_rem != 0)
8637     - return -EINTR;
8638     + if (sleep_rem != 0) {
8639     + ret = -EINTR;
8640     + goto post_unlock;
8641     + }
8642    
8643     - i = mutex_lock_interruptible(&dev->bus_mutex);
8644     - if (i != 0)
8645     - return i;
8646     + ret = mutex_lock_interruptible(&dev->bus_mutex);
8647     + if (ret != 0)
8648     + goto post_unlock;
8649     } else if (!w1_strong_pullup) {
8650     sleep_rem = msleep_interruptible(tm);
8651     if (sleep_rem != 0) {
8652     - mutex_unlock(&dev->bus_mutex);
8653     - return -EINTR;
8654     + ret = -EINTR;
8655     + goto pre_unlock;
8656     }
8657     }
8658    
8659     @@ -269,19 +296,24 @@ static ssize_t w1_slave_show(struct device *device,
8660     c -= snprintf(buf + PAGE_SIZE - c, c, ": crc=%02x %s\n",
8661     crc, (verdict) ? "YES" : "NO");
8662     if (verdict)
8663     - memcpy(sl->family_data, rom, sizeof(rom));
8664     + memcpy(family_data, rom, sizeof(rom));
8665     else
8666     dev_warn(device, "Read failed CRC check\n");
8667    
8668     for (i = 0; i < 9; ++i)
8669     c -= snprintf(buf + PAGE_SIZE - c, c, "%02x ",
8670     - ((u8 *)sl->family_data)[i]);
8671     + ((u8 *)family_data)[i]);
8672    
8673     c -= snprintf(buf + PAGE_SIZE - c, c, "t=%d\n",
8674     w1_convert_temp(rom, sl->family->fid));
8675     + ret = PAGE_SIZE - c;
8676     +
8677     +pre_unlock:
8678     mutex_unlock(&dev->bus_mutex);
8679    
8680     - return PAGE_SIZE - c;
8681     +post_unlock:
8682     + atomic_dec(THERM_REFCNT(family_data));
8683     + return ret;
8684     }
8685    
8686     static int __init w1_therm_init(void)
8687     diff --git a/drivers/watchdog/omap_wdt.c b/drivers/watchdog/omap_wdt.c
8688     index 1e6be9e40577..c9c97dacf452 100644
8689     --- a/drivers/watchdog/omap_wdt.c
8690     +++ b/drivers/watchdog/omap_wdt.c
8691     @@ -132,6 +132,13 @@ static int omap_wdt_start(struct watchdog_device *wdog)
8692    
8693     pm_runtime_get_sync(wdev->dev);
8694    
8695     + /*
8696     + * Make sure the watchdog is disabled. This is unfortunately required
8697     + * because writing to various registers with the watchdog running has no
8698     + * effect.
8699     + */
8700     + omap_wdt_disable(wdev);
8701     +
8702     /* initialize prescaler */
8703     while (readl_relaxed(base + OMAP_WATCHDOG_WPS) & 0x01)
8704     cpu_relax();
8705     diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c
8706     index 703342e309f5..53f1e8a21707 100644
8707     --- a/fs/9p/vfs_inode.c
8708     +++ b/fs/9p/vfs_inode.c
8709     @@ -540,8 +540,7 @@ static struct inode *v9fs_qid_iget(struct super_block *sb,
8710     unlock_new_inode(inode);
8711     return inode;
8712     error:
8713     - unlock_new_inode(inode);
8714     - iput(inode);
8715     + iget_failed(inode);
8716     return ERR_PTR(retval);
8717    
8718     }
8719     diff --git a/fs/9p/vfs_inode_dotl.c b/fs/9p/vfs_inode_dotl.c
8720     index 9861c7c951a6..4d3ecfb55fcf 100644
8721     --- a/fs/9p/vfs_inode_dotl.c
8722     +++ b/fs/9p/vfs_inode_dotl.c
8723     @@ -149,8 +149,7 @@ static struct inode *v9fs_qid_iget_dotl(struct super_block *sb,
8724     unlock_new_inode(inode);
8725     return inode;
8726     error:
8727     - unlock_new_inode(inode);
8728     - iput(inode);
8729     + iget_failed(inode);
8730     return ERR_PTR(retval);
8731    
8732     }
8733     diff --git a/fs/btrfs/inode-map.c b/fs/btrfs/inode-map.c
8734     index f6a596d5a637..d4a582ac3f73 100644
8735     --- a/fs/btrfs/inode-map.c
8736     +++ b/fs/btrfs/inode-map.c
8737     @@ -246,6 +246,7 @@ void btrfs_unpin_free_ino(struct btrfs_root *root)
8738     {
8739     struct btrfs_free_space_ctl *ctl = root->free_ino_ctl;
8740     struct rb_root *rbroot = &root->free_ino_pinned->free_space_offset;
8741     + spinlock_t *rbroot_lock = &root->free_ino_pinned->tree_lock;
8742     struct btrfs_free_space *info;
8743     struct rb_node *n;
8744     u64 count;
8745     @@ -254,24 +255,30 @@ void btrfs_unpin_free_ino(struct btrfs_root *root)
8746     return;
8747    
8748     while (1) {
8749     + bool add_to_ctl = true;
8750     +
8751     + spin_lock(rbroot_lock);
8752     n = rb_first(rbroot);
8753     - if (!n)
8754     + if (!n) {
8755     + spin_unlock(rbroot_lock);
8756     break;
8757     + }
8758    
8759     info = rb_entry(n, struct btrfs_free_space, offset_index);
8760     BUG_ON(info->bitmap); /* Logic error */
8761    
8762     if (info->offset > root->ino_cache_progress)
8763     - goto free;
8764     + add_to_ctl = false;
8765     else if (info->offset + info->bytes > root->ino_cache_progress)
8766     count = root->ino_cache_progress - info->offset + 1;
8767     else
8768     count = info->bytes;
8769    
8770     - __btrfs_add_free_space(ctl, info->offset, count);
8771     -free:
8772     rb_erase(&info->offset_index, rbroot);
8773     - kfree(info);
8774     + spin_unlock(rbroot_lock);
8775     + if (add_to_ctl)
8776     + __btrfs_add_free_space(ctl, info->offset, count);
8777     + kmem_cache_free(btrfs_free_space_cachep, info);
8778     }
8779     }
8780    
8781     diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
8782     index 1c22c6518504..37d456a9a3b8 100644
8783     --- a/fs/btrfs/ioctl.c
8784     +++ b/fs/btrfs/ioctl.c
8785     @@ -2413,8 +2413,6 @@ static noinline int btrfs_ioctl_snap_destroy(struct file *file,
8786     goto out_unlock_inode;
8787     }
8788    
8789     - d_invalidate(dentry);
8790     -
8791     down_write(&root->fs_info->subvol_sem);
8792    
8793     err = may_destroy_subvol(dest);
8794     @@ -2508,7 +2506,7 @@ out_up_write:
8795     out_unlock_inode:
8796     mutex_unlock(&inode->i_mutex);
8797     if (!err) {
8798     - shrink_dcache_sb(root->fs_info->sb);
8799     + d_invalidate(dentry);
8800     btrfs_invalidate_inodes(dest);
8801     d_delete(dentry);
8802     ASSERT(dest->send_in_progress == 0);
8803     @@ -2940,7 +2938,7 @@ out_unlock:
8804     static long btrfs_ioctl_file_extent_same(struct file *file,
8805     struct btrfs_ioctl_same_args __user *argp)
8806     {
8807     - struct btrfs_ioctl_same_args *same;
8808     + struct btrfs_ioctl_same_args *same = NULL;
8809     struct btrfs_ioctl_same_extent_info *info;
8810     struct inode *src = file_inode(file);
8811     u64 off;
8812     @@ -2970,6 +2968,7 @@ static long btrfs_ioctl_file_extent_same(struct file *file,
8813    
8814     if (IS_ERR(same)) {
8815     ret = PTR_ERR(same);
8816     + same = NULL;
8817     goto out;
8818     }
8819    
8820     @@ -3040,6 +3039,7 @@ static long btrfs_ioctl_file_extent_same(struct file *file,
8821    
8822     out:
8823     mnt_drop_write_file(file);
8824     + kfree(same);
8825     return ret;
8826     }
8827    
8828     @@ -3434,6 +3434,20 @@ process_slot:
8829     u64 trim = 0;
8830     u64 aligned_end = 0;
8831    
8832     + /*
8833     + * Don't copy an inline extent into an offset
8834     + * greater than zero. Having an inline extent
8835     + * at such an offset results in chaos as btrfs
8836     + * isn't prepared for such cases. Just skip
8837     + * this case for the same reasons as commented
8838     + * at btrfs_ioctl_clone().
8839     + */
8840     + if (last_dest_end > 0) {
8841     + ret = -EOPNOTSUPP;
8842     + btrfs_end_transaction(trans, root);
8843     + goto out;
8844     + }
8845     +
8846     if (off > key.offset) {
8847     skip = off - key.offset;
8848     new_key.offset += skip;
8849     diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c
8850     index 5628e25250c0..94e909c5a503 100644
8851     --- a/fs/btrfs/transaction.c
8852     +++ b/fs/btrfs/transaction.c
8853     @@ -758,7 +758,7 @@ static int __btrfs_end_transaction(struct btrfs_trans_handle *trans,
8854    
8855     if (!list_empty(&trans->ordered)) {
8856     spin_lock(&info->trans_lock);
8857     - list_splice(&trans->ordered, &cur_trans->pending_ordered);
8858     + list_splice_init(&trans->ordered, &cur_trans->pending_ordered);
8859     spin_unlock(&info->trans_lock);
8860     }
8861    
8862     @@ -1848,7 +1848,7 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans,
8863     }
8864    
8865     spin_lock(&root->fs_info->trans_lock);
8866     - list_splice(&trans->ordered, &cur_trans->pending_ordered);
8867     + list_splice_init(&trans->ordered, &cur_trans->pending_ordered);
8868     if (cur_trans->state >= TRANS_STATE_COMMIT_START) {
8869     spin_unlock(&root->fs_info->trans_lock);
8870     atomic_inc(&cur_trans->use_count);
8871     diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
8872     index d04968374e9d..4920fceffacb 100644
8873     --- a/fs/btrfs/tree-log.c
8874     +++ b/fs/btrfs/tree-log.c
8875     @@ -4161,6 +4161,7 @@ static int btrfs_log_inode(struct btrfs_trans_handle *trans,
8876     u64 ino = btrfs_ino(inode);
8877     struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
8878     u64 logged_isize = 0;
8879     + bool need_log_inode_item = true;
8880    
8881     path = btrfs_alloc_path();
8882     if (!path)
8883     @@ -4269,11 +4270,6 @@ static int btrfs_log_inode(struct btrfs_trans_handle *trans,
8884     } else {
8885     if (inode_only == LOG_INODE_ALL)
8886     fast_search = true;
8887     - ret = log_inode_item(trans, log, dst_path, inode);
8888     - if (ret) {
8889     - err = ret;
8890     - goto out_unlock;
8891     - }
8892     goto log_extents;
8893     }
8894    
8895     @@ -4296,6 +4292,9 @@ again:
8896     if (min_key.type > max_key.type)
8897     break;
8898    
8899     + if (min_key.type == BTRFS_INODE_ITEM_KEY)
8900     + need_log_inode_item = false;
8901     +
8902     src = path->nodes[0];
8903     if (ins_nr && ins_start_slot + ins_nr == path->slots[0]) {
8904     ins_nr++;
8905     @@ -4366,6 +4365,11 @@ next_slot:
8906     log_extents:
8907     btrfs_release_path(path);
8908     btrfs_release_path(dst_path);
8909     + if (need_log_inode_item) {
8910     + err = log_inode_item(trans, log, dst_path, inode);
8911     + if (err)
8912     + goto out_unlock;
8913     + }
8914     if (fast_search) {
8915     /*
8916     * Some ordered extents started by fsync might have completed
8917     diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
8918     index e003a1e81dc3..87ba10d1d3bc 100644
8919     --- a/fs/ext4/extents.c
8920     +++ b/fs/ext4/extents.c
8921     @@ -503,7 +503,7 @@ __read_extent_tree_block(const char *function, unsigned int line,
8922     struct buffer_head *bh;
8923     int err;
8924    
8925     - bh = sb_getblk(inode->i_sb, pblk);
8926     + bh = sb_getblk_gfp(inode->i_sb, pblk, __GFP_MOVABLE | GFP_NOFS);
8927     if (unlikely(!bh))
8928     return ERR_PTR(-ENOMEM);
8929    
8930     @@ -1088,7 +1088,7 @@ static int ext4_ext_split(handle_t *handle, struct inode *inode,
8931     err = -EIO;
8932     goto cleanup;
8933     }
8934     - bh = sb_getblk(inode->i_sb, newblock);
8935     + bh = sb_getblk_gfp(inode->i_sb, newblock, __GFP_MOVABLE | GFP_NOFS);
8936     if (unlikely(!bh)) {
8937     err = -ENOMEM;
8938     goto cleanup;
8939     @@ -1282,7 +1282,7 @@ static int ext4_ext_grow_indepth(handle_t *handle, struct inode *inode,
8940     if (newblock == 0)
8941     return err;
8942    
8943     - bh = sb_getblk(inode->i_sb, newblock);
8944     + bh = sb_getblk_gfp(inode->i_sb, newblock, __GFP_MOVABLE | GFP_NOFS);
8945     if (unlikely(!bh))
8946     return -ENOMEM;
8947     lock_buffer(bh);
8948     diff --git a/fs/ext4/indirect.c b/fs/ext4/indirect.c
8949     index 958824019509..94ae6874c2cb 100644
8950     --- a/fs/ext4/indirect.c
8951     +++ b/fs/ext4/indirect.c
8952     @@ -565,7 +565,7 @@ int ext4_ind_map_blocks(handle_t *handle, struct inode *inode,
8953     EXT4_FEATURE_RO_COMPAT_BIGALLOC)) {
8954     EXT4_ERROR_INODE(inode, "Can't allocate blocks for "
8955     "non-extent mapped inodes with bigalloc");
8956     - return -ENOSPC;
8957     + return -EUCLEAN;
8958     }
8959    
8960     /* Set up for the direct block allocation */
8961     diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
8962     index 0554b0b5957b..966c614822cc 100644
8963     --- a/fs/ext4/inode.c
8964     +++ b/fs/ext4/inode.c
8965     @@ -1342,7 +1342,7 @@ static void ext4_da_page_release_reservation(struct page *page,
8966     unsigned int offset,
8967     unsigned int length)
8968     {
8969     - int to_release = 0;
8970     + int to_release = 0, contiguous_blks = 0;
8971     struct buffer_head *head, *bh;
8972     unsigned int curr_off = 0;
8973     struct inode *inode = page->mapping->host;
8974     @@ -1363,14 +1363,23 @@ static void ext4_da_page_release_reservation(struct page *page,
8975    
8976     if ((offset <= curr_off) && (buffer_delay(bh))) {
8977     to_release++;
8978     + contiguous_blks++;
8979     clear_buffer_delay(bh);
8980     + } else if (contiguous_blks) {
8981     + lblk = page->index <<
8982     + (PAGE_CACHE_SHIFT - inode->i_blkbits);
8983     + lblk += (curr_off >> inode->i_blkbits) -
8984     + contiguous_blks;
8985     + ext4_es_remove_extent(inode, lblk, contiguous_blks);
8986     + contiguous_blks = 0;
8987     }
8988     curr_off = next_off;
8989     } while ((bh = bh->b_this_page) != head);
8990    
8991     - if (to_release) {
8992     + if (contiguous_blks) {
8993     lblk = page->index << (PAGE_CACHE_SHIFT - inode->i_blkbits);
8994     - ext4_es_remove_extent(inode, lblk, to_release);
8995     + lblk += (curr_off >> inode->i_blkbits) - contiguous_blks;
8996     + ext4_es_remove_extent(inode, lblk, contiguous_blks);
8997     }
8998    
8999     /* If we have released all the blocks belonging to a cluster, then we
9000     @@ -1701,19 +1710,32 @@ static int __ext4_journalled_writepage(struct page *page,
9001     ext4_walk_page_buffers(handle, page_bufs, 0, len,
9002     NULL, bget_one);
9003     }
9004     - /* As soon as we unlock the page, it can go away, but we have
9005     - * references to buffers so we are safe */
9006     + /*
9007     + * We need to release the page lock before we start the
9008     + * journal, so grab a reference so the page won't disappear
9009     + * out from under us.
9010     + */
9011     + get_page(page);
9012     unlock_page(page);
9013    
9014     handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE,
9015     ext4_writepage_trans_blocks(inode));
9016     if (IS_ERR(handle)) {
9017     ret = PTR_ERR(handle);
9018     - goto out;
9019     + put_page(page);
9020     + goto out_no_pagelock;
9021     }
9022     -
9023     BUG_ON(!ext4_handle_valid(handle));
9024    
9025     + lock_page(page);
9026     + put_page(page);
9027     + if (page->mapping != mapping) {
9028     + /* The page got truncated from under us */
9029     + ext4_journal_stop(handle);
9030     + ret = 0;
9031     + goto out;
9032     + }
9033     +
9034     if (inline_data) {
9035     BUFFER_TRACE(inode_bh, "get write access");
9036     ret = ext4_journal_get_write_access(handle, inode_bh);
9037     @@ -1739,6 +1761,8 @@ static int __ext4_journalled_writepage(struct page *page,
9038     NULL, bput_one);
9039     ext4_set_inode_state(inode, EXT4_STATE_JDATA);
9040     out:
9041     + unlock_page(page);
9042     +out_no_pagelock:
9043     brelse(inode_bh);
9044     return ret;
9045     }
9046     @@ -4345,7 +4369,12 @@ static void ext4_update_other_inodes_time(struct super_block *sb,
9047     int inode_size = EXT4_INODE_SIZE(sb);
9048    
9049     oi.orig_ino = orig_ino;
9050     - ino = (orig_ino & ~(inodes_per_block - 1)) + 1;
9051     + /*
9052     + * Calculate the first inode in the inode table block. Inode
9053     + * numbers are one-based. That is, the first inode in a block
9054     + * (assuming 4k blocks and 256 byte inodes) is (n*16 + 1).
9055     + */
9056     + ino = ((orig_ino - 1) & ~(inodes_per_block - 1)) + 1;
9057     for (i = 0; i < inodes_per_block; i++, ino++, buf += inode_size) {
9058     if (ino == orig_ino)
9059     continue;
9060     diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
9061     index 8d1e60214ef0..41260489d3bc 100644
9062     --- a/fs/ext4/mballoc.c
9063     +++ b/fs/ext4/mballoc.c
9064     @@ -4800,18 +4800,12 @@ do_more:
9065     /*
9066     * blocks being freed are metadata. these blocks shouldn't
9067     * be used until this transaction is committed
9068     + *
9069     + * We use __GFP_NOFAIL because ext4_free_blocks() is not allowed
9070     + * to fail.
9071     */
9072     - retry:
9073     - new_entry = kmem_cache_alloc(ext4_free_data_cachep, GFP_NOFS);
9074     - if (!new_entry) {
9075     - /*
9076     - * We use a retry loop because
9077     - * ext4_free_blocks() is not allowed to fail.
9078     - */
9079     - cond_resched();
9080     - congestion_wait(BLK_RW_ASYNC, HZ/50);
9081     - goto retry;
9082     - }
9083     + new_entry = kmem_cache_alloc(ext4_free_data_cachep,
9084     + GFP_NOFS|__GFP_NOFAIL);
9085     new_entry->efd_start_cluster = bit;
9086     new_entry->efd_group = block_group;
9087     new_entry->efd_count = count_clusters;
9088     diff --git a/fs/ext4/migrate.c b/fs/ext4/migrate.c
9089     index b52374e42102..6163ad21cb0e 100644
9090     --- a/fs/ext4/migrate.c
9091     +++ b/fs/ext4/migrate.c
9092     @@ -620,6 +620,7 @@ int ext4_ind_migrate(struct inode *inode)
9093     struct ext4_inode_info *ei = EXT4_I(inode);
9094     struct ext4_extent *ex;
9095     unsigned int i, len;
9096     + ext4_lblk_t start, end;
9097     ext4_fsblk_t blk;
9098     handle_t *handle;
9099     int ret;
9100     @@ -633,6 +634,14 @@ int ext4_ind_migrate(struct inode *inode)
9101     EXT4_FEATURE_RO_COMPAT_BIGALLOC))
9102     return -EOPNOTSUPP;
9103    
9104     + /*
9105     + * In order to get correct extent info, force all delayed allocation
9106     + * blocks to be allocated, otherwise delayed allocation blocks may not
9107     + * be reflected and bypass the checks on extent header.
9108     + */
9109     + if (test_opt(inode->i_sb, DELALLOC))
9110     + ext4_alloc_da_blocks(inode);
9111     +
9112     handle = ext4_journal_start(inode, EXT4_HT_MIGRATE, 1);
9113     if (IS_ERR(handle))
9114     return PTR_ERR(handle);
9115     @@ -650,11 +659,13 @@ int ext4_ind_migrate(struct inode *inode)
9116     goto errout;
9117     }
9118     if (eh->eh_entries == 0)
9119     - blk = len = 0;
9120     + blk = len = start = end = 0;
9121     else {
9122     len = le16_to_cpu(ex->ee_len);
9123     blk = ext4_ext_pblock(ex);
9124     - if (len > EXT4_NDIR_BLOCKS) {
9125     + start = le32_to_cpu(ex->ee_block);
9126     + end = start + len - 1;
9127     + if (end >= EXT4_NDIR_BLOCKS) {
9128     ret = -EOPNOTSUPP;
9129     goto errout;
9130     }
9131     @@ -662,7 +673,7 @@ int ext4_ind_migrate(struct inode *inode)
9132    
9133     ext4_clear_inode_flag(inode, EXT4_INODE_EXTENTS);
9134     memset(ei->i_data, 0, sizeof(ei->i_data));
9135     - for (i=0; i < len; i++)
9136     + for (i = start; i <= end; i++)
9137     ei->i_data[i] = cpu_to_le32(blk++);
9138     ext4_mark_inode_dirty(handle, inode);
9139     errout:
9140     diff --git a/fs/ext4/super.c b/fs/ext4/super.c
9141     index ca9d4a2fed41..ca12affdba96 100644
9142     --- a/fs/ext4/super.c
9143     +++ b/fs/ext4/super.c
9144     @@ -807,6 +807,7 @@ static void ext4_put_super(struct super_block *sb)
9145     dump_orphan_list(sb, sbi);
9146     J_ASSERT(list_empty(&sbi->s_orphan));
9147    
9148     + sync_blockdev(sb->s_bdev);
9149     invalidate_bdev(sb->s_bdev);
9150     if (sbi->journal_bdev && sbi->journal_bdev != sb->s_bdev) {
9151     /*
9152     @@ -4943,6 +4944,9 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data)
9153     set_task_ioprio(sbi->s_journal->j_task, journal_ioprio);
9154     }
9155    
9156     + if (*flags & MS_LAZYTIME)
9157     + sb->s_flags |= MS_LAZYTIME;
9158     +
9159     if ((*flags & MS_RDONLY) != (sb->s_flags & MS_RDONLY)) {
9160     if (sbi->s_mount_flags & EXT4_MF_FS_ABORTED) {
9161     err = -EROFS;
9162     diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c
9163     index 18dacf9ed8ff..708d697113fc 100644
9164     --- a/fs/fuse/inode.c
9165     +++ b/fs/fuse/inode.c
9166     @@ -1026,6 +1026,7 @@ static int fuse_fill_super(struct super_block *sb, void *data, int silent)
9167     goto err_fput;
9168    
9169     fuse_conn_init(fc);
9170     + fc->release = fuse_free_conn;
9171    
9172     fc->dev = sb->s_dev;
9173     fc->sb = sb;
9174     @@ -1040,7 +1041,6 @@ static int fuse_fill_super(struct super_block *sb, void *data, int silent)
9175     fc->dont_mask = 1;
9176     sb->s_flags |= MS_POSIXACL;
9177    
9178     - fc->release = fuse_free_conn;
9179     fc->flags = d.flags;
9180     fc->user_id = d.user_id;
9181     fc->group_id = d.group_id;
9182     diff --git a/fs/hpfs/super.c b/fs/hpfs/super.c
9183     index 7cd00d3a7c9b..8685c655737f 100644
9184     --- a/fs/hpfs/super.c
9185     +++ b/fs/hpfs/super.c
9186     @@ -52,17 +52,20 @@ static void unmark_dirty(struct super_block *s)
9187     }
9188    
9189     /* Filesystem error... */
9190     -static char err_buf[1024];
9191     -
9192     void hpfs_error(struct super_block *s, const char *fmt, ...)
9193     {
9194     + struct va_format vaf;
9195     va_list args;
9196    
9197     va_start(args, fmt);
9198     - vsnprintf(err_buf, sizeof(err_buf), fmt, args);
9199     +
9200     + vaf.fmt = fmt;
9201     + vaf.va = &args;
9202     +
9203     + pr_err("filesystem error: %pV", &vaf);
9204     +
9205     va_end(args);
9206    
9207     - pr_err("filesystem error: %s", err_buf);
9208     if (!hpfs_sb(s)->sb_was_error) {
9209     if (hpfs_sb(s)->sb_err == 2) {
9210     pr_cont("; crashing the system because you wanted it\n");
9211     @@ -424,11 +427,14 @@ static int hpfs_remount_fs(struct super_block *s, int *flags, char *data)
9212     int o;
9213     struct hpfs_sb_info *sbi = hpfs_sb(s);
9214     char *new_opts = kstrdup(data, GFP_KERNEL);
9215     -
9216     +
9217     + if (!new_opts)
9218     + return -ENOMEM;
9219     +
9220     sync_filesystem(s);
9221    
9222     *flags |= MS_NOATIME;
9223     -
9224     +
9225     hpfs_lock(s);
9226     uid = sbi->sb_uid; gid = sbi->sb_gid;
9227     umask = 0777 & ~sbi->sb_mode;
9228     diff --git a/fs/jbd2/checkpoint.c b/fs/jbd2/checkpoint.c
9229     index 988b32ed4c87..4227dc4f7437 100644
9230     --- a/fs/jbd2/checkpoint.c
9231     +++ b/fs/jbd2/checkpoint.c
9232     @@ -390,7 +390,7 @@ int jbd2_cleanup_journal_tail(journal_t *journal)
9233     unsigned long blocknr;
9234    
9235     if (is_journal_aborted(journal))
9236     - return 1;
9237     + return -EIO;
9238    
9239     if (!jbd2_journal_get_log_tail(journal, &first_tid, &blocknr))
9240     return 1;
9241     @@ -405,10 +405,9 @@ int jbd2_cleanup_journal_tail(journal_t *journal)
9242     * jbd2_cleanup_journal_tail() doesn't get called all that often.
9243     */
9244     if (journal->j_flags & JBD2_BARRIER)
9245     - blkdev_issue_flush(journal->j_fs_dev, GFP_KERNEL, NULL);
9246     + blkdev_issue_flush(journal->j_fs_dev, GFP_NOFS, NULL);
9247    
9248     - __jbd2_update_log_tail(journal, first_tid, blocknr);
9249     - return 0;
9250     + return __jbd2_update_log_tail(journal, first_tid, blocknr);
9251     }
9252    
9253    
9254     diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c
9255     index b96bd8076b70..112fad9e1e20 100644
9256     --- a/fs/jbd2/journal.c
9257     +++ b/fs/jbd2/journal.c
9258     @@ -885,9 +885,10 @@ int jbd2_journal_get_log_tail(journal_t *journal, tid_t *tid,
9259     *
9260     * Requires j_checkpoint_mutex
9261     */
9262     -void __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block)
9263     +int __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block)
9264     {
9265     unsigned long freed;
9266     + int ret;
9267    
9268     BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex));
9269    
9270     @@ -897,7 +898,10 @@ void __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block)
9271     * space and if we lose sb update during power failure we'd replay
9272     * old transaction with possibly newly overwritten data.
9273     */
9274     - jbd2_journal_update_sb_log_tail(journal, tid, block, WRITE_FUA);
9275     + ret = jbd2_journal_update_sb_log_tail(journal, tid, block, WRITE_FUA);
9276     + if (ret)
9277     + goto out;
9278     +
9279     write_lock(&journal->j_state_lock);
9280     freed = block - journal->j_tail;
9281     if (block < journal->j_tail)
9282     @@ -913,6 +917,9 @@ void __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block)
9283     journal->j_tail_sequence = tid;
9284     journal->j_tail = block;
9285     write_unlock(&journal->j_state_lock);
9286     +
9287     +out:
9288     + return ret;
9289     }
9290    
9291     /*
9292     @@ -1331,7 +1338,7 @@ static int journal_reset(journal_t *journal)
9293     return jbd2_journal_start_thread(journal);
9294     }
9295    
9296     -static void jbd2_write_superblock(journal_t *journal, int write_op)
9297     +static int jbd2_write_superblock(journal_t *journal, int write_op)
9298     {
9299     struct buffer_head *bh = journal->j_sb_buffer;
9300     journal_superblock_t *sb = journal->j_superblock;
9301     @@ -1370,7 +1377,10 @@ static void jbd2_write_superblock(journal_t *journal, int write_op)
9302     printk(KERN_ERR "JBD2: Error %d detected when updating "
9303     "journal superblock for %s.\n", ret,
9304     journal->j_devname);
9305     + jbd2_journal_abort(journal, ret);
9306     }
9307     +
9308     + return ret;
9309     }
9310    
9311     /**
9312     @@ -1383,10 +1393,11 @@ static void jbd2_write_superblock(journal_t *journal, int write_op)
9313     * Update a journal's superblock information about log tail and write it to
9314     * disk, waiting for the IO to complete.
9315     */
9316     -void jbd2_journal_update_sb_log_tail(journal_t *journal, tid_t tail_tid,
9317     +int jbd2_journal_update_sb_log_tail(journal_t *journal, tid_t tail_tid,
9318     unsigned long tail_block, int write_op)
9319     {
9320     journal_superblock_t *sb = journal->j_superblock;
9321     + int ret;
9322    
9323     BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex));
9324     jbd_debug(1, "JBD2: updating superblock (start %lu, seq %u)\n",
9325     @@ -1395,13 +1406,18 @@ void jbd2_journal_update_sb_log_tail(journal_t *journal, tid_t tail_tid,
9326     sb->s_sequence = cpu_to_be32(tail_tid);
9327     sb->s_start = cpu_to_be32(tail_block);
9328    
9329     - jbd2_write_superblock(journal, write_op);
9330     + ret = jbd2_write_superblock(journal, write_op);
9331     + if (ret)
9332     + goto out;
9333    
9334     /* Log is no longer empty */
9335     write_lock(&journal->j_state_lock);
9336     WARN_ON(!sb->s_sequence);
9337     journal->j_flags &= ~JBD2_FLUSHED;
9338     write_unlock(&journal->j_state_lock);
9339     +
9340     +out:
9341     + return ret;
9342     }
9343    
9344     /**
9345     @@ -1950,7 +1966,14 @@ int jbd2_journal_flush(journal_t *journal)
9346     return -EIO;
9347    
9348     mutex_lock(&journal->j_checkpoint_mutex);
9349     - jbd2_cleanup_journal_tail(journal);
9350     + if (!err) {
9351     + err = jbd2_cleanup_journal_tail(journal);
9352     + if (err < 0) {
9353     + mutex_unlock(&journal->j_checkpoint_mutex);
9354     + goto out;
9355     + }
9356     + err = 0;
9357     + }
9358    
9359     /* Finally, mark the journal as really needing no recovery.
9360     * This sets s_start==0 in the underlying superblock, which is
9361     @@ -1966,7 +1989,8 @@ int jbd2_journal_flush(journal_t *journal)
9362     J_ASSERT(journal->j_head == journal->j_tail);
9363     J_ASSERT(journal->j_tail_sequence == journal->j_transaction_sequence);
9364     write_unlock(&journal->j_state_lock);
9365     - return 0;
9366     +out:
9367     + return err;
9368     }
9369    
9370     /**
9371     diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c
9372     index 7d05089e52d6..6f5f0f425e86 100644
9373     --- a/fs/nfs/flexfilelayout/flexfilelayout.c
9374     +++ b/fs/nfs/flexfilelayout/flexfilelayout.c
9375     @@ -631,7 +631,7 @@ static void ff_layout_reset_write(struct nfs_pgio_header *hdr, bool retry_pnfs)
9376     nfs_direct_set_resched_writes(hdr->dreq);
9377     /* fake unstable write to let common nfs resend pages */
9378     hdr->verf.committed = NFS_UNSTABLE;
9379     - hdr->good_bytes = 0;
9380     + hdr->good_bytes = hdr->args.count;
9381     }
9382     return;
9383     }
9384     diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c b/fs/nfs/flexfilelayout/flexfilelayoutdev.c
9385     index 77a2d026aa12..f13e1969eedd 100644
9386     --- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c
9387     +++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c
9388     @@ -324,7 +324,8 @@ static int ff_layout_update_mirror_cred(struct nfs4_ff_layout_mirror *mirror,
9389     __func__, PTR_ERR(cred));
9390     return PTR_ERR(cred);
9391     } else {
9392     - mirror->cred = cred;
9393     + if (cmpxchg(&mirror->cred, NULL, cred))
9394     + put_rpccred(cred);
9395     }
9396     }
9397     return 0;
9398     @@ -386,7 +387,7 @@ nfs4_ff_layout_prepare_ds(struct pnfs_layout_segment *lseg, u32 ds_idx,
9399     /* matching smp_wmb() in _nfs4_pnfs_v3/4_ds_connect */
9400     smp_rmb();
9401     if (ds->ds_clp)
9402     - goto out;
9403     + goto out_update_creds;
9404    
9405     flavor = nfs4_ff_layout_choose_authflavor(mirror);
9406    
9407     @@ -430,7 +431,7 @@ nfs4_ff_layout_prepare_ds(struct pnfs_layout_segment *lseg, u32 ds_idx,
9408     }
9409     }
9410     }
9411     -
9412     +out_update_creds:
9413     if (ff_layout_update_mirror_cred(mirror, ds))
9414     ds = NULL;
9415     out:
9416     diff --git a/fs/nfs/nfs3xdr.c b/fs/nfs/nfs3xdr.c
9417     index 53852a4bd88b..9b04c2e6fffc 100644
9418     --- a/fs/nfs/nfs3xdr.c
9419     +++ b/fs/nfs/nfs3xdr.c
9420     @@ -1342,7 +1342,7 @@ static void nfs3_xdr_enc_setacl3args(struct rpc_rqst *req,
9421     if (args->npages != 0)
9422     xdr_write_pages(xdr, args->pages, 0, args->len);
9423     else
9424     - xdr_reserve_space(xdr, NFS_ACL_INLINE_BUFSIZE);
9425     + xdr_reserve_space(xdr, args->len);
9426    
9427     error = nfsacl_encode(xdr->buf, base, args->inode,
9428     (args->mask & NFS_ACL) ?
9429     diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
9430     index 2782cfca2265..ddef1dc80cf7 100644
9431     --- a/fs/nfs/nfs4state.c
9432     +++ b/fs/nfs/nfs4state.c
9433     @@ -1482,6 +1482,8 @@ restart:
9434     spin_unlock(&state->state_lock);
9435     }
9436     nfs4_put_open_state(state);
9437     + clear_bit(NFS4CLNT_RECLAIM_NOGRACE,
9438     + &state->flags);
9439     spin_lock(&sp->so_lock);
9440     goto restart;
9441     }
9442     diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
9443     index 230606243be6..d47c188682b1 100644
9444     --- a/fs/nfs/pnfs.c
9445     +++ b/fs/nfs/pnfs.c
9446     @@ -1821,6 +1821,7 @@ int pnfs_write_done_resend_to_mds(struct nfs_pgio_header *hdr)
9447     /* Resend all requests through the MDS */
9448     nfs_pageio_init_write(&pgio, hdr->inode, FLUSH_STABLE, true,
9449     hdr->completion_ops);
9450     + set_bit(NFS_CONTEXT_RESEND_WRITES, &hdr->args.context->flags);
9451     return nfs_pageio_resend(&pgio, hdr);
9452     }
9453     EXPORT_SYMBOL_GPL(pnfs_write_done_resend_to_mds);
9454     @@ -1865,6 +1866,7 @@ pnfs_write_through_mds(struct nfs_pageio_descriptor *desc,
9455     mirror->pg_recoalesce = 1;
9456     }
9457     nfs_pgio_data_destroy(hdr);
9458     + hdr->release(hdr);
9459     }
9460    
9461     static enum pnfs_try_status
9462     @@ -1979,6 +1981,7 @@ pnfs_read_through_mds(struct nfs_pageio_descriptor *desc,
9463     mirror->pg_recoalesce = 1;
9464     }
9465     nfs_pgio_data_destroy(hdr);
9466     + hdr->release(hdr);
9467     }
9468    
9469     /*
9470     diff --git a/fs/nfs/write.c b/fs/nfs/write.c
9471     index dfc19f1575a1..daf355642845 100644
9472     --- a/fs/nfs/write.c
9473     +++ b/fs/nfs/write.c
9474     @@ -1289,6 +1289,7 @@ static void nfs_initiate_write(struct nfs_pgio_header *hdr,
9475     static void nfs_redirty_request(struct nfs_page *req)
9476     {
9477     nfs_mark_request_dirty(req);
9478     + set_bit(NFS_CONTEXT_RESEND_WRITES, &req->wb_context->flags);
9479     nfs_unlock_request(req);
9480     nfs_end_page_writeback(req);
9481     nfs_release_request(req);
9482     diff --git a/fs/overlayfs/readdir.c b/fs/overlayfs/readdir.c
9483     index 907870e81a72..70e9af551600 100644
9484     --- a/fs/overlayfs/readdir.c
9485     +++ b/fs/overlayfs/readdir.c
9486     @@ -23,6 +23,7 @@ struct ovl_cache_entry {
9487     u64 ino;
9488     struct list_head l_node;
9489     struct rb_node node;
9490     + struct ovl_cache_entry *next_maybe_whiteout;
9491     bool is_whiteout;
9492     char name[];
9493     };
9494     @@ -39,7 +40,7 @@ struct ovl_readdir_data {
9495     struct rb_root root;
9496     struct list_head *list;
9497     struct list_head middle;
9498     - struct dentry *dir;
9499     + struct ovl_cache_entry *first_maybe_whiteout;
9500     int count;
9501     int err;
9502     };
9503     @@ -79,7 +80,7 @@ static struct ovl_cache_entry *ovl_cache_entry_find(struct rb_root *root,
9504     return NULL;
9505     }
9506    
9507     -static struct ovl_cache_entry *ovl_cache_entry_new(struct dentry *dir,
9508     +static struct ovl_cache_entry *ovl_cache_entry_new(struct ovl_readdir_data *rdd,
9509     const char *name, int len,
9510     u64 ino, unsigned int d_type)
9511     {
9512     @@ -98,29 +99,8 @@ static struct ovl_cache_entry *ovl_cache_entry_new(struct dentry *dir,
9513     p->is_whiteout = false;
9514    
9515     if (d_type == DT_CHR) {
9516     - struct dentry *dentry;
9517     - const struct cred *old_cred;
9518     - struct cred *override_cred;
9519     -
9520     - override_cred = prepare_creds();
9521     - if (!override_cred) {
9522     - kfree(p);
9523     - return NULL;
9524     - }
9525     -
9526     - /*
9527     - * CAP_DAC_OVERRIDE for lookup
9528     - */
9529     - cap_raise(override_cred->cap_effective, CAP_DAC_OVERRIDE);
9530     - old_cred = override_creds(override_cred);
9531     -
9532     - dentry = lookup_one_len(name, dir, len);
9533     - if (!IS_ERR(dentry)) {
9534     - p->is_whiteout = ovl_is_whiteout(dentry);
9535     - dput(dentry);
9536     - }
9537     - revert_creds(old_cred);
9538     - put_cred(override_cred);
9539     + p->next_maybe_whiteout = rdd->first_maybe_whiteout;
9540     + rdd->first_maybe_whiteout = p;
9541     }
9542     return p;
9543     }
9544     @@ -148,7 +128,7 @@ static int ovl_cache_entry_add_rb(struct ovl_readdir_data *rdd,
9545     return 0;
9546     }
9547    
9548     - p = ovl_cache_entry_new(rdd->dir, name, len, ino, d_type);
9549     + p = ovl_cache_entry_new(rdd, name, len, ino, d_type);
9550     if (p == NULL)
9551     return -ENOMEM;
9552    
9553     @@ -169,7 +149,7 @@ static int ovl_fill_lower(struct ovl_readdir_data *rdd,
9554     if (p) {
9555     list_move_tail(&p->l_node, &rdd->middle);
9556     } else {
9557     - p = ovl_cache_entry_new(rdd->dir, name, namelen, ino, d_type);
9558     + p = ovl_cache_entry_new(rdd, name, namelen, ino, d_type);
9559     if (p == NULL)
9560     rdd->err = -ENOMEM;
9561     else
9562     @@ -219,6 +199,43 @@ static int ovl_fill_merge(struct dir_context *ctx, const char *name,
9563     return ovl_fill_lower(rdd, name, namelen, offset, ino, d_type);
9564     }
9565    
9566     +static int ovl_check_whiteouts(struct dentry *dir, struct ovl_readdir_data *rdd)
9567     +{
9568     + int err;
9569     + struct ovl_cache_entry *p;
9570     + struct dentry *dentry;
9571     + const struct cred *old_cred;
9572     + struct cred *override_cred;
9573     +
9574     + override_cred = prepare_creds();
9575     + if (!override_cred)
9576     + return -ENOMEM;
9577     +
9578     + /*
9579     + * CAP_DAC_OVERRIDE for lookup
9580     + */
9581     + cap_raise(override_cred->cap_effective, CAP_DAC_OVERRIDE);
9582     + old_cred = override_creds(override_cred);
9583     +
9584     + err = mutex_lock_killable(&dir->d_inode->i_mutex);
9585     + if (!err) {
9586     + while (rdd->first_maybe_whiteout) {
9587     + p = rdd->first_maybe_whiteout;
9588     + rdd->first_maybe_whiteout = p->next_maybe_whiteout;
9589     + dentry = lookup_one_len(p->name, dir, p->len);
9590     + if (!IS_ERR(dentry)) {
9591     + p->is_whiteout = ovl_is_whiteout(dentry);
9592     + dput(dentry);
9593     + }
9594     + }
9595     + mutex_unlock(&dir->d_inode->i_mutex);
9596     + }
9597     + revert_creds(old_cred);
9598     + put_cred(override_cred);
9599     +
9600     + return err;
9601     +}
9602     +
9603     static inline int ovl_dir_read(struct path *realpath,
9604     struct ovl_readdir_data *rdd)
9605     {
9606     @@ -229,7 +246,7 @@ static inline int ovl_dir_read(struct path *realpath,
9607     if (IS_ERR(realfile))
9608     return PTR_ERR(realfile);
9609    
9610     - rdd->dir = realpath->dentry;
9611     + rdd->first_maybe_whiteout = NULL;
9612     rdd->ctx.pos = 0;
9613     do {
9614     rdd->count = 0;
9615     @@ -238,6 +255,10 @@ static inline int ovl_dir_read(struct path *realpath,
9616     if (err >= 0)
9617     err = rdd->err;
9618     } while (!err && rdd->count);
9619     +
9620     + if (!err && rdd->first_maybe_whiteout)
9621     + err = ovl_check_whiteouts(realpath->dentry, rdd);
9622     +
9623     fput(realfile);
9624    
9625     return err;
9626     diff --git a/fs/xfs/xfs_attr_inactive.c b/fs/xfs/xfs_attr_inactive.c
9627     index 3fbf167cfb4c..73e75a87af50 100644
9628     --- a/fs/xfs/xfs_attr_inactive.c
9629     +++ b/fs/xfs/xfs_attr_inactive.c
9630     @@ -435,8 +435,14 @@ xfs_attr_inactive(
9631     */
9632     xfs_trans_ijoin(trans, dp, 0);
9633    
9634     - /* invalidate and truncate the attribute fork extents */
9635     - if (dp->i_d.di_aformat != XFS_DINODE_FMT_LOCAL) {
9636     + /*
9637     + * Invalidate and truncate the attribute fork extents. Make sure the
9638     + * fork actually has attributes as otherwise the invalidation has no
9639     + * blocks to read and returns an error. In this case, just do the fork
9640     + * removal below.
9641     + */
9642     + if (xfs_inode_hasattr(dp) &&
9643     + dp->i_d.di_aformat != XFS_DINODE_FMT_LOCAL) {
9644     error = xfs_attr3_root_inactive(&trans, dp);
9645     if (error)
9646     goto out_cancel;
9647     diff --git a/fs/xfs/xfs_symlink.c b/fs/xfs/xfs_symlink.c
9648     index 3df411eadb86..40c076523cfa 100644
9649     --- a/fs/xfs/xfs_symlink.c
9650     +++ b/fs/xfs/xfs_symlink.c
9651     @@ -104,7 +104,7 @@ xfs_readlink_bmap(
9652     cur_chunk += sizeof(struct xfs_dsymlink_hdr);
9653     }
9654    
9655     - memcpy(link + offset, bp->b_addr, byte_cnt);
9656     + memcpy(link + offset, cur_chunk, byte_cnt);
9657    
9658     pathlen -= byte_cnt;
9659     offset += byte_cnt;
9660     diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h
9661     index 08ef57bc8d63..f5ed1f17f061 100644
9662     --- a/include/acpi/acpixf.h
9663     +++ b/include/acpi/acpixf.h
9664     @@ -195,9 +195,18 @@ ACPI_INIT_GLOBAL(u8, acpi_gbl_do_not_use_xsdt, FALSE);
9665     * address. Although ACPICA adheres to the ACPI specification which
9666     * requires the use of the corresponding 64-bit address if it is non-zero,
9667     * some machines have been found to have a corrupted non-zero 64-bit
9668     - * address. Default is TRUE, favor the 32-bit addresses.
9669     + * address. Default is FALSE, do not favor the 32-bit addresses.
9670     */
9671     -ACPI_INIT_GLOBAL(u8, acpi_gbl_use32_bit_fadt_addresses, TRUE);
9672     +ACPI_INIT_GLOBAL(u8, acpi_gbl_use32_bit_fadt_addresses, FALSE);
9673     +
9674     +/*
9675     + * Optionally use 32-bit FACS table addresses.
9676     + * It is reported that some platforms fail to resume from system suspending
9677     + * if 64-bit FACS table address is selected:
9678     + * https://bugzilla.kernel.org/show_bug.cgi?id=74021
9679     + * Default is TRUE, favor the 32-bit addresses.
9680     + */
9681     +ACPI_INIT_GLOBAL(u8, acpi_gbl_use32_bit_facs_addresses, TRUE);
9682    
9683     /*
9684     * Optionally truncate I/O addresses to 16 bits. Provides compatibility
9685     diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h
9686     index 1c3002e1db20..181427ef3549 100644
9687     --- a/include/acpi/actypes.h
9688     +++ b/include/acpi/actypes.h
9689     @@ -572,6 +572,7 @@ typedef u64 acpi_integer;
9690     #define ACPI_NO_ACPI_ENABLE 0x10
9691     #define ACPI_NO_DEVICE_INIT 0x20
9692     #define ACPI_NO_OBJECT_INIT 0x40
9693     +#define ACPI_NO_FACS_INIT 0x80
9694    
9695     /*
9696     * Initialization state
9697     diff --git a/include/drm/drm_atomic.h b/include/drm/drm_atomic.h
9698     index c157103492b0..3f13b910f8d2 100644
9699     --- a/include/drm/drm_atomic.h
9700     +++ b/include/drm/drm_atomic.h
9701     @@ -77,26 +77,26 @@ int __must_check drm_atomic_async_commit(struct drm_atomic_state *state);
9702    
9703     #define for_each_connector_in_state(state, connector, connector_state, __i) \
9704     for ((__i) = 0; \
9705     - (connector) = (state)->connectors[__i], \
9706     - (connector_state) = (state)->connector_states[__i], \
9707     - (__i) < (state)->num_connector; \
9708     + (__i) < (state)->num_connector && \
9709     + ((connector) = (state)->connectors[__i], \
9710     + (connector_state) = (state)->connector_states[__i], 1); \
9711     (__i)++) \
9712     if (connector)
9713    
9714     #define for_each_crtc_in_state(state, crtc, crtc_state, __i) \
9715     for ((__i) = 0; \
9716     - (crtc) = (state)->crtcs[__i], \
9717     - (crtc_state) = (state)->crtc_states[__i], \
9718     - (__i) < (state)->dev->mode_config.num_crtc; \
9719     + (__i) < (state)->dev->mode_config.num_crtc && \
9720     + ((crtc) = (state)->crtcs[__i], \
9721     + (crtc_state) = (state)->crtc_states[__i], 1); \
9722     (__i)++) \
9723     if (crtc_state)
9724    
9725     -#define for_each_plane_in_state(state, plane, plane_state, __i) \
9726     - for ((__i) = 0; \
9727     - (plane) = (state)->planes[__i], \
9728     - (plane_state) = (state)->plane_states[__i], \
9729     - (__i) < (state)->dev->mode_config.num_total_plane; \
9730     - (__i)++) \
9731     +#define for_each_plane_in_state(state, plane, plane_state, __i) \
9732     + for ((__i) = 0; \
9733     + (__i) < (state)->dev->mode_config.num_total_plane && \
9734     + ((plane) = (state)->planes[__i], \
9735     + (plane_state) = (state)->plane_states[__i], 1); \
9736     + (__i)++) \
9737     if (plane_state)
9738    
9739     #endif /* DRM_ATOMIC_H_ */
9740     diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
9741     index ca71c03143d1..54233583c6cb 100644
9742     --- a/include/drm/drm_crtc.h
9743     +++ b/include/drm/drm_crtc.h
9744     @@ -731,6 +731,8 @@ struct drm_connector {
9745     uint8_t num_h_tile, num_v_tile;
9746     uint8_t tile_h_loc, tile_v_loc;
9747     uint16_t tile_h_size, tile_v_size;
9748     +
9749     + struct list_head destroy_list;
9750     };
9751    
9752     /**
9753     diff --git a/include/drm/drm_dp_mst_helper.h b/include/drm/drm_dp_mst_helper.h
9754     index a2507817be41..86d0b25ed054 100644
9755     --- a/include/drm/drm_dp_mst_helper.h
9756     +++ b/include/drm/drm_dp_mst_helper.h
9757     @@ -463,6 +463,10 @@ struct drm_dp_mst_topology_mgr {
9758     struct work_struct work;
9759    
9760     struct work_struct tx_work;
9761     +
9762     + struct list_head destroy_connector_list;
9763     + struct mutex destroy_connector_lock;
9764     + struct work_struct destroy_connector_work;
9765     };
9766    
9767     int drm_dp_mst_topology_mgr_init(struct drm_dp_mst_topology_mgr *mgr, struct device *dev, struct drm_dp_aux *aux, int max_dpcd_transaction_bytes, int max_payloads, int conn_base_id);
9768     diff --git a/include/linux/acpi.h b/include/linux/acpi.h
9769     index 5da2d2e9d38e..4550be3bb63b 100644
9770     --- a/include/linux/acpi.h
9771     +++ b/include/linux/acpi.h
9772     @@ -332,9 +332,6 @@ int acpi_check_region(resource_size_t start, resource_size_t n,
9773    
9774     int acpi_resources_are_enforced(void);
9775    
9776     -int acpi_reserve_region(u64 start, unsigned int length, u8 space_id,
9777     - unsigned long flags, char *desc);
9778     -
9779     #ifdef CONFIG_HIBERNATION
9780     void __init acpi_no_s4_hw_signature(void);
9781     #endif
9782     @@ -530,13 +527,6 @@ static inline int acpi_check_region(resource_size_t start, resource_size_t n,
9783     return 0;
9784     }
9785    
9786     -static inline int acpi_reserve_region(u64 start, unsigned int length,
9787     - u8 space_id, unsigned long flags,
9788     - char *desc)
9789     -{
9790     - return -ENXIO;
9791     -}
9792     -
9793     struct acpi_table_header;
9794     static inline int acpi_table_parse(char *id,
9795     int (*handler)(struct acpi_table_header *))
9796     diff --git a/include/linux/ata.h b/include/linux/ata.h
9797     index b666b773e111..533dbb6428f5 100644
9798     --- a/include/linux/ata.h
9799     +++ b/include/linux/ata.h
9800     @@ -45,6 +45,7 @@ enum {
9801     ATA_SECT_SIZE = 512,
9802     ATA_MAX_SECTORS_128 = 128,
9803     ATA_MAX_SECTORS = 256,
9804     + ATA_MAX_SECTORS_1024 = 1024,
9805     ATA_MAX_SECTORS_LBA48 = 65535,/* TODO: 65536? */
9806     ATA_MAX_SECTORS_TAPE = 65535,
9807    
9808     diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h
9809     index 73b45225a7ca..e6797ded700e 100644
9810     --- a/include/linux/buffer_head.h
9811     +++ b/include/linux/buffer_head.h
9812     @@ -317,6 +317,13 @@ sb_getblk(struct super_block *sb, sector_t block)
9813     return __getblk_gfp(sb->s_bdev, block, sb->s_blocksize, __GFP_MOVABLE);
9814     }
9815    
9816     +
9817     +static inline struct buffer_head *
9818     +sb_getblk_gfp(struct super_block *sb, sector_t block, gfp_t gfp)
9819     +{
9820     + return __getblk_gfp(sb->s_bdev, block, sb->s_blocksize, gfp);
9821     +}
9822     +
9823     static inline struct buffer_head *
9824     sb_find_get_block(struct super_block *sb, sector_t block)
9825     {
9826     diff --git a/include/linux/compiler-intel.h b/include/linux/compiler-intel.h
9827     index 0c9a2f2c2802..d4c71132d07f 100644
9828     --- a/include/linux/compiler-intel.h
9829     +++ b/include/linux/compiler-intel.h
9830     @@ -13,10 +13,12 @@
9831     /* Intel ECC compiler doesn't support gcc specific asm stmts.
9832     * It uses intrinsics to do the equivalent things.
9833     */
9834     +#undef barrier
9835     #undef barrier_data
9836     #undef RELOC_HIDE
9837     #undef OPTIMIZER_HIDE_VAR
9838    
9839     +#define barrier() __memory_barrier()
9840     #define barrier_data(ptr) barrier()
9841    
9842     #define RELOC_HIDE(ptr, off) \
9843     diff --git a/include/linux/gpio/consumer.h b/include/linux/gpio/consumer.h
9844     index 3a7c9ffd5ab9..da042657dc31 100644
9845     --- a/include/linux/gpio/consumer.h
9846     +++ b/include/linux/gpio/consumer.h
9847     @@ -406,6 +406,21 @@ static inline int desc_to_gpio(const struct gpio_desc *desc)
9848     return -EINVAL;
9849     }
9850    
9851     +/* Child properties interface */
9852     +struct fwnode_handle;
9853     +
9854     +static inline struct gpio_desc *fwnode_get_named_gpiod(
9855     + struct fwnode_handle *fwnode, const char *propname)
9856     +{
9857     + return ERR_PTR(-ENOSYS);
9858     +}
9859     +
9860     +static inline struct gpio_desc *devm_get_gpiod_from_child(
9861     + struct device *dev, const char *con_id, struct fwnode_handle *child)
9862     +{
9863     + return ERR_PTR(-ENOSYS);
9864     +}
9865     +
9866     #endif /* CONFIG_GPIOLIB */
9867    
9868     /*
9869     diff --git a/include/linux/hid-sensor-hub.h b/include/linux/hid-sensor-hub.h
9870     index 0042bf330b99..c02b5ce6c5cd 100644
9871     --- a/include/linux/hid-sensor-hub.h
9872     +++ b/include/linux/hid-sensor-hub.h
9873     @@ -230,6 +230,7 @@ struct hid_sensor_common {
9874     struct platform_device *pdev;
9875     unsigned usage_id;
9876     atomic_t data_ready;
9877     + atomic_t user_requested_state;
9878     struct iio_trigger *trigger;
9879     struct hid_sensor_hub_attribute_info poll;
9880     struct hid_sensor_hub_attribute_info report_state;
9881     diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h
9882     index 20e7f78041c8..edb640ae9a94 100644
9883     --- a/include/linux/jbd2.h
9884     +++ b/include/linux/jbd2.h
9885     @@ -1035,7 +1035,7 @@ struct buffer_head *jbd2_journal_get_descriptor_buffer(journal_t *journal);
9886     int jbd2_journal_next_log_block(journal_t *, unsigned long long *);
9887     int jbd2_journal_get_log_tail(journal_t *journal, tid_t *tid,
9888     unsigned long *block);
9889     -void __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block);
9890     +int __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block);
9891     void jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block);
9892    
9893     /* Commit management */
9894     @@ -1157,7 +1157,7 @@ extern int jbd2_journal_recover (journal_t *journal);
9895     extern int jbd2_journal_wipe (journal_t *, int);
9896     extern int jbd2_journal_skip_recovery (journal_t *);
9897     extern void jbd2_journal_update_sb_errno(journal_t *);
9898     -extern void jbd2_journal_update_sb_log_tail (journal_t *, tid_t,
9899     +extern int jbd2_journal_update_sb_log_tail (journal_t *, tid_t,
9900     unsigned long, int);
9901     extern void __jbd2_journal_abort_hard (journal_t *);
9902     extern void jbd2_journal_abort (journal_t *, int);
9903     diff --git a/include/linux/libata.h b/include/linux/libata.h
9904     index 28aeae46f355..e0e33787c485 100644
9905     --- a/include/linux/libata.h
9906     +++ b/include/linux/libata.h
9907     @@ -431,6 +431,9 @@ enum {
9908     ATA_HORKAGE_NOLPM = (1 << 20), /* don't use LPM */
9909     ATA_HORKAGE_WD_BROKEN_LPM = (1 << 21), /* some WDs have broken LPM */
9910     ATA_HORKAGE_ZERO_AFTER_TRIM = (1 << 22),/* guarantees zero after trim */
9911     + ATA_HORKAGE_NO_NCQ_LOG = (1 << 23), /* don't use NCQ for log read */
9912     + ATA_HORKAGE_NOTRIM = (1 << 24), /* don't use TRIM */
9913     + ATA_HORKAGE_MAX_SEC_1024 = (1 << 25), /* Limit max sects to 1024 */
9914    
9915     /* DMA mask for user DMA control: User visible values; DO NOT
9916     renumber */
9917     diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
9918     index 93ab6071bbe9..e9e9a8dcfb47 100644
9919     --- a/include/linux/nfs_xdr.h
9920     +++ b/include/linux/nfs_xdr.h
9921     @@ -1142,7 +1142,7 @@ struct nfs41_state_protection {
9922     struct nfs4_op_map allow;
9923     };
9924    
9925     -#define NFS4_EXCHANGE_ID_LEN (48)
9926     +#define NFS4_EXCHANGE_ID_LEN (127)
9927     struct nfs41_exchange_id_args {
9928     struct nfs_client *client;
9929     nfs4_verifier *verifier;
9930     diff --git a/include/linux/of.h b/include/linux/of.h
9931     index b871ff9d81d7..8135d507d089 100644
9932     --- a/include/linux/of.h
9933     +++ b/include/linux/of.h
9934     @@ -673,7 +673,10 @@ static inline void of_property_clear_flag(struct property *p, unsigned long flag
9935     #if defined(CONFIG_OF) && defined(CONFIG_NUMA)
9936     extern int of_node_to_nid(struct device_node *np);
9937     #else
9938     -static inline int of_node_to_nid(struct device_node *device) { return 0; }
9939     +static inline int of_node_to_nid(struct device_node *device)
9940     +{
9941     + return NUMA_NO_NODE;
9942     +}
9943     #endif
9944    
9945     static inline struct device_node *of_find_matching_node(
9946     diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h
9947     index 551b6737f5df..a7e41fb6ed54 100644
9948     --- a/include/uapi/drm/i915_drm.h
9949     +++ b/include/uapi/drm/i915_drm.h
9950     @@ -1065,6 +1065,14 @@ struct drm_i915_reg_read {
9951     __u64 offset;
9952     __u64 val; /* Return value */
9953     };
9954     +/* Known registers:
9955     + *
9956     + * Render engine timestamp - 0x2358 + 64bit - gen7+
9957     + * - Note this register returns an invalid value if using the default
9958     + * single instruction 8byte read, in order to workaround that use
9959     + * offset (0x2538 | 1) instead.
9960     + *
9961     + */
9962    
9963     struct drm_i915_reset_stats {
9964     __u32 ctx_id;
9965     diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig
9966     index 7e01f78f0417..9e302315e33d 100644
9967     --- a/kernel/power/Kconfig
9968     +++ b/kernel/power/Kconfig
9969     @@ -187,7 +187,7 @@ config DPM_WATCHDOG
9970     config DPM_WATCHDOG_TIMEOUT
9971     int "Watchdog timeout in seconds"
9972     range 1 120
9973     - default 12
9974     + default 60
9975     depends on DPM_WATCHDOG
9976    
9977     config PM_TRACE
9978     diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
9979     index c099b082cd02..bff0169e1ad8 100644
9980     --- a/kernel/printk/printk.c
9981     +++ b/kernel/printk/printk.c
9982     @@ -484,11 +484,11 @@ int check_syslog_permissions(int type, bool from_file)
9983     * already done the capabilities checks at open time.
9984     */
9985     if (from_file && type != SYSLOG_ACTION_OPEN)
9986     - return 0;
9987     + goto ok;
9988    
9989     if (syslog_action_restricted(type)) {
9990     if (capable(CAP_SYSLOG))
9991     - return 0;
9992     + goto ok;
9993     /*
9994     * For historical reasons, accept CAP_SYS_ADMIN too, with
9995     * a warning.
9996     @@ -498,10 +498,11 @@ int check_syslog_permissions(int type, bool from_file)
9997     "CAP_SYS_ADMIN but no CAP_SYSLOG "
9998     "(deprecated).\n",
9999     current->comm, task_pid_nr(current));
10000     - return 0;
10001     + goto ok;
10002     }
10003     return -EPERM;
10004     }
10005     +ok:
10006     return security_syslog(type);
10007     }
10008    
10009     @@ -1263,10 +1264,6 @@ int do_syslog(int type, char __user *buf, int len, bool from_file)
10010     if (error)
10011     goto out;
10012    
10013     - error = security_syslog(type);
10014     - if (error)
10015     - return error;
10016     -
10017     switch (type) {
10018     case SYSLOG_ACTION_CLOSE: /* Close log */
10019     break;
10020     diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
10021     index d2612016de94..921691c5cb04 100644
10022     --- a/kernel/trace/trace.h
10023     +++ b/kernel/trace/trace.h
10024     @@ -444,6 +444,7 @@ enum {
10025    
10026     TRACE_CONTROL_BIT,
10027    
10028     + TRACE_BRANCH_BIT,
10029     /*
10030     * Abuse of the trace_recursion.
10031     * As we need a way to maintain state if we are tracing the function
10032     @@ -1312,7 +1313,7 @@ void trace_event_init(void);
10033     void trace_event_enum_update(struct trace_enum_map **map, int len);
10034     #else
10035     static inline void __init trace_event_init(void) { }
10036     -static inlin void trace_event_enum_update(struct trace_enum_map **map, int len) { }
10037     +static inline void trace_event_enum_update(struct trace_enum_map **map, int len) { }
10038     #endif
10039    
10040     extern struct trace_iterator *tracepoint_print_iter;
10041     diff --git a/kernel/trace/trace_branch.c b/kernel/trace/trace_branch.c
10042     index 57cbf1efdd44..1879980f06c2 100644
10043     --- a/kernel/trace/trace_branch.c
10044     +++ b/kernel/trace/trace_branch.c
10045     @@ -36,9 +36,12 @@ probe_likely_condition(struct ftrace_branch_data *f, int val, int expect)
10046     struct trace_branch *entry;
10047     struct ring_buffer *buffer;
10048     unsigned long flags;
10049     - int cpu, pc;
10050     + int pc;
10051     const char *p;
10052    
10053     + if (current->trace_recursion & TRACE_BRANCH_BIT)
10054     + return;
10055     +
10056     /*
10057     * I would love to save just the ftrace_likely_data pointer, but
10058     * this code can also be used by modules. Ugly things can happen
10059     @@ -49,10 +52,10 @@ probe_likely_condition(struct ftrace_branch_data *f, int val, int expect)
10060     if (unlikely(!tr))
10061     return;
10062    
10063     - local_irq_save(flags);
10064     - cpu = raw_smp_processor_id();
10065     - data = per_cpu_ptr(tr->trace_buffer.data, cpu);
10066     - if (atomic_inc_return(&data->disabled) != 1)
10067     + raw_local_irq_save(flags);
10068     + current->trace_recursion |= TRACE_BRANCH_BIT;
10069     + data = this_cpu_ptr(tr->trace_buffer.data);
10070     + if (atomic_read(&data->disabled))
10071     goto out;
10072    
10073     pc = preempt_count();
10074     @@ -81,8 +84,8 @@ probe_likely_condition(struct ftrace_branch_data *f, int val, int expect)
10075     __buffer_unlock_commit(buffer, event);
10076    
10077     out:
10078     - atomic_dec(&data->disabled);
10079     - local_irq_restore(flags);
10080     + current->trace_recursion &= ~TRACE_BRANCH_BIT;
10081     + raw_local_irq_restore(flags);
10082     }
10083    
10084     static inline
10085     diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
10086     index 7f2e97ce71a7..52adf02d7619 100644
10087     --- a/kernel/trace/trace_events_filter.c
10088     +++ b/kernel/trace/trace_events_filter.c
10089     @@ -1056,6 +1056,9 @@ static void parse_init(struct filter_parse_state *ps,
10090    
10091     static char infix_next(struct filter_parse_state *ps)
10092     {
10093     + if (!ps->infix.cnt)
10094     + return 0;
10095     +
10096     ps->infix.cnt--;
10097    
10098     return ps->infix.string[ps->infix.tail++];
10099     @@ -1071,6 +1074,9 @@ static char infix_peek(struct filter_parse_state *ps)
10100    
10101     static void infix_advance(struct filter_parse_state *ps)
10102     {
10103     + if (!ps->infix.cnt)
10104     + return;
10105     +
10106     ps->infix.cnt--;
10107     ps->infix.tail++;
10108     }
10109     @@ -1385,7 +1391,9 @@ static int check_preds(struct filter_parse_state *ps)
10110     if (elt->op != OP_NOT)
10111     cnt--;
10112     n_normal_preds++;
10113     - WARN_ON_ONCE(cnt < 0);
10114     + /* all ops should have operands */
10115     + if (cnt < 0)
10116     + break;
10117     }
10118    
10119     if (cnt != 1 || !n_normal_preds || n_logical_preds >= n_normal_preds) {
10120     diff --git a/lib/bitmap.c b/lib/bitmap.c
10121     index 64c0926f5dd8..40162f87ea2d 100644
10122     --- a/lib/bitmap.c
10123     +++ b/lib/bitmap.c
10124     @@ -506,12 +506,12 @@ static int __bitmap_parselist(const char *buf, unsigned int buflen,
10125     unsigned a, b;
10126     int c, old_c, totaldigits;
10127     const char __user __force *ubuf = (const char __user __force *)buf;
10128     - int exp_digit, in_range;
10129     + int at_start, in_range;
10130    
10131     totaldigits = c = 0;
10132     bitmap_zero(maskp, nmaskbits);
10133     do {
10134     - exp_digit = 1;
10135     + at_start = 1;
10136     in_range = 0;
10137     a = b = 0;
10138    
10139     @@ -540,11 +540,10 @@ static int __bitmap_parselist(const char *buf, unsigned int buflen,
10140     break;
10141    
10142     if (c == '-') {
10143     - if (exp_digit || in_range)
10144     + if (at_start || in_range)
10145     return -EINVAL;
10146     b = 0;
10147     in_range = 1;
10148     - exp_digit = 1;
10149     continue;
10150     }
10151    
10152     @@ -554,16 +553,18 @@ static int __bitmap_parselist(const char *buf, unsigned int buflen,
10153     b = b * 10 + (c - '0');
10154     if (!in_range)
10155     a = b;
10156     - exp_digit = 0;
10157     + at_start = 0;
10158     totaldigits++;
10159     }
10160     if (!(a <= b))
10161     return -EINVAL;
10162     if (b >= nmaskbits)
10163     return -ERANGE;
10164     - while (a <= b) {
10165     - set_bit(a, maskp);
10166     - a++;
10167     + if (!at_start) {
10168     + while (a <= b) {
10169     + set_bit(a, maskp);
10170     + a++;
10171     + }
10172     }
10173     } while (buflen && c == ',');
10174     return 0;
10175     diff --git a/mm/hugetlb.c b/mm/hugetlb.c
10176     index 271e4432734c..8c4c1f9f9a9a 100644
10177     --- a/mm/hugetlb.c
10178     +++ b/mm/hugetlb.c
10179     @@ -40,6 +40,11 @@ int hugepages_treat_as_movable;
10180     int hugetlb_max_hstate __read_mostly;
10181     unsigned int default_hstate_idx;
10182     struct hstate hstates[HUGE_MAX_HSTATE];
10183     +/*
10184     + * Minimum page order among possible hugepage sizes, set to a proper value
10185     + * at boot time.
10186     + */
10187     +static unsigned int minimum_order __read_mostly = UINT_MAX;
10188    
10189     __initdata LIST_HEAD(huge_boot_pages);
10190    
10191     @@ -1188,19 +1193,13 @@ static void dissolve_free_huge_page(struct page *page)
10192     */
10193     void dissolve_free_huge_pages(unsigned long start_pfn, unsigned long end_pfn)
10194     {
10195     - unsigned int order = 8 * sizeof(void *);
10196     unsigned long pfn;
10197     - struct hstate *h;
10198    
10199     if (!hugepages_supported())
10200     return;
10201    
10202     - /* Set scan step to minimum hugepage size */
10203     - for_each_hstate(h)
10204     - if (order > huge_page_order(h))
10205     - order = huge_page_order(h);
10206     - VM_BUG_ON(!IS_ALIGNED(start_pfn, 1 << order));
10207     - for (pfn = start_pfn; pfn < end_pfn; pfn += 1 << order)
10208     + VM_BUG_ON(!IS_ALIGNED(start_pfn, 1 << minimum_order));
10209     + for (pfn = start_pfn; pfn < end_pfn; pfn += 1 << minimum_order)
10210     dissolve_free_huge_page(pfn_to_page(pfn));
10211     }
10212    
10213     @@ -1627,10 +1626,14 @@ static void __init hugetlb_init_hstates(void)
10214     struct hstate *h;
10215    
10216     for_each_hstate(h) {
10217     + if (minimum_order > huge_page_order(h))
10218     + minimum_order = huge_page_order(h);
10219     +
10220     /* oversize hugepages were init'ed in early boot */
10221     if (!hstate_is_gigantic(h))
10222     hugetlb_hstate_alloc_pages(h);
10223     }
10224     + VM_BUG_ON(minimum_order == UINT_MAX);
10225     }
10226    
10227     static char * __init memfmt(char *buf, unsigned long n)
10228     diff --git a/mm/memory.c b/mm/memory.c
10229     index 22e037e3364e..2a9e09870c20 100644
10230     --- a/mm/memory.c
10231     +++ b/mm/memory.c
10232     @@ -2669,6 +2669,10 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
10233    
10234     pte_unmap(page_table);
10235    
10236     + /* File mapping without ->vm_ops ? */
10237     + if (vma->vm_flags & VM_SHARED)
10238     + return VM_FAULT_SIGBUS;
10239     +
10240     /* Check if we need to add a guard page to the stack */
10241     if (check_stack_guard_page(vma, address) < 0)
10242     return VM_FAULT_SIGSEGV;
10243     @@ -3097,6 +3101,9 @@ static int do_fault(struct mm_struct *mm, struct vm_area_struct *vma,
10244     - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff;
10245    
10246     pte_unmap(page_table);
10247     + /* The VMA was not fully populated on mmap() or missing VM_DONTEXPAND */
10248     + if (!vma->vm_ops->fault)
10249     + return VM_FAULT_SIGBUS;
10250     if (!(flags & FAULT_FLAG_WRITE))
10251     return do_read_fault(mm, vma, address, pmd, pgoff, flags,
10252     orig_pte);
10253     @@ -3242,13 +3249,12 @@ static int handle_pte_fault(struct mm_struct *mm,
10254     barrier();
10255     if (!pte_present(entry)) {
10256     if (pte_none(entry)) {
10257     - if (vma->vm_ops) {
10258     - if (likely(vma->vm_ops->fault))
10259     - return do_fault(mm, vma, address, pte,
10260     - pmd, flags, entry);
10261     - }
10262     - return do_anonymous_page(mm, vma, address,
10263     - pte, pmd, flags);
10264     + if (vma->vm_ops)
10265     + return do_fault(mm, vma, address, pte, pmd,
10266     + flags, entry);
10267     +
10268     + return do_anonymous_page(mm, vma, address, pte, pmd,
10269     + flags);
10270     }
10271     return do_swap_page(mm, vma, address,
10272     pte, pmd, flags, entry);
10273     diff --git a/net/9p/client.c b/net/9p/client.c
10274     index 6f4c4c88db84..81925b923318 100644
10275     --- a/net/9p/client.c
10276     +++ b/net/9p/client.c
10277     @@ -843,7 +843,8 @@ static struct p9_req_t *p9_client_zc_rpc(struct p9_client *c, int8_t type,
10278     if (err < 0) {
10279     if (err == -EIO)
10280     c->status = Disconnected;
10281     - goto reterr;
10282     + if (err != -ERESTARTSYS)
10283     + goto reterr;
10284     }
10285     if (req->status == REQ_STATUS_ERROR) {
10286     p9_debug(P9_DEBUG_ERROR, "req_status error %d\n", req->t_err);
10287     @@ -1647,6 +1648,7 @@ p9_client_write(struct p9_fid *fid, u64 offset, struct iov_iter *from, int *err)
10288     if (*err) {
10289     trace_9p_protocol_dump(clnt, req->rc);
10290     p9_free_req(clnt, req);
10291     + break;
10292     }
10293    
10294     p9_debug(P9_DEBUG_9P, "<<< RWRITE count %d\n", count);
10295     diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c
10296     index 56f9edbf3d05..e11a5cfda4b1 100644
10297     --- a/net/bluetooth/hci_sock.c
10298     +++ b/net/bluetooth/hci_sock.c
10299     @@ -741,10 +741,11 @@ static int hci_sock_bind(struct socket *sock, struct sockaddr *addr,
10300     goto done;
10301     }
10302    
10303     - if (test_bit(HCI_UP, &hdev->flags) ||
10304     - test_bit(HCI_INIT, &hdev->flags) ||
10305     + if (test_bit(HCI_INIT, &hdev->flags) ||
10306     hci_dev_test_flag(hdev, HCI_SETUP) ||
10307     - hci_dev_test_flag(hdev, HCI_CONFIG)) {
10308     + hci_dev_test_flag(hdev, HCI_CONFIG) ||
10309     + (!hci_dev_test_flag(hdev, HCI_AUTO_OFF) &&
10310     + test_bit(HCI_UP, &hdev->flags))) {
10311     err = -EBUSY;
10312     hci_dev_put(hdev);
10313     goto done;
10314     @@ -760,10 +761,21 @@ static int hci_sock_bind(struct socket *sock, struct sockaddr *addr,
10315    
10316     err = hci_dev_open(hdev->id);
10317     if (err) {
10318     - hci_dev_clear_flag(hdev, HCI_USER_CHANNEL);
10319     - mgmt_index_added(hdev);
10320     - hci_dev_put(hdev);
10321     - goto done;
10322     + if (err == -EALREADY) {
10323     + /* In case the transport is already up and
10324     + * running, clear the error here.
10325     + *
10326     + * This can happen when opening an user
10327     + * channel and HCI_AUTO_OFF grace period
10328     + * is still active.
10329     + */
10330     + err = 0;
10331     + } else {
10332     + hci_dev_clear_flag(hdev, HCI_USER_CHANNEL);
10333     + mgmt_index_added(hdev);
10334     + hci_dev_put(hdev);
10335     + goto done;
10336     + }
10337     }
10338    
10339     atomic_inc(&hdev->promisc);
10340     diff --git a/net/ceph/osdmap.c b/net/ceph/osdmap.c
10341     index 15796696d64e..4a3125836b64 100644
10342     --- a/net/ceph/osdmap.c
10343     +++ b/net/ceph/osdmap.c
10344     @@ -89,7 +89,7 @@ static int crush_decode_tree_bucket(void **p, void *end,
10345     {
10346     int j;
10347     dout("crush_decode_tree_bucket %p to %p\n", *p, end);
10348     - ceph_decode_32_safe(p, end, b->num_nodes, bad);
10349     + ceph_decode_8_safe(p, end, b->num_nodes, bad);
10350     b->node_weights = kcalloc(b->num_nodes, sizeof(u32), GFP_NOFS);
10351     if (b->node_weights == NULL)
10352     return -ENOMEM;
10353     diff --git a/net/ieee802154/socket.c b/net/ieee802154/socket.c
10354     index b60c65f70346..627a2537634e 100644
10355     --- a/net/ieee802154/socket.c
10356     +++ b/net/ieee802154/socket.c
10357     @@ -739,6 +739,12 @@ static int dgram_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
10358     sock_recv_ts_and_drops(msg, sk, skb);
10359    
10360     if (saddr) {
10361     + /* Clear the implicit padding in struct sockaddr_ieee802154
10362     + * (16 bits between 'family' and 'addr') and in struct
10363     + * ieee802154_addr_sa (16 bits at the end of the structure).
10364     + */
10365     + memset(saddr, 0, sizeof(*saddr));
10366     +
10367     saddr->family = AF_IEEE802154;
10368     ieee802154_addr_to_sa(&saddr->addr, &mac_cb(skb)->source);
10369     *addr_len = sizeof(*saddr);
10370     diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
10371     index ff347a0eebd4..f06d42267306 100644
10372     --- a/net/mac80211/cfg.c
10373     +++ b/net/mac80211/cfg.c
10374     @@ -3356,6 +3356,7 @@ static int ieee80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
10375     /* Update CSA counters */
10376     if (sdata->vif.csa_active &&
10377     (sdata->vif.type == NL80211_IFTYPE_AP ||
10378     + sdata->vif.type == NL80211_IFTYPE_MESH_POINT ||
10379     sdata->vif.type == NL80211_IFTYPE_ADHOC) &&
10380     params->n_csa_offsets) {
10381     int i;
10382     diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
10383     index bfef1b215050..a9c9d961f039 100644
10384     --- a/net/mac80211/ibss.c
10385     +++ b/net/mac80211/ibss.c
10386     @@ -146,6 +146,7 @@ ieee80211_ibss_build_presp(struct ieee80211_sub_if_data *sdata,
10387     csa_settings->chandef.chan->center_freq);
10388     presp->csa_counter_offsets[0] = (pos - presp->head);
10389     *pos++ = csa_settings->count;
10390     + presp->csa_current_counter = csa_settings->count;
10391     }
10392    
10393     /* put the remaining rates in WLAN_EID_EXT_SUPP_RATES */
10394     diff --git a/net/mac80211/main.c b/net/mac80211/main.c
10395     index df3051d96aff..e86daed83c6f 100644
10396     --- a/net/mac80211/main.c
10397     +++ b/net/mac80211/main.c
10398     @@ -249,6 +249,7 @@ static void ieee80211_restart_work(struct work_struct *work)
10399     {
10400     struct ieee80211_local *local =
10401     container_of(work, struct ieee80211_local, restart_work);
10402     + struct ieee80211_sub_if_data *sdata;
10403    
10404     /* wait for scan work complete */
10405     flush_workqueue(local->workqueue);
10406     @@ -257,6 +258,8 @@ static void ieee80211_restart_work(struct work_struct *work)
10407     "%s called with hardware scan in progress\n", __func__);
10408    
10409     rtnl_lock();
10410     + list_for_each_entry(sdata, &local->interfaces, list)
10411     + flush_delayed_work(&sdata->dec_tailroom_needed_wk);
10412     ieee80211_scan_cancel(local);
10413     ieee80211_reconfig(local);
10414     rtnl_unlock();
10415     diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c
10416     index d4684242e78b..817098add1d6 100644
10417     --- a/net/mac80211/mesh.c
10418     +++ b/net/mac80211/mesh.c
10419     @@ -680,6 +680,7 @@ ieee80211_mesh_build_beacon(struct ieee80211_if_mesh *ifmsh)
10420     *pos++ = 0x0;
10421     *pos++ = ieee80211_frequency_to_channel(
10422     csa->settings.chandef.chan->center_freq);
10423     + bcn->csa_current_counter = csa->settings.count;
10424     bcn->csa_counter_offsets[0] = hdr_len + 6;
10425     *pos++ = csa->settings.count;
10426     *pos++ = WLAN_EID_CHAN_SWITCH_PARAM;
10427     diff --git a/net/sunrpc/backchannel_rqst.c b/net/sunrpc/backchannel_rqst.c
10428     index 9dd0ea8db463..28504dfd3dad 100644
10429     --- a/net/sunrpc/backchannel_rqst.c
10430     +++ b/net/sunrpc/backchannel_rqst.c
10431     @@ -60,7 +60,7 @@ static void xprt_free_allocation(struct rpc_rqst *req)
10432    
10433     dprintk("RPC: free allocations for req= %p\n", req);
10434     WARN_ON_ONCE(test_bit(RPC_BC_PA_IN_USE, &req->rq_bc_pa_state));
10435     - xbufp = &req->rq_private_buf;
10436     + xbufp = &req->rq_rcv_buf;
10437     free_page((unsigned long)xbufp->head[0].iov_base);
10438     xbufp = &req->rq_snd_buf;
10439     free_page((unsigned long)xbufp->head[0].iov_base);
10440     diff --git a/net/wireless/util.c b/net/wireless/util.c
10441     index 70051ab52f4f..7e4e3fffe7ce 100644
10442     --- a/net/wireless/util.c
10443     +++ b/net/wireless/util.c
10444     @@ -944,7 +944,7 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev,
10445     ntype == NL80211_IFTYPE_P2P_CLIENT))
10446     return -EBUSY;
10447    
10448     - if (ntype != otype && netif_running(dev)) {
10449     + if (ntype != otype) {
10450     dev->ieee80211_ptr->use_4addr = false;
10451     dev->ieee80211_ptr->mesh_id_up_len = 0;
10452     wdev_lock(dev->ieee80211_ptr);
10453     diff --git a/samples/trace_events/trace-events-sample.h b/samples/trace_events/trace-events-sample.h
10454     index 8965d1bb8811..125d6402f64f 100644
10455     --- a/samples/trace_events/trace-events-sample.h
10456     +++ b/samples/trace_events/trace-events-sample.h
10457     @@ -168,7 +168,10 @@
10458     *
10459     * For __dynamic_array(int, foo, bar) use __get_dynamic_array(foo)
10460     * Use __get_dynamic_array_len(foo) to get the length of the array
10461     - * saved.
10462     + * saved. Note, __get_dynamic_array_len() returns the total allocated
10463     + * length of the dynamic array; __print_array() expects the second
10464     + * parameter to be the number of elements. To get that, the array length
10465     + * needs to be divided by the element size.
10466     *
10467     * For __string(foo, bar) use __get_str(foo)
10468     *
10469     @@ -288,7 +291,7 @@ TRACE_EVENT(foo_bar,
10470     * This prints out the array that is defined by __array in a nice format.
10471     */
10472     __print_array(__get_dynamic_array(list),
10473     - __get_dynamic_array_len(list),
10474     + __get_dynamic_array_len(list) / sizeof(int),
10475     sizeof(int)),
10476     __get_str(str), __get_bitmask(cpus))
10477     );
10478     diff --git a/security/integrity/evm/evm_main.c b/security/integrity/evm/evm_main.c
10479     index 10f994307a04..582091498819 100644
10480     --- a/security/integrity/evm/evm_main.c
10481     +++ b/security/integrity/evm/evm_main.c
10482     @@ -296,6 +296,17 @@ static int evm_protect_xattr(struct dentry *dentry, const char *xattr_name,
10483     iint = integrity_iint_find(d_backing_inode(dentry));
10484     if (iint && (iint->flags & IMA_NEW_FILE))
10485     return 0;
10486     +
10487     + /* exception for pseudo filesystems */
10488     + if (dentry->d_inode->i_sb->s_magic == TMPFS_MAGIC
10489     + || dentry->d_inode->i_sb->s_magic == SYSFS_MAGIC)
10490     + return 0;
10491     +
10492     + integrity_audit_msg(AUDIT_INTEGRITY_METADATA,
10493     + dentry->d_inode, dentry->d_name.name,
10494     + "update_metadata",
10495     + integrity_status_msg[evm_status],
10496     + -EPERM, 0);
10497     }
10498     out:
10499     if (evm_status != INTEGRITY_PASS)
10500     diff --git a/security/integrity/ima/ima.h b/security/integrity/ima/ima.h
10501     index 8ee997dff139..fc56d4dfa954 100644
10502     --- a/security/integrity/ima/ima.h
10503     +++ b/security/integrity/ima/ima.h
10504     @@ -106,7 +106,7 @@ void ima_add_violation(struct file *file, const unsigned char *filename,
10505     const char *op, const char *cause);
10506     int ima_init_crypto(void);
10507     void ima_putc(struct seq_file *m, void *data, int datalen);
10508     -void ima_print_digest(struct seq_file *m, u8 *digest, int size);
10509     +void ima_print_digest(struct seq_file *m, u8 *digest, u32 size);
10510     struct ima_template_desc *ima_template_desc_current(void);
10511     int ima_init_template(void);
10512    
10513     diff --git a/security/integrity/ima/ima_fs.c b/security/integrity/ima/ima_fs.c
10514     index 461215e5fd31..816d175da79a 100644
10515     --- a/security/integrity/ima/ima_fs.c
10516     +++ b/security/integrity/ima/ima_fs.c
10517     @@ -190,9 +190,9 @@ static const struct file_operations ima_measurements_ops = {
10518     .release = seq_release,
10519     };
10520    
10521     -void ima_print_digest(struct seq_file *m, u8 *digest, int size)
10522     +void ima_print_digest(struct seq_file *m, u8 *digest, u32 size)
10523     {
10524     - int i;
10525     + u32 i;
10526    
10527     for (i = 0; i < size; i++)
10528     seq_printf(m, "%02x", *(digest + i));
10529     diff --git a/security/integrity/ima/ima_policy.c b/security/integrity/ima/ima_policy.c
10530     index d1eefb9d65fb..3997e206f82d 100644
10531     --- a/security/integrity/ima/ima_policy.c
10532     +++ b/security/integrity/ima/ima_policy.c
10533     @@ -27,6 +27,8 @@
10534     #define IMA_UID 0x0008
10535     #define IMA_FOWNER 0x0010
10536     #define IMA_FSUUID 0x0020
10537     +#define IMA_INMASK 0x0040
10538     +#define IMA_EUID 0x0080
10539    
10540     #define UNKNOWN 0
10541     #define MEASURE 0x0001 /* same as IMA_MEASURE */
10542     @@ -42,6 +44,8 @@ enum lsm_rule_types { LSM_OBJ_USER, LSM_OBJ_ROLE, LSM_OBJ_TYPE,
10543     LSM_SUBJ_USER, LSM_SUBJ_ROLE, LSM_SUBJ_TYPE
10544     };
10545    
10546     +enum policy_types { ORIGINAL_TCB = 1, DEFAULT_TCB };
10547     +
10548     struct ima_rule_entry {
10549     struct list_head list;
10550     int action;
10551     @@ -70,7 +74,7 @@ struct ima_rule_entry {
10552     * normal users can easily run the machine out of memory simply building
10553     * and running executables.
10554     */
10555     -static struct ima_rule_entry default_rules[] = {
10556     +static struct ima_rule_entry dont_measure_rules[] = {
10557     {.action = DONT_MEASURE, .fsmagic = PROC_SUPER_MAGIC, .flags = IMA_FSMAGIC},
10558     {.action = DONT_MEASURE, .fsmagic = SYSFS_MAGIC, .flags = IMA_FSMAGIC},
10559     {.action = DONT_MEASURE, .fsmagic = DEBUGFS_MAGIC, .flags = IMA_FSMAGIC},
10560     @@ -79,12 +83,31 @@ static struct ima_rule_entry default_rules[] = {
10561     {.action = DONT_MEASURE, .fsmagic = BINFMTFS_MAGIC, .flags = IMA_FSMAGIC},
10562     {.action = DONT_MEASURE, .fsmagic = SECURITYFS_MAGIC, .flags = IMA_FSMAGIC},
10563     {.action = DONT_MEASURE, .fsmagic = SELINUX_MAGIC, .flags = IMA_FSMAGIC},
10564     + {.action = DONT_MEASURE, .fsmagic = CGROUP_SUPER_MAGIC,
10565     + .flags = IMA_FSMAGIC},
10566     + {.action = DONT_MEASURE, .fsmagic = NSFS_MAGIC, .flags = IMA_FSMAGIC}
10567     +};
10568     +
10569     +static struct ima_rule_entry original_measurement_rules[] = {
10570     {.action = MEASURE, .func = MMAP_CHECK, .mask = MAY_EXEC,
10571     .flags = IMA_FUNC | IMA_MASK},
10572     {.action = MEASURE, .func = BPRM_CHECK, .mask = MAY_EXEC,
10573     .flags = IMA_FUNC | IMA_MASK},
10574     - {.action = MEASURE, .func = FILE_CHECK, .mask = MAY_READ, .uid = GLOBAL_ROOT_UID,
10575     - .flags = IMA_FUNC | IMA_MASK | IMA_UID},
10576     + {.action = MEASURE, .func = FILE_CHECK, .mask = MAY_READ,
10577     + .uid = GLOBAL_ROOT_UID, .flags = IMA_FUNC | IMA_MASK | IMA_UID},
10578     + {.action = MEASURE, .func = MODULE_CHECK, .flags = IMA_FUNC},
10579     + {.action = MEASURE, .func = FIRMWARE_CHECK, .flags = IMA_FUNC},
10580     +};
10581     +
10582     +static struct ima_rule_entry default_measurement_rules[] = {
10583     + {.action = MEASURE, .func = MMAP_CHECK, .mask = MAY_EXEC,
10584     + .flags = IMA_FUNC | IMA_MASK},
10585     + {.action = MEASURE, .func = BPRM_CHECK, .mask = MAY_EXEC,
10586     + .flags = IMA_FUNC | IMA_MASK},
10587     + {.action = MEASURE, .func = FILE_CHECK, .mask = MAY_READ,
10588     + .uid = GLOBAL_ROOT_UID, .flags = IMA_FUNC | IMA_INMASK | IMA_EUID},
10589     + {.action = MEASURE, .func = FILE_CHECK, .mask = MAY_READ,
10590     + .uid = GLOBAL_ROOT_UID, .flags = IMA_FUNC | IMA_INMASK | IMA_UID},
10591     {.action = MEASURE, .func = MODULE_CHECK, .flags = IMA_FUNC},
10592     {.action = MEASURE, .func = FIRMWARE_CHECK, .flags = IMA_FUNC},
10593     };
10594     @@ -99,6 +122,7 @@ static struct ima_rule_entry default_appraise_rules[] = {
10595     {.action = DONT_APPRAISE, .fsmagic = BINFMTFS_MAGIC, .flags = IMA_FSMAGIC},
10596     {.action = DONT_APPRAISE, .fsmagic = SECURITYFS_MAGIC, .flags = IMA_FSMAGIC},
10597     {.action = DONT_APPRAISE, .fsmagic = SELINUX_MAGIC, .flags = IMA_FSMAGIC},
10598     + {.action = DONT_APPRAISE, .fsmagic = NSFS_MAGIC, .flags = IMA_FSMAGIC},
10599     {.action = DONT_APPRAISE, .fsmagic = CGROUP_SUPER_MAGIC, .flags = IMA_FSMAGIC},
10600     #ifndef CONFIG_IMA_APPRAISE_SIGNED_INIT
10601     {.action = APPRAISE, .fowner = GLOBAL_ROOT_UID, .flags = IMA_FOWNER},
10602     @@ -115,14 +139,29 @@ static struct list_head *ima_rules;
10603    
10604     static DEFINE_MUTEX(ima_rules_mutex);
10605    
10606     -static bool ima_use_tcb __initdata;
10607     +static int ima_policy __initdata;
10608     static int __init default_measure_policy_setup(char *str)
10609     {
10610     - ima_use_tcb = 1;
10611     + if (ima_policy)
10612     + return 1;
10613     +
10614     + ima_policy = ORIGINAL_TCB;
10615     return 1;
10616     }
10617     __setup("ima_tcb", default_measure_policy_setup);
10618    
10619     +static int __init policy_setup(char *str)
10620     +{
10621     + if (ima_policy)
10622     + return 1;
10623     +
10624     + if (strcmp(str, "tcb") == 0)
10625     + ima_policy = DEFAULT_TCB;
10626     +
10627     + return 1;
10628     +}
10629     +__setup("ima_policy=", policy_setup);
10630     +
10631     static bool ima_use_appraise_tcb __initdata;
10632     static int __init default_appraise_policy_setup(char *str)
10633     {
10634     @@ -182,6 +221,9 @@ static bool ima_match_rules(struct ima_rule_entry *rule,
10635     if ((rule->flags & IMA_MASK) &&
10636     (rule->mask != mask && func != POST_SETATTR))
10637     return false;
10638     + if ((rule->flags & IMA_INMASK) &&
10639     + (!(rule->mask & mask) && func != POST_SETATTR))
10640     + return false;
10641     if ((rule->flags & IMA_FSMAGIC)
10642     && rule->fsmagic != inode->i_sb->s_magic)
10643     return false;
10644     @@ -190,6 +232,16 @@ static bool ima_match_rules(struct ima_rule_entry *rule,
10645     return false;
10646     if ((rule->flags & IMA_UID) && !uid_eq(rule->uid, cred->uid))
10647     return false;
10648     + if (rule->flags & IMA_EUID) {
10649     + if (has_capability_noaudit(current, CAP_SETUID)) {
10650     + if (!uid_eq(rule->uid, cred->euid)
10651     + && !uid_eq(rule->uid, cred->suid)
10652     + && !uid_eq(rule->uid, cred->uid))
10653     + return false;
10654     + } else if (!uid_eq(rule->uid, cred->euid))
10655     + return false;
10656     + }
10657     +
10658     if ((rule->flags & IMA_FOWNER) && !uid_eq(rule->fowner, inode->i_uid))
10659     return false;
10660     for (i = 0; i < MAX_LSM_RULES; i++) {
10661     @@ -333,21 +385,31 @@ void __init ima_init_policy(void)
10662     {
10663     int i, measure_entries, appraise_entries;
10664    
10665     - /* if !ima_use_tcb set entries = 0 so we load NO default rules */
10666     - measure_entries = ima_use_tcb ? ARRAY_SIZE(default_rules) : 0;
10667     + /* if !ima_policy set entries = 0 so we load NO default rules */
10668     + measure_entries = ima_policy ? ARRAY_SIZE(dont_measure_rules) : 0;
10669     appraise_entries = ima_use_appraise_tcb ?
10670     ARRAY_SIZE(default_appraise_rules) : 0;
10671    
10672     - for (i = 0; i < measure_entries + appraise_entries; i++) {
10673     - if (i < measure_entries)
10674     - list_add_tail(&default_rules[i].list,
10675     - &ima_default_rules);
10676     - else {
10677     - int j = i - measure_entries;
10678     + for (i = 0; i < measure_entries; i++)
10679     + list_add_tail(&dont_measure_rules[i].list, &ima_default_rules);
10680    
10681     - list_add_tail(&default_appraise_rules[j].list,
10682     + switch (ima_policy) {
10683     + case ORIGINAL_TCB:
10684     + for (i = 0; i < ARRAY_SIZE(original_measurement_rules); i++)
10685     + list_add_tail(&original_measurement_rules[i].list,
10686     &ima_default_rules);
10687     - }
10688     + break;
10689     + case DEFAULT_TCB:
10690     + for (i = 0; i < ARRAY_SIZE(default_measurement_rules); i++)
10691     + list_add_tail(&default_measurement_rules[i].list,
10692     + &ima_default_rules);
10693     + default:
10694     + break;
10695     + }
10696     +
10697     + for (i = 0; i < appraise_entries; i++) {
10698     + list_add_tail(&default_appraise_rules[i].list,
10699     + &ima_default_rules);
10700     }
10701    
10702     ima_rules = &ima_default_rules;
10703     @@ -373,7 +435,8 @@ enum {
10704     Opt_audit,
10705     Opt_obj_user, Opt_obj_role, Opt_obj_type,
10706     Opt_subj_user, Opt_subj_role, Opt_subj_type,
10707     - Opt_func, Opt_mask, Opt_fsmagic, Opt_uid, Opt_fowner,
10708     + Opt_func, Opt_mask, Opt_fsmagic,
10709     + Opt_uid, Opt_euid, Opt_fowner,
10710     Opt_appraise_type, Opt_fsuuid, Opt_permit_directio
10711     };
10712    
10713     @@ -394,6 +457,7 @@ static match_table_t policy_tokens = {
10714     {Opt_fsmagic, "fsmagic=%s"},
10715     {Opt_fsuuid, "fsuuid=%s"},
10716     {Opt_uid, "uid=%s"},
10717     + {Opt_euid, "euid=%s"},
10718     {Opt_fowner, "fowner=%s"},
10719     {Opt_appraise_type, "appraise_type=%s"},
10720     {Opt_permit_directio, "permit_directio"},
10721     @@ -435,6 +499,7 @@ static void ima_log_string(struct audit_buffer *ab, char *key, char *value)
10722     static int ima_parse_rule(char *rule, struct ima_rule_entry *entry)
10723     {
10724     struct audit_buffer *ab;
10725     + char *from;
10726     char *p;
10727     int result = 0;
10728    
10729     @@ -525,18 +590,23 @@ static int ima_parse_rule(char *rule, struct ima_rule_entry *entry)
10730     if (entry->mask)
10731     result = -EINVAL;
10732    
10733     - if ((strcmp(args[0].from, "MAY_EXEC")) == 0)
10734     + from = args[0].from;
10735     + if (*from == '^')
10736     + from++;
10737     +
10738     + if ((strcmp(from, "MAY_EXEC")) == 0)
10739     entry->mask = MAY_EXEC;
10740     - else if (strcmp(args[0].from, "MAY_WRITE") == 0)
10741     + else if (strcmp(from, "MAY_WRITE") == 0)
10742     entry->mask = MAY_WRITE;
10743     - else if (strcmp(args[0].from, "MAY_READ") == 0)
10744     + else if (strcmp(from, "MAY_READ") == 0)
10745     entry->mask = MAY_READ;
10746     - else if (strcmp(args[0].from, "MAY_APPEND") == 0)
10747     + else if (strcmp(from, "MAY_APPEND") == 0)
10748     entry->mask = MAY_APPEND;
10749     else
10750     result = -EINVAL;
10751     if (!result)
10752     - entry->flags |= IMA_MASK;
10753     + entry->flags |= (*args[0].from == '^')
10754     + ? IMA_INMASK : IMA_MASK;
10755     break;
10756     case Opt_fsmagic:
10757     ima_log_string(ab, "fsmagic", args[0].from);
10758     @@ -566,6 +636,9 @@ static int ima_parse_rule(char *rule, struct ima_rule_entry *entry)
10759     break;
10760     case Opt_uid:
10761     ima_log_string(ab, "uid", args[0].from);
10762     + case Opt_euid:
10763     + if (token == Opt_euid)
10764     + ima_log_string(ab, "euid", args[0].from);
10765    
10766     if (uid_valid(entry->uid)) {
10767     result = -EINVAL;
10768     @@ -574,11 +647,14 @@ static int ima_parse_rule(char *rule, struct ima_rule_entry *entry)
10769    
10770     result = kstrtoul(args[0].from, 10, &lnum);
10771     if (!result) {
10772     - entry->uid = make_kuid(current_user_ns(), (uid_t)lnum);
10773     - if (!uid_valid(entry->uid) || (((uid_t)lnum) != lnum))
10774     + entry->uid = make_kuid(current_user_ns(),
10775     + (uid_t) lnum);
10776     + if (!uid_valid(entry->uid) ||
10777     + (uid_t)lnum != lnum)
10778     result = -EINVAL;
10779     else
10780     - entry->flags |= IMA_UID;
10781     + entry->flags |= (token == Opt_uid)
10782     + ? IMA_UID : IMA_EUID;
10783     }
10784     break;
10785     case Opt_fowner:
10786     diff --git a/security/integrity/ima/ima_template_lib.c b/security/integrity/ima/ima_template_lib.c
10787     index bcfc36cbde6a..61fbd0c0d95c 100644
10788     --- a/security/integrity/ima/ima_template_lib.c
10789     +++ b/security/integrity/ima/ima_template_lib.c
10790     @@ -70,7 +70,8 @@ static void ima_show_template_data_ascii(struct seq_file *m,
10791     enum data_formats datafmt,
10792     struct ima_field_data *field_data)
10793     {
10794     - u8 *buf_ptr = field_data->data, buflen = field_data->len;
10795     + u8 *buf_ptr = field_data->data;
10796     + u32 buflen = field_data->len;
10797    
10798     switch (datafmt) {
10799     case DATA_FMT_DIGEST_WITH_ALGO:
10800     diff --git a/security/keys/keyring.c b/security/keys/keyring.c
10801     index e72548b5897e..d33437007ad2 100644
10802     --- a/security/keys/keyring.c
10803     +++ b/security/keys/keyring.c
10804     @@ -1181,9 +1181,11 @@ void __key_link_end(struct key *keyring,
10805     if (index_key->type == &key_type_keyring)
10806     up_write(&keyring_serialise_link_sem);
10807    
10808     - if (edit && !edit->dead_leaf) {
10809     - key_payload_reserve(keyring,
10810     - keyring->datalen - KEYQUOTA_LINK_BYTES);
10811     + if (edit) {
10812     + if (!edit->dead_leaf) {
10813     + key_payload_reserve(keyring,
10814     + keyring->datalen - KEYQUOTA_LINK_BYTES);
10815     + }
10816     assoc_array_cancel_edit(edit);
10817     }
10818     up_write(&keyring->sem);
10819     diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
10820     index 212070e1de1a..7f8d7f19e044 100644
10821     --- a/security/selinux/hooks.c
10822     +++ b/security/selinux/hooks.c
10823     @@ -3288,7 +3288,8 @@ static int file_map_prot_check(struct file *file, unsigned long prot, int shared
10824     int rc = 0;
10825    
10826     if (default_noexec &&
10827     - (prot & PROT_EXEC) && (!file || (!shared && (prot & PROT_WRITE)))) {
10828     + (prot & PROT_EXEC) && (!file || IS_PRIVATE(file_inode(file)) ||
10829     + (!shared && (prot & PROT_WRITE)))) {
10830     /*
10831     * We are making executable an anonymous mapping or a
10832     * private file mapping that will also be writable.
10833     diff --git a/security/selinux/ss/ebitmap.c b/security/selinux/ss/ebitmap.c
10834     index afe6a269ec17..57644b1dc42e 100644
10835     --- a/security/selinux/ss/ebitmap.c
10836     +++ b/security/selinux/ss/ebitmap.c
10837     @@ -153,6 +153,12 @@ int ebitmap_netlbl_import(struct ebitmap *ebmap,
10838     if (offset == (u32)-1)
10839     return 0;
10840    
10841     + /* don't waste ebitmap space if the netlabel bitmap is empty */
10842     + if (bitmap == 0) {
10843     + offset += EBITMAP_UNIT_SIZE;
10844     + continue;
10845     + }
10846     +
10847     if (e_iter == NULL ||
10848     offset >= e_iter->startbit + EBITMAP_SIZE) {
10849     e_prev = e_iter;
10850     diff --git a/sound/soc/codecs/max98925.c b/sound/soc/codecs/max98925.c
10851     index 9b5a17de4690..aad664225dc3 100644
10852     --- a/sound/soc/codecs/max98925.c
10853     +++ b/sound/soc/codecs/max98925.c
10854     @@ -346,7 +346,7 @@ static int max98925_dai_set_fmt(struct snd_soc_dai *codec_dai,
10855     }
10856    
10857     regmap_update_bits(max98925->regmap, MAX98925_FORMAT,
10858     - M98925_DAI_BCI_MASK, invert);
10859     + M98925_DAI_BCI_MASK | M98925_DAI_WCI_MASK, invert);
10860     return 0;
10861     }
10862    
10863     diff --git a/sound/soc/codecs/rt5645.c b/sound/soc/codecs/rt5645.c
10864     index be4d741c45ba..2ee44abd56a6 100644
10865     --- a/sound/soc/codecs/rt5645.c
10866     +++ b/sound/soc/codecs/rt5645.c
10867     @@ -2837,6 +2837,8 @@ static int rt5645_i2c_probe(struct i2c_client *i2c,
10868     }
10869     }
10870    
10871     + INIT_DELAYED_WORK(&rt5645->jack_detect_work, rt5645_jack_detect_work);
10872     +
10873     if (rt5645->i2c->irq) {
10874     ret = request_threaded_irq(rt5645->i2c->irq, NULL, rt5645_irq,
10875     IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING
10876     @@ -2855,8 +2857,6 @@ static int rt5645_i2c_probe(struct i2c_client *i2c,
10877     dev_err(&i2c->dev, "Fail gpio_direction hp_det_gpio\n");
10878     }
10879    
10880     - INIT_DELAYED_WORK(&rt5645->jack_detect_work, rt5645_jack_detect_work);
10881     -
10882     return snd_soc_register_codec(&i2c->dev, &soc_codec_dev_rt5645,
10883     rt5645_dai, ARRAY_SIZE(rt5645_dai));
10884     }
10885     diff --git a/sound/soc/codecs/tas2552.c b/sound/soc/codecs/tas2552.c
10886     index dfb4ff5cc9ea..18558595ba72 100644
10887     --- a/sound/soc/codecs/tas2552.c
10888     +++ b/sound/soc/codecs/tas2552.c
10889     @@ -120,6 +120,9 @@ static void tas2552_sw_shutdown(struct tas2552_data *tas_data, int sw_shutdown)
10890     {
10891     u8 cfg1_reg;
10892    
10893     + if (!tas_data->codec)
10894     + return;
10895     +
10896     if (sw_shutdown)
10897     cfg1_reg = 0;
10898     else
10899     @@ -335,7 +338,6 @@ static DECLARE_TLV_DB_SCALE(dac_tlv, -7, 100, 24);
10900     static const struct snd_kcontrol_new tas2552_snd_controls[] = {
10901     SOC_SINGLE_TLV("Speaker Driver Playback Volume",
10902     TAS2552_PGA_GAIN, 0, 0x1f, 1, dac_tlv),
10903     - SOC_DAPM_SINGLE("Playback AMP", SND_SOC_NOPM, 0, 1, 0),
10904     };
10905    
10906     static const struct reg_default tas2552_init_regs[] = {
10907     diff --git a/sound/soc/codecs/wm5102.c b/sound/soc/codecs/wm5102.c
10908     index 0c6d1bc0526e..d476221dba51 100644
10909     --- a/sound/soc/codecs/wm5102.c
10910     +++ b/sound/soc/codecs/wm5102.c
10911     @@ -42,7 +42,7 @@ struct wm5102_priv {
10912     static DECLARE_TLV_DB_SCALE(ana_tlv, 0, 100, 0);
10913     static DECLARE_TLV_DB_SCALE(eq_tlv, -1200, 100, 0);
10914     static DECLARE_TLV_DB_SCALE(digital_tlv, -6400, 50, 0);
10915     -static DECLARE_TLV_DB_SCALE(noise_tlv, 0, 600, 0);
10916     +static DECLARE_TLV_DB_SCALE(noise_tlv, -13200, 600, 0);
10917     static DECLARE_TLV_DB_SCALE(ng_tlv, -10200, 600, 0);
10918    
10919     static const struct wm_adsp_region wm5102_dsp1_regions[] = {
10920     diff --git a/sound/soc/codecs/wm5110.c b/sound/soc/codecs/wm5110.c
10921     index fbaeddb3e903..3ee6cfd0578b 100644
10922     --- a/sound/soc/codecs/wm5110.c
10923     +++ b/sound/soc/codecs/wm5110.c
10924     @@ -167,7 +167,7 @@ static int wm5110_sysclk_ev(struct snd_soc_dapm_widget *w,
10925     static DECLARE_TLV_DB_SCALE(ana_tlv, 0, 100, 0);
10926     static DECLARE_TLV_DB_SCALE(eq_tlv, -1200, 100, 0);
10927     static DECLARE_TLV_DB_SCALE(digital_tlv, -6400, 50, 0);
10928     -static DECLARE_TLV_DB_SCALE(noise_tlv, 0, 600, 0);
10929     +static DECLARE_TLV_DB_SCALE(noise_tlv, -13200, 600, 0);
10930     static DECLARE_TLV_DB_SCALE(ng_tlv, -10200, 600, 0);
10931    
10932     #define WM5110_NG_SRC(name, base) \
10933     diff --git a/sound/soc/codecs/wm8737.c b/sound/soc/codecs/wm8737.c
10934     index ada9ac1ba2c6..51171e457fa4 100644
10935     --- a/sound/soc/codecs/wm8737.c
10936     +++ b/sound/soc/codecs/wm8737.c
10937     @@ -483,7 +483,8 @@ static int wm8737_set_bias_level(struct snd_soc_codec *codec,
10938    
10939     /* Fast VMID ramp at 2*2.5k */
10940     snd_soc_update_bits(codec, WM8737_MISC_BIAS_CONTROL,
10941     - WM8737_VMIDSEL_MASK, 0x4);
10942     + WM8737_VMIDSEL_MASK,
10943     + 2 << WM8737_VMIDSEL_SHIFT);
10944    
10945     /* Bring VMID up */
10946     snd_soc_update_bits(codec, WM8737_POWER_MANAGEMENT,
10947     @@ -497,7 +498,8 @@ static int wm8737_set_bias_level(struct snd_soc_codec *codec,
10948    
10949     /* VMID at 2*300k */
10950     snd_soc_update_bits(codec, WM8737_MISC_BIAS_CONTROL,
10951     - WM8737_VMIDSEL_MASK, 2);
10952     + WM8737_VMIDSEL_MASK,
10953     + 1 << WM8737_VMIDSEL_SHIFT);
10954    
10955     break;
10956    
10957     diff --git a/sound/soc/codecs/wm8903.h b/sound/soc/codecs/wm8903.h
10958     index db949311c0f2..0bb4a647755d 100644
10959     --- a/sound/soc/codecs/wm8903.h
10960     +++ b/sound/soc/codecs/wm8903.h
10961     @@ -172,7 +172,7 @@ extern int wm8903_mic_detect(struct snd_soc_codec *codec,
10962     #define WM8903_VMID_BUF_ENA_WIDTH 1 /* VMID_BUF_ENA */
10963    
10964     #define WM8903_VMID_RES_50K 2
10965     -#define WM8903_VMID_RES_250K 3
10966     +#define WM8903_VMID_RES_250K 4
10967     #define WM8903_VMID_RES_5K 6
10968    
10969     /*
10970     diff --git a/sound/soc/codecs/wm8955.c b/sound/soc/codecs/wm8955.c
10971     index 00bec915d652..03e04bf6c5ba 100644
10972     --- a/sound/soc/codecs/wm8955.c
10973     +++ b/sound/soc/codecs/wm8955.c
10974     @@ -298,7 +298,7 @@ static int wm8955_configure_clocking(struct snd_soc_codec *codec)
10975     snd_soc_update_bits(codec, WM8955_PLL_CONTROL_2,
10976     WM8955_K_17_9_MASK,
10977     (pll.k >> 9) & WM8955_K_17_9_MASK);
10978     - snd_soc_update_bits(codec, WM8955_PLL_CONTROL_2,
10979     + snd_soc_update_bits(codec, WM8955_PLL_CONTROL_3,
10980     WM8955_K_8_0_MASK,
10981     pll.k & WM8955_K_8_0_MASK);
10982     if (pll.k)
10983     diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c
10984     index e97a7615df85..8d7f63253440 100644
10985     --- a/sound/soc/codecs/wm8960.c
10986     +++ b/sound/soc/codecs/wm8960.c
10987     @@ -245,7 +245,7 @@ SOC_SINGLE("PCM Playback -6dB Switch", WM8960_DACCTL1, 7, 1, 0),
10988     SOC_ENUM("ADC Polarity", wm8960_enum[0]),
10989     SOC_SINGLE("ADC High Pass Filter Switch", WM8960_DACCTL1, 0, 1, 0),
10990    
10991     -SOC_ENUM("DAC Polarity", wm8960_enum[2]),
10992     +SOC_ENUM("DAC Polarity", wm8960_enum[1]),
10993     SOC_SINGLE_BOOL_EXT("DAC Deemphasis Switch", 0,
10994     wm8960_get_deemph, wm8960_put_deemph),
10995    
10996     diff --git a/sound/soc/codecs/wm8997.c b/sound/soc/codecs/wm8997.c
10997     index a4d11770630c..e7c81baefe66 100644
10998     --- a/sound/soc/codecs/wm8997.c
10999     +++ b/sound/soc/codecs/wm8997.c
11000     @@ -40,7 +40,7 @@ struct wm8997_priv {
11001     static DECLARE_TLV_DB_SCALE(ana_tlv, 0, 100, 0);
11002     static DECLARE_TLV_DB_SCALE(eq_tlv, -1200, 100, 0);
11003     static DECLARE_TLV_DB_SCALE(digital_tlv, -6400, 50, 0);
11004     -static DECLARE_TLV_DB_SCALE(noise_tlv, 0, 600, 0);
11005     +static DECLARE_TLV_DB_SCALE(noise_tlv, -13200, 600, 0);
11006     static DECLARE_TLV_DB_SCALE(ng_tlv, -10200, 600, 0);
11007    
11008     static const struct reg_default wm8997_sysclk_reva_patch[] = {
11009     diff --git a/sound/soc/fsl/imx-wm8962.c b/sound/soc/fsl/imx-wm8962.c
11010     index cd146d4fa805..b38b98cae855 100644
11011     --- a/sound/soc/fsl/imx-wm8962.c
11012     +++ b/sound/soc/fsl/imx-wm8962.c
11013     @@ -190,7 +190,7 @@ static int imx_wm8962_probe(struct platform_device *pdev)
11014     dev_err(&pdev->dev, "audmux internal port setup failed\n");
11015     return ret;
11016     }
11017     - imx_audmux_v2_configure_port(ext_port,
11018     + ret = imx_audmux_v2_configure_port(ext_port,
11019     IMX_AUDMUX_V2_PTCR_SYN,
11020     IMX_AUDMUX_V2_PDCR_RXDSEL(int_port));
11021     if (ret) {
11022     diff --git a/sound/soc/omap/Kconfig b/sound/soc/omap/Kconfig
11023     index 6768e4f7d7d0..30d0109703a9 100644
11024     --- a/sound/soc/omap/Kconfig
11025     +++ b/sound/soc/omap/Kconfig
11026     @@ -100,12 +100,13 @@ config SND_OMAP_SOC_OMAP_TWL4030
11027    
11028     config SND_OMAP_SOC_OMAP_ABE_TWL6040
11029     tristate "SoC Audio support for OMAP boards using ABE and twl6040 codec"
11030     - depends on TWL6040_CORE && SND_OMAP_SOC && (ARCH_OMAP4 || SOC_OMAP5 || COMPILE_TEST)
11031     + depends on TWL6040_CORE && SND_OMAP_SOC
11032     + depends on ARCH_OMAP4 || (SOC_OMAP5 && MFD_PALMAS) || COMPILE_TEST
11033     select SND_OMAP_SOC_DMIC
11034     select SND_OMAP_SOC_MCPDM
11035     select SND_SOC_TWL6040
11036     select SND_SOC_DMIC
11037     - select COMMON_CLK_PALMAS if MFD_PALMAS
11038     + select COMMON_CLK_PALMAS if (SOC_OMAP5 && MFD_PALMAS)
11039     help
11040     Say Y if you want to add support for SoC audio on OMAP boards using
11041     ABE and twl6040 codec. This driver currently supports:
11042     diff --git a/sound/soc/qcom/Kconfig b/sound/soc/qcom/Kconfig
11043     index 5f58e4f1bca9..b07f183fc47f 100644
11044     --- a/sound/soc/qcom/Kconfig
11045     +++ b/sound/soc/qcom/Kconfig
11046     @@ -6,12 +6,10 @@ config SND_SOC_QCOM
11047    
11048     config SND_SOC_LPASS_CPU
11049     tristate
11050     - depends on SND_SOC_QCOM
11051     select REGMAP_MMIO
11052    
11053     config SND_SOC_LPASS_PLATFORM
11054     tristate
11055     - depends on SND_SOC_QCOM
11056     select REGMAP_MMIO
11057    
11058     config SND_SOC_STORM
11059     diff --git a/tools/perf/util/cloexec.c b/tools/perf/util/cloexec.c
11060     index 85b523885f9d..2babddaa2481 100644
11061     --- a/tools/perf/util/cloexec.c
11062     +++ b/tools/perf/util/cloexec.c
11063     @@ -7,11 +7,15 @@
11064    
11065     static unsigned long flag = PERF_FLAG_FD_CLOEXEC;
11066    
11067     +#ifdef __GLIBC_PREREQ
11068     +#if !__GLIBC_PREREQ(2, 6)
11069     int __weak sched_getcpu(void)
11070     {
11071     errno = ENOSYS;
11072     return -1;
11073     }
11074     +#endif
11075     +#endif
11076    
11077     static int perf_flag_probe(void)
11078     {