Annotation of /trunk/kernel-alx/patches-5.4/0289-5.4.190-all-fixes.patch
Parent Directory | Revision Log
Revision 3637 -
(hide annotations)
(download)
Mon Oct 24 12:40:44 2022 UTC (19 months, 3 weeks ago) by niro
File size: 60261 byte(s)
Mon Oct 24 12:40:44 2022 UTC (19 months, 3 weeks ago) by niro
File size: 60261 byte(s)
-add missing
1 | niro | 3637 | diff --git a/Makefile b/Makefile |
2 | index cbb71900d3dcf..fd239ec16278b 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,7 +1,7 @@ | ||
6 | # SPDX-License-Identifier: GPL-2.0 | ||
7 | VERSION = 5 | ||
8 | PATCHLEVEL = 4 | ||
9 | -SUBLEVEL = 189 | ||
10 | +SUBLEVEL = 190 | ||
11 | EXTRAVERSION = | ||
12 | NAME = Kleptomaniac Octopus | ||
13 | |||
14 | diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c | ||
15 | index 5b3549f1236c5..b2ede9bf82dff 100644 | ||
16 | --- a/arch/arm/mach-davinci/board-da850-evm.c | ||
17 | +++ b/arch/arm/mach-davinci/board-da850-evm.c | ||
18 | @@ -1101,11 +1101,13 @@ static int __init da850_evm_config_emac(void) | ||
19 | int ret; | ||
20 | u32 val; | ||
21 | struct davinci_soc_info *soc_info = &davinci_soc_info; | ||
22 | - u8 rmii_en = soc_info->emac_pdata->rmii_en; | ||
23 | + u8 rmii_en; | ||
24 | |||
25 | if (!machine_is_davinci_da850_evm()) | ||
26 | return 0; | ||
27 | |||
28 | + rmii_en = soc_info->emac_pdata->rmii_en; | ||
29 | + | ||
30 | cfg_chip3_base = DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP3_REG); | ||
31 | |||
32 | val = __raw_readl(cfg_chip3_base); | ||
33 | diff --git a/arch/arm64/kernel/alternative.c b/arch/arm64/kernel/alternative.c | ||
34 | index 73039949b5ce2..5f8e4c2df53cc 100644 | ||
35 | --- a/arch/arm64/kernel/alternative.c | ||
36 | +++ b/arch/arm64/kernel/alternative.c | ||
37 | @@ -41,7 +41,7 @@ bool alternative_is_applied(u16 cpufeature) | ||
38 | /* | ||
39 | * Check if the target PC is within an alternative block. | ||
40 | */ | ||
41 | -static bool branch_insn_requires_update(struct alt_instr *alt, unsigned long pc) | ||
42 | +static __always_inline bool branch_insn_requires_update(struct alt_instr *alt, unsigned long pc) | ||
43 | { | ||
44 | unsigned long replptr = (unsigned long)ALT_REPL_PTR(alt); | ||
45 | return !(pc >= replptr && pc <= (replptr + alt->alt_len)); | ||
46 | @@ -49,7 +49,7 @@ static bool branch_insn_requires_update(struct alt_instr *alt, unsigned long pc) | ||
47 | |||
48 | #define align_down(x, a) ((unsigned long)(x) & ~(((unsigned long)(a)) - 1)) | ||
49 | |||
50 | -static u32 get_alt_insn(struct alt_instr *alt, __le32 *insnptr, __le32 *altinsnptr) | ||
51 | +static __always_inline u32 get_alt_insn(struct alt_instr *alt, __le32 *insnptr, __le32 *altinsnptr) | ||
52 | { | ||
53 | u32 insn; | ||
54 | |||
55 | @@ -94,7 +94,7 @@ static u32 get_alt_insn(struct alt_instr *alt, __le32 *insnptr, __le32 *altinsnp | ||
56 | return insn; | ||
57 | } | ||
58 | |||
59 | -static void patch_alternative(struct alt_instr *alt, | ||
60 | +static noinstr void patch_alternative(struct alt_instr *alt, | ||
61 | __le32 *origptr, __le32 *updptr, int nr_inst) | ||
62 | { | ||
63 | __le32 *replptr; | ||
64 | diff --git a/arch/powerpc/include/asm/page.h b/arch/powerpc/include/asm/page.h | ||
65 | index 6ba5adb96a3be..0d8f9246ce153 100644 | ||
66 | --- a/arch/powerpc/include/asm/page.h | ||
67 | +++ b/arch/powerpc/include/asm/page.h | ||
68 | @@ -132,7 +132,11 @@ static inline bool pfn_valid(unsigned long pfn) | ||
69 | #define virt_to_page(kaddr) pfn_to_page(virt_to_pfn(kaddr)) | ||
70 | #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) | ||
71 | |||
72 | -#define virt_addr_valid(kaddr) pfn_valid(virt_to_pfn(kaddr)) | ||
73 | +#define virt_addr_valid(vaddr) ({ \ | ||
74 | + unsigned long _addr = (unsigned long)vaddr; \ | ||
75 | + _addr >= PAGE_OFFSET && _addr < (unsigned long)high_memory && \ | ||
76 | + pfn_valid(virt_to_pfn(_addr)); \ | ||
77 | +}) | ||
78 | |||
79 | /* | ||
80 | * On Book-E parts we need __va to parse the device tree and we can't | ||
81 | diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c | ||
82 | index dca1590f295d0..af8a1bac93458 100644 | ||
83 | --- a/drivers/ata/libata-core.c | ||
84 | +++ b/drivers/ata/libata-core.c | ||
85 | @@ -4580,6 +4580,9 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = { | ||
86 | ATA_HORKAGE_ZERO_AFTER_TRIM, }, | ||
87 | { "Crucial_CT*MX100*", "MU01", ATA_HORKAGE_NO_NCQ_TRIM | | ||
88 | ATA_HORKAGE_ZERO_AFTER_TRIM, }, | ||
89 | + { "Samsung SSD 840 EVO*", NULL, ATA_HORKAGE_NO_NCQ_TRIM | | ||
90 | + ATA_HORKAGE_NO_DMA_LOG | | ||
91 | + ATA_HORKAGE_ZERO_AFTER_TRIM, }, | ||
92 | { "Samsung SSD 840*", NULL, ATA_HORKAGE_NO_NCQ_TRIM | | ||
93 | ATA_HORKAGE_ZERO_AFTER_TRIM, }, | ||
94 | { "Samsung SSD 850*", NULL, ATA_HORKAGE_NO_NCQ_TRIM | | ||
95 | diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c | ||
96 | index 13c6eee481da7..d71c7b9b96650 100644 | ||
97 | --- a/drivers/gpio/gpiolib-acpi.c | ||
98 | +++ b/drivers/gpio/gpiolib-acpi.c | ||
99 | @@ -275,8 +275,8 @@ static acpi_status acpi_gpiochip_alloc_event(struct acpi_resource *ares, | ||
100 | pin = agpio->pin_table[0]; | ||
101 | |||
102 | if (pin <= 255) { | ||
103 | - char ev_name[5]; | ||
104 | - sprintf(ev_name, "_%c%02hhX", | ||
105 | + char ev_name[8]; | ||
106 | + sprintf(ev_name, "_%c%02X", | ||
107 | agpio->triggering == ACPI_EDGE_SENSITIVE ? 'E' : 'L', | ||
108 | pin); | ||
109 | if (ACPI_SUCCESS(acpi_get_handle(handle, ev_name, &evt_handle))) | ||
110 | diff --git a/drivers/gpu/drm/amd/amdgpu/ObjectID.h b/drivers/gpu/drm/amd/amdgpu/ObjectID.h | ||
111 | index 5b393622f5920..a0f0a17e224fe 100644 | ||
112 | --- a/drivers/gpu/drm/amd/amdgpu/ObjectID.h | ||
113 | +++ b/drivers/gpu/drm/amd/amdgpu/ObjectID.h | ||
114 | @@ -119,6 +119,7 @@ | ||
115 | #define CONNECTOR_OBJECT_ID_eDP 0x14 | ||
116 | #define CONNECTOR_OBJECT_ID_MXM 0x15 | ||
117 | #define CONNECTOR_OBJECT_ID_LVDS_eDP 0x16 | ||
118 | +#define CONNECTOR_OBJECT_ID_USBC 0x17 | ||
119 | |||
120 | /* deleted */ | ||
121 | |||
122 | diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | ||
123 | index e8e1720104160..ffd7547135225 100644 | ||
124 | --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | ||
125 | +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | ||
126 | @@ -633,7 +633,7 @@ MODULE_PARM_DESC(sched_policy, | ||
127 | * Maximum number of processes that HWS can schedule concurrently. The maximum is the | ||
128 | * number of VMIDs assigned to the HWS, which is also the default. | ||
129 | */ | ||
130 | -int hws_max_conc_proc = 8; | ||
131 | +int hws_max_conc_proc = -1; | ||
132 | module_param(hws_max_conc_proc, int, 0444); | ||
133 | MODULE_PARM_DESC(hws_max_conc_proc, | ||
134 | "Max # processes HWS can execute concurrently when sched_policy=0 (0 = no concurrency, #VMIDs for KFD = Maximum(default))"); | ||
135 | diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c | ||
136 | index ad9483b9eea32..60ee1a8321129 100644 | ||
137 | --- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c | ||
138 | +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c | ||
139 | @@ -609,15 +609,10 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd, | ||
140 | - kfd->vm_info.first_vmid_kfd + 1; | ||
141 | |||
142 | /* Verify module parameters regarding mapped process number*/ | ||
143 | - if ((hws_max_conc_proc < 0) | ||
144 | - || (hws_max_conc_proc > kfd->vm_info.vmid_num_kfd)) { | ||
145 | - dev_err(kfd_device, | ||
146 | - "hws_max_conc_proc %d must be between 0 and %d, use %d instead\n", | ||
147 | - hws_max_conc_proc, kfd->vm_info.vmid_num_kfd, | ||
148 | - kfd->vm_info.vmid_num_kfd); | ||
149 | + if (hws_max_conc_proc >= 0) | ||
150 | + kfd->max_proc_per_quantum = min((u32)hws_max_conc_proc, kfd->vm_info.vmid_num_kfd); | ||
151 | + else | ||
152 | kfd->max_proc_per_quantum = kfd->vm_info.vmid_num_kfd; | ||
153 | - } else | ||
154 | - kfd->max_proc_per_quantum = hws_max_conc_proc; | ||
155 | |||
156 | /* Allocate global GWS that is shared by all KFD processes */ | ||
157 | if (hws_gws_support && amdgpu_amdkfd_alloc_gws(kfd->kgd, | ||
158 | diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_events.c b/drivers/gpu/drm/amd/amdkfd/kfd_events.c | ||
159 | index d674d4b3340fa..adbb2fec2e0f2 100644 | ||
160 | --- a/drivers/gpu/drm/amd/amdkfd/kfd_events.c | ||
161 | +++ b/drivers/gpu/drm/amd/amdkfd/kfd_events.c | ||
162 | @@ -532,6 +532,8 @@ static struct kfd_event_waiter *alloc_event_waiters(uint32_t num_events) | ||
163 | event_waiters = kmalloc_array(num_events, | ||
164 | sizeof(struct kfd_event_waiter), | ||
165 | GFP_KERNEL); | ||
166 | + if (!event_waiters) | ||
167 | + return NULL; | ||
168 | |||
169 | for (i = 0; (event_waiters) && (i < num_events) ; i++) { | ||
170 | init_wait(&event_waiters[i].wait); | ||
171 | diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | ||
172 | index c5231c50c4126..de33864af70b8 100644 | ||
173 | --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | ||
174 | +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | ||
175 | @@ -1210,7 +1210,8 @@ static int dm_resume(void *handle) | ||
176 | * this is the case when traversing through already created | ||
177 | * MST connectors, should be skipped | ||
178 | */ | ||
179 | - if (aconnector->mst_port) | ||
180 | + if (aconnector->dc_link && | ||
181 | + aconnector->dc_link->type == dc_connection_mst_branch) | ||
182 | continue; | ||
183 | |||
184 | mutex_lock(&aconnector->hpd_lock); | ||
185 | diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c | ||
186 | index 95a5310e9e661..de246e183d6ba 100644 | ||
187 | --- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c | ||
188 | +++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c | ||
189 | @@ -1546,8 +1546,8 @@ bool dc_is_stream_unchanged( | ||
190 | if (old_stream->ignore_msa_timing_param != stream->ignore_msa_timing_param) | ||
191 | return false; | ||
192 | |||
193 | - // Only Have Audio left to check whether it is same or not. This is a corner case for Tiled sinks | ||
194 | - if (old_stream->audio_info.mode_count != stream->audio_info.mode_count) | ||
195 | + /*compare audio info*/ | ||
196 | + if (memcmp(&old_stream->audio_info, &stream->audio_info, sizeof(stream->audio_info)) != 0) | ||
197 | return false; | ||
198 | |||
199 | return true; | ||
200 | diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | ||
201 | index bc5ebea1abede..fa3acf60e7bd2 100644 | ||
202 | --- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | ||
203 | +++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | ||
204 | @@ -2202,14 +2202,18 @@ static void dcn10_update_mpcc(struct dc *dc, struct pipe_ctx *pipe_ctx) | ||
205 | &blnd_cfg.black_color); | ||
206 | } | ||
207 | |||
208 | - if (per_pixel_alpha) | ||
209 | - blnd_cfg.alpha_mode = MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA; | ||
210 | - else | ||
211 | - blnd_cfg.alpha_mode = MPCC_ALPHA_BLEND_MODE_GLOBAL_ALPHA; | ||
212 | - | ||
213 | blnd_cfg.overlap_only = false; | ||
214 | blnd_cfg.global_gain = 0xff; | ||
215 | |||
216 | + if (per_pixel_alpha && pipe_ctx->plane_state->global_alpha) { | ||
217 | + blnd_cfg.alpha_mode = MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA_COMBINED_GLOBAL_GAIN; | ||
218 | + blnd_cfg.global_gain = pipe_ctx->plane_state->global_alpha_value; | ||
219 | + } else if (per_pixel_alpha) { | ||
220 | + blnd_cfg.alpha_mode = MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA; | ||
221 | + } else { | ||
222 | + blnd_cfg.alpha_mode = MPCC_ALPHA_BLEND_MODE_GLOBAL_ALPHA; | ||
223 | + } | ||
224 | + | ||
225 | if (pipe_ctx->plane_state->global_alpha) | ||
226 | blnd_cfg.global_alpha = pipe_ctx->plane_state->global_alpha_value; | ||
227 | else | ||
228 | diff --git a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c | ||
229 | index 03a2e1d7f0673..f7965a5d24442 100644 | ||
230 | --- a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c | ||
231 | +++ b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c | ||
232 | @@ -1740,14 +1740,18 @@ static void dcn20_update_mpcc(struct dc *dc, struct pipe_ctx *pipe_ctx) | ||
233 | pipe_ctx, &blnd_cfg.black_color); | ||
234 | } | ||
235 | |||
236 | - if (per_pixel_alpha) | ||
237 | - blnd_cfg.alpha_mode = MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA; | ||
238 | - else | ||
239 | - blnd_cfg.alpha_mode = MPCC_ALPHA_BLEND_MODE_GLOBAL_ALPHA; | ||
240 | - | ||
241 | blnd_cfg.overlap_only = false; | ||
242 | blnd_cfg.global_gain = 0xff; | ||
243 | |||
244 | + if (per_pixel_alpha && pipe_ctx->plane_state->global_alpha) { | ||
245 | + blnd_cfg.alpha_mode = MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA_COMBINED_GLOBAL_GAIN; | ||
246 | + blnd_cfg.global_gain = pipe_ctx->plane_state->global_alpha_value; | ||
247 | + } else if (per_pixel_alpha) { | ||
248 | + blnd_cfg.alpha_mode = MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA; | ||
249 | + } else { | ||
250 | + blnd_cfg.alpha_mode = MPCC_ALPHA_BLEND_MODE_GLOBAL_ALPHA; | ||
251 | + } | ||
252 | + | ||
253 | if (pipe_ctx->plane_state->global_alpha) | ||
254 | blnd_cfg.global_alpha = pipe_ctx->plane_state->global_alpha_value; | ||
255 | else | ||
256 | diff --git a/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c b/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c | ||
257 | index d885d642ed7fc..537736713598b 100644 | ||
258 | --- a/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c | ||
259 | +++ b/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c | ||
260 | @@ -85,7 +85,8 @@ | ||
261 | //PB7 = MD0 | ||
262 | #define MASK_VTEM_MD0__VRR_EN 0x01 | ||
263 | #define MASK_VTEM_MD0__M_CONST 0x02 | ||
264 | -#define MASK_VTEM_MD0__RESERVED2 0x0C | ||
265 | +#define MASK_VTEM_MD0__QMS_EN 0x04 | ||
266 | +#define MASK_VTEM_MD0__RESERVED2 0x08 | ||
267 | #define MASK_VTEM_MD0__FVA_FACTOR_M1 0xF0 | ||
268 | |||
269 | //MD1 | ||
270 | @@ -94,7 +95,7 @@ | ||
271 | //MD2 | ||
272 | #define MASK_VTEM_MD2__BASE_REFRESH_RATE_98 0x03 | ||
273 | #define MASK_VTEM_MD2__RB 0x04 | ||
274 | -#define MASK_VTEM_MD2__RESERVED3 0xF8 | ||
275 | +#define MASK_VTEM_MD2__NEXT_TFR 0xF8 | ||
276 | |||
277 | //MD3 | ||
278 | #define MASK_VTEM_MD3__BASE_REFRESH_RATE_07 0xFF | ||
279 | diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c b/drivers/gpu/drm/msm/dsi/dsi_manager.c | ||
280 | index 73127948f54d9..f3ff2cdc288ba 100644 | ||
281 | --- a/drivers/gpu/drm/msm/dsi/dsi_manager.c | ||
282 | +++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c | ||
283 | @@ -625,7 +625,7 @@ struct drm_connector *msm_dsi_manager_connector_init(u8 id) | ||
284 | return connector; | ||
285 | |||
286 | fail: | ||
287 | - connector->funcs->destroy(msm_dsi->connector); | ||
288 | + connector->funcs->destroy(connector); | ||
289 | return ERR_PTR(ret); | ||
290 | } | ||
291 | |||
292 | diff --git a/drivers/gpu/ipu-v3/ipu-di.c b/drivers/gpu/ipu-v3/ipu-di.c | ||
293 | index b4a31d506fccf..74eca68891add 100644 | ||
294 | --- a/drivers/gpu/ipu-v3/ipu-di.c | ||
295 | +++ b/drivers/gpu/ipu-v3/ipu-di.c | ||
296 | @@ -451,8 +451,9 @@ static void ipu_di_config_clock(struct ipu_di *di, | ||
297 | |||
298 | error = rate / (sig->mode.pixelclock / 1000); | ||
299 | |||
300 | - dev_dbg(di->ipu->dev, " IPU clock can give %lu with divider %u, error %d.%u%%\n", | ||
301 | - rate, div, (signed)(error - 1000) / 10, error % 10); | ||
302 | + dev_dbg(di->ipu->dev, " IPU clock can give %lu with divider %u, error %c%d.%d%%\n", | ||
303 | + rate, div, error < 1000 ? '-' : '+', | ||
304 | + abs(error - 1000) / 10, abs(error - 1000) % 10); | ||
305 | |||
306 | /* Allow a 1% error */ | ||
307 | if (error < 1010 && error >= 990) { | ||
308 | diff --git a/drivers/hv/ring_buffer.c b/drivers/hv/ring_buffer.c | ||
309 | index 9a03b163cbbda..59f1e64908b1d 100644 | ||
310 | --- a/drivers/hv/ring_buffer.c | ||
311 | +++ b/drivers/hv/ring_buffer.c | ||
312 | @@ -378,7 +378,16 @@ int hv_ringbuffer_read(struct vmbus_channel *channel, | ||
313 | static u32 hv_pkt_iter_avail(const struct hv_ring_buffer_info *rbi) | ||
314 | { | ||
315 | u32 priv_read_loc = rbi->priv_read_index; | ||
316 | - u32 write_loc = READ_ONCE(rbi->ring_buffer->write_index); | ||
317 | + u32 write_loc; | ||
318 | + | ||
319 | + /* | ||
320 | + * The Hyper-V host writes the packet data, then uses | ||
321 | + * store_release() to update the write_index. Use load_acquire() | ||
322 | + * here to prevent loads of the packet data from being re-ordered | ||
323 | + * before the read of the write_index and potentially getting | ||
324 | + * stale data. | ||
325 | + */ | ||
326 | + write_loc = virt_load_acquire(&rbi->ring_buffer->write_index); | ||
327 | |||
328 | if (write_loc >= priv_read_loc) | ||
329 | return write_loc - priv_read_loc; | ||
330 | diff --git a/drivers/i2c/busses/i2c-pasemi.c b/drivers/i2c/busses/i2c-pasemi.c | ||
331 | index 20f2772c0e79b..2c909522f0f38 100644 | ||
332 | --- a/drivers/i2c/busses/i2c-pasemi.c | ||
333 | +++ b/drivers/i2c/busses/i2c-pasemi.c | ||
334 | @@ -137,6 +137,12 @@ static int pasemi_i2c_xfer_msg(struct i2c_adapter *adapter, | ||
335 | |||
336 | TXFIFO_WR(smbus, msg->buf[msg->len-1] | | ||
337 | (stop ? MTXFIFO_STOP : 0)); | ||
338 | + | ||
339 | + if (stop) { | ||
340 | + err = pasemi_smb_waitready(smbus); | ||
341 | + if (err) | ||
342 | + goto reset_out; | ||
343 | + } | ||
344 | } | ||
345 | |||
346 | return 0; | ||
347 | diff --git a/drivers/md/dm-integrity.c b/drivers/md/dm-integrity.c | ||
348 | index 9f4d657dd36c8..28a9eeae83b66 100644 | ||
349 | --- a/drivers/md/dm-integrity.c | ||
350 | +++ b/drivers/md/dm-integrity.c | ||
351 | @@ -4054,6 +4054,7 @@ try_smaller_buffer: | ||
352 | } | ||
353 | |||
354 | if (ic->internal_hash) { | ||
355 | + size_t recalc_tags_size; | ||
356 | ic->recalc_wq = alloc_workqueue("dm-integrity-recalc", WQ_MEM_RECLAIM, 1); | ||
357 | if (!ic->recalc_wq ) { | ||
358 | ti->error = "Cannot allocate workqueue"; | ||
359 | @@ -4067,8 +4068,10 @@ try_smaller_buffer: | ||
360 | r = -ENOMEM; | ||
361 | goto bad; | ||
362 | } | ||
363 | - ic->recalc_tags = kvmalloc_array(RECALC_SECTORS >> ic->sb->log2_sectors_per_block, | ||
364 | - ic->tag_size, GFP_KERNEL); | ||
365 | + recalc_tags_size = (RECALC_SECTORS >> ic->sb->log2_sectors_per_block) * ic->tag_size; | ||
366 | + if (crypto_shash_digestsize(ic->internal_hash) > ic->tag_size) | ||
367 | + recalc_tags_size += crypto_shash_digestsize(ic->internal_hash) - ic->tag_size; | ||
368 | + ic->recalc_tags = kvmalloc(recalc_tags_size, GFP_KERNEL); | ||
369 | if (!ic->recalc_tags) { | ||
370 | ti->error = "Cannot allocate tags for recalculating"; | ||
371 | r = -ENOMEM; | ||
372 | diff --git a/drivers/memory/atmel-ebi.c b/drivers/memory/atmel-ebi.c | ||
373 | index 89646896a1833..6f9cf6270a437 100644 | ||
374 | --- a/drivers/memory/atmel-ebi.c | ||
375 | +++ b/drivers/memory/atmel-ebi.c | ||
376 | @@ -545,20 +545,27 @@ static int atmel_ebi_probe(struct platform_device *pdev) | ||
377 | smc_np = of_parse_phandle(dev->of_node, "atmel,smc", 0); | ||
378 | |||
379 | ebi->smc.regmap = syscon_node_to_regmap(smc_np); | ||
380 | - if (IS_ERR(ebi->smc.regmap)) | ||
381 | - return PTR_ERR(ebi->smc.regmap); | ||
382 | + if (IS_ERR(ebi->smc.regmap)) { | ||
383 | + ret = PTR_ERR(ebi->smc.regmap); | ||
384 | + goto put_node; | ||
385 | + } | ||
386 | |||
387 | ebi->smc.layout = atmel_hsmc_get_reg_layout(smc_np); | ||
388 | - if (IS_ERR(ebi->smc.layout)) | ||
389 | - return PTR_ERR(ebi->smc.layout); | ||
390 | + if (IS_ERR(ebi->smc.layout)) { | ||
391 | + ret = PTR_ERR(ebi->smc.layout); | ||
392 | + goto put_node; | ||
393 | + } | ||
394 | |||
395 | ebi->smc.clk = of_clk_get(smc_np, 0); | ||
396 | if (IS_ERR(ebi->smc.clk)) { | ||
397 | - if (PTR_ERR(ebi->smc.clk) != -ENOENT) | ||
398 | - return PTR_ERR(ebi->smc.clk); | ||
399 | + if (PTR_ERR(ebi->smc.clk) != -ENOENT) { | ||
400 | + ret = PTR_ERR(ebi->smc.clk); | ||
401 | + goto put_node; | ||
402 | + } | ||
403 | |||
404 | ebi->smc.clk = NULL; | ||
405 | } | ||
406 | + of_node_put(smc_np); | ||
407 | ret = clk_prepare_enable(ebi->smc.clk); | ||
408 | if (ret) | ||
409 | return ret; | ||
410 | @@ -609,6 +616,10 @@ static int atmel_ebi_probe(struct platform_device *pdev) | ||
411 | } | ||
412 | |||
413 | return of_platform_populate(np, NULL, NULL, dev); | ||
414 | + | ||
415 | +put_node: | ||
416 | + of_node_put(smc_np); | ||
417 | + return ret; | ||
418 | } | ||
419 | |||
420 | static __maybe_unused int atmel_ebi_resume(struct device *dev) | ||
421 | diff --git a/drivers/net/ethernet/mellanox/mlxsw/i2c.c b/drivers/net/ethernet/mellanox/mlxsw/i2c.c | ||
422 | index 95f408d0e103c..7cc4c30af1a71 100644 | ||
423 | --- a/drivers/net/ethernet/mellanox/mlxsw/i2c.c | ||
424 | +++ b/drivers/net/ethernet/mellanox/mlxsw/i2c.c | ||
425 | @@ -649,6 +649,7 @@ static int mlxsw_i2c_probe(struct i2c_client *client, | ||
426 | return 0; | ||
427 | |||
428 | errout: | ||
429 | + mutex_destroy(&mlxsw_i2c->cmd.lock); | ||
430 | i2c_set_clientdata(client, NULL); | ||
431 | |||
432 | return err; | ||
433 | diff --git a/drivers/net/ethernet/micrel/Kconfig b/drivers/net/ethernet/micrel/Kconfig | ||
434 | index b9c4d48e28e42..120ed4633a096 100644 | ||
435 | --- a/drivers/net/ethernet/micrel/Kconfig | ||
436 | +++ b/drivers/net/ethernet/micrel/Kconfig | ||
437 | @@ -37,6 +37,7 @@ config KS8851 | ||
438 | config KS8851_MLL | ||
439 | tristate "Micrel KS8851 MLL" | ||
440 | depends on HAS_IOMEM | ||
441 | + depends on PTP_1588_CLOCK_OPTIONAL | ||
442 | select MII | ||
443 | ---help--- | ||
444 | This platform driver is for Micrel KS8851 Address/data bus | ||
445 | diff --git a/drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.c b/drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.c | ||
446 | index cd478d2cd871a..00f6d347eaf75 100644 | ||
447 | --- a/drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.c | ||
448 | +++ b/drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.c | ||
449 | @@ -57,10 +57,6 @@ | ||
450 | #define TSE_PCS_USE_SGMII_ENA BIT(0) | ||
451 | #define TSE_PCS_IF_USE_SGMII 0x03 | ||
452 | |||
453 | -#define SGMII_ADAPTER_CTRL_REG 0x00 | ||
454 | -#define SGMII_ADAPTER_DISABLE 0x0001 | ||
455 | -#define SGMII_ADAPTER_ENABLE 0x0000 | ||
456 | - | ||
457 | #define AUTONEGO_LINK_TIMER 20 | ||
458 | |||
459 | static int tse_pcs_reset(void __iomem *base, struct tse_pcs *pcs) | ||
460 | @@ -202,12 +198,8 @@ void tse_pcs_fix_mac_speed(struct tse_pcs *pcs, struct phy_device *phy_dev, | ||
461 | unsigned int speed) | ||
462 | { | ||
463 | void __iomem *tse_pcs_base = pcs->tse_pcs_base; | ||
464 | - void __iomem *sgmii_adapter_base = pcs->sgmii_adapter_base; | ||
465 | u32 val; | ||
466 | |||
467 | - writew(SGMII_ADAPTER_ENABLE, | ||
468 | - sgmii_adapter_base + SGMII_ADAPTER_CTRL_REG); | ||
469 | - | ||
470 | pcs->autoneg = phy_dev->autoneg; | ||
471 | |||
472 | if (phy_dev->autoneg == AUTONEG_ENABLE) { | ||
473 | diff --git a/drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.h b/drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.h | ||
474 | index 442812c0a4bdc..694ac25ef426b 100644 | ||
475 | --- a/drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.h | ||
476 | +++ b/drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.h | ||
477 | @@ -10,6 +10,10 @@ | ||
478 | #include <linux/phy.h> | ||
479 | #include <linux/timer.h> | ||
480 | |||
481 | +#define SGMII_ADAPTER_CTRL_REG 0x00 | ||
482 | +#define SGMII_ADAPTER_ENABLE 0x0000 | ||
483 | +#define SGMII_ADAPTER_DISABLE 0x0001 | ||
484 | + | ||
485 | struct tse_pcs { | ||
486 | struct device *dev; | ||
487 | void __iomem *tse_pcs_base; | ||
488 | diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c | ||
489 | index 70d41783329dd..72e47621d27c7 100644 | ||
490 | --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c | ||
491 | +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c | ||
492 | @@ -18,9 +18,6 @@ | ||
493 | |||
494 | #include "altr_tse_pcs.h" | ||
495 | |||
496 | -#define SGMII_ADAPTER_CTRL_REG 0x00 | ||
497 | -#define SGMII_ADAPTER_DISABLE 0x0001 | ||
498 | - | ||
499 | #define SYSMGR_EMACGRP_CTRL_PHYSEL_ENUM_GMII_MII 0x0 | ||
500 | #define SYSMGR_EMACGRP_CTRL_PHYSEL_ENUM_RGMII 0x1 | ||
501 | #define SYSMGR_EMACGRP_CTRL_PHYSEL_ENUM_RMII 0x2 | ||
502 | @@ -62,16 +59,14 @@ static void socfpga_dwmac_fix_mac_speed(void *priv, unsigned int speed) | ||
503 | { | ||
504 | struct socfpga_dwmac *dwmac = (struct socfpga_dwmac *)priv; | ||
505 | void __iomem *splitter_base = dwmac->splitter_base; | ||
506 | - void __iomem *tse_pcs_base = dwmac->pcs.tse_pcs_base; | ||
507 | void __iomem *sgmii_adapter_base = dwmac->pcs.sgmii_adapter_base; | ||
508 | struct device *dev = dwmac->dev; | ||
509 | struct net_device *ndev = dev_get_drvdata(dev); | ||
510 | struct phy_device *phy_dev = ndev->phydev; | ||
511 | u32 val; | ||
512 | |||
513 | - if ((tse_pcs_base) && (sgmii_adapter_base)) | ||
514 | - writew(SGMII_ADAPTER_DISABLE, | ||
515 | - sgmii_adapter_base + SGMII_ADAPTER_CTRL_REG); | ||
516 | + writew(SGMII_ADAPTER_DISABLE, | ||
517 | + sgmii_adapter_base + SGMII_ADAPTER_CTRL_REG); | ||
518 | |||
519 | if (splitter_base) { | ||
520 | val = readl(splitter_base + EMAC_SPLITTER_CTRL_REG); | ||
521 | @@ -93,7 +88,9 @@ static void socfpga_dwmac_fix_mac_speed(void *priv, unsigned int speed) | ||
522 | writel(val, splitter_base + EMAC_SPLITTER_CTRL_REG); | ||
523 | } | ||
524 | |||
525 | - if (tse_pcs_base && sgmii_adapter_base) | ||
526 | + writew(SGMII_ADAPTER_ENABLE, | ||
527 | + sgmii_adapter_base + SGMII_ADAPTER_CTRL_REG); | ||
528 | + if (phy_dev) | ||
529 | tse_pcs_fix_mac_speed(&dwmac->pcs, phy_dev, speed); | ||
530 | } | ||
531 | |||
532 | diff --git a/drivers/net/slip/slip.c b/drivers/net/slip/slip.c | ||
533 | index 8e56a41dd7585..096617982998f 100644 | ||
534 | --- a/drivers/net/slip/slip.c | ||
535 | +++ b/drivers/net/slip/slip.c | ||
536 | @@ -471,7 +471,7 @@ static void sl_tx_timeout(struct net_device *dev) | ||
537 | spin_lock(&sl->lock); | ||
538 | |||
539 | if (netif_queue_stopped(dev)) { | ||
540 | - if (!netif_running(dev)) | ||
541 | + if (!netif_running(dev) || !sl->tty) | ||
542 | goto out; | ||
543 | |||
544 | /* May be we must check transmitter timeout here ? | ||
545 | diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c | ||
546 | index 7e44110746dd0..68912e266826b 100644 | ||
547 | --- a/drivers/net/usb/aqc111.c | ||
548 | +++ b/drivers/net/usb/aqc111.c | ||
549 | @@ -1102,10 +1102,15 @@ static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb) | ||
550 | if (start_of_descs != desc_offset) | ||
551 | goto err; | ||
552 | |||
553 | - /* self check desc_offset from header*/ | ||
554 | - if (desc_offset >= skb_len) | ||
555 | + /* self check desc_offset from header and make sure that the | ||
556 | + * bounds of the metadata array are inside the SKB | ||
557 | + */ | ||
558 | + if (pkt_count * 2 + desc_offset >= skb_len) | ||
559 | goto err; | ||
560 | |||
561 | + /* Packets must not overlap the metadata array */ | ||
562 | + skb_trim(skb, desc_offset); | ||
563 | + | ||
564 | if (pkt_count == 0) | ||
565 | goto err; | ||
566 | |||
567 | diff --git a/drivers/net/veth.c b/drivers/net/veth.c | ||
568 | index 10a876f8831c7..683425e3a353c 100644 | ||
569 | --- a/drivers/net/veth.c | ||
570 | +++ b/drivers/net/veth.c | ||
571 | @@ -245,7 +245,7 @@ static netdev_tx_t veth_xmit(struct sk_buff *skb, struct net_device *dev) | ||
572 | |||
573 | rcu_read_lock(); | ||
574 | rcv = rcu_dereference(priv->peer); | ||
575 | - if (unlikely(!rcv)) { | ||
576 | + if (unlikely(!rcv) || !pskb_may_pull(skb, ETH_HLEN)) { | ||
577 | kfree_skb(skb); | ||
578 | goto drop; | ||
579 | } | ||
580 | diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c | ||
581 | index ec13bd8d5487d..eb5751a45f266 100644 | ||
582 | --- a/drivers/net/wireless/ath/ath9k/main.c | ||
583 | +++ b/drivers/net/wireless/ath/ath9k/main.c | ||
584 | @@ -836,7 +836,7 @@ static bool ath9k_txq_list_has_key(struct list_head *txq_list, u32 keyix) | ||
585 | continue; | ||
586 | |||
587 | txinfo = IEEE80211_SKB_CB(bf->bf_mpdu); | ||
588 | - fi = (struct ath_frame_info *)&txinfo->rate_driver_data[0]; | ||
589 | + fi = (struct ath_frame_info *)&txinfo->status.status_driver_data[0]; | ||
590 | if (fi->keyix == keyix) | ||
591 | return true; | ||
592 | } | ||
593 | diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c | ||
594 | index 14e6871a14054..fdb2152345eba 100644 | ||
595 | --- a/drivers/net/wireless/ath/ath9k/xmit.c | ||
596 | +++ b/drivers/net/wireless/ath/ath9k/xmit.c | ||
597 | @@ -141,8 +141,8 @@ static struct ath_frame_info *get_frame_info(struct sk_buff *skb) | ||
598 | { | ||
599 | struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb); | ||
600 | BUILD_BUG_ON(sizeof(struct ath_frame_info) > | ||
601 | - sizeof(tx_info->rate_driver_data)); | ||
602 | - return (struct ath_frame_info *) &tx_info->rate_driver_data[0]; | ||
603 | + sizeof(tx_info->status.status_driver_data)); | ||
604 | + return (struct ath_frame_info *) &tx_info->status.status_driver_data[0]; | ||
605 | } | ||
606 | |||
607 | static void ath_send_bar(struct ath_atx_tid *tid, u16 seqno) | ||
608 | @@ -2498,6 +2498,16 @@ skip_tx_complete: | ||
609 | spin_unlock_irqrestore(&sc->tx.txbuflock, flags); | ||
610 | } | ||
611 | |||
612 | +static void ath_clear_tx_status(struct ieee80211_tx_info *tx_info) | ||
613 | +{ | ||
614 | + void *ptr = &tx_info->status; | ||
615 | + | ||
616 | + memset(ptr + sizeof(tx_info->status.rates), 0, | ||
617 | + sizeof(tx_info->status) - | ||
618 | + sizeof(tx_info->status.rates) - | ||
619 | + sizeof(tx_info->status.status_driver_data)); | ||
620 | +} | ||
621 | + | ||
622 | static void ath_tx_rc_status(struct ath_softc *sc, struct ath_buf *bf, | ||
623 | struct ath_tx_status *ts, int nframes, int nbad, | ||
624 | int txok) | ||
625 | @@ -2509,6 +2519,8 @@ static void ath_tx_rc_status(struct ath_softc *sc, struct ath_buf *bf, | ||
626 | struct ath_hw *ah = sc->sc_ah; | ||
627 | u8 i, tx_rateindex; | ||
628 | |||
629 | + ath_clear_tx_status(tx_info); | ||
630 | + | ||
631 | if (txok) | ||
632 | tx_info->status.ack_signal = ts->ts_rssi; | ||
633 | |||
634 | @@ -2523,6 +2535,13 @@ static void ath_tx_rc_status(struct ath_softc *sc, struct ath_buf *bf, | ||
635 | tx_info->status.ampdu_len = nframes; | ||
636 | tx_info->status.ampdu_ack_len = nframes - nbad; | ||
637 | |||
638 | + tx_info->status.rates[tx_rateindex].count = ts->ts_longretry + 1; | ||
639 | + | ||
640 | + for (i = tx_rateindex + 1; i < hw->max_rates; i++) { | ||
641 | + tx_info->status.rates[i].count = 0; | ||
642 | + tx_info->status.rates[i].idx = -1; | ||
643 | + } | ||
644 | + | ||
645 | if ((ts->ts_status & ATH9K_TXERR_FILT) == 0 && | ||
646 | (tx_info->flags & IEEE80211_TX_CTL_NO_ACK) == 0) { | ||
647 | /* | ||
648 | @@ -2544,16 +2563,6 @@ static void ath_tx_rc_status(struct ath_softc *sc, struct ath_buf *bf, | ||
649 | tx_info->status.rates[tx_rateindex].count = | ||
650 | hw->max_rate_tries; | ||
651 | } | ||
652 | - | ||
653 | - for (i = tx_rateindex + 1; i < hw->max_rates; i++) { | ||
654 | - tx_info->status.rates[i].count = 0; | ||
655 | - tx_info->status.rates[i].idx = -1; | ||
656 | - } | ||
657 | - | ||
658 | - tx_info->status.rates[tx_rateindex].count = ts->ts_longretry + 1; | ||
659 | - | ||
660 | - /* we report airtime in ath_tx_count_airtime(), don't report twice */ | ||
661 | - tx_info->status.tx_time = 0; | ||
662 | } | ||
663 | |||
664 | static void ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq) | ||
665 | diff --git a/drivers/perf/fsl_imx8_ddr_perf.c b/drivers/perf/fsl_imx8_ddr_perf.c | ||
666 | index 726ed8f59868c..912a220a9db92 100644 | ||
667 | --- a/drivers/perf/fsl_imx8_ddr_perf.c | ||
668 | +++ b/drivers/perf/fsl_imx8_ddr_perf.c | ||
669 | @@ -29,7 +29,7 @@ | ||
670 | #define CNTL_OVER_MASK 0xFFFFFFFE | ||
671 | |||
672 | #define CNTL_CSV_SHIFT 24 | ||
673 | -#define CNTL_CSV_MASK (0xFF << CNTL_CSV_SHIFT) | ||
674 | +#define CNTL_CSV_MASK (0xFFU << CNTL_CSV_SHIFT) | ||
675 | |||
676 | #define EVENT_CYCLES_ID 0 | ||
677 | #define EVENT_CYCLES_COUNTER 0 | ||
678 | diff --git a/drivers/regulator/wm8994-regulator.c b/drivers/regulator/wm8994-regulator.c | ||
679 | index cadea0344486f..40befdd9dfa92 100644 | ||
680 | --- a/drivers/regulator/wm8994-regulator.c | ||
681 | +++ b/drivers/regulator/wm8994-regulator.c | ||
682 | @@ -71,6 +71,35 @@ static const struct regulator_ops wm8994_ldo2_ops = { | ||
683 | }; | ||
684 | |||
685 | static const struct regulator_desc wm8994_ldo_desc[] = { | ||
686 | + { | ||
687 | + .name = "LDO1", | ||
688 | + .id = 1, | ||
689 | + .type = REGULATOR_VOLTAGE, | ||
690 | + .n_voltages = WM8994_LDO1_MAX_SELECTOR + 1, | ||
691 | + .vsel_reg = WM8994_LDO_1, | ||
692 | + .vsel_mask = WM8994_LDO1_VSEL_MASK, | ||
693 | + .ops = &wm8994_ldo1_ops, | ||
694 | + .min_uV = 2400000, | ||
695 | + .uV_step = 100000, | ||
696 | + .enable_time = 3000, | ||
697 | + .off_on_delay = 36000, | ||
698 | + .owner = THIS_MODULE, | ||
699 | + }, | ||
700 | + { | ||
701 | + .name = "LDO2", | ||
702 | + .id = 2, | ||
703 | + .type = REGULATOR_VOLTAGE, | ||
704 | + .n_voltages = WM8994_LDO2_MAX_SELECTOR + 1, | ||
705 | + .vsel_reg = WM8994_LDO_2, | ||
706 | + .vsel_mask = WM8994_LDO2_VSEL_MASK, | ||
707 | + .ops = &wm8994_ldo2_ops, | ||
708 | + .enable_time = 3000, | ||
709 | + .off_on_delay = 36000, | ||
710 | + .owner = THIS_MODULE, | ||
711 | + }, | ||
712 | +}; | ||
713 | + | ||
714 | +static const struct regulator_desc wm8958_ldo_desc[] = { | ||
715 | { | ||
716 | .name = "LDO1", | ||
717 | .id = 1, | ||
718 | @@ -172,9 +201,16 @@ static int wm8994_ldo_probe(struct platform_device *pdev) | ||
719 | * regulator core and we need not worry about it on the | ||
720 | * error path. | ||
721 | */ | ||
722 | - ldo->regulator = devm_regulator_register(&pdev->dev, | ||
723 | - &wm8994_ldo_desc[id], | ||
724 | - &config); | ||
725 | + if (ldo->wm8994->type == WM8994) { | ||
726 | + ldo->regulator = devm_regulator_register(&pdev->dev, | ||
727 | + &wm8994_ldo_desc[id], | ||
728 | + &config); | ||
729 | + } else { | ||
730 | + ldo->regulator = devm_regulator_register(&pdev->dev, | ||
731 | + &wm8958_ldo_desc[id], | ||
732 | + &config); | ||
733 | + } | ||
734 | + | ||
735 | if (IS_ERR(ldo->regulator)) { | ||
736 | ret = PTR_ERR(ldo->regulator); | ||
737 | dev_err(wm8994->dev, "Failed to register LDO%d: %d\n", | ||
738 | diff --git a/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c b/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c | ||
739 | index a929fe76102b0..d5b2917aea44f 100644 | ||
740 | --- a/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c | ||
741 | +++ b/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c | ||
742 | @@ -35,7 +35,7 @@ | ||
743 | |||
744 | #define IBMVSCSIS_VERSION "v0.2" | ||
745 | |||
746 | -#define INITIAL_SRP_LIMIT 800 | ||
747 | +#define INITIAL_SRP_LIMIT 1024 | ||
748 | #define DEFAULT_MAX_SECTORS 256 | ||
749 | #define MAX_TXU 1024 * 1024 | ||
750 | |||
751 | diff --git a/drivers/scsi/megaraid/megaraid_sas.h b/drivers/scsi/megaraid/megaraid_sas.h | ||
752 | index 3d43ac9772f7e..aa62cc8ffd0af 100644 | ||
753 | --- a/drivers/scsi/megaraid/megaraid_sas.h | ||
754 | +++ b/drivers/scsi/megaraid/megaraid_sas.h | ||
755 | @@ -2551,6 +2551,9 @@ struct megasas_instance_template { | ||
756 | #define MEGASAS_IS_LOGICAL(sdev) \ | ||
757 | ((sdev->channel < MEGASAS_MAX_PD_CHANNELS) ? 0 : 1) | ||
758 | |||
759 | +#define MEGASAS_IS_LUN_VALID(sdev) \ | ||
760 | + (((sdev)->lun == 0) ? 1 : 0) | ||
761 | + | ||
762 | #define MEGASAS_DEV_INDEX(scp) \ | ||
763 | (((scp->device->channel % 2) * MEGASAS_MAX_DEV_PER_CHANNEL) + \ | ||
764 | scp->device->id) | ||
765 | diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c | ||
766 | index 6700d43b12ff5..a261ce511e9ed 100644 | ||
767 | --- a/drivers/scsi/megaraid/megaraid_sas_base.c | ||
768 | +++ b/drivers/scsi/megaraid/megaraid_sas_base.c | ||
769 | @@ -2102,6 +2102,9 @@ static int megasas_slave_alloc(struct scsi_device *sdev) | ||
770 | goto scan_target; | ||
771 | } | ||
772 | return -ENXIO; | ||
773 | + } else if (!MEGASAS_IS_LUN_VALID(sdev)) { | ||
774 | + sdev_printk(KERN_INFO, sdev, "%s: invalid LUN\n", __func__); | ||
775 | + return -ENXIO; | ||
776 | } | ||
777 | |||
778 | scan_target: | ||
779 | @@ -2132,6 +2135,10 @@ static void megasas_slave_destroy(struct scsi_device *sdev) | ||
780 | instance = megasas_lookup_instance(sdev->host->host_no); | ||
781 | |||
782 | if (MEGASAS_IS_LOGICAL(sdev)) { | ||
783 | + if (!MEGASAS_IS_LUN_VALID(sdev)) { | ||
784 | + sdev_printk(KERN_INFO, sdev, "%s: invalid LUN\n", __func__); | ||
785 | + return; | ||
786 | + } | ||
787 | ld_tgt_id = MEGASAS_TARGET_ID(sdev); | ||
788 | instance->ld_tgtid_status[ld_tgt_id] = LD_TARGET_ID_DELETED; | ||
789 | if (megasas_dbg_lvl & LD_PD_DEBUG) | ||
790 | diff --git a/drivers/scsi/mvsas/mv_init.c b/drivers/scsi/mvsas/mv_init.c | ||
791 | index c16d7fb0fdcbb..0c5e2c6105867 100644 | ||
792 | --- a/drivers/scsi/mvsas/mv_init.c | ||
793 | +++ b/drivers/scsi/mvsas/mv_init.c | ||
794 | @@ -646,6 +646,7 @@ static struct pci_device_id mvs_pci_table[] = { | ||
795 | { PCI_VDEVICE(ARECA, PCI_DEVICE_ID_ARECA_1300), chip_1300 }, | ||
796 | { PCI_VDEVICE(ARECA, PCI_DEVICE_ID_ARECA_1320), chip_1320 }, | ||
797 | { PCI_VDEVICE(ADAPTEC2, 0x0450), chip_6440 }, | ||
798 | + { PCI_VDEVICE(TTI, 0x2640), chip_6440 }, | ||
799 | { PCI_VDEVICE(TTI, 0x2710), chip_9480 }, | ||
800 | { PCI_VDEVICE(TTI, 0x2720), chip_9480 }, | ||
801 | { PCI_VDEVICE(TTI, 0x2721), chip_9480 }, | ||
802 | diff --git a/drivers/target/target_core_user.c b/drivers/target/target_core_user.c | ||
803 | index 71144e33272a3..077c56cbed4e1 100644 | ||
804 | --- a/drivers/target/target_core_user.c | ||
805 | +++ b/drivers/target/target_core_user.c | ||
806 | @@ -1488,6 +1488,7 @@ static struct page *tcmu_try_get_block_page(struct tcmu_dev *udev, uint32_t dbi) | ||
807 | mutex_lock(&udev->cmdr_lock); | ||
808 | page = tcmu_get_block_page(udev, dbi); | ||
809 | if (likely(page)) { | ||
810 | + get_page(page); | ||
811 | mutex_unlock(&udev->cmdr_lock); | ||
812 | return page; | ||
813 | } | ||
814 | @@ -1526,6 +1527,7 @@ static vm_fault_t tcmu_vma_fault(struct vm_fault *vmf) | ||
815 | /* For the vmalloc()ed cmd area pages */ | ||
816 | addr = (void *)(unsigned long)info->mem[mi].addr + offset; | ||
817 | page = vmalloc_to_page(addr); | ||
818 | + get_page(page); | ||
819 | } else { | ||
820 | uint32_t dbi; | ||
821 | |||
822 | @@ -1536,7 +1538,6 @@ static vm_fault_t tcmu_vma_fault(struct vm_fault *vmf) | ||
823 | return VM_FAULT_SIGBUS; | ||
824 | } | ||
825 | |||
826 | - get_page(page); | ||
827 | vmf->page = page; | ||
828 | return 0; | ||
829 | } | ||
830 | diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c | ||
831 | index e98d6ea35ea80..bcf19dfb0af35 100644 | ||
832 | --- a/fs/btrfs/block-group.c | ||
833 | +++ b/fs/btrfs/block-group.c | ||
834 | @@ -2388,7 +2388,6 @@ int btrfs_start_dirty_block_groups(struct btrfs_trans_handle *trans) | ||
835 | struct btrfs_path *path = NULL; | ||
836 | LIST_HEAD(dirty); | ||
837 | struct list_head *io = &cur_trans->io_bgs; | ||
838 | - int num_started = 0; | ||
839 | int loops = 0; | ||
840 | |||
841 | spin_lock(&cur_trans->dirty_bgs_lock); | ||
842 | @@ -2455,7 +2454,6 @@ again: | ||
843 | cache->io_ctl.inode = NULL; | ||
844 | ret = btrfs_write_out_cache(trans, cache, path); | ||
845 | if (ret == 0 && cache->io_ctl.inode) { | ||
846 | - num_started++; | ||
847 | should_put = 0; | ||
848 | |||
849 | /* | ||
850 | @@ -2556,7 +2554,6 @@ int btrfs_write_dirty_block_groups(struct btrfs_trans_handle *trans) | ||
851 | int should_put; | ||
852 | struct btrfs_path *path; | ||
853 | struct list_head *io = &cur_trans->io_bgs; | ||
854 | - int num_started = 0; | ||
855 | |||
856 | path = btrfs_alloc_path(); | ||
857 | if (!path) | ||
858 | @@ -2614,7 +2611,6 @@ int btrfs_write_dirty_block_groups(struct btrfs_trans_handle *trans) | ||
859 | cache->io_ctl.inode = NULL; | ||
860 | ret = btrfs_write_out_cache(trans, cache, path); | ||
861 | if (ret == 0 && cache->io_ctl.inode) { | ||
862 | - num_started++; | ||
863 | should_put = 0; | ||
864 | list_add_tail(&cache->io_list, io); | ||
865 | } else { | ||
866 | diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c | ||
867 | index 344d18de1f08c..8898682c91038 100644 | ||
868 | --- a/fs/btrfs/volumes.c | ||
869 | +++ b/fs/btrfs/volumes.c | ||
870 | @@ -4320,10 +4320,12 @@ static int balance_kthread(void *data) | ||
871 | struct btrfs_fs_info *fs_info = data; | ||
872 | int ret = 0; | ||
873 | |||
874 | + sb_start_write(fs_info->sb); | ||
875 | mutex_lock(&fs_info->balance_mutex); | ||
876 | if (fs_info->balance_ctl) | ||
877 | ret = btrfs_balance(fs_info, fs_info->balance_ctl, NULL); | ||
878 | mutex_unlock(&fs_info->balance_mutex); | ||
879 | + sb_end_write(fs_info->sb); | ||
880 | |||
881 | return ret; | ||
882 | } | ||
883 | diff --git a/fs/cifs/link.c b/fs/cifs/link.c | ||
884 | index b736acd3917bb..a24bcbbb50337 100644 | ||
885 | --- a/fs/cifs/link.c | ||
886 | +++ b/fs/cifs/link.c | ||
887 | @@ -97,6 +97,9 @@ parse_mf_symlink(const u8 *buf, unsigned int buf_len, unsigned int *_link_len, | ||
888 | if (rc != 1) | ||
889 | return -EINVAL; | ||
890 | |||
891 | + if (link_len > CIFS_MF_SYMLINK_LINK_MAXLEN) | ||
892 | + return -EINVAL; | ||
893 | + | ||
894 | rc = symlink_hash(link_len, link_str, md5_hash); | ||
895 | if (rc) { | ||
896 | cifs_dbg(FYI, "%s: MD5 hash failure: %d\n", __func__, rc); | ||
897 | diff --git a/include/asm-generic/tlb.h b/include/asm-generic/tlb.h | ||
898 | index 46294ef620ff9..268674c1d5685 100644 | ||
899 | --- a/include/asm-generic/tlb.h | ||
900 | +++ b/include/asm-generic/tlb.h | ||
901 | @@ -547,10 +547,14 @@ static inline void tlb_flush_p4d_range(struct mmu_gather *tlb, | ||
902 | #define tlb_remove_huge_tlb_entry(h, tlb, ptep, address) \ | ||
903 | do { \ | ||
904 | unsigned long _sz = huge_page_size(h); \ | ||
905 | - if (_sz == PMD_SIZE) \ | ||
906 | - tlb_flush_pmd_range(tlb, address, _sz); \ | ||
907 | - else if (_sz == PUD_SIZE) \ | ||
908 | + if (_sz >= P4D_SIZE) \ | ||
909 | + tlb_flush_p4d_range(tlb, address, _sz); \ | ||
910 | + else if (_sz >= PUD_SIZE) \ | ||
911 | tlb_flush_pud_range(tlb, address, _sz); \ | ||
912 | + else if (_sz >= PMD_SIZE) \ | ||
913 | + tlb_flush_pmd_range(tlb, address, _sz); \ | ||
914 | + else \ | ||
915 | + tlb_flush_pte_range(tlb, address, _sz); \ | ||
916 | __tlb_remove_tlb_entry(tlb, ptep, address); \ | ||
917 | } while (0) | ||
918 | |||
919 | diff --git a/include/net/ax25.h b/include/net/ax25.h | ||
920 | index 8b7eb46ad72d8..aadff553e4b73 100644 | ||
921 | --- a/include/net/ax25.h | ||
922 | +++ b/include/net/ax25.h | ||
923 | @@ -236,6 +236,7 @@ typedef struct ax25_dev { | ||
924 | #if defined(CONFIG_AX25_DAMA_SLAVE) || defined(CONFIG_AX25_DAMA_MASTER) | ||
925 | ax25_dama_info dama; | ||
926 | #endif | ||
927 | + refcount_t refcount; | ||
928 | } ax25_dev; | ||
929 | |||
930 | typedef struct ax25_cb { | ||
931 | @@ -290,6 +291,17 @@ static __inline__ void ax25_cb_put(ax25_cb *ax25) | ||
932 | } | ||
933 | } | ||
934 | |||
935 | +static inline void ax25_dev_hold(ax25_dev *ax25_dev) | ||
936 | +{ | ||
937 | + refcount_inc(&ax25_dev->refcount); | ||
938 | +} | ||
939 | + | ||
940 | +static inline void ax25_dev_put(ax25_dev *ax25_dev) | ||
941 | +{ | ||
942 | + if (refcount_dec_and_test(&ax25_dev->refcount)) { | ||
943 | + kfree(ax25_dev); | ||
944 | + } | ||
945 | +} | ||
946 | static inline __be16 ax25_type_trans(struct sk_buff *skb, struct net_device *dev) | ||
947 | { | ||
948 | skb->dev = dev; | ||
949 | diff --git a/include/net/flow_dissector.h b/include/net/flow_dissector.h | ||
950 | index 78f6437cbc3a8..02171416c68eb 100644 | ||
951 | --- a/include/net/flow_dissector.h | ||
952 | +++ b/include/net/flow_dissector.h | ||
953 | @@ -51,6 +51,8 @@ struct flow_dissector_key_vlan { | ||
954 | vlan_dei:1, | ||
955 | vlan_priority:3; | ||
956 | __be16 vlan_tpid; | ||
957 | + __be16 vlan_eth_type; | ||
958 | + u16 padding; | ||
959 | }; | ||
960 | |||
961 | struct flow_dissector_key_mpls { | ||
962 | diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c | ||
963 | index 0a093a675b632..f04cfc2e9e01a 100644 | ||
964 | --- a/kernel/dma/direct.c | ||
965 | +++ b/kernel/dma/direct.c | ||
966 | @@ -306,7 +306,8 @@ void dma_direct_unmap_page(struct device *dev, dma_addr_t addr, | ||
967 | dma_direct_sync_single_for_cpu(dev, addr, size, dir); | ||
968 | |||
969 | if (unlikely(is_swiotlb_buffer(phys))) | ||
970 | - swiotlb_tbl_unmap_single(dev, phys, size, size, dir, attrs); | ||
971 | + swiotlb_tbl_unmap_single(dev, phys, size, size, dir, | ||
972 | + attrs | DMA_ATTR_SKIP_CPU_SYNC); | ||
973 | } | ||
974 | EXPORT_SYMBOL(dma_direct_unmap_page); | ||
975 | |||
976 | diff --git a/kernel/irq/affinity.c b/kernel/irq/affinity.c | ||
977 | index 4d89ad4fae3bb..5fb78addff51b 100644 | ||
978 | --- a/kernel/irq/affinity.c | ||
979 | +++ b/kernel/irq/affinity.c | ||
980 | @@ -269,8 +269,9 @@ static int __irq_build_affinity_masks(unsigned int startvec, | ||
981 | */ | ||
982 | if (numvecs <= nodes) { | ||
983 | for_each_node_mask(n, nodemsk) { | ||
984 | - cpumask_or(&masks[curvec].mask, &masks[curvec].mask, | ||
985 | - node_to_cpumask[n]); | ||
986 | + /* Ensure that only CPUs which are in both masks are set */ | ||
987 | + cpumask_and(nmsk, cpu_mask, node_to_cpumask[n]); | ||
988 | + cpumask_or(&masks[curvec].mask, &masks[curvec].mask, nmsk); | ||
989 | if (++curvec == last_affv) | ||
990 | curvec = firstvec; | ||
991 | } | ||
992 | diff --git a/kernel/smp.c b/kernel/smp.c | ||
993 | index 3a390932f8b25..be65b76cb8036 100644 | ||
994 | --- a/kernel/smp.c | ||
995 | +++ b/kernel/smp.c | ||
996 | @@ -222,7 +222,7 @@ static void flush_smp_call_function_queue(bool warn_cpu_offline) | ||
997 | |||
998 | /* There shouldn't be any pending callbacks on an offline CPU. */ | ||
999 | if (unlikely(warn_cpu_offline && !cpu_online(smp_processor_id()) && | ||
1000 | - !warned && !llist_empty(head))) { | ||
1001 | + !warned && entry != NULL)) { | ||
1002 | warned = true; | ||
1003 | WARN(1, "IPI on offline CPU %d\n", smp_processor_id()); | ||
1004 | |||
1005 | diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c | ||
1006 | index 4419486d7413c..5eb04bb598026 100644 | ||
1007 | --- a/kernel/time/tick-sched.c | ||
1008 | +++ b/kernel/time/tick-sched.c | ||
1009 | @@ -131,7 +131,7 @@ static void tick_sched_do_timer(struct tick_sched *ts, ktime_t now) | ||
1010 | */ | ||
1011 | if (unlikely(tick_do_timer_cpu == TICK_DO_TIMER_NONE)) { | ||
1012 | #ifdef CONFIG_NO_HZ_FULL | ||
1013 | - WARN_ON(tick_nohz_full_running); | ||
1014 | + WARN_ON_ONCE(tick_nohz_full_running); | ||
1015 | #endif | ||
1016 | tick_do_timer_cpu = cpu; | ||
1017 | } | ||
1018 | diff --git a/mm/kmemleak.c b/mm/kmemleak.c | ||
1019 | index d8cde7292bf92..3761c79137b17 100644 | ||
1020 | --- a/mm/kmemleak.c | ||
1021 | +++ b/mm/kmemleak.c | ||
1022 | @@ -1123,7 +1123,7 @@ EXPORT_SYMBOL(kmemleak_no_scan); | ||
1023 | void __ref kmemleak_alloc_phys(phys_addr_t phys, size_t size, int min_count, | ||
1024 | gfp_t gfp) | ||
1025 | { | ||
1026 | - if (!IS_ENABLED(CONFIG_HIGHMEM) || PHYS_PFN(phys) < max_low_pfn) | ||
1027 | + if (PHYS_PFN(phys) >= min_low_pfn && PHYS_PFN(phys) < max_low_pfn) | ||
1028 | kmemleak_alloc(__va(phys), size, min_count, gfp); | ||
1029 | } | ||
1030 | EXPORT_SYMBOL(kmemleak_alloc_phys); | ||
1031 | @@ -1137,7 +1137,7 @@ EXPORT_SYMBOL(kmemleak_alloc_phys); | ||
1032 | */ | ||
1033 | void __ref kmemleak_free_part_phys(phys_addr_t phys, size_t size) | ||
1034 | { | ||
1035 | - if (!IS_ENABLED(CONFIG_HIGHMEM) || PHYS_PFN(phys) < max_low_pfn) | ||
1036 | + if (PHYS_PFN(phys) >= min_low_pfn && PHYS_PFN(phys) < max_low_pfn) | ||
1037 | kmemleak_free_part(__va(phys), size); | ||
1038 | } | ||
1039 | EXPORT_SYMBOL(kmemleak_free_part_phys); | ||
1040 | @@ -1149,7 +1149,7 @@ EXPORT_SYMBOL(kmemleak_free_part_phys); | ||
1041 | */ | ||
1042 | void __ref kmemleak_not_leak_phys(phys_addr_t phys) | ||
1043 | { | ||
1044 | - if (!IS_ENABLED(CONFIG_HIGHMEM) || PHYS_PFN(phys) < max_low_pfn) | ||
1045 | + if (PHYS_PFN(phys) >= min_low_pfn && PHYS_PFN(phys) < max_low_pfn) | ||
1046 | kmemleak_not_leak(__va(phys)); | ||
1047 | } | ||
1048 | EXPORT_SYMBOL(kmemleak_not_leak_phys); | ||
1049 | @@ -1161,7 +1161,7 @@ EXPORT_SYMBOL(kmemleak_not_leak_phys); | ||
1050 | */ | ||
1051 | void __ref kmemleak_ignore_phys(phys_addr_t phys) | ||
1052 | { | ||
1053 | - if (!IS_ENABLED(CONFIG_HIGHMEM) || PHYS_PFN(phys) < max_low_pfn) | ||
1054 | + if (PHYS_PFN(phys) >= min_low_pfn && PHYS_PFN(phys) < max_low_pfn) | ||
1055 | kmemleak_ignore(__va(phys)); | ||
1056 | } | ||
1057 | EXPORT_SYMBOL(kmemleak_ignore_phys); | ||
1058 | diff --git a/mm/page_alloc.c b/mm/page_alloc.c | ||
1059 | index 5038611563dfb..7048ea59d58bd 100644 | ||
1060 | --- a/mm/page_alloc.c | ||
1061 | +++ b/mm/page_alloc.c | ||
1062 | @@ -5481,7 +5481,7 @@ static int build_zonerefs_node(pg_data_t *pgdat, struct zoneref *zonerefs) | ||
1063 | do { | ||
1064 | zone_type--; | ||
1065 | zone = pgdat->node_zones + zone_type; | ||
1066 | - if (managed_zone(zone)) { | ||
1067 | + if (populated_zone(zone)) { | ||
1068 | zoneref_set_zone(zone, &zonerefs[nr_zones++]); | ||
1069 | check_highest_zone(zone_type); | ||
1070 | } | ||
1071 | diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c | ||
1072 | index 093b73c454d28..aff991ca0e4a4 100644 | ||
1073 | --- a/net/ax25/af_ax25.c | ||
1074 | +++ b/net/ax25/af_ax25.c | ||
1075 | @@ -89,17 +89,21 @@ again: | ||
1076 | sk = s->sk; | ||
1077 | if (!sk) { | ||
1078 | spin_unlock_bh(&ax25_list_lock); | ||
1079 | - s->ax25_dev = NULL; | ||
1080 | ax25_disconnect(s, ENETUNREACH); | ||
1081 | + s->ax25_dev = NULL; | ||
1082 | spin_lock_bh(&ax25_list_lock); | ||
1083 | goto again; | ||
1084 | } | ||
1085 | sock_hold(sk); | ||
1086 | spin_unlock_bh(&ax25_list_lock); | ||
1087 | lock_sock(sk); | ||
1088 | + ax25_disconnect(s, ENETUNREACH); | ||
1089 | s->ax25_dev = NULL; | ||
1090 | + if (sk->sk_socket) { | ||
1091 | + dev_put(ax25_dev->dev); | ||
1092 | + ax25_dev_put(ax25_dev); | ||
1093 | + } | ||
1094 | release_sock(sk); | ||
1095 | - ax25_disconnect(s, ENETUNREACH); | ||
1096 | spin_lock_bh(&ax25_list_lock); | ||
1097 | sock_put(sk); | ||
1098 | /* The entry could have been deleted from the | ||
1099 | @@ -365,21 +369,25 @@ static int ax25_ctl_ioctl(const unsigned int cmd, void __user *arg) | ||
1100 | if (copy_from_user(&ax25_ctl, arg, sizeof(ax25_ctl))) | ||
1101 | return -EFAULT; | ||
1102 | |||
1103 | - if ((ax25_dev = ax25_addr_ax25dev(&ax25_ctl.port_addr)) == NULL) | ||
1104 | - return -ENODEV; | ||
1105 | - | ||
1106 | if (ax25_ctl.digi_count > AX25_MAX_DIGIS) | ||
1107 | return -EINVAL; | ||
1108 | |||
1109 | if (ax25_ctl.arg > ULONG_MAX / HZ && ax25_ctl.cmd != AX25_KILL) | ||
1110 | return -EINVAL; | ||
1111 | |||
1112 | + ax25_dev = ax25_addr_ax25dev(&ax25_ctl.port_addr); | ||
1113 | + if (!ax25_dev) | ||
1114 | + return -ENODEV; | ||
1115 | + | ||
1116 | digi.ndigi = ax25_ctl.digi_count; | ||
1117 | for (k = 0; k < digi.ndigi; k++) | ||
1118 | digi.calls[k] = ax25_ctl.digi_addr[k]; | ||
1119 | |||
1120 | - if ((ax25 = ax25_find_cb(&ax25_ctl.source_addr, &ax25_ctl.dest_addr, &digi, ax25_dev->dev)) == NULL) | ||
1121 | + ax25 = ax25_find_cb(&ax25_ctl.source_addr, &ax25_ctl.dest_addr, &digi, ax25_dev->dev); | ||
1122 | + if (!ax25) { | ||
1123 | + ax25_dev_put(ax25_dev); | ||
1124 | return -ENOTCONN; | ||
1125 | + } | ||
1126 | |||
1127 | switch (ax25_ctl.cmd) { | ||
1128 | case AX25_KILL: | ||
1129 | @@ -446,6 +454,7 @@ static int ax25_ctl_ioctl(const unsigned int cmd, void __user *arg) | ||
1130 | } | ||
1131 | |||
1132 | out_put: | ||
1133 | + ax25_dev_put(ax25_dev); | ||
1134 | ax25_cb_put(ax25); | ||
1135 | return ret; | ||
1136 | |||
1137 | @@ -971,14 +980,16 @@ static int ax25_release(struct socket *sock) | ||
1138 | { | ||
1139 | struct sock *sk = sock->sk; | ||
1140 | ax25_cb *ax25; | ||
1141 | + ax25_dev *ax25_dev; | ||
1142 | |||
1143 | if (sk == NULL) | ||
1144 | return 0; | ||
1145 | |||
1146 | sock_hold(sk); | ||
1147 | - sock_orphan(sk); | ||
1148 | lock_sock(sk); | ||
1149 | + sock_orphan(sk); | ||
1150 | ax25 = sk_to_ax25(sk); | ||
1151 | + ax25_dev = ax25->ax25_dev; | ||
1152 | |||
1153 | if (sk->sk_type == SOCK_SEQPACKET) { | ||
1154 | switch (ax25->state) { | ||
1155 | @@ -1040,6 +1051,15 @@ static int ax25_release(struct socket *sock) | ||
1156 | sk->sk_state_change(sk); | ||
1157 | ax25_destroy_socket(ax25); | ||
1158 | } | ||
1159 | + if (ax25_dev) { | ||
1160 | + del_timer_sync(&ax25->timer); | ||
1161 | + del_timer_sync(&ax25->t1timer); | ||
1162 | + del_timer_sync(&ax25->t2timer); | ||
1163 | + del_timer_sync(&ax25->t3timer); | ||
1164 | + del_timer_sync(&ax25->idletimer); | ||
1165 | + dev_put(ax25_dev->dev); | ||
1166 | + ax25_dev_put(ax25_dev); | ||
1167 | + } | ||
1168 | |||
1169 | sock->sk = NULL; | ||
1170 | release_sock(sk); | ||
1171 | @@ -1116,8 +1136,10 @@ static int ax25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) | ||
1172 | } | ||
1173 | } | ||
1174 | |||
1175 | - if (ax25_dev != NULL) | ||
1176 | + if (ax25_dev) { | ||
1177 | ax25_fillin_cb(ax25, ax25_dev); | ||
1178 | + dev_hold(ax25_dev->dev); | ||
1179 | + } | ||
1180 | |||
1181 | done: | ||
1182 | ax25_cb_add(ax25); | ||
1183 | diff --git a/net/ax25/ax25_dev.c b/net/ax25/ax25_dev.c | ||
1184 | index 4ac2e0847652a..d2e0cc67d91a7 100644 | ||
1185 | --- a/net/ax25/ax25_dev.c | ||
1186 | +++ b/net/ax25/ax25_dev.c | ||
1187 | @@ -37,6 +37,7 @@ ax25_dev *ax25_addr_ax25dev(ax25_address *addr) | ||
1188 | for (ax25_dev = ax25_dev_list; ax25_dev != NULL; ax25_dev = ax25_dev->next) | ||
1189 | if (ax25cmp(addr, (ax25_address *)ax25_dev->dev->dev_addr) == 0) { | ||
1190 | res = ax25_dev; | ||
1191 | + ax25_dev_hold(ax25_dev); | ||
1192 | } | ||
1193 | spin_unlock_bh(&ax25_dev_lock); | ||
1194 | |||
1195 | @@ -56,6 +57,7 @@ void ax25_dev_device_up(struct net_device *dev) | ||
1196 | return; | ||
1197 | } | ||
1198 | |||
1199 | + refcount_set(&ax25_dev->refcount, 1); | ||
1200 | dev->ax25_ptr = ax25_dev; | ||
1201 | ax25_dev->dev = dev; | ||
1202 | dev_hold(dev); | ||
1203 | @@ -84,6 +86,7 @@ void ax25_dev_device_up(struct net_device *dev) | ||
1204 | ax25_dev->next = ax25_dev_list; | ||
1205 | ax25_dev_list = ax25_dev; | ||
1206 | spin_unlock_bh(&ax25_dev_lock); | ||
1207 | + ax25_dev_hold(ax25_dev); | ||
1208 | |||
1209 | ax25_register_dev_sysctl(ax25_dev); | ||
1210 | } | ||
1211 | @@ -113,9 +116,10 @@ void ax25_dev_device_down(struct net_device *dev) | ||
1212 | if ((s = ax25_dev_list) == ax25_dev) { | ||
1213 | ax25_dev_list = s->next; | ||
1214 | spin_unlock_bh(&ax25_dev_lock); | ||
1215 | + ax25_dev_put(ax25_dev); | ||
1216 | dev->ax25_ptr = NULL; | ||
1217 | dev_put(dev); | ||
1218 | - kfree(ax25_dev); | ||
1219 | + ax25_dev_put(ax25_dev); | ||
1220 | return; | ||
1221 | } | ||
1222 | |||
1223 | @@ -123,9 +127,10 @@ void ax25_dev_device_down(struct net_device *dev) | ||
1224 | if (s->next == ax25_dev) { | ||
1225 | s->next = ax25_dev->next; | ||
1226 | spin_unlock_bh(&ax25_dev_lock); | ||
1227 | + ax25_dev_put(ax25_dev); | ||
1228 | dev->ax25_ptr = NULL; | ||
1229 | dev_put(dev); | ||
1230 | - kfree(ax25_dev); | ||
1231 | + ax25_dev_put(ax25_dev); | ||
1232 | return; | ||
1233 | } | ||
1234 | |||
1235 | @@ -133,6 +138,7 @@ void ax25_dev_device_down(struct net_device *dev) | ||
1236 | } | ||
1237 | spin_unlock_bh(&ax25_dev_lock); | ||
1238 | dev->ax25_ptr = NULL; | ||
1239 | + ax25_dev_put(ax25_dev); | ||
1240 | } | ||
1241 | |||
1242 | int ax25_fwd_ioctl(unsigned int cmd, struct ax25_fwd_struct *fwd) | ||
1243 | @@ -144,20 +150,32 @@ int ax25_fwd_ioctl(unsigned int cmd, struct ax25_fwd_struct *fwd) | ||
1244 | |||
1245 | switch (cmd) { | ||
1246 | case SIOCAX25ADDFWD: | ||
1247 | - if ((fwd_dev = ax25_addr_ax25dev(&fwd->port_to)) == NULL) | ||
1248 | + fwd_dev = ax25_addr_ax25dev(&fwd->port_to); | ||
1249 | + if (!fwd_dev) { | ||
1250 | + ax25_dev_put(ax25_dev); | ||
1251 | return -EINVAL; | ||
1252 | - if (ax25_dev->forward != NULL) | ||
1253 | + } | ||
1254 | + if (ax25_dev->forward) { | ||
1255 | + ax25_dev_put(fwd_dev); | ||
1256 | + ax25_dev_put(ax25_dev); | ||
1257 | return -EINVAL; | ||
1258 | + } | ||
1259 | ax25_dev->forward = fwd_dev->dev; | ||
1260 | + ax25_dev_put(fwd_dev); | ||
1261 | + ax25_dev_put(ax25_dev); | ||
1262 | break; | ||
1263 | |||
1264 | case SIOCAX25DELFWD: | ||
1265 | - if (ax25_dev->forward == NULL) | ||
1266 | + if (!ax25_dev->forward) { | ||
1267 | + ax25_dev_put(ax25_dev); | ||
1268 | return -EINVAL; | ||
1269 | + } | ||
1270 | ax25_dev->forward = NULL; | ||
1271 | + ax25_dev_put(ax25_dev); | ||
1272 | break; | ||
1273 | |||
1274 | default: | ||
1275 | + ax25_dev_put(ax25_dev); | ||
1276 | return -EINVAL; | ||
1277 | } | ||
1278 | |||
1279 | diff --git a/net/ax25/ax25_route.c b/net/ax25/ax25_route.c | ||
1280 | index b40e0bce67ead..dc2168d2a32a9 100644 | ||
1281 | --- a/net/ax25/ax25_route.c | ||
1282 | +++ b/net/ax25/ax25_route.c | ||
1283 | @@ -75,11 +75,13 @@ static int __must_check ax25_rt_add(struct ax25_routes_struct *route) | ||
1284 | ax25_dev *ax25_dev; | ||
1285 | int i; | ||
1286 | |||
1287 | - if ((ax25_dev = ax25_addr_ax25dev(&route->port_addr)) == NULL) | ||
1288 | - return -EINVAL; | ||
1289 | if (route->digi_count > AX25_MAX_DIGIS) | ||
1290 | return -EINVAL; | ||
1291 | |||
1292 | + ax25_dev = ax25_addr_ax25dev(&route->port_addr); | ||
1293 | + if (!ax25_dev) | ||
1294 | + return -EINVAL; | ||
1295 | + | ||
1296 | write_lock_bh(&ax25_route_lock); | ||
1297 | |||
1298 | ax25_rt = ax25_route_list; | ||
1299 | @@ -91,6 +93,7 @@ static int __must_check ax25_rt_add(struct ax25_routes_struct *route) | ||
1300 | if (route->digi_count != 0) { | ||
1301 | if ((ax25_rt->digipeat = kmalloc(sizeof(ax25_digi), GFP_ATOMIC)) == NULL) { | ||
1302 | write_unlock_bh(&ax25_route_lock); | ||
1303 | + ax25_dev_put(ax25_dev); | ||
1304 | return -ENOMEM; | ||
1305 | } | ||
1306 | ax25_rt->digipeat->lastrepeat = -1; | ||
1307 | @@ -101,6 +104,7 @@ static int __must_check ax25_rt_add(struct ax25_routes_struct *route) | ||
1308 | } | ||
1309 | } | ||
1310 | write_unlock_bh(&ax25_route_lock); | ||
1311 | + ax25_dev_put(ax25_dev); | ||
1312 | return 0; | ||
1313 | } | ||
1314 | ax25_rt = ax25_rt->next; | ||
1315 | @@ -108,6 +112,7 @@ static int __must_check ax25_rt_add(struct ax25_routes_struct *route) | ||
1316 | |||
1317 | if ((ax25_rt = kmalloc(sizeof(ax25_route), GFP_ATOMIC)) == NULL) { | ||
1318 | write_unlock_bh(&ax25_route_lock); | ||
1319 | + ax25_dev_put(ax25_dev); | ||
1320 | return -ENOMEM; | ||
1321 | } | ||
1322 | |||
1323 | @@ -120,6 +125,7 @@ static int __must_check ax25_rt_add(struct ax25_routes_struct *route) | ||
1324 | if ((ax25_rt->digipeat = kmalloc(sizeof(ax25_digi), GFP_ATOMIC)) == NULL) { | ||
1325 | write_unlock_bh(&ax25_route_lock); | ||
1326 | kfree(ax25_rt); | ||
1327 | + ax25_dev_put(ax25_dev); | ||
1328 | return -ENOMEM; | ||
1329 | } | ||
1330 | ax25_rt->digipeat->lastrepeat = -1; | ||
1331 | @@ -132,6 +138,7 @@ static int __must_check ax25_rt_add(struct ax25_routes_struct *route) | ||
1332 | ax25_rt->next = ax25_route_list; | ||
1333 | ax25_route_list = ax25_rt; | ||
1334 | write_unlock_bh(&ax25_route_lock); | ||
1335 | + ax25_dev_put(ax25_dev); | ||
1336 | |||
1337 | return 0; | ||
1338 | } | ||
1339 | @@ -173,6 +180,7 @@ static int ax25_rt_del(struct ax25_routes_struct *route) | ||
1340 | } | ||
1341 | } | ||
1342 | write_unlock_bh(&ax25_route_lock); | ||
1343 | + ax25_dev_put(ax25_dev); | ||
1344 | |||
1345 | return 0; | ||
1346 | } | ||
1347 | @@ -215,6 +223,7 @@ static int ax25_rt_opt(struct ax25_route_opt_struct *rt_option) | ||
1348 | |||
1349 | out: | ||
1350 | write_unlock_bh(&ax25_route_lock); | ||
1351 | + ax25_dev_put(ax25_dev); | ||
1352 | return err; | ||
1353 | } | ||
1354 | |||
1355 | diff --git a/net/ax25/ax25_subr.c b/net/ax25/ax25_subr.c | ||
1356 | index 15ab812c4fe4b..3a476e4f6cd0b 100644 | ||
1357 | --- a/net/ax25/ax25_subr.c | ||
1358 | +++ b/net/ax25/ax25_subr.c | ||
1359 | @@ -261,12 +261,20 @@ void ax25_disconnect(ax25_cb *ax25, int reason) | ||
1360 | { | ||
1361 | ax25_clear_queues(ax25); | ||
1362 | |||
1363 | - if (!ax25->sk || !sock_flag(ax25->sk, SOCK_DESTROY)) | ||
1364 | - ax25_stop_heartbeat(ax25); | ||
1365 | - ax25_stop_t1timer(ax25); | ||
1366 | - ax25_stop_t2timer(ax25); | ||
1367 | - ax25_stop_t3timer(ax25); | ||
1368 | - ax25_stop_idletimer(ax25); | ||
1369 | + if (reason == ENETUNREACH) { | ||
1370 | + del_timer_sync(&ax25->timer); | ||
1371 | + del_timer_sync(&ax25->t1timer); | ||
1372 | + del_timer_sync(&ax25->t2timer); | ||
1373 | + del_timer_sync(&ax25->t3timer); | ||
1374 | + del_timer_sync(&ax25->idletimer); | ||
1375 | + } else { | ||
1376 | + if (!ax25->sk || !sock_flag(ax25->sk, SOCK_DESTROY)) | ||
1377 | + ax25_stop_heartbeat(ax25); | ||
1378 | + ax25_stop_t1timer(ax25); | ||
1379 | + ax25_stop_t2timer(ax25); | ||
1380 | + ax25_stop_t3timer(ax25); | ||
1381 | + ax25_stop_idletimer(ax25); | ||
1382 | + } | ||
1383 | |||
1384 | ax25->state = AX25_STATE_0; | ||
1385 | |||
1386 | diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c | ||
1387 | index b740a74f06f22..4dac27c986231 100644 | ||
1388 | --- a/net/core/flow_dissector.c | ||
1389 | +++ b/net/core/flow_dissector.c | ||
1390 | @@ -1149,6 +1149,7 @@ proto_again: | ||
1391 | VLAN_PRIO_MASK) >> VLAN_PRIO_SHIFT; | ||
1392 | } | ||
1393 | key_vlan->vlan_tpid = saved_vlan_tpid; | ||
1394 | + key_vlan->vlan_eth_type = proto; | ||
1395 | } | ||
1396 | |||
1397 | fdret = FLOW_DISSECT_RET_PROTO_AGAIN; | ||
1398 | diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c | ||
1399 | index 3606796009572..5585e3a94f3ca 100644 | ||
1400 | --- a/net/ipv6/ip6_output.c | ||
1401 | +++ b/net/ipv6/ip6_output.c | ||
1402 | @@ -506,7 +506,7 @@ int ip6_forward(struct sk_buff *skb) | ||
1403 | goto drop; | ||
1404 | |||
1405 | if (!net->ipv6.devconf_all->disable_policy && | ||
1406 | - !idev->cnf.disable_policy && | ||
1407 | + (!idev || !idev->cnf.disable_policy) && | ||
1408 | !xfrm6_policy_check(NULL, XFRM_POLICY_FWD, skb)) { | ||
1409 | __IP6_INC_STATS(net, idev, IPSTATS_MIB_INDISCARDS); | ||
1410 | goto drop; | ||
1411 | diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c | ||
1412 | index b8ecb002e6238..b2e922fcc70da 100644 | ||
1413 | --- a/net/nfc/nci/core.c | ||
1414 | +++ b/net/nfc/nci/core.c | ||
1415 | @@ -548,6 +548,10 @@ static int nci_close_device(struct nci_dev *ndev) | ||
1416 | mutex_lock(&ndev->req_lock); | ||
1417 | |||
1418 | if (!test_and_clear_bit(NCI_UP, &ndev->flags)) { | ||
1419 | + /* Need to flush the cmd wq in case | ||
1420 | + * there is a queued/running cmd_work | ||
1421 | + */ | ||
1422 | + flush_workqueue(ndev->cmd_wq); | ||
1423 | del_timer_sync(&ndev->cmd_timer); | ||
1424 | del_timer_sync(&ndev->data_timer); | ||
1425 | mutex_unlock(&ndev->req_lock); | ||
1426 | diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c | ||
1427 | index 80205b138d113..919c7fa5f02d6 100644 | ||
1428 | --- a/net/sched/cls_api.c | ||
1429 | +++ b/net/sched/cls_api.c | ||
1430 | @@ -1639,10 +1639,10 @@ static int tcf_chain_tp_insert(struct tcf_chain *chain, | ||
1431 | if (chain->flushing) | ||
1432 | return -EAGAIN; | ||
1433 | |||
1434 | + RCU_INIT_POINTER(tp->next, tcf_chain_tp_prev(chain, chain_info)); | ||
1435 | if (*chain_info->pprev == chain->filter_chain) | ||
1436 | tcf_chain0_head_change(chain, tp); | ||
1437 | tcf_proto_get(tp); | ||
1438 | - RCU_INIT_POINTER(tp->next, tcf_chain_tp_prev(chain, chain_info)); | ||
1439 | rcu_assign_pointer(*chain_info->pprev, tp); | ||
1440 | |||
1441 | return 0; | ||
1442 | diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c | ||
1443 | index 26979b4853bdb..007fbc1993522 100644 | ||
1444 | --- a/net/sched/cls_flower.c | ||
1445 | +++ b/net/sched/cls_flower.c | ||
1446 | @@ -784,6 +784,7 @@ static int fl_set_key_mpls(struct nlattr **tb, | ||
1447 | static void fl_set_key_vlan(struct nlattr **tb, | ||
1448 | __be16 ethertype, | ||
1449 | int vlan_id_key, int vlan_prio_key, | ||
1450 | + int vlan_next_eth_type_key, | ||
1451 | struct flow_dissector_key_vlan *key_val, | ||
1452 | struct flow_dissector_key_vlan *key_mask) | ||
1453 | { | ||
1454 | @@ -802,6 +803,11 @@ static void fl_set_key_vlan(struct nlattr **tb, | ||
1455 | } | ||
1456 | key_val->vlan_tpid = ethertype; | ||
1457 | key_mask->vlan_tpid = cpu_to_be16(~0); | ||
1458 | + if (tb[vlan_next_eth_type_key]) { | ||
1459 | + key_val->vlan_eth_type = | ||
1460 | + nla_get_be16(tb[vlan_next_eth_type_key]); | ||
1461 | + key_mask->vlan_eth_type = cpu_to_be16(~0); | ||
1462 | + } | ||
1463 | } | ||
1464 | |||
1465 | static void fl_set_key_flag(u32 flower_key, u32 flower_mask, | ||
1466 | @@ -1076,8 +1082,9 @@ static int fl_set_key(struct net *net, struct nlattr **tb, | ||
1467 | |||
1468 | if (eth_type_vlan(ethertype)) { | ||
1469 | fl_set_key_vlan(tb, ethertype, TCA_FLOWER_KEY_VLAN_ID, | ||
1470 | - TCA_FLOWER_KEY_VLAN_PRIO, &key->vlan, | ||
1471 | - &mask->vlan); | ||
1472 | + TCA_FLOWER_KEY_VLAN_PRIO, | ||
1473 | + TCA_FLOWER_KEY_VLAN_ETH_TYPE, | ||
1474 | + &key->vlan, &mask->vlan); | ||
1475 | |||
1476 | if (tb[TCA_FLOWER_KEY_VLAN_ETH_TYPE]) { | ||
1477 | ethertype = nla_get_be16(tb[TCA_FLOWER_KEY_VLAN_ETH_TYPE]); | ||
1478 | @@ -1085,6 +1092,7 @@ static int fl_set_key(struct net *net, struct nlattr **tb, | ||
1479 | fl_set_key_vlan(tb, ethertype, | ||
1480 | TCA_FLOWER_KEY_CVLAN_ID, | ||
1481 | TCA_FLOWER_KEY_CVLAN_PRIO, | ||
1482 | + TCA_FLOWER_KEY_CVLAN_ETH_TYPE, | ||
1483 | &key->cvlan, &mask->cvlan); | ||
1484 | fl_set_key_val(tb, &key->basic.n_proto, | ||
1485 | TCA_FLOWER_KEY_CVLAN_ETH_TYPE, | ||
1486 | @@ -2272,13 +2280,13 @@ static int fl_dump_key(struct sk_buff *skb, struct net *net, | ||
1487 | goto nla_put_failure; | ||
1488 | |||
1489 | if (mask->basic.n_proto) { | ||
1490 | - if (mask->cvlan.vlan_tpid) { | ||
1491 | + if (mask->cvlan.vlan_eth_type) { | ||
1492 | if (nla_put_be16(skb, TCA_FLOWER_KEY_CVLAN_ETH_TYPE, | ||
1493 | key->basic.n_proto)) | ||
1494 | goto nla_put_failure; | ||
1495 | - } else if (mask->vlan.vlan_tpid) { | ||
1496 | + } else if (mask->vlan.vlan_eth_type) { | ||
1497 | if (nla_put_be16(skb, TCA_FLOWER_KEY_VLAN_ETH_TYPE, | ||
1498 | - key->basic.n_proto)) | ||
1499 | + key->vlan.vlan_eth_type)) | ||
1500 | goto nla_put_failure; | ||
1501 | } | ||
1502 | } | ||
1503 | diff --git a/net/sched/sch_taprio.c b/net/sched/sch_taprio.c | ||
1504 | index b268e61304515..4c26f7fb32b34 100644 | ||
1505 | --- a/net/sched/sch_taprio.c | ||
1506 | +++ b/net/sched/sch_taprio.c | ||
1507 | @@ -427,7 +427,8 @@ static int taprio_enqueue(struct sk_buff *skb, struct Qdisc *sch, | ||
1508 | if (unlikely(!child)) | ||
1509 | return qdisc_drop(skb, sch, to_free); | ||
1510 | |||
1511 | - if (skb->sk && sock_flag(skb->sk, SOCK_TXTIME)) { | ||
1512 | + /* sk_flags are only safe to use on full sockets. */ | ||
1513 | + if (skb->sk && sk_fullsock(skb->sk) && sock_flag(skb->sk, SOCK_TXTIME)) { | ||
1514 | if (!is_valid_interval(skb, sch)) | ||
1515 | return qdisc_drop(skb, sch, to_free); | ||
1516 | } else if (TXTIME_ASSIST_IS_ENABLED(q->flags)) { | ||
1517 | diff --git a/net/sctp/socket.c b/net/sctp/socket.c | ||
1518 | index 565aa77fe5cbe..c76b40322ac7d 100644 | ||
1519 | --- a/net/sctp/socket.c | ||
1520 | +++ b/net/sctp/socket.c | ||
1521 | @@ -5682,7 +5682,7 @@ int sctp_do_peeloff(struct sock *sk, sctp_assoc_t id, struct socket **sockp) | ||
1522 | * Set the daddr and initialize id to something more random and also | ||
1523 | * copy over any ip options. | ||
1524 | */ | ||
1525 | - sp->pf->to_sk_daddr(&asoc->peer.primary_addr, sk); | ||
1526 | + sp->pf->to_sk_daddr(&asoc->peer.primary_addr, sock->sk); | ||
1527 | sp->pf->copy_ip_options(sk, sock->sk); | ||
1528 | |||
1529 | /* Populate the fields of the newsk from the oldsk and migrate the | ||
1530 | diff --git a/net/smc/smc_pnet.c b/net/smc/smc_pnet.c | ||
1531 | index 571e6d84da3ba..660608202f284 100644 | ||
1532 | --- a/net/smc/smc_pnet.c | ||
1533 | +++ b/net/smc/smc_pnet.c | ||
1534 | @@ -295,8 +295,9 @@ static struct smc_ib_device *smc_pnet_find_ib(char *ib_name) | ||
1535 | list_for_each_entry(ibdev, &smc_ib_devices.list, list) { | ||
1536 | if (!strncmp(ibdev->ibdev->name, ib_name, | ||
1537 | sizeof(ibdev->ibdev->name)) || | ||
1538 | - !strncmp(dev_name(ibdev->ibdev->dev.parent), ib_name, | ||
1539 | - IB_DEVICE_NAME_MAX - 1)) { | ||
1540 | + (ibdev->ibdev->dev.parent && | ||
1541 | + !strncmp(dev_name(ibdev->ibdev->dev.parent), ib_name, | ||
1542 | + IB_DEVICE_NAME_MAX - 1))) { | ||
1543 | goto out; | ||
1544 | } | ||
1545 | } | ||
1546 | diff --git a/net/wireless/scan.c b/net/wireless/scan.c | ||
1547 | index 6cefaad3b7f84..6bb9437af28bf 100644 | ||
1548 | --- a/net/wireless/scan.c | ||
1549 | +++ b/net/wireless/scan.c | ||
1550 | @@ -1457,11 +1457,13 @@ cfg80211_inform_single_bss_data(struct wiphy *wiphy, | ||
1551 | /* this is a nontransmitting bss, we need to add it to | ||
1552 | * transmitting bss' list if it is not there | ||
1553 | */ | ||
1554 | + spin_lock_bh(&rdev->bss_lock); | ||
1555 | if (cfg80211_add_nontrans_list(non_tx_data->tx_bss, | ||
1556 | &res->pub)) { | ||
1557 | if (__cfg80211_unlink_bss(rdev, res)) | ||
1558 | rdev->bss_generation++; | ||
1559 | } | ||
1560 | + spin_unlock_bh(&rdev->bss_lock); | ||
1561 | } | ||
1562 | |||
1563 | trace_cfg80211_return_bss(&res->pub); | ||
1564 | diff --git a/scripts/gcc-plugins/latent_entropy_plugin.c b/scripts/gcc-plugins/latent_entropy_plugin.c | ||
1565 | index cbe1d6c4b1a51..c84bef1d28955 100644 | ||
1566 | --- a/scripts/gcc-plugins/latent_entropy_plugin.c | ||
1567 | +++ b/scripts/gcc-plugins/latent_entropy_plugin.c | ||
1568 | @@ -86,25 +86,31 @@ static struct plugin_info latent_entropy_plugin_info = { | ||
1569 | .help = "disable\tturn off latent entropy instrumentation\n", | ||
1570 | }; | ||
1571 | |||
1572 | -static unsigned HOST_WIDE_INT seed; | ||
1573 | -/* | ||
1574 | - * get_random_seed() (this is a GCC function) generates the seed. | ||
1575 | - * This is a simple random generator without any cryptographic security because | ||
1576 | - * the entropy doesn't come from here. | ||
1577 | - */ | ||
1578 | +static unsigned HOST_WIDE_INT deterministic_seed; | ||
1579 | +static unsigned HOST_WIDE_INT rnd_buf[32]; | ||
1580 | +static size_t rnd_idx = ARRAY_SIZE(rnd_buf); | ||
1581 | +static int urandom_fd = -1; | ||
1582 | + | ||
1583 | static unsigned HOST_WIDE_INT get_random_const(void) | ||
1584 | { | ||
1585 | - unsigned int i; | ||
1586 | - unsigned HOST_WIDE_INT ret = 0; | ||
1587 | - | ||
1588 | - for (i = 0; i < 8 * sizeof(ret); i++) { | ||
1589 | - ret = (ret << 1) | (seed & 1); | ||
1590 | - seed >>= 1; | ||
1591 | - if (ret & 1) | ||
1592 | - seed ^= 0xD800000000000000ULL; | ||
1593 | + if (deterministic_seed) { | ||
1594 | + unsigned HOST_WIDE_INT w = deterministic_seed; | ||
1595 | + w ^= w << 13; | ||
1596 | + w ^= w >> 7; | ||
1597 | + w ^= w << 17; | ||
1598 | + deterministic_seed = w; | ||
1599 | + return deterministic_seed; | ||
1600 | } | ||
1601 | |||
1602 | - return ret; | ||
1603 | + if (urandom_fd < 0) { | ||
1604 | + urandom_fd = open("/dev/urandom", O_RDONLY); | ||
1605 | + gcc_assert(urandom_fd >= 0); | ||
1606 | + } | ||
1607 | + if (rnd_idx >= ARRAY_SIZE(rnd_buf)) { | ||
1608 | + gcc_assert(read(urandom_fd, rnd_buf, sizeof(rnd_buf)) == sizeof(rnd_buf)); | ||
1609 | + rnd_idx = 0; | ||
1610 | + } | ||
1611 | + return rnd_buf[rnd_idx++]; | ||
1612 | } | ||
1613 | |||
1614 | static tree tree_get_random_const(tree type) | ||
1615 | @@ -549,8 +555,6 @@ static void latent_entropy_start_unit(void *gcc_data __unused, | ||
1616 | tree type, id; | ||
1617 | int quals; | ||
1618 | |||
1619 | - seed = get_random_seed(false); | ||
1620 | - | ||
1621 | if (in_lto_p) | ||
1622 | return; | ||
1623 | |||
1624 | @@ -585,6 +589,12 @@ __visible int plugin_init(struct plugin_name_args *plugin_info, | ||
1625 | const struct plugin_argument * const argv = plugin_info->argv; | ||
1626 | int i; | ||
1627 | |||
1628 | + /* | ||
1629 | + * Call get_random_seed() with noinit=true, so that this returns | ||
1630 | + * 0 in the case where no seed has been passed via -frandom-seed. | ||
1631 | + */ | ||
1632 | + deterministic_seed = get_random_seed(true); | ||
1633 | + | ||
1634 | static const struct ggc_root_tab gt_ggc_r_gt_latent_entropy[] = { | ||
1635 | { | ||
1636 | .base = &latent_entropy_decl, | ||
1637 | diff --git a/sound/core/pcm_misc.c b/sound/core/pcm_misc.c | ||
1638 | index c4eb561d20086..0956be39b0355 100644 | ||
1639 | --- a/sound/core/pcm_misc.c | ||
1640 | +++ b/sound/core/pcm_misc.c | ||
1641 | @@ -423,7 +423,7 @@ int snd_pcm_format_set_silence(snd_pcm_format_t format, void *data, unsigned int | ||
1642 | return 0; | ||
1643 | width = pcm_formats[(INT)format].phys; /* physical width */ | ||
1644 | pat = pcm_formats[(INT)format].silence; | ||
1645 | - if (! width) | ||
1646 | + if (!width || !pat) | ||
1647 | return -EINVAL; | ||
1648 | /* signed or 1 byte data */ | ||
1649 | if (pcm_formats[(INT)format].signd == 1 || width <= 8) { | ||
1650 | diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c | ||
1651 | index 05ca4196cb0fd..851ea79da31cd 100644 | ||
1652 | --- a/sound/pci/hda/patch_realtek.c | ||
1653 | +++ b/sound/pci/hda/patch_realtek.c | ||
1654 | @@ -2568,6 +2568,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = { | ||
1655 | SND_PCI_QUIRK(0x1558, 0x65e1, "Clevo PB51[ED][DF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), | ||
1656 | SND_PCI_QUIRK(0x1558, 0x65e5, "Clevo PC50D[PRS](?:-D|-G)?", ALC1220_FIXUP_CLEVO_PB51ED_PINS), | ||
1657 | SND_PCI_QUIRK(0x1558, 0x65f1, "Clevo PC50HS", ALC1220_FIXUP_CLEVO_PB51ED_PINS), | ||
1658 | + SND_PCI_QUIRK(0x1558, 0x65f5, "Clevo PD50PN[NRT]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), | ||
1659 | SND_PCI_QUIRK(0x1558, 0x67d1, "Clevo PB71[ER][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), | ||
1660 | SND_PCI_QUIRK(0x1558, 0x67e1, "Clevo PB71[DE][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), | ||
1661 | SND_PCI_QUIRK(0x1558, 0x67e5, "Clevo PC70D[PRS](?:-D|-G)?", ALC1220_FIXUP_CLEVO_PB51ED_PINS), | ||
1662 | diff --git a/tools/testing/selftests/mqueue/mq_perf_tests.c b/tools/testing/selftests/mqueue/mq_perf_tests.c | ||
1663 | index b019e0b8221c7..84fda3b490735 100644 | ||
1664 | --- a/tools/testing/selftests/mqueue/mq_perf_tests.c | ||
1665 | +++ b/tools/testing/selftests/mqueue/mq_perf_tests.c | ||
1666 | @@ -180,6 +180,9 @@ void shutdown(int exit_val, char *err_cause, int line_no) | ||
1667 | if (in_shutdown++) | ||
1668 | return; | ||
1669 | |||
1670 | + /* Free the cpu_set allocated using CPU_ALLOC in main function */ | ||
1671 | + CPU_FREE(cpu_set); | ||
1672 | + | ||
1673 | for (i = 0; i < num_cpus_to_pin; i++) | ||
1674 | if (cpu_threads[i]) { | ||
1675 | pthread_kill(cpu_threads[i], SIGUSR1); | ||
1676 | @@ -551,6 +554,12 @@ int main(int argc, char *argv[]) | ||
1677 | perror("sysconf(_SC_NPROCESSORS_ONLN)"); | ||
1678 | exit(1); | ||
1679 | } | ||
1680 | + | ||
1681 | + if (getuid() != 0) | ||
1682 | + ksft_exit_skip("Not running as root, but almost all tests " | ||
1683 | + "require root in order to modify\nsystem settings. " | ||
1684 | + "Exiting.\n"); | ||
1685 | + | ||
1686 | cpus_online = min(MAX_CPUS, sysconf(_SC_NPROCESSORS_ONLN)); | ||
1687 | cpu_set = CPU_ALLOC(cpus_online); | ||
1688 | if (cpu_set == NULL) { | ||
1689 | @@ -589,7 +598,7 @@ int main(int argc, char *argv[]) | ||
1690 | cpu_set)) { | ||
1691 | fprintf(stderr, "Any given CPU may " | ||
1692 | "only be given once.\n"); | ||
1693 | - exit(1); | ||
1694 | + goto err_code; | ||
1695 | } else | ||
1696 | CPU_SET_S(cpus_to_pin[cpu], | ||
1697 | cpu_set_size, cpu_set); | ||
1698 | @@ -607,7 +616,7 @@ int main(int argc, char *argv[]) | ||
1699 | queue_path = malloc(strlen(option) + 2); | ||
1700 | if (!queue_path) { | ||
1701 | perror("malloc()"); | ||
1702 | - exit(1); | ||
1703 | + goto err_code; | ||
1704 | } | ||
1705 | queue_path[0] = '/'; | ||
1706 | queue_path[1] = 0; | ||
1707 | @@ -622,17 +631,12 @@ int main(int argc, char *argv[]) | ||
1708 | fprintf(stderr, "Must pass at least one CPU to continuous " | ||
1709 | "mode.\n"); | ||
1710 | poptPrintUsage(popt_context, stderr, 0); | ||
1711 | - exit(1); | ||
1712 | + goto err_code; | ||
1713 | } else if (!continuous_mode) { | ||
1714 | num_cpus_to_pin = 1; | ||
1715 | cpus_to_pin[0] = cpus_online - 1; | ||
1716 | } | ||
1717 | |||
1718 | - if (getuid() != 0) | ||
1719 | - ksft_exit_skip("Not running as root, but almost all tests " | ||
1720 | - "require root in order to modify\nsystem settings. " | ||
1721 | - "Exiting.\n"); | ||
1722 | - | ||
1723 | max_msgs = fopen(MAX_MSGS, "r+"); | ||
1724 | max_msgsize = fopen(MAX_MSGSIZE, "r+"); | ||
1725 | if (!max_msgs) | ||
1726 | @@ -740,4 +744,9 @@ int main(int argc, char *argv[]) | ||
1727 | sleep(1); | ||
1728 | } | ||
1729 | shutdown(0, "", 0); | ||
1730 | + | ||
1731 | +err_code: | ||
1732 | + CPU_FREE(cpu_set); | ||
1733 | + exit(1); | ||
1734 | + | ||
1735 | } |