Annotation of /trunk/kernel-alx/patches-4.9/0244-4.9.145-all-fixes.patch
Parent Directory | Revision Log
Revision 3297 -
(hide annotations)
(download)
Tue Mar 12 10:43:06 2019 UTC (5 years, 6 months ago) by niro
File size: 48413 byte(s)
Tue Mar 12 10:43:06 2019 UTC (5 years, 6 months ago) by niro
File size: 48413 byte(s)
-linux-4.9.145
1 | niro | 3297 | diff --git a/Makefile b/Makefile |
2 | index c62b2b529724..1499c7ba2874 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,6 +1,6 @@ | ||
6 | VERSION = 4 | ||
7 | PATCHLEVEL = 9 | ||
8 | -SUBLEVEL = 144 | ||
9 | +SUBLEVEL = 145 | ||
10 | EXTRAVERSION = | ||
11 | NAME = Roaring Lionus | ||
12 | |||
13 | @@ -512,13 +512,15 @@ endif | ||
14 | ifeq ($(cc-name),clang) | ||
15 | ifneq ($(CROSS_COMPILE),) | ||
16 | CLANG_TARGET := -target $(notdir $(CROSS_COMPILE:%-=%)) | ||
17 | -GCC_TOOLCHAIN := $(realpath $(dir $(shell which $(LD)))/..) | ||
18 | +GCC_TOOLCHAIN_DIR := $(dir $(shell which $(LD))) | ||
19 | +CLANG_PREFIX := --prefix=$(GCC_TOOLCHAIN_DIR) | ||
20 | +GCC_TOOLCHAIN := $(realpath $(GCC_TOOLCHAIN_DIR)/..) | ||
21 | endif | ||
22 | ifneq ($(GCC_TOOLCHAIN),) | ||
23 | CLANG_GCC_TC := -gcc-toolchain $(GCC_TOOLCHAIN) | ||
24 | endif | ||
25 | -KBUILD_CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) | ||
26 | -KBUILD_AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) | ||
27 | +KBUILD_CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) $(CLANG_PREFIX) | ||
28 | +KBUILD_AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) $(CLANG_PREFIX) | ||
29 | KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,) | ||
30 | KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable) | ||
31 | KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier) | ||
32 | diff --git a/arch/arc/configs/zebu_hs_defconfig b/arch/arc/configs/zebu_hs_defconfig | ||
33 | index 9f6166be7145..3346829b02bb 100644 | ||
34 | --- a/arch/arc/configs/zebu_hs_defconfig | ||
35 | +++ b/arch/arc/configs/zebu_hs_defconfig | ||
36 | @@ -11,7 +11,6 @@ CONFIG_NAMESPACES=y | ||
37 | # CONFIG_UTS_NS is not set | ||
38 | # CONFIG_PID_NS is not set | ||
39 | CONFIG_BLK_DEV_INITRD=y | ||
40 | -CONFIG_INITRAMFS_SOURCE="../../arc_initramfs_hs/" | ||
41 | CONFIG_EXPERT=y | ||
42 | CONFIG_PERF_EVENTS=y | ||
43 | # CONFIG_COMPAT_BRK is not set | ||
44 | diff --git a/arch/arc/configs/zebu_hs_smp_defconfig b/arch/arc/configs/zebu_hs_smp_defconfig | ||
45 | index 44e9693f4257..4471f9c37d7e 100644 | ||
46 | --- a/arch/arc/configs/zebu_hs_smp_defconfig | ||
47 | +++ b/arch/arc/configs/zebu_hs_smp_defconfig | ||
48 | @@ -11,7 +11,6 @@ CONFIG_NAMESPACES=y | ||
49 | # CONFIG_UTS_NS is not set | ||
50 | # CONFIG_PID_NS is not set | ||
51 | CONFIG_BLK_DEV_INITRD=y | ||
52 | -CONFIG_INITRAMFS_SOURCE="../../arc_initramfs_hs/" | ||
53 | CONFIG_EMBEDDED=y | ||
54 | CONFIG_PERF_EVENTS=y | ||
55 | # CONFIG_VM_EVENT_COUNTERS is not set | ||
56 | diff --git a/drivers/dma/cppi41.c b/drivers/dma/cppi41.c | ||
57 | index 55c1782e3623..2ceb5a26f860 100644 | ||
58 | --- a/drivers/dma/cppi41.c | ||
59 | +++ b/drivers/dma/cppi41.c | ||
60 | @@ -717,8 +717,22 @@ static int cppi41_stop_chan(struct dma_chan *chan) | ||
61 | |||
62 | desc_phys = lower_32_bits(c->desc_phys); | ||
63 | desc_num = (desc_phys - cdd->descs_phys) / sizeof(struct cppi41_desc); | ||
64 | - if (!cdd->chan_busy[desc_num]) | ||
65 | + if (!cdd->chan_busy[desc_num]) { | ||
66 | + struct cppi41_channel *cc, *_ct; | ||
67 | + | ||
68 | + /* | ||
69 | + * channels might still be in the pendling list if | ||
70 | + * cppi41_dma_issue_pending() is called after | ||
71 | + * cppi41_runtime_suspend() is called | ||
72 | + */ | ||
73 | + list_for_each_entry_safe(cc, _ct, &cdd->pending, node) { | ||
74 | + if (cc != c) | ||
75 | + continue; | ||
76 | + list_del(&cc->node); | ||
77 | + break; | ||
78 | + } | ||
79 | return 0; | ||
80 | + } | ||
81 | |||
82 | ret = cppi41_tear_down_chan(c); | ||
83 | if (ret) | ||
84 | diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h | ||
85 | index 8913f357e78f..6f4c84d824e6 100644 | ||
86 | --- a/drivers/hid/hid-ids.h | ||
87 | +++ b/drivers/hid/hid-ids.h | ||
88 | @@ -965,6 +965,7 @@ | ||
89 | #define USB_VENDOR_ID_SYMBOL 0x05e0 | ||
90 | #define USB_DEVICE_ID_SYMBOL_SCANNER_1 0x0800 | ||
91 | #define USB_DEVICE_ID_SYMBOL_SCANNER_2 0x1300 | ||
92 | +#define USB_DEVICE_ID_SYMBOL_SCANNER_3 0x1200 | ||
93 | |||
94 | #define USB_VENDOR_ID_SYNAPTICS 0x06cb | ||
95 | #define USB_DEVICE_ID_SYNAPTICS_TP 0x0001 | ||
96 | diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c | ||
97 | index 5ff6dd8147b6..fc7ada26457e 100644 | ||
98 | --- a/drivers/hid/hid-input.c | ||
99 | +++ b/drivers/hid/hid-input.c | ||
100 | @@ -324,6 +324,9 @@ static const struct hid_device_id hid_battery_quirks[] = { | ||
101 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, | ||
102 | USB_DEVICE_ID_ELECOM_BM084), | ||
103 | HID_BATTERY_QUIRK_IGNORE }, | ||
104 | + { HID_USB_DEVICE(USB_VENDOR_ID_SYMBOL, | ||
105 | + USB_DEVICE_ID_SYMBOL_SCANNER_3), | ||
106 | + HID_BATTERY_QUIRK_IGNORE }, | ||
107 | {} | ||
108 | }; | ||
109 | |||
110 | diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c | ||
111 | index 2558a381e118..f8c8537f0587 100644 | ||
112 | --- a/drivers/iommu/intel-iommu.c | ||
113 | +++ b/drivers/iommu/intel-iommu.c | ||
114 | @@ -3054,7 +3054,7 @@ static int copy_context_table(struct intel_iommu *iommu, | ||
115 | } | ||
116 | |||
117 | if (old_ce) | ||
118 | - iounmap(old_ce); | ||
119 | + memunmap(old_ce); | ||
120 | |||
121 | ret = 0; | ||
122 | if (devfn < 0x80) | ||
123 | diff --git a/drivers/iommu/intel-svm.c b/drivers/iommu/intel-svm.c | ||
124 | index f846f0140a9d..7dc2f8d415b6 100644 | ||
125 | --- a/drivers/iommu/intel-svm.c | ||
126 | +++ b/drivers/iommu/intel-svm.c | ||
127 | @@ -558,7 +558,7 @@ static irqreturn_t prq_event_thread(int irq, void *d) | ||
128 | pr_err("%s: Page request without PASID: %08llx %08llx\n", | ||
129 | iommu->name, ((unsigned long long *)req)[0], | ||
130 | ((unsigned long long *)req)[1]); | ||
131 | - goto bad_req; | ||
132 | + goto no_pasid; | ||
133 | } | ||
134 | |||
135 | if (!svm || svm->pasid != req->pasid) { | ||
136 | diff --git a/drivers/iommu/ipmmu-vmsa.c b/drivers/iommu/ipmmu-vmsa.c | ||
137 | index 85b5e75c7faa..3d2e9ca78f02 100644 | ||
138 | --- a/drivers/iommu/ipmmu-vmsa.c | ||
139 | +++ b/drivers/iommu/ipmmu-vmsa.c | ||
140 | @@ -372,6 +372,9 @@ static int ipmmu_domain_init_context(struct ipmmu_vmsa_domain *domain) | ||
141 | |||
142 | static void ipmmu_domain_destroy_context(struct ipmmu_vmsa_domain *domain) | ||
143 | { | ||
144 | + if (!domain->mmu) | ||
145 | + return; | ||
146 | + | ||
147 | /* | ||
148 | * Disable the context. Flush the TLB as required when modifying the | ||
149 | * context registers. | ||
150 | diff --git a/drivers/media/platform/omap3isp/isp.c b/drivers/media/platform/omap3isp/isp.c | ||
151 | index 1e98b4845ea1..a21b12c5c085 100644 | ||
152 | --- a/drivers/media/platform/omap3isp/isp.c | ||
153 | +++ b/drivers/media/platform/omap3isp/isp.c | ||
154 | @@ -1591,6 +1591,8 @@ static void isp_pm_complete(struct device *dev) | ||
155 | |||
156 | static void isp_unregister_entities(struct isp_device *isp) | ||
157 | { | ||
158 | + media_device_unregister(&isp->media_dev); | ||
159 | + | ||
160 | omap3isp_csi2_unregister_entities(&isp->isp_csi2a); | ||
161 | omap3isp_ccp2_unregister_entities(&isp->isp_ccp2); | ||
162 | omap3isp_ccdc_unregister_entities(&isp->isp_ccdc); | ||
163 | @@ -1601,7 +1603,6 @@ static void isp_unregister_entities(struct isp_device *isp) | ||
164 | omap3isp_stat_unregister_entities(&isp->isp_hist); | ||
165 | |||
166 | v4l2_device_unregister(&isp->v4l2_dev); | ||
167 | - media_device_unregister(&isp->media_dev); | ||
168 | media_device_cleanup(&isp->media_dev); | ||
169 | } | ||
170 | |||
171 | diff --git a/drivers/mtd/nand/qcom_nandc.c b/drivers/mtd/nand/qcom_nandc.c | ||
172 | index dc4943134649..9f6c9a34b9eb 100644 | ||
173 | --- a/drivers/mtd/nand/qcom_nandc.c | ||
174 | +++ b/drivers/mtd/nand/qcom_nandc.c | ||
175 | @@ -142,15 +142,15 @@ | ||
176 | #define NAND_VERSION_MINOR_SHIFT 16 | ||
177 | |||
178 | /* NAND OP_CMDs */ | ||
179 | -#define PAGE_READ 0x2 | ||
180 | -#define PAGE_READ_WITH_ECC 0x3 | ||
181 | -#define PAGE_READ_WITH_ECC_SPARE 0x4 | ||
182 | -#define PROGRAM_PAGE 0x6 | ||
183 | -#define PAGE_PROGRAM_WITH_ECC 0x7 | ||
184 | -#define PROGRAM_PAGE_SPARE 0x9 | ||
185 | -#define BLOCK_ERASE 0xa | ||
186 | -#define FETCH_ID 0xb | ||
187 | -#define RESET_DEVICE 0xd | ||
188 | +#define OP_PAGE_READ 0x2 | ||
189 | +#define OP_PAGE_READ_WITH_ECC 0x3 | ||
190 | +#define OP_PAGE_READ_WITH_ECC_SPARE 0x4 | ||
191 | +#define OP_PROGRAM_PAGE 0x6 | ||
192 | +#define OP_PAGE_PROGRAM_WITH_ECC 0x7 | ||
193 | +#define OP_PROGRAM_PAGE_SPARE 0x9 | ||
194 | +#define OP_BLOCK_ERASE 0xa | ||
195 | +#define OP_FETCH_ID 0xb | ||
196 | +#define OP_RESET_DEVICE 0xd | ||
197 | |||
198 | /* Default Value for NAND_DEV_CMD_VLD */ | ||
199 | #define NAND_DEV_CMD_VLD_VAL (READ_START_VLD | WRITE_START_VLD | \ | ||
200 | @@ -425,11 +425,11 @@ static void update_rw_regs(struct qcom_nand_host *host, int num_cw, bool read) | ||
201 | |||
202 | if (read) { | ||
203 | if (host->use_ecc) | ||
204 | - cmd = PAGE_READ_WITH_ECC | PAGE_ACC | LAST_PAGE; | ||
205 | + cmd = OP_PAGE_READ_WITH_ECC | PAGE_ACC | LAST_PAGE; | ||
206 | else | ||
207 | - cmd = PAGE_READ | PAGE_ACC | LAST_PAGE; | ||
208 | + cmd = OP_PAGE_READ | PAGE_ACC | LAST_PAGE; | ||
209 | } else { | ||
210 | - cmd = PROGRAM_PAGE | PAGE_ACC | LAST_PAGE; | ||
211 | + cmd = OP_PROGRAM_PAGE | PAGE_ACC | LAST_PAGE; | ||
212 | } | ||
213 | |||
214 | if (host->use_ecc) { | ||
215 | @@ -662,7 +662,7 @@ static int nandc_param(struct qcom_nand_host *host) | ||
216 | * in use. we configure the controller to perform a raw read of 512 | ||
217 | * bytes to read onfi params | ||
218 | */ | ||
219 | - nandc_set_reg(nandc, NAND_FLASH_CMD, PAGE_READ | PAGE_ACC | LAST_PAGE); | ||
220 | + nandc_set_reg(nandc, NAND_FLASH_CMD, OP_PAGE_READ | PAGE_ACC | LAST_PAGE); | ||
221 | nandc_set_reg(nandc, NAND_ADDR0, 0); | ||
222 | nandc_set_reg(nandc, NAND_ADDR1, 0); | ||
223 | nandc_set_reg(nandc, NAND_DEV0_CFG0, 0 << CW_PER_PAGE | ||
224 | @@ -715,7 +715,7 @@ static int erase_block(struct qcom_nand_host *host, int page_addr) | ||
225 | struct qcom_nand_controller *nandc = get_qcom_nand_controller(chip); | ||
226 | |||
227 | nandc_set_reg(nandc, NAND_FLASH_CMD, | ||
228 | - BLOCK_ERASE | PAGE_ACC | LAST_PAGE); | ||
229 | + OP_BLOCK_ERASE | PAGE_ACC | LAST_PAGE); | ||
230 | nandc_set_reg(nandc, NAND_ADDR0, page_addr); | ||
231 | nandc_set_reg(nandc, NAND_ADDR1, 0); | ||
232 | nandc_set_reg(nandc, NAND_DEV0_CFG0, | ||
233 | @@ -746,7 +746,7 @@ static int read_id(struct qcom_nand_host *host, int column) | ||
234 | if (column == -1) | ||
235 | return 0; | ||
236 | |||
237 | - nandc_set_reg(nandc, NAND_FLASH_CMD, FETCH_ID); | ||
238 | + nandc_set_reg(nandc, NAND_FLASH_CMD, OP_FETCH_ID); | ||
239 | nandc_set_reg(nandc, NAND_ADDR0, column); | ||
240 | nandc_set_reg(nandc, NAND_ADDR1, 0); | ||
241 | nandc_set_reg(nandc, NAND_FLASH_CHIP_SELECT, DM_EN); | ||
242 | @@ -766,7 +766,7 @@ static int reset(struct qcom_nand_host *host) | ||
243 | struct nand_chip *chip = &host->chip; | ||
244 | struct qcom_nand_controller *nandc = get_qcom_nand_controller(chip); | ||
245 | |||
246 | - nandc_set_reg(nandc, NAND_FLASH_CMD, RESET_DEVICE); | ||
247 | + nandc_set_reg(nandc, NAND_FLASH_CMD, OP_RESET_DEVICE); | ||
248 | nandc_set_reg(nandc, NAND_EXEC_CMD, 1); | ||
249 | |||
250 | write_reg_dma(nandc, NAND_FLASH_CMD, 1); | ||
251 | diff --git a/drivers/net/can/rcar/rcar_can.c b/drivers/net/can/rcar/rcar_can.c | ||
252 | index 788459f6bf5c..9b2c3bd00f8b 100644 | ||
253 | --- a/drivers/net/can/rcar/rcar_can.c | ||
254 | +++ b/drivers/net/can/rcar/rcar_can.c | ||
255 | @@ -24,6 +24,9 @@ | ||
256 | |||
257 | #define RCAR_CAN_DRV_NAME "rcar_can" | ||
258 | |||
259 | +#define RCAR_SUPPORTED_CLOCKS (BIT(CLKR_CLKP1) | BIT(CLKR_CLKP2) | \ | ||
260 | + BIT(CLKR_CLKEXT)) | ||
261 | + | ||
262 | /* Mailbox configuration: | ||
263 | * mailbox 60 - 63 - Rx FIFO mailboxes | ||
264 | * mailbox 56 - 59 - Tx FIFO mailboxes | ||
265 | @@ -789,7 +792,7 @@ static int rcar_can_probe(struct platform_device *pdev) | ||
266 | goto fail_clk; | ||
267 | } | ||
268 | |||
269 | - if (clock_select >= ARRAY_SIZE(clock_names)) { | ||
270 | + if (!(BIT(clock_select) & RCAR_SUPPORTED_CLOCKS)) { | ||
271 | err = -EINVAL; | ||
272 | dev_err(&pdev->dev, "invalid CAN clock selected\n"); | ||
273 | goto fail_clk; | ||
274 | diff --git a/drivers/net/ethernet/amd/sunlance.c b/drivers/net/ethernet/amd/sunlance.c | ||
275 | index 9b56b40259dc..3153465d4d02 100644 | ||
276 | --- a/drivers/net/ethernet/amd/sunlance.c | ||
277 | +++ b/drivers/net/ethernet/amd/sunlance.c | ||
278 | @@ -1419,7 +1419,7 @@ static int sparc_lance_probe_one(struct platform_device *op, | ||
279 | |||
280 | prop = of_get_property(nd, "tpe-link-test?", NULL); | ||
281 | if (!prop) | ||
282 | - goto no_link_test; | ||
283 | + goto node_put; | ||
284 | |||
285 | if (strcmp(prop, "true")) { | ||
286 | printk(KERN_NOTICE "SunLance: warning: overriding option " | ||
287 | @@ -1428,6 +1428,8 @@ static int sparc_lance_probe_one(struct platform_device *op, | ||
288 | "to ecd@skynet.be\n"); | ||
289 | auxio_set_lte(AUXIO_LTE_ON); | ||
290 | } | ||
291 | +node_put: | ||
292 | + of_node_put(nd); | ||
293 | no_link_test: | ||
294 | lp->auto_select = 1; | ||
295 | lp->tpe = 0; | ||
296 | diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h | ||
297 | index f3f2d66432ab..d5e4c42662b6 100644 | ||
298 | --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h | ||
299 | +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h | ||
300 | @@ -2187,6 +2187,13 @@ void bnx2x_igu_clear_sb_gen(struct bnx2x *bp, u8 func, u8 idu_sb_id, | ||
301 | #define PMF_DMAE_C(bp) (BP_PORT(bp) * MAX_DMAE_C_PER_PORT + \ | ||
302 | E1HVN_MAX) | ||
303 | |||
304 | +/* Following is the DMAE channel number allocation for the clients. | ||
305 | + * MFW: OCBB/OCSD implementations use DMAE channels 14/15 respectively. | ||
306 | + * Driver: 0-3 and 8-11 (for PF dmae operations) | ||
307 | + * 4 and 12 (for stats requests) | ||
308 | + */ | ||
309 | +#define BNX2X_FW_DMAE_C 13 /* Channel for FW DMAE operations */ | ||
310 | + | ||
311 | /* PCIE link and speed */ | ||
312 | #define PCICFG_LINK_WIDTH 0x1f00000 | ||
313 | #define PCICFG_LINK_WIDTH_SHIFT 20 | ||
314 | diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c | ||
315 | index cea6bdcde33f..bf760c9cff6a 100644 | ||
316 | --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c | ||
317 | +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c | ||
318 | @@ -6149,6 +6149,7 @@ static inline int bnx2x_func_send_start(struct bnx2x *bp, | ||
319 | rdata->sd_vlan_tag = cpu_to_le16(start_params->sd_vlan_tag); | ||
320 | rdata->path_id = BP_PATH(bp); | ||
321 | rdata->network_cos_mode = start_params->network_cos_mode; | ||
322 | + rdata->dmae_cmd_id = BNX2X_FW_DMAE_C; | ||
323 | |||
324 | rdata->vxlan_dst_port = cpu_to_le16(start_params->vxlan_dst_port); | ||
325 | rdata->geneve_dst_port = cpu_to_le16(start_params->geneve_dst_port); | ||
326 | diff --git a/drivers/net/ethernet/faraday/ftmac100.c b/drivers/net/ethernet/faraday/ftmac100.c | ||
327 | index dce5f7b7f772..05e1f923f49e 100644 | ||
328 | --- a/drivers/net/ethernet/faraday/ftmac100.c | ||
329 | +++ b/drivers/net/ethernet/faraday/ftmac100.c | ||
330 | @@ -865,11 +865,10 @@ static irqreturn_t ftmac100_interrupt(int irq, void *dev_id) | ||
331 | struct net_device *netdev = dev_id; | ||
332 | struct ftmac100 *priv = netdev_priv(netdev); | ||
333 | |||
334 | - if (likely(netif_running(netdev))) { | ||
335 | - /* Disable interrupts for polling */ | ||
336 | - ftmac100_disable_all_int(priv); | ||
337 | + /* Disable interrupts for polling */ | ||
338 | + ftmac100_disable_all_int(priv); | ||
339 | + if (likely(netif_running(netdev))) | ||
340 | napi_schedule(&priv->napi); | ||
341 | - } | ||
342 | |||
343 | return IRQ_HANDLED; | ||
344 | } | ||
345 | diff --git a/drivers/net/ethernet/mellanox/mlx4/alloc.c b/drivers/net/ethernet/mellanox/mlx4/alloc.c | ||
346 | index 249a4584401a..b89a34fa3601 100644 | ||
347 | --- a/drivers/net/ethernet/mellanox/mlx4/alloc.c | ||
348 | +++ b/drivers/net/ethernet/mellanox/mlx4/alloc.c | ||
349 | @@ -339,7 +339,7 @@ void mlx4_zone_allocator_destroy(struct mlx4_zone_allocator *zone_alloc) | ||
350 | static u32 __mlx4_alloc_from_zone(struct mlx4_zone_entry *zone, int count, | ||
351 | int align, u32 skip_mask, u32 *puid) | ||
352 | { | ||
353 | - u32 uid; | ||
354 | + u32 uid = 0; | ||
355 | u32 res; | ||
356 | struct mlx4_zone_allocator *zone_alloc = zone->allocator; | ||
357 | struct mlx4_zone_entry *curr_node; | ||
358 | diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4.h b/drivers/net/ethernet/mellanox/mlx4/mlx4.h | ||
359 | index 086920b615af..df5d86fa0a92 100644 | ||
360 | --- a/drivers/net/ethernet/mellanox/mlx4/mlx4.h | ||
361 | +++ b/drivers/net/ethernet/mellanox/mlx4/mlx4.h | ||
362 | @@ -542,8 +542,8 @@ struct slave_list { | ||
363 | struct resource_allocator { | ||
364 | spinlock_t alloc_lock; /* protect quotas */ | ||
365 | union { | ||
366 | - int res_reserved; | ||
367 | - int res_port_rsvd[MLX4_MAX_PORTS]; | ||
368 | + unsigned int res_reserved; | ||
369 | + unsigned int res_port_rsvd[MLX4_MAX_PORTS]; | ||
370 | }; | ||
371 | union { | ||
372 | int res_free; | ||
373 | diff --git a/drivers/net/ethernet/mellanox/mlx4/mr.c b/drivers/net/ethernet/mellanox/mlx4/mr.c | ||
374 | index 395b5463cfd9..3637474cab8a 100644 | ||
375 | --- a/drivers/net/ethernet/mellanox/mlx4/mr.c | ||
376 | +++ b/drivers/net/ethernet/mellanox/mlx4/mr.c | ||
377 | @@ -366,6 +366,7 @@ int mlx4_mr_hw_write_mpt(struct mlx4_dev *dev, struct mlx4_mr *mmr, | ||
378 | container_of((void *)mpt_entry, struct mlx4_cmd_mailbox, | ||
379 | buf); | ||
380 | |||
381 | + (*mpt_entry)->lkey = 0; | ||
382 | err = mlx4_SW2HW_MPT(dev, mailbox, key); | ||
383 | } | ||
384 | |||
385 | diff --git a/drivers/net/ethernet/qlogic/qed/qed_int.c b/drivers/net/ethernet/qlogic/qed/qed_int.c | ||
386 | index 2adedc6fb6cf..fd19372db2f8 100644 | ||
387 | --- a/drivers/net/ethernet/qlogic/qed/qed_int.c | ||
388 | +++ b/drivers/net/ethernet/qlogic/qed/qed_int.c | ||
389 | @@ -2135,6 +2135,8 @@ static int qed_int_attentions(struct qed_hwfn *p_hwfn) | ||
390 | */ | ||
391 | do { | ||
392 | index = p_sb_attn->sb_index; | ||
393 | + /* finish reading index before the loop condition */ | ||
394 | + dma_rmb(); | ||
395 | attn_bits = le32_to_cpu(p_sb_attn->atten_bits); | ||
396 | attn_acks = le32_to_cpu(p_sb_attn->atten_ack); | ||
397 | } while (index != p_sb_attn->sb_index); | ||
398 | diff --git a/drivers/net/ethernet/qlogic/qed/qed_main.c b/drivers/net/ethernet/qlogic/qed/qed_main.c | ||
399 | index 1ed13a165e58..a769196628d9 100644 | ||
400 | --- a/drivers/net/ethernet/qlogic/qed/qed_main.c | ||
401 | +++ b/drivers/net/ethernet/qlogic/qed/qed_main.c | ||
402 | @@ -1395,9 +1395,9 @@ static int qed_drain(struct qed_dev *cdev) | ||
403 | return -EBUSY; | ||
404 | } | ||
405 | rc = qed_mcp_drain(hwfn, ptt); | ||
406 | + qed_ptt_release(hwfn, ptt); | ||
407 | if (rc) | ||
408 | return rc; | ||
409 | - qed_ptt_release(hwfn, ptt); | ||
410 | } | ||
411 | |||
412 | return 0; | ||
413 | diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c | ||
414 | index 9670aa23ffb9..94b05dd827af 100644 | ||
415 | --- a/drivers/net/team/team.c | ||
416 | +++ b/drivers/net/team/team.c | ||
417 | @@ -989,8 +989,6 @@ static void team_port_disable(struct team *team, | ||
418 | team->en_port_count--; | ||
419 | team_queue_override_port_del(team, port); | ||
420 | team_adjust_ops(team); | ||
421 | - team_notify_peers(team); | ||
422 | - team_mcast_rejoin(team); | ||
423 | team_lower_state_changed(port); | ||
424 | } | ||
425 | |||
426 | diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmutil/d11.c b/drivers/net/wireless/broadcom/brcm80211/brcmutil/d11.c | ||
427 | index e7584b842dce..eb5db94f5745 100644 | ||
428 | --- a/drivers/net/wireless/broadcom/brcm80211/brcmutil/d11.c | ||
429 | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmutil/d11.c | ||
430 | @@ -193,6 +193,9 @@ static void brcmu_d11ac_decchspec(struct brcmu_chan *ch) | ||
431 | } | ||
432 | break; | ||
433 | case BRCMU_CHSPEC_D11AC_BW_160: | ||
434 | + ch->bw = BRCMU_CHAN_BW_160; | ||
435 | + ch->sb = brcmu_maskget16(ch->chspec, BRCMU_CHSPEC_D11AC_SB_MASK, | ||
436 | + BRCMU_CHSPEC_D11AC_SB_SHIFT); | ||
437 | switch (ch->sb) { | ||
438 | case BRCMU_CHAN_SB_LLL: | ||
439 | ch->control_ch_num -= CH_70MHZ_APART; | ||
440 | diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c | ||
441 | index cbb3e902e347..0852a1aad075 100644 | ||
442 | --- a/drivers/net/wireless/mac80211_hwsim.c | ||
443 | +++ b/drivers/net/wireless/mac80211_hwsim.c | ||
444 | @@ -2633,6 +2633,10 @@ static int mac80211_hwsim_new_radio(struct genl_info *info, | ||
445 | if (param->no_vif) | ||
446 | ieee80211_hw_set(hw, NO_AUTO_VIF); | ||
447 | |||
448 | + tasklet_hrtimer_init(&data->beacon_timer, | ||
449 | + mac80211_hwsim_beacon, | ||
450 | + CLOCK_MONOTONIC, HRTIMER_MODE_ABS); | ||
451 | + | ||
452 | err = ieee80211_register_hw(hw); | ||
453 | if (err < 0) { | ||
454 | printk(KERN_DEBUG "mac80211_hwsim: ieee80211_register_hw failed (%d)\n", | ||
455 | @@ -2657,10 +2661,6 @@ static int mac80211_hwsim_new_radio(struct genl_info *info, | ||
456 | data->debugfs, | ||
457 | data, &hwsim_simulate_radar); | ||
458 | |||
459 | - tasklet_hrtimer_init(&data->beacon_timer, | ||
460 | - mac80211_hwsim_beacon, | ||
461 | - CLOCK_MONOTONIC, HRTIMER_MODE_ABS); | ||
462 | - | ||
463 | spin_lock_bh(&hwsim_radio_lock); | ||
464 | list_add_tail(&data->list, &hwsim_radios); | ||
465 | spin_unlock_bh(&hwsim_radio_lock); | ||
466 | diff --git a/drivers/s390/virtio/virtio_ccw.c b/drivers/s390/virtio/virtio_ccw.c | ||
467 | index 8688ad4c825f..3493d449911c 100644 | ||
468 | --- a/drivers/s390/virtio/virtio_ccw.c | ||
469 | +++ b/drivers/s390/virtio/virtio_ccw.c | ||
470 | @@ -59,6 +59,7 @@ struct virtio_ccw_device { | ||
471 | unsigned int revision; /* Transport revision */ | ||
472 | wait_queue_head_t wait_q; | ||
473 | spinlock_t lock; | ||
474 | + struct mutex io_lock; /* Serializes I/O requests */ | ||
475 | struct list_head virtqueues; | ||
476 | unsigned long indicators; | ||
477 | unsigned long indicators2; | ||
478 | @@ -307,6 +308,7 @@ static int ccw_io_helper(struct virtio_ccw_device *vcdev, | ||
479 | unsigned long flags; | ||
480 | int flag = intparm & VIRTIO_CCW_INTPARM_MASK; | ||
481 | |||
482 | + mutex_lock(&vcdev->io_lock); | ||
483 | do { | ||
484 | spin_lock_irqsave(get_ccwdev_lock(vcdev->cdev), flags); | ||
485 | ret = ccw_device_start(vcdev->cdev, ccw, intparm, 0, 0); | ||
486 | @@ -319,7 +321,9 @@ static int ccw_io_helper(struct virtio_ccw_device *vcdev, | ||
487 | cpu_relax(); | ||
488 | } while (ret == -EBUSY); | ||
489 | wait_event(vcdev->wait_q, doing_io(vcdev, flag) == 0); | ||
490 | - return ret ? ret : vcdev->err; | ||
491 | + ret = ret ? ret : vcdev->err; | ||
492 | + mutex_unlock(&vcdev->io_lock); | ||
493 | + return ret; | ||
494 | } | ||
495 | |||
496 | static void virtio_ccw_drop_indicator(struct virtio_ccw_device *vcdev, | ||
497 | @@ -837,6 +841,7 @@ static void virtio_ccw_get_config(struct virtio_device *vdev, | ||
498 | int ret; | ||
499 | struct ccw1 *ccw; | ||
500 | void *config_area; | ||
501 | + unsigned long flags; | ||
502 | |||
503 | ccw = kzalloc(sizeof(*ccw), GFP_DMA | GFP_KERNEL); | ||
504 | if (!ccw) | ||
505 | @@ -855,11 +860,13 @@ static void virtio_ccw_get_config(struct virtio_device *vdev, | ||
506 | if (ret) | ||
507 | goto out_free; | ||
508 | |||
509 | + spin_lock_irqsave(&vcdev->lock, flags); | ||
510 | memcpy(vcdev->config, config_area, offset + len); | ||
511 | - if (buf) | ||
512 | - memcpy(buf, &vcdev->config[offset], len); | ||
513 | if (vcdev->config_ready < offset + len) | ||
514 | vcdev->config_ready = offset + len; | ||
515 | + spin_unlock_irqrestore(&vcdev->lock, flags); | ||
516 | + if (buf) | ||
517 | + memcpy(buf, config_area + offset, len); | ||
518 | |||
519 | out_free: | ||
520 | kfree(config_area); | ||
521 | @@ -873,6 +880,7 @@ static void virtio_ccw_set_config(struct virtio_device *vdev, | ||
522 | struct virtio_ccw_device *vcdev = to_vc_device(vdev); | ||
523 | struct ccw1 *ccw; | ||
524 | void *config_area; | ||
525 | + unsigned long flags; | ||
526 | |||
527 | ccw = kzalloc(sizeof(*ccw), GFP_DMA | GFP_KERNEL); | ||
528 | if (!ccw) | ||
529 | @@ -885,9 +893,11 @@ static void virtio_ccw_set_config(struct virtio_device *vdev, | ||
530 | /* Make sure we don't overwrite fields. */ | ||
531 | if (vcdev->config_ready < offset) | ||
532 | virtio_ccw_get_config(vdev, 0, NULL, offset); | ||
533 | + spin_lock_irqsave(&vcdev->lock, flags); | ||
534 | memcpy(&vcdev->config[offset], buf, len); | ||
535 | /* Write the config area to the host. */ | ||
536 | memcpy(config_area, vcdev->config, sizeof(vcdev->config)); | ||
537 | + spin_unlock_irqrestore(&vcdev->lock, flags); | ||
538 | ccw->cmd_code = CCW_CMD_WRITE_CONF; | ||
539 | ccw->flags = 0; | ||
540 | ccw->count = offset + len; | ||
541 | @@ -1233,6 +1243,7 @@ static int virtio_ccw_online(struct ccw_device *cdev) | ||
542 | init_waitqueue_head(&vcdev->wait_q); | ||
543 | INIT_LIST_HEAD(&vcdev->virtqueues); | ||
544 | spin_lock_init(&vcdev->lock); | ||
545 | + mutex_init(&vcdev->io_lock); | ||
546 | |||
547 | spin_lock_irqsave(get_ccwdev_lock(cdev), flags); | ||
548 | dev_set_drvdata(&cdev->dev, vcdev); | ||
549 | diff --git a/drivers/scsi/sr_ioctl.c b/drivers/scsi/sr_ioctl.c | ||
550 | index 03054c0e7689..3c3e8115f73d 100644 | ||
551 | --- a/drivers/scsi/sr_ioctl.c | ||
552 | +++ b/drivers/scsi/sr_ioctl.c | ||
553 | @@ -187,30 +187,25 @@ int sr_do_ioctl(Scsi_CD *cd, struct packet_command *cgc) | ||
554 | struct scsi_device *SDev; | ||
555 | struct scsi_sense_hdr sshdr; | ||
556 | int result, err = 0, retries = 0; | ||
557 | - struct request_sense *sense = cgc->sense; | ||
558 | + unsigned char sense_buffer[SCSI_SENSE_BUFFERSIZE]; | ||
559 | |||
560 | SDev = cd->device; | ||
561 | |||
562 | - if (!sense) { | ||
563 | - sense = kmalloc(SCSI_SENSE_BUFFERSIZE, GFP_KERNEL); | ||
564 | - if (!sense) { | ||
565 | - err = -ENOMEM; | ||
566 | - goto out; | ||
567 | - } | ||
568 | - } | ||
569 | - | ||
570 | retry: | ||
571 | if (!scsi_block_when_processing_errors(SDev)) { | ||
572 | err = -ENODEV; | ||
573 | goto out; | ||
574 | } | ||
575 | |||
576 | - memset(sense, 0, sizeof(*sense)); | ||
577 | + memset(sense_buffer, 0, sizeof(sense_buffer)); | ||
578 | result = scsi_execute(SDev, cgc->cmd, cgc->data_direction, | ||
579 | - cgc->buffer, cgc->buflen, (char *)sense, | ||
580 | + cgc->buffer, cgc->buflen, sense_buffer, | ||
581 | cgc->timeout, IOCTL_RETRIES, 0, NULL); | ||
582 | |||
583 | - scsi_normalize_sense((char *)sense, sizeof(*sense), &sshdr); | ||
584 | + scsi_normalize_sense(sense_buffer, sizeof(sense_buffer), &sshdr); | ||
585 | + | ||
586 | + if (cgc->sense) | ||
587 | + memcpy(cgc->sense, sense_buffer, sizeof(*cgc->sense)); | ||
588 | |||
589 | /* Minimal error checking. Ignore cases we know about, and report the rest. */ | ||
590 | if (driver_byte(result) != 0) { | ||
591 | @@ -261,8 +256,6 @@ int sr_do_ioctl(Scsi_CD *cd, struct packet_command *cgc) | ||
592 | |||
593 | /* Wake up a process waiting for device */ | ||
594 | out: | ||
595 | - if (!cgc->sense) | ||
596 | - kfree(sense); | ||
597 | cgc->stat = err; | ||
598 | return err; | ||
599 | } | ||
600 | diff --git a/drivers/staging/lustre/lnet/lnet/config.c b/drivers/staging/lustre/lnet/lnet/config.c | ||
601 | index 9e2183ff847e..7a4d5a013797 100644 | ||
602 | --- a/drivers/staging/lustre/lnet/lnet/config.c | ||
603 | +++ b/drivers/staging/lustre/lnet/lnet/config.c | ||
604 | @@ -354,8 +354,7 @@ lnet_parse_networks(struct list_head *nilist, char *networks) | ||
605 | CERROR("Can't allocate net interface name\n"); | ||
606 | goto failed; | ||
607 | } | ||
608 | - strncpy(ni->ni_interfaces[niface], iface, | ||
609 | - strlen(iface)); | ||
610 | + strcpy(ni->ni_interfaces[niface], iface); | ||
611 | niface++; | ||
612 | iface = comma; | ||
613 | } while (iface); | ||
614 | diff --git a/drivers/staging/lustre/lustre/lmv/lmv_obd.c b/drivers/staging/lustre/lustre/lmv/lmv_obd.c | ||
615 | index 9e63171c1ec3..514f078749bb 100644 | ||
616 | --- a/drivers/staging/lustre/lustre/lmv/lmv_obd.c | ||
617 | +++ b/drivers/staging/lustre/lustre/lmv/lmv_obd.c | ||
618 | @@ -684,7 +684,7 @@ repeat_fid2path: | ||
619 | memmove(ptr + strlen(gf->gf_path) + 1, ptr, | ||
620 | strlen(ori_gf->gf_path)); | ||
621 | |||
622 | - strncpy(ptr, gf->gf_path, strlen(gf->gf_path)); | ||
623 | + strcpy(ptr, gf->gf_path); | ||
624 | ptr += strlen(gf->gf_path); | ||
625 | *ptr = '/'; | ||
626 | } | ||
627 | diff --git a/drivers/staging/rtl8712/mlme_linux.c b/drivers/staging/rtl8712/mlme_linux.c | ||
628 | index af7c4a47738a..590d43c034e6 100644 | ||
629 | --- a/drivers/staging/rtl8712/mlme_linux.c | ||
630 | +++ b/drivers/staging/rtl8712/mlme_linux.c | ||
631 | @@ -158,7 +158,7 @@ void r8712_report_sec_ie(struct _adapter *adapter, u8 authmode, u8 *sec_ie) | ||
632 | p = buff; | ||
633 | p += sprintf(p, "ASSOCINFO(ReqIEs="); | ||
634 | len = sec_ie[1] + 2; | ||
635 | - len = (len < IW_CUSTOM_MAX) ? len : IW_CUSTOM_MAX - 1; | ||
636 | + len = (len < IW_CUSTOM_MAX) ? len : IW_CUSTOM_MAX; | ||
637 | for (i = 0; i < len; i++) | ||
638 | p += sprintf(p, "%02x", sec_ie[i]); | ||
639 | p += sprintf(p, ")"); | ||
640 | diff --git a/drivers/staging/rtl8712/rtl871x_mlme.c b/drivers/staging/rtl8712/rtl871x_mlme.c | ||
641 | index c1feef3da26c..9a5da7f84524 100644 | ||
642 | --- a/drivers/staging/rtl8712/rtl871x_mlme.c | ||
643 | +++ b/drivers/staging/rtl8712/rtl871x_mlme.c | ||
644 | @@ -1365,7 +1365,7 @@ sint r8712_restruct_sec_ie(struct _adapter *adapter, u8 *in_ie, | ||
645 | u8 *out_ie, uint in_len) | ||
646 | { | ||
647 | u8 authmode = 0, match; | ||
648 | - u8 sec_ie[255], uncst_oui[4], bkup_ie[255]; | ||
649 | + u8 sec_ie[IW_CUSTOM_MAX], uncst_oui[4], bkup_ie[255]; | ||
650 | u8 wpa_oui[4] = {0x0, 0x50, 0xf2, 0x01}; | ||
651 | uint ielength, cnt, remove_cnt; | ||
652 | int iEntry; | ||
653 | diff --git a/drivers/tty/serial/8250/8250_mtk.c b/drivers/tty/serial/8250/8250_mtk.c | ||
654 | index ce0cc471bfc3..91db9ca1c6c9 100644 | ||
655 | --- a/drivers/tty/serial/8250/8250_mtk.c | ||
656 | +++ b/drivers/tty/serial/8250/8250_mtk.c | ||
657 | @@ -225,17 +225,17 @@ static int mtk8250_probe(struct platform_device *pdev) | ||
658 | |||
659 | platform_set_drvdata(pdev, data); | ||
660 | |||
661 | - pm_runtime_enable(&pdev->dev); | ||
662 | - if (!pm_runtime_enabled(&pdev->dev)) { | ||
663 | - err = mtk8250_runtime_resume(&pdev->dev); | ||
664 | - if (err) | ||
665 | - return err; | ||
666 | - } | ||
667 | + err = mtk8250_runtime_resume(&pdev->dev); | ||
668 | + if (err) | ||
669 | + return err; | ||
670 | |||
671 | data->line = serial8250_register_8250_port(&uart); | ||
672 | if (data->line < 0) | ||
673 | return data->line; | ||
674 | |||
675 | + pm_runtime_set_active(&pdev->dev); | ||
676 | + pm_runtime_enable(&pdev->dev); | ||
677 | + | ||
678 | return 0; | ||
679 | } | ||
680 | |||
681 | @@ -246,13 +246,11 @@ static int mtk8250_remove(struct platform_device *pdev) | ||
682 | pm_runtime_get_sync(&pdev->dev); | ||
683 | |||
684 | serial8250_unregister_port(data->line); | ||
685 | + mtk8250_runtime_suspend(&pdev->dev); | ||
686 | |||
687 | pm_runtime_disable(&pdev->dev); | ||
688 | pm_runtime_put_noidle(&pdev->dev); | ||
689 | |||
690 | - if (!pm_runtime_status_suspended(&pdev->dev)) | ||
691 | - mtk8250_runtime_suspend(&pdev->dev); | ||
692 | - | ||
693 | return 0; | ||
694 | } | ||
695 | |||
696 | diff --git a/drivers/tty/serial/kgdboc.c b/drivers/tty/serial/kgdboc.c | ||
697 | index c448225ef5ca..f2b0d8cee8ef 100644 | ||
698 | --- a/drivers/tty/serial/kgdboc.c | ||
699 | +++ b/drivers/tty/serial/kgdboc.c | ||
700 | @@ -232,7 +232,7 @@ static void kgdboc_put_char(u8 chr) | ||
701 | |||
702 | static int param_set_kgdboc_var(const char *kmessage, struct kernel_param *kp) | ||
703 | { | ||
704 | - int len = strlen(kmessage); | ||
705 | + size_t len = strlen(kmessage); | ||
706 | |||
707 | if (len >= MAX_CONFIG_LEN) { | ||
708 | printk(KERN_ERR "kgdboc: config string too long\n"); | ||
709 | @@ -254,7 +254,7 @@ static int param_set_kgdboc_var(const char *kmessage, struct kernel_param *kp) | ||
710 | |||
711 | strcpy(config, kmessage); | ||
712 | /* Chop out \n char as a result of echo */ | ||
713 | - if (config[len - 1] == '\n') | ||
714 | + if (len && config[len - 1] == '\n') | ||
715 | config[len - 1] = '\0'; | ||
716 | |||
717 | if (configured == 1) | ||
718 | diff --git a/drivers/tty/tty_port.c b/drivers/tty/tty_port.c | ||
719 | index c3f9d93ba227..7f2f20b74d1d 100644 | ||
720 | --- a/drivers/tty/tty_port.c | ||
721 | +++ b/drivers/tty/tty_port.c | ||
722 | @@ -531,7 +531,8 @@ void tty_port_close(struct tty_port *port, struct tty_struct *tty, | ||
723 | if (tty_port_close_start(port, tty, filp) == 0) | ||
724 | return; | ||
725 | tty_port_shutdown(port, tty); | ||
726 | - set_bit(TTY_IO_ERROR, &tty->flags); | ||
727 | + if (!port->console) | ||
728 | + set_bit(TTY_IO_ERROR, &tty->flags); | ||
729 | tty_port_close_end(port, tty); | ||
730 | tty_port_tty_set(port, NULL); | ||
731 | } | ||
732 | diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c | ||
733 | index 851f5a553de2..67679f619c3b 100644 | ||
734 | --- a/drivers/usb/core/hub.c | ||
735 | +++ b/drivers/usb/core/hub.c | ||
736 | @@ -2225,7 +2225,7 @@ static int usb_enumerate_device_otg(struct usb_device *udev) | ||
737 | /* descriptor may appear anywhere in config */ | ||
738 | err = __usb_get_extra_descriptor(udev->rawdescriptors[0], | ||
739 | le16_to_cpu(udev->config[0].desc.wTotalLength), | ||
740 | - USB_DT_OTG, (void **) &desc); | ||
741 | + USB_DT_OTG, (void **) &desc, sizeof(*desc)); | ||
742 | if (err || !(desc->bmAttributes & USB_OTG_HNP)) | ||
743 | return 0; | ||
744 | |||
745 | diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c | ||
746 | index 808437c5ec49..cf378b1ed373 100644 | ||
747 | --- a/drivers/usb/core/quirks.c | ||
748 | +++ b/drivers/usb/core/quirks.c | ||
749 | @@ -188,6 +188,10 @@ static const struct usb_device_id usb_quirk_list[] = { | ||
750 | /* Midiman M-Audio Keystation 88es */ | ||
751 | { USB_DEVICE(0x0763, 0x0192), .driver_info = USB_QUIRK_RESET_RESUME }, | ||
752 | |||
753 | + /* SanDisk Ultra Fit and Ultra Flair */ | ||
754 | + { USB_DEVICE(0x0781, 0x5583), .driver_info = USB_QUIRK_NO_LPM }, | ||
755 | + { USB_DEVICE(0x0781, 0x5591), .driver_info = USB_QUIRK_NO_LPM }, | ||
756 | + | ||
757 | /* M-Systems Flash Disk Pioneers */ | ||
758 | { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME }, | ||
759 | |||
760 | diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c | ||
761 | index 891261b43c67..f3996ba71a59 100644 | ||
762 | --- a/drivers/usb/core/usb.c | ||
763 | +++ b/drivers/usb/core/usb.c | ||
764 | @@ -696,14 +696,14 @@ EXPORT_SYMBOL_GPL(usb_get_current_frame_number); | ||
765 | */ | ||
766 | |||
767 | int __usb_get_extra_descriptor(char *buffer, unsigned size, | ||
768 | - unsigned char type, void **ptr) | ||
769 | + unsigned char type, void **ptr, size_t minsize) | ||
770 | { | ||
771 | struct usb_descriptor_header *header; | ||
772 | |||
773 | while (size >= sizeof(struct usb_descriptor_header)) { | ||
774 | header = (struct usb_descriptor_header *)buffer; | ||
775 | |||
776 | - if (header->bLength < 2) { | ||
777 | + if (header->bLength < 2 || header->bLength > size) { | ||
778 | printk(KERN_ERR | ||
779 | "%s: bogus descriptor, type %d length %d\n", | ||
780 | usbcore_name, | ||
781 | @@ -712,7 +712,7 @@ int __usb_get_extra_descriptor(char *buffer, unsigned size, | ||
782 | return -1; | ||
783 | } | ||
784 | |||
785 | - if (header->bDescriptorType == type) { | ||
786 | + if (header->bDescriptorType == type && header->bLength >= minsize) { | ||
787 | *ptr = header; | ||
788 | return 0; | ||
789 | } | ||
790 | diff --git a/drivers/usb/host/hwa-hc.c b/drivers/usb/host/hwa-hc.c | ||
791 | index 1db0626c8bf4..97750f162f01 100644 | ||
792 | --- a/drivers/usb/host/hwa-hc.c | ||
793 | +++ b/drivers/usb/host/hwa-hc.c | ||
794 | @@ -654,7 +654,7 @@ static int hwahc_security_create(struct hwahc *hwahc) | ||
795 | top = itr + itr_size; | ||
796 | result = __usb_get_extra_descriptor(usb_dev->rawdescriptors[index], | ||
797 | le16_to_cpu(usb_dev->actconfig->desc.wTotalLength), | ||
798 | - USB_DT_SECURITY, (void **) &secd); | ||
799 | + USB_DT_SECURITY, (void **) &secd, sizeof(*secd)); | ||
800 | if (result == -1) { | ||
801 | dev_warn(dev, "BUG? WUSB host has no security descriptors\n"); | ||
802 | return 0; | ||
803 | diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c | ||
804 | index e9f5f9c32b49..7ff32088cfa4 100644 | ||
805 | --- a/drivers/usb/host/xhci.c | ||
806 | +++ b/drivers/usb/host/xhci.c | ||
807 | @@ -4398,6 +4398,14 @@ static u16 xhci_calculate_u1_timeout(struct xhci_hcd *xhci, | ||
808 | { | ||
809 | unsigned long long timeout_ns; | ||
810 | |||
811 | + /* Prevent U1 if service interval is shorter than U1 exit latency */ | ||
812 | + if (usb_endpoint_xfer_int(desc) || usb_endpoint_xfer_isoc(desc)) { | ||
813 | + if (xhci_service_interval_to_ns(desc) <= udev->u1_params.mel) { | ||
814 | + dev_dbg(&udev->dev, "Disable U1, ESIT shorter than exit latency\n"); | ||
815 | + return USB3_LPM_DISABLED; | ||
816 | + } | ||
817 | + } | ||
818 | + | ||
819 | if (xhci->quirks & XHCI_INTEL_HOST) | ||
820 | timeout_ns = xhci_calculate_intel_u1_timeout(udev, desc); | ||
821 | else | ||
822 | @@ -4454,6 +4462,14 @@ static u16 xhci_calculate_u2_timeout(struct xhci_hcd *xhci, | ||
823 | { | ||
824 | unsigned long long timeout_ns; | ||
825 | |||
826 | + /* Prevent U2 if service interval is shorter than U2 exit latency */ | ||
827 | + if (usb_endpoint_xfer_int(desc) || usb_endpoint_xfer_isoc(desc)) { | ||
828 | + if (xhci_service_interval_to_ns(desc) <= udev->u2_params.mel) { | ||
829 | + dev_dbg(&udev->dev, "Disable U2, ESIT shorter than exit latency\n"); | ||
830 | + return USB3_LPM_DISABLED; | ||
831 | + } | ||
832 | + } | ||
833 | + | ||
834 | if (xhci->quirks & XHCI_INTEL_HOST) | ||
835 | timeout_ns = xhci_calculate_intel_u2_timeout(udev, desc); | ||
836 | else | ||
837 | diff --git a/drivers/usb/misc/appledisplay.c b/drivers/usb/misc/appledisplay.c | ||
838 | index 2d3c656e0bff..b8092bcf89a2 100644 | ||
839 | --- a/drivers/usb/misc/appledisplay.c | ||
840 | +++ b/drivers/usb/misc/appledisplay.c | ||
841 | @@ -64,6 +64,7 @@ static const struct usb_device_id appledisplay_table[] = { | ||
842 | { APPLEDISPLAY_DEVICE(0x921c) }, | ||
843 | { APPLEDISPLAY_DEVICE(0x921d) }, | ||
844 | { APPLEDISPLAY_DEVICE(0x9222) }, | ||
845 | + { APPLEDISPLAY_DEVICE(0x9226) }, | ||
846 | { APPLEDISPLAY_DEVICE(0x9236) }, | ||
847 | |||
848 | /* Terminating entry */ | ||
849 | diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c | ||
850 | index 0ec970ca64ce..f800f89068db 100644 | ||
851 | --- a/drivers/vhost/vsock.c | ||
852 | +++ b/drivers/vhost/vsock.c | ||
853 | @@ -15,6 +15,7 @@ | ||
854 | #include <net/sock.h> | ||
855 | #include <linux/virtio_vsock.h> | ||
856 | #include <linux/vhost.h> | ||
857 | +#include <linux/hashtable.h> | ||
858 | |||
859 | #include <net/af_vsock.h> | ||
860 | #include "vhost.h" | ||
861 | @@ -27,14 +28,14 @@ enum { | ||
862 | |||
863 | /* Used to track all the vhost_vsock instances on the system. */ | ||
864 | static DEFINE_SPINLOCK(vhost_vsock_lock); | ||
865 | -static LIST_HEAD(vhost_vsock_list); | ||
866 | +static DEFINE_READ_MOSTLY_HASHTABLE(vhost_vsock_hash, 8); | ||
867 | |||
868 | struct vhost_vsock { | ||
869 | struct vhost_dev dev; | ||
870 | struct vhost_virtqueue vqs[2]; | ||
871 | |||
872 | - /* Link to global vhost_vsock_list, protected by vhost_vsock_lock */ | ||
873 | - struct list_head list; | ||
874 | + /* Link to global vhost_vsock_hash, writes use vhost_vsock_lock */ | ||
875 | + struct hlist_node hash; | ||
876 | |||
877 | struct vhost_work send_pkt_work; | ||
878 | spinlock_t send_pkt_list_lock; | ||
879 | @@ -50,12 +51,14 @@ static u32 vhost_transport_get_local_cid(void) | ||
880 | return VHOST_VSOCK_DEFAULT_HOST_CID; | ||
881 | } | ||
882 | |||
883 | +/* Callers that dereference the return value must hold vhost_vsock_lock or the | ||
884 | + * RCU read lock. | ||
885 | + */ | ||
886 | static struct vhost_vsock *vhost_vsock_get(u32 guest_cid) | ||
887 | { | ||
888 | struct vhost_vsock *vsock; | ||
889 | |||
890 | - spin_lock_bh(&vhost_vsock_lock); | ||
891 | - list_for_each_entry(vsock, &vhost_vsock_list, list) { | ||
892 | + hash_for_each_possible_rcu(vhost_vsock_hash, vsock, hash, guest_cid) { | ||
893 | u32 other_cid = vsock->guest_cid; | ||
894 | |||
895 | /* Skip instances that have no CID yet */ | ||
896 | @@ -63,11 +66,9 @@ static struct vhost_vsock *vhost_vsock_get(u32 guest_cid) | ||
897 | continue; | ||
898 | |||
899 | if (other_cid == guest_cid) { | ||
900 | - spin_unlock_bh(&vhost_vsock_lock); | ||
901 | return vsock; | ||
902 | } | ||
903 | } | ||
904 | - spin_unlock_bh(&vhost_vsock_lock); | ||
905 | |||
906 | return NULL; | ||
907 | } | ||
908 | @@ -198,9 +199,12 @@ vhost_transport_send_pkt(struct virtio_vsock_pkt *pkt) | ||
909 | struct vhost_virtqueue *vq; | ||
910 | int len = pkt->len; | ||
911 | |||
912 | + rcu_read_lock(); | ||
913 | + | ||
914 | /* Find the vhost_vsock according to guest context id */ | ||
915 | vsock = vhost_vsock_get(le64_to_cpu(pkt->hdr.dst_cid)); | ||
916 | if (!vsock) { | ||
917 | + rcu_read_unlock(); | ||
918 | virtio_transport_free_pkt(pkt); | ||
919 | return -ENODEV; | ||
920 | } | ||
921 | @@ -215,6 +219,8 @@ vhost_transport_send_pkt(struct virtio_vsock_pkt *pkt) | ||
922 | spin_unlock_bh(&vsock->send_pkt_list_lock); | ||
923 | |||
924 | vhost_work_queue(&vsock->dev, &vsock->send_pkt_work); | ||
925 | + | ||
926 | + rcu_read_unlock(); | ||
927 | return len; | ||
928 | } | ||
929 | |||
930 | @@ -224,12 +230,15 @@ vhost_transport_cancel_pkt(struct vsock_sock *vsk) | ||
931 | struct vhost_vsock *vsock; | ||
932 | struct virtio_vsock_pkt *pkt, *n; | ||
933 | int cnt = 0; | ||
934 | + int ret = -ENODEV; | ||
935 | LIST_HEAD(freeme); | ||
936 | |||
937 | + rcu_read_lock(); | ||
938 | + | ||
939 | /* Find the vhost_vsock according to guest context id */ | ||
940 | vsock = vhost_vsock_get(vsk->remote_addr.svm_cid); | ||
941 | if (!vsock) | ||
942 | - return -ENODEV; | ||
943 | + goto out; | ||
944 | |||
945 | spin_lock_bh(&vsock->send_pkt_list_lock); | ||
946 | list_for_each_entry_safe(pkt, n, &vsock->send_pkt_list, list) { | ||
947 | @@ -255,7 +264,10 @@ vhost_transport_cancel_pkt(struct vsock_sock *vsk) | ||
948 | vhost_poll_queue(&tx_vq->poll); | ||
949 | } | ||
950 | |||
951 | - return 0; | ||
952 | + ret = 0; | ||
953 | +out: | ||
954 | + rcu_read_unlock(); | ||
955 | + return ret; | ||
956 | } | ||
957 | |||
958 | static struct virtio_vsock_pkt * | ||
959 | @@ -521,10 +533,6 @@ static int vhost_vsock_dev_open(struct inode *inode, struct file *file) | ||
960 | spin_lock_init(&vsock->send_pkt_list_lock); | ||
961 | INIT_LIST_HEAD(&vsock->send_pkt_list); | ||
962 | vhost_work_init(&vsock->send_pkt_work, vhost_transport_send_pkt_work); | ||
963 | - | ||
964 | - spin_lock_bh(&vhost_vsock_lock); | ||
965 | - list_add_tail(&vsock->list, &vhost_vsock_list); | ||
966 | - spin_unlock_bh(&vhost_vsock_lock); | ||
967 | return 0; | ||
968 | |||
969 | out: | ||
970 | @@ -565,9 +573,13 @@ static int vhost_vsock_dev_release(struct inode *inode, struct file *file) | ||
971 | struct vhost_vsock *vsock = file->private_data; | ||
972 | |||
973 | spin_lock_bh(&vhost_vsock_lock); | ||
974 | - list_del(&vsock->list); | ||
975 | + if (vsock->guest_cid) | ||
976 | + hash_del_rcu(&vsock->hash); | ||
977 | spin_unlock_bh(&vhost_vsock_lock); | ||
978 | |||
979 | + /* Wait for other CPUs to finish using vsock */ | ||
980 | + synchronize_rcu(); | ||
981 | + | ||
982 | /* Iterating over all connections for all CIDs to find orphans is | ||
983 | * inefficient. Room for improvement here. */ | ||
984 | vsock_for_each_connected_socket(vhost_vsock_reset_orphans); | ||
985 | @@ -607,12 +619,18 @@ static int vhost_vsock_set_cid(struct vhost_vsock *vsock, u64 guest_cid) | ||
986 | return -EINVAL; | ||
987 | |||
988 | /* Refuse if CID is already in use */ | ||
989 | + spin_lock_bh(&vhost_vsock_lock); | ||
990 | other = vhost_vsock_get(guest_cid); | ||
991 | - if (other && other != vsock) | ||
992 | + if (other && other != vsock) { | ||
993 | + spin_unlock_bh(&vhost_vsock_lock); | ||
994 | return -EADDRINUSE; | ||
995 | + } | ||
996 | + | ||
997 | + if (vsock->guest_cid) | ||
998 | + hash_del_rcu(&vsock->hash); | ||
999 | |||
1000 | - spin_lock_bh(&vhost_vsock_lock); | ||
1001 | vsock->guest_cid = guest_cid; | ||
1002 | + hash_add_rcu(vhost_vsock_hash, &vsock->hash, guest_cid); | ||
1003 | spin_unlock_bh(&vhost_vsock_lock); | ||
1004 | |||
1005 | return 0; | ||
1006 | diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c | ||
1007 | index 331ddd07e505..e98e24eaa6a8 100644 | ||
1008 | --- a/fs/cifs/dir.c | ||
1009 | +++ b/fs/cifs/dir.c | ||
1010 | @@ -163,7 +163,7 @@ cifs_bp_rename_retry: | ||
1011 | |||
1012 | cifs_dbg(FYI, "using cifs_sb prepath <%s>\n", cifs_sb->prepath); | ||
1013 | memcpy(full_path+dfsplen+1, cifs_sb->prepath, pplen-1); | ||
1014 | - full_path[dfsplen] = '\\'; | ||
1015 | + full_path[dfsplen] = dirsep; | ||
1016 | for (i = 0; i < pplen-1; i++) | ||
1017 | if (full_path[dfsplen+1+i] == '/') | ||
1018 | full_path[dfsplen+1+i] = CIFS_DIR_SEP(cifs_sb); | ||
1019 | diff --git a/include/linux/usb.h b/include/linux/usb.h | ||
1020 | index eba1f10e8cfd..346665a0c49d 100644 | ||
1021 | --- a/include/linux/usb.h | ||
1022 | +++ b/include/linux/usb.h | ||
1023 | @@ -336,11 +336,11 @@ struct usb_host_bos { | ||
1024 | }; | ||
1025 | |||
1026 | int __usb_get_extra_descriptor(char *buffer, unsigned size, | ||
1027 | - unsigned char type, void **ptr); | ||
1028 | + unsigned char type, void **ptr, size_t min); | ||
1029 | #define usb_get_extra_descriptor(ifpoint, type, ptr) \ | ||
1030 | __usb_get_extra_descriptor((ifpoint)->extra, \ | ||
1031 | (ifpoint)->extralen, \ | ||
1032 | - type, (void **)ptr) | ||
1033 | + type, (void **)ptr, sizeof(**(ptr))) | ||
1034 | |||
1035 | /* ----------------------------------------------------------------------- */ | ||
1036 | |||
1037 | diff --git a/include/sound/pcm_params.h b/include/sound/pcm_params.h | ||
1038 | index c704357775fc..2af7bb3ee57d 100644 | ||
1039 | --- a/include/sound/pcm_params.h | ||
1040 | +++ b/include/sound/pcm_params.h | ||
1041 | @@ -247,11 +247,13 @@ static inline int snd_interval_empty(const struct snd_interval *i) | ||
1042 | static inline int snd_interval_single(const struct snd_interval *i) | ||
1043 | { | ||
1044 | return (i->min == i->max || | ||
1045 | - (i->min + 1 == i->max && i->openmax)); | ||
1046 | + (i->min + 1 == i->max && (i->openmin || i->openmax))); | ||
1047 | } | ||
1048 | |||
1049 | static inline int snd_interval_value(const struct snd_interval *i) | ||
1050 | { | ||
1051 | + if (i->openmin && !i->openmax) | ||
1052 | + return i->max; | ||
1053 | return i->min; | ||
1054 | } | ||
1055 | |||
1056 | diff --git a/lib/swiotlb.c b/lib/swiotlb.c | ||
1057 | index b7812df04437..7ff9dc36c2f8 100644 | ||
1058 | --- a/lib/swiotlb.c | ||
1059 | +++ b/lib/swiotlb.c | ||
1060 | @@ -17,6 +17,8 @@ | ||
1061 | * 08/12/11 beckyb Add highmem support | ||
1062 | */ | ||
1063 | |||
1064 | +#define pr_fmt(fmt) "software IO TLB: " fmt | ||
1065 | + | ||
1066 | #include <linux/cache.h> | ||
1067 | #include <linux/dma-mapping.h> | ||
1068 | #include <linux/mm.h> | ||
1069 | @@ -147,20 +149,16 @@ static bool no_iotlb_memory; | ||
1070 | void swiotlb_print_info(void) | ||
1071 | { | ||
1072 | unsigned long bytes = io_tlb_nslabs << IO_TLB_SHIFT; | ||
1073 | - unsigned char *vstart, *vend; | ||
1074 | |||
1075 | if (no_iotlb_memory) { | ||
1076 | - pr_warn("software IO TLB: No low mem\n"); | ||
1077 | + pr_warn("No low mem\n"); | ||
1078 | return; | ||
1079 | } | ||
1080 | |||
1081 | - vstart = phys_to_virt(io_tlb_start); | ||
1082 | - vend = phys_to_virt(io_tlb_end); | ||
1083 | - | ||
1084 | - printk(KERN_INFO "software IO TLB [mem %#010llx-%#010llx] (%luMB) mapped at [%p-%p]\n", | ||
1085 | + pr_info("mapped [mem %#010llx-%#010llx] (%luMB)\n", | ||
1086 | (unsigned long long)io_tlb_start, | ||
1087 | (unsigned long long)io_tlb_end, | ||
1088 | - bytes >> 20, vstart, vend - 1); | ||
1089 | + bytes >> 20); | ||
1090 | } | ||
1091 | |||
1092 | int __init swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose) | ||
1093 | @@ -234,7 +232,7 @@ swiotlb_init(int verbose) | ||
1094 | if (io_tlb_start) | ||
1095 | memblock_free_early(io_tlb_start, | ||
1096 | PAGE_ALIGN(io_tlb_nslabs << IO_TLB_SHIFT)); | ||
1097 | - pr_warn("Cannot allocate SWIOTLB buffer"); | ||
1098 | + pr_warn("Cannot allocate buffer"); | ||
1099 | no_iotlb_memory = true; | ||
1100 | } | ||
1101 | |||
1102 | @@ -276,8 +274,8 @@ swiotlb_late_init_with_default_size(size_t default_size) | ||
1103 | return -ENOMEM; | ||
1104 | } | ||
1105 | if (order != get_order(bytes)) { | ||
1106 | - printk(KERN_WARNING "Warning: only able to allocate %ld MB " | ||
1107 | - "for software IO TLB\n", (PAGE_SIZE << order) >> 20); | ||
1108 | + pr_warn("only able to allocate %ld MB\n", | ||
1109 | + (PAGE_SIZE << order) >> 20); | ||
1110 | io_tlb_nslabs = SLABS_PER_PAGE << order; | ||
1111 | } | ||
1112 | rc = swiotlb_late_init_with_tbl(vstart, io_tlb_nslabs); | ||
1113 | @@ -691,7 +689,7 @@ swiotlb_alloc_coherent(struct device *hwdev, size_t size, | ||
1114 | return ret; | ||
1115 | |||
1116 | err_warn: | ||
1117 | - pr_warn("swiotlb: coherent allocation failed for device %s size=%zu\n", | ||
1118 | + pr_warn("coherent allocation failed for device %s size=%zu\n", | ||
1119 | dev_name(hwdev), size); | ||
1120 | dump_stack(); | ||
1121 | |||
1122 | diff --git a/mm/page_alloc.c b/mm/page_alloc.c | ||
1123 | index 28240ce475d6..3af727d95c17 100644 | ||
1124 | --- a/mm/page_alloc.c | ||
1125 | +++ b/mm/page_alloc.c | ||
1126 | @@ -3530,8 +3530,6 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order, | ||
1127 | enum compact_result compact_result; | ||
1128 | int compaction_retries; | ||
1129 | int no_progress_loops; | ||
1130 | - unsigned long alloc_start = jiffies; | ||
1131 | - unsigned int stall_timeout = 10 * HZ; | ||
1132 | unsigned int cpuset_mems_cookie; | ||
1133 | |||
1134 | /* | ||
1135 | @@ -3704,14 +3702,6 @@ retry: | ||
1136 | if (order > PAGE_ALLOC_COSTLY_ORDER && !(gfp_mask & __GFP_REPEAT)) | ||
1137 | goto nopage; | ||
1138 | |||
1139 | - /* Make sure we know about allocations which stall for too long */ | ||
1140 | - if (time_after(jiffies, alloc_start + stall_timeout)) { | ||
1141 | - warn_alloc(gfp_mask, | ||
1142 | - "page allocation stalls for %ums, order:%u", | ||
1143 | - jiffies_to_msecs(jiffies-alloc_start), order); | ||
1144 | - stall_timeout += 10 * HZ; | ||
1145 | - } | ||
1146 | - | ||
1147 | if (should_reclaim_retry(gfp_mask, order, ac, alloc_flags, | ||
1148 | did_some_progress > 0, &no_progress_loops)) | ||
1149 | goto retry; | ||
1150 | diff --git a/net/batman-adv/fragmentation.c b/net/batman-adv/fragmentation.c | ||
1151 | index 57215e3fd1a0..a06b6041f3e0 100644 | ||
1152 | --- a/net/batman-adv/fragmentation.c | ||
1153 | +++ b/net/batman-adv/fragmentation.c | ||
1154 | @@ -264,7 +264,7 @@ batadv_frag_merge_packets(struct hlist_head *chain) | ||
1155 | kfree(entry); | ||
1156 | |||
1157 | packet = (struct batadv_frag_packet *)skb_out->data; | ||
1158 | - size = ntohs(packet->total_size); | ||
1159 | + size = ntohs(packet->total_size) + hdr_size; | ||
1160 | |||
1161 | /* Make room for the rest of the fragments. */ | ||
1162 | if (pskb_expand_head(skb_out, 0, size - skb_out->len, GFP_ATOMIC) < 0) { | ||
1163 | diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c | ||
1164 | index 760ba8ec2944..5768560cbfc3 100644 | ||
1165 | --- a/net/mac80211/iface.c | ||
1166 | +++ b/net/mac80211/iface.c | ||
1167 | @@ -1025,6 +1025,8 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, | ||
1168 | if (local->open_count == 0) | ||
1169 | ieee80211_clear_tx_pending(local); | ||
1170 | |||
1171 | + sdata->vif.bss_conf.beacon_int = 0; | ||
1172 | + | ||
1173 | /* | ||
1174 | * If the interface goes down while suspended, presumably because | ||
1175 | * the device was unplugged and that happens before our resume, | ||
1176 | diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c | ||
1177 | index 474655a2aeae..93c332737e86 100644 | ||
1178 | --- a/net/mac80211/rx.c | ||
1179 | +++ b/net/mac80211/rx.c | ||
1180 | @@ -1230,6 +1230,7 @@ ieee80211_rx_h_check_dup(struct ieee80211_rx_data *rx) | ||
1181 | return RX_CONTINUE; | ||
1182 | |||
1183 | if (ieee80211_is_ctl(hdr->frame_control) || | ||
1184 | + ieee80211_is_nullfunc(hdr->frame_control) || | ||
1185 | ieee80211_is_qos_nullfunc(hdr->frame_control) || | ||
1186 | is_multicast_ether_addr(hdr->addr1)) | ||
1187 | return RX_CONTINUE; | ||
1188 | diff --git a/net/mac80211/status.c b/net/mac80211/status.c | ||
1189 | index 7892bac21eac..246d113bd755 100644 | ||
1190 | --- a/net/mac80211/status.c | ||
1191 | +++ b/net/mac80211/status.c | ||
1192 | @@ -660,6 +660,8 @@ void ieee80211_tx_status_noskb(struct ieee80211_hw *hw, | ||
1193 | /* Track when last TDLS packet was ACKed */ | ||
1194 | if (test_sta_flag(sta, WLAN_STA_TDLS_PEER_AUTH)) | ||
1195 | sta->status_stats.last_tdls_pkt_time = jiffies; | ||
1196 | + } else if (test_sta_flag(sta, WLAN_STA_PS_STA)) { | ||
1197 | + return; | ||
1198 | } else { | ||
1199 | ieee80211_lost_packet(sta, info); | ||
1200 | } | ||
1201 | diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c | ||
1202 | index 58fba4e569e6..6a0fb9dbc1ba 100644 | ||
1203 | --- a/net/mac80211/tx.c | ||
1204 | +++ b/net/mac80211/tx.c | ||
1205 | @@ -434,8 +434,8 @@ ieee80211_tx_h_multicast_ps_buf(struct ieee80211_tx_data *tx) | ||
1206 | if (ieee80211_hw_check(&tx->local->hw, QUEUE_CONTROL)) | ||
1207 | info->hw_queue = tx->sdata->vif.cab_queue; | ||
1208 | |||
1209 | - /* no stations in PS mode */ | ||
1210 | - if (!atomic_read(&ps->num_sta_ps)) | ||
1211 | + /* no stations in PS mode and no buffered packets */ | ||
1212 | + if (!atomic_read(&ps->num_sta_ps) && skb_queue_empty(&ps->bc_buf)) | ||
1213 | return TX_CONTINUE; | ||
1214 | |||
1215 | info->flags |= IEEE80211_TX_CTL_SEND_AFTER_DTIM; | ||
1216 | diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c | ||
1217 | index 16cea00c959b..591d378d1a18 100644 | ||
1218 | --- a/net/sunrpc/auth_gss/auth_gss.c | ||
1219 | +++ b/net/sunrpc/auth_gss/auth_gss.c | ||
1220 | @@ -1736,6 +1736,7 @@ priv_release_snd_buf(struct rpc_rqst *rqstp) | ||
1221 | for (i=0; i < rqstp->rq_enc_pages_num; i++) | ||
1222 | __free_page(rqstp->rq_enc_pages[i]); | ||
1223 | kfree(rqstp->rq_enc_pages); | ||
1224 | + rqstp->rq_release_snd_buf = NULL; | ||
1225 | } | ||
1226 | |||
1227 | static int | ||
1228 | @@ -1744,6 +1745,9 @@ alloc_enc_pages(struct rpc_rqst *rqstp) | ||
1229 | struct xdr_buf *snd_buf = &rqstp->rq_snd_buf; | ||
1230 | int first, last, i; | ||
1231 | |||
1232 | + if (rqstp->rq_release_snd_buf) | ||
1233 | + rqstp->rq_release_snd_buf(rqstp); | ||
1234 | + | ||
1235 | if (snd_buf->page_len == 0) { | ||
1236 | rqstp->rq_enc_pages_num = 0; | ||
1237 | return 0; | ||
1238 | diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include | ||
1239 | index 123840d827e8..7f430778f418 100644 | ||
1240 | --- a/scripts/Kbuild.include | ||
1241 | +++ b/scripts/Kbuild.include | ||
1242 | @@ -162,12 +162,13 @@ cc-ifversion = $(shell [ $(cc-version) $(1) $(2) ] && echo $(3) || echo $(4)) | ||
1243 | # cc-ldoption | ||
1244 | # Usage: ldflags += $(call cc-ldoption, -Wl$(comma)--hash-style=both) | ||
1245 | cc-ldoption = $(call try-run,\ | ||
1246 | - $(CC) $(1) -nostdlib -x c /dev/null -o "$$TMP",$(1),$(2)) | ||
1247 | + $(CC) $(1) $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS) -nostdlib -x c /dev/null -o "$$TMP",$(1),$(2)) | ||
1248 | |||
1249 | # ld-option | ||
1250 | # Usage: LDFLAGS += $(call ld-option, -X) | ||
1251 | ld-option = $(call try-run,\ | ||
1252 | - $(CC) -x c /dev/null -c -o "$$TMPO" ; $(LD) $(1) "$$TMPO" -o "$$TMP",$(1),$(2)) | ||
1253 | + $(CC) $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS) -x c /dev/null -c -o "$$TMPO"; \ | ||
1254 | + $(LD) $(LDFLAGS) $(1) "$$TMPO" -o "$$TMP",$(1),$(2)) | ||
1255 | |||
1256 | # ar-option | ||
1257 | # Usage: KBUILD_ARFLAGS := $(call ar-option,D) | ||
1258 | diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c | ||
1259 | index 79018697b477..3586ab41dec4 100644 | ||
1260 | --- a/sound/core/pcm_native.c | ||
1261 | +++ b/sound/core/pcm_native.c | ||
1262 | @@ -35,6 +35,7 @@ | ||
1263 | #include <sound/timer.h> | ||
1264 | #include <sound/minors.h> | ||
1265 | #include <linux/uio.h> | ||
1266 | +#include <linux/delay.h> | ||
1267 | |||
1268 | /* | ||
1269 | * Compatibility | ||
1270 | @@ -78,12 +79,12 @@ static DECLARE_RWSEM(snd_pcm_link_rwsem); | ||
1271 | * and this may lead to a deadlock when the code path takes read sem | ||
1272 | * twice (e.g. one in snd_pcm_action_nonatomic() and another in | ||
1273 | * snd_pcm_stream_lock()). As a (suboptimal) workaround, let writer to | ||
1274 | - * spin until it gets the lock. | ||
1275 | + * sleep until all the readers are completed without blocking by writer. | ||
1276 | */ | ||
1277 | -static inline void down_write_nonblock(struct rw_semaphore *lock) | ||
1278 | +static inline void down_write_nonfifo(struct rw_semaphore *lock) | ||
1279 | { | ||
1280 | while (!down_write_trylock(lock)) | ||
1281 | - cond_resched(); | ||
1282 | + msleep(1); | ||
1283 | } | ||
1284 | |||
1285 | /** | ||
1286 | @@ -1825,7 +1826,7 @@ static int snd_pcm_link(struct snd_pcm_substream *substream, int fd) | ||
1287 | res = -ENOMEM; | ||
1288 | goto _nolock; | ||
1289 | } | ||
1290 | - down_write_nonblock(&snd_pcm_link_rwsem); | ||
1291 | + down_write_nonfifo(&snd_pcm_link_rwsem); | ||
1292 | write_lock_irq(&snd_pcm_link_rwlock); | ||
1293 | if (substream->runtime->status->state == SNDRV_PCM_STATE_OPEN || | ||
1294 | substream->runtime->status->state != substream1->runtime->status->state || | ||
1295 | @@ -1872,7 +1873,7 @@ static int snd_pcm_unlink(struct snd_pcm_substream *substream) | ||
1296 | struct snd_pcm_substream *s; | ||
1297 | int res = 0; | ||
1298 | |||
1299 | - down_write_nonblock(&snd_pcm_link_rwsem); | ||
1300 | + down_write_nonfifo(&snd_pcm_link_rwsem); | ||
1301 | write_lock_irq(&snd_pcm_link_rwlock); | ||
1302 | if (!snd_pcm_stream_linked(substream)) { | ||
1303 | res = -EALREADY; | ||
1304 | @@ -2224,7 +2225,8 @@ int snd_pcm_hw_constraints_complete(struct snd_pcm_substream *substream) | ||
1305 | |||
1306 | static void pcm_release_private(struct snd_pcm_substream *substream) | ||
1307 | { | ||
1308 | - snd_pcm_unlink(substream); | ||
1309 | + if (snd_pcm_stream_linked(substream)) | ||
1310 | + snd_pcm_unlink(substream); | ||
1311 | } | ||
1312 | |||
1313 | void snd_pcm_release_substream(struct snd_pcm_substream *substream) | ||
1314 | diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c | ||
1315 | index 3557e3943ad5..fcd583efe011 100644 | ||
1316 | --- a/sound/pci/hda/hda_intel.c | ||
1317 | +++ b/sound/pci/hda/hda_intel.c | ||
1318 | @@ -2352,6 +2352,10 @@ static const struct pci_device_id azx_ids[] = { | ||
1319 | /* AMD Hudson */ | ||
1320 | { PCI_DEVICE(0x1022, 0x780d), | ||
1321 | .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB }, | ||
1322 | + /* AMD Stoney */ | ||
1323 | + { PCI_DEVICE(0x1022, 0x157a), | ||
1324 | + .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB | | ||
1325 | + AZX_DCAPS_PM_RUNTIME }, | ||
1326 | /* AMD Raven */ | ||
1327 | { PCI_DEVICE(0x1022, 0x15e3), | ||
1328 | .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB | | ||
1329 | diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c | ||
1330 | index 6c2668b4e3bc..0fd31cff483e 100644 | ||
1331 | --- a/sound/pci/hda/patch_realtek.c | ||
1332 | +++ b/sound/pci/hda/patch_realtek.c | ||
1333 | @@ -4489,9 +4489,18 @@ static void alc_fixup_tpt470_dock(struct hda_codec *codec, | ||
1334 | { 0x19, 0x21a11010 }, /* dock mic */ | ||
1335 | { } | ||
1336 | }; | ||
1337 | + /* Assure the speaker pin to be coupled with DAC NID 0x03; otherwise | ||
1338 | + * the speaker output becomes too low by some reason on Thinkpads with | ||
1339 | + * ALC298 codec | ||
1340 | + */ | ||
1341 | + static hda_nid_t preferred_pairs[] = { | ||
1342 | + 0x14, 0x03, 0x17, 0x02, 0x21, 0x02, | ||
1343 | + 0 | ||
1344 | + }; | ||
1345 | struct alc_spec *spec = codec->spec; | ||
1346 | |||
1347 | if (action == HDA_FIXUP_ACT_PRE_PROBE) { | ||
1348 | + spec->gen.preferred_dacs = preferred_pairs; | ||
1349 | spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP; | ||
1350 | snd_hda_apply_pincfgs(codec, pincfgs); | ||
1351 | } else if (action == HDA_FIXUP_ACT_INIT) { | ||
1352 | diff --git a/sound/usb/card.c b/sound/usb/card.c | ||
1353 | index 8906199a83e6..549b9b061694 100644 | ||
1354 | --- a/sound/usb/card.c | ||
1355 | +++ b/sound/usb/card.c | ||
1356 | @@ -644,9 +644,12 @@ static int usb_audio_probe(struct usb_interface *intf, | ||
1357 | |||
1358 | __error: | ||
1359 | if (chip) { | ||
1360 | + /* chip->active is inside the chip->card object, | ||
1361 | + * decrement before memory is possibly returned. | ||
1362 | + */ | ||
1363 | + atomic_dec(&chip->active); | ||
1364 | if (!chip->num_interfaces) | ||
1365 | snd_card_free(chip->card); | ||
1366 | - atomic_dec(&chip->active); | ||
1367 | } | ||
1368 | mutex_unlock(®ister_mutex); | ||
1369 | return err; |