This is the 5.4.216 stable release
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmM9Ql8ACgkQONu9yGCS aT6i7Q//ZlSl7y1NgrraPyYYiHdzEzNSGD6dHcjrdghC/YhLZ/K93sNiTBnwpj18 TLYzRuKDf/47Dniml0vv62xHIiQcBJ79a7Lo7kT76X4nCg09gFV444fADEjTR6MF Bc3W1Ps4ikoOH9K1xq99uoxjQWq4k55xHrZ6JW5Cq7Dsj/BdBQKuTlzVNDrwOdXD Cb+ubL41ni5qipJ9a4hwlBhhOB04ZeSThRWeyCPwRiIWHFVOAfDAqq2fVNjYu0Cx E+Oz6GMvLaXBjZh2fw1uuClBh1FbDD51wlmtGS0YLmcPqWECAbTOFP2/ozzo3Gh2 Ugm7et0zHXsCXeOCmNULWg60INFhp0+b8e44w9/j3tXofjatDQsJtG3t05TqJN6M kcWg4SKDjc0ope+HyObY5TZA8Oa+D6XCOh2RLfNA/ipJXQ1EtDDbAAYVPPY9Yyqo efsMNRKxMycT1TSc2KINhlpztaxgyz67AJ+vnDfoA42/XMNPYdMjEat+PuOwSiwy RP0+lrGm6zUPQ0wzNHk+S4iwNrpts0Oc29S4IAV1i24aKWqByQSN5vxmiy7UH4mG pbXJ4uSNiCzHtyd9zV7FlyniJCrawm+sAbbAQc99VUp46vJKEJVOVTGGtvuAR+ME iQUhIfqBgs+Eff2ZJ5+QFgPTHMzuQYVfBaigVhXsJwZqPJgHNcs= =m4xD -----END PGP SIGNATURE----- Merge 5.4.216 into android11-5.4-lts Changes in 5.4.216 uas: add no-uas quirk for Hiksemi usb_disk usb-storage: Add Hiksemi USB3-FW to IGNORE_UAS uas: ignore UAS for Thinkplus chips net: usb: qmi_wwan: Add new usb-id for Dell branded EM7455 clk: ingenic-tcu: Properly enable registers before accessing timers ARM: dts: integrator: Tag PCI host with device_type ntfs: fix BUG_ON in ntfs_lookup_inode_by_name() Revert "net: mvpp2: debugfs: fix memory leak when using debugfs_lookup()" libata: add ATA_HORKAGE_NOLPM for Pioneer BDR-207M and BDR-205 mmc: moxart: fix 4-bit bus width and remove 8-bit bus width mm/page_alloc: fix race condition between build_all_zonelists and page allocation mm: prevent page_frag_alloc() from corrupting the memory mm/migrate_device.c: flush TLB while holding PTL mm: fix madivse_pageout mishandling on non-LRU page media: dvb_vb2: fix possible out of bound access ARM: dts: Move am33xx and am43xx mmc nodes to sdhci-omap driver ARM: dts: am33xx: Fix MMCHS0 dma properties soc: sunxi: sram: Actually claim SRAM regions soc: sunxi: sram: Prevent the driver from being unbound soc: sunxi_sram: Make use of the helper function devm_platform_ioremap_resource() soc: sunxi: sram: Fix probe function ordering issues soc: sunxi: sram: Fix debugfs info for A64 SRAM C Revert "drm: bridge: analogix/dp: add panel prepare/unprepare in suspend/resume time" Input: melfas_mip4 - fix return value check in mip4_probe() usbnet: Fix memory leak in usbnet_disconnect() nvme: add new line after variable declatation nvme: Fix IOC_PR_CLEAR and IOC_PR_RELEASE ioctls for nvme devices selftests: Fix the if conditions of in test_extra_filter() clk: imx: imx6sx: remove the SET_RATE_PARENT flag for QSPI clocks clk: iproc: Do not rely on node name for correct PLL setup Linux 5.4.216 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: I6f013eba455e18b2e39b6092a278d0af09a0c85e
This commit is contained in:
commit
3e7819945e
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 5
|
||||
PATCHLEVEL = 4
|
||||
SUBLEVEL = 215
|
||||
SUBLEVEL = 216
|
||||
EXTRAVERSION =
|
||||
NAME = Kleptomaniac Octopus
|
||||
|
||||
|
@ -381,7 +381,7 @@
|
||||
&mmc2 {
|
||||
status = "okay";
|
||||
vmmc-supply = <&wl12xx_vmmc>;
|
||||
ti,non-removable;
|
||||
non-removable;
|
||||
bus-width = <4>;
|
||||
cap-power-off-card;
|
||||
pinctrl-names = "default";
|
||||
|
@ -22,6 +22,7 @@
|
||||
pinctrl-0 = <&emmc_pins>;
|
||||
bus-width = <8>;
|
||||
status = "okay";
|
||||
non-removable;
|
||||
};
|
||||
|
||||
&am33xx_pinmux {
|
||||
|
@ -75,7 +75,6 @@
|
||||
bus-width = <4>;
|
||||
non-removable;
|
||||
cap-power-off-card;
|
||||
ti,needs-special-hs-handling;
|
||||
keep-power-in-suspend;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&mmc3_pins &wl18xx_pins>;
|
||||
|
@ -389,7 +389,6 @@
|
||||
bus-width = <4>;
|
||||
non-removable;
|
||||
cap-power-off-card;
|
||||
ti,needs-special-hs-handling;
|
||||
keep-power-in-suspend;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&mmc3_pins &wl18xx_pins>;
|
||||
|
@ -75,7 +75,6 @@
|
||||
bus-width = <4>;
|
||||
non-removable;
|
||||
cap-power-off-card;
|
||||
ti,needs-special-hs-handling;
|
||||
keep-power-in-suspend;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&mmc3_pins &wl18xx_pins>;
|
||||
|
@ -782,8 +782,7 @@
|
||||
bus-width = <4>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&mmc3_pins &wlan_pins>;
|
||||
ti,non-removable;
|
||||
ti,needs-special-hs-handling;
|
||||
non-removable;
|
||||
cap-power-off-card;
|
||||
keep-power-in-suspend;
|
||||
|
||||
|
@ -700,7 +700,7 @@
|
||||
&mmc2 {
|
||||
status = "okay";
|
||||
vmmc-supply = <&wl12xx_vmmc>;
|
||||
ti,non-removable;
|
||||
non-removable;
|
||||
bus-width = <4>;
|
||||
cap-power-off-card;
|
||||
keep-power-in-suspend;
|
||||
|
@ -361,7 +361,7 @@
|
||||
pinctrl-0 = <&emmc_pins>;
|
||||
vmmc-supply = <&vmmcsd_fixed>;
|
||||
bus-width = <8>;
|
||||
ti,non-removable;
|
||||
non-removable;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
@ -176,7 +176,7 @@
|
||||
vmmc-supply = <&vmmcsd_fixed>;
|
||||
bus-width = <8>;
|
||||
pinctrl-0 = <&mmc1_pins_default>;
|
||||
ti,non-removable;
|
||||
non-removable;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
@ -473,7 +473,7 @@
|
||||
vmmc-supply = <&vmmcsd_fixed>;
|
||||
bus-width = <8>;
|
||||
pinctrl-0 = <&mmc2_pins_default>;
|
||||
ti,non-removable;
|
||||
non-removable;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
@ -341,7 +341,7 @@
|
||||
pinctrl-0 = <&emmc_pins>;
|
||||
vmmc-supply = <&ldo3_reg>;
|
||||
bus-width = <8>;
|
||||
ti,non-removable;
|
||||
non-removable;
|
||||
};
|
||||
|
||||
&mmc3 {
|
||||
@ -351,7 +351,7 @@
|
||||
pinctrl-0 = <&wireless_pins>;
|
||||
vmmmc-supply = <&v3v3c_reg>;
|
||||
bus-width = <4>;
|
||||
ti,non-removable;
|
||||
non-removable;
|
||||
dmas = <&edma_xbar 12 0 1
|
||||
&edma_xbar 13 0 2>;
|
||||
dma-names = "tx", "rx";
|
||||
|
@ -69,7 +69,7 @@
|
||||
pinctrl-0 = <&emmc_pins>;
|
||||
vmmc-supply = <&vmmc_reg>;
|
||||
bus-width = <8>;
|
||||
ti,non-removable;
|
||||
non-removable;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -1333,12 +1333,9 @@
|
||||
ranges = <0x0 0x60000 0x1000>;
|
||||
|
||||
mmc1: mmc@0 {
|
||||
compatible = "ti,omap4-hsmmc";
|
||||
ti,dual-volt;
|
||||
compatible = "ti,am335-sdhci";
|
||||
ti,needs-special-reset;
|
||||
ti,needs-special-hs-handling;
|
||||
dmas = <&edma_xbar 24 0 0
|
||||
&edma_xbar 25 0 0>;
|
||||
dmas = <&edma 24 0>, <&edma 25 0>;
|
||||
dma-names = "tx", "rx";
|
||||
interrupts = <64>;
|
||||
reg = <0x0 0x1000>;
|
||||
@ -1827,7 +1824,7 @@
|
||||
ranges = <0x0 0xd8000 0x1000>;
|
||||
|
||||
mmc2: mmc@0 {
|
||||
compatible = "ti,omap4-hsmmc";
|
||||
compatible = "ti,am335-sdhci";
|
||||
ti,needs-special-reset;
|
||||
dmas = <&edma 2 0
|
||||
&edma 3 0>;
|
||||
|
@ -259,10 +259,11 @@
|
||||
ranges = <0x0 0x47810000 0x1000>;
|
||||
|
||||
mmc3: mmc@0 {
|
||||
compatible = "ti,omap4-hsmmc";
|
||||
compatible = "ti,am335-sdhci";
|
||||
ti,needs-special-reset;
|
||||
interrupts = <29>;
|
||||
reg = <0x0 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -250,10 +250,11 @@
|
||||
ranges = <0x0 0x47810000 0x1000>;
|
||||
|
||||
mmc3: mmc@0 {
|
||||
compatible = "ti,omap4-hsmmc";
|
||||
compatible = "ti,am437-sdhci";
|
||||
ti,needs-special-reset;
|
||||
interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>;
|
||||
reg = <0x0 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -291,7 +291,7 @@
|
||||
pinctrl-0 = <&emmc_pins>;
|
||||
vmmc-supply = <&vmmc_3v3>;
|
||||
bus-width = <8>;
|
||||
ti,non-removable;
|
||||
non-removable;
|
||||
};
|
||||
|
||||
&spi0 {
|
||||
|
@ -872,7 +872,7 @@
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&emmc_pins_default>;
|
||||
pinctrl-1 = <&emmc_pins_sleep>;
|
||||
ti,non-removable;
|
||||
non-removable;
|
||||
};
|
||||
|
||||
&mmc3 {
|
||||
@ -889,7 +889,7 @@
|
||||
pinctrl-1 = <&mmc3_pins_sleep>;
|
||||
cap-power-off-card;
|
||||
keep-power-in-suspend;
|
||||
ti,non-removable;
|
||||
non-removable;
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
@ -1104,9 +1104,8 @@
|
||||
ranges = <0x0 0x60000 0x1000>;
|
||||
|
||||
mmc1: mmc@0 {
|
||||
compatible = "ti,omap4-hsmmc";
|
||||
compatible = "ti,am437-sdhci";
|
||||
reg = <0x0 0x1000>;
|
||||
ti,dual-volt;
|
||||
ti,needs-special-reset;
|
||||
dmas = <&edma 24 0>,
|
||||
<&edma 25 0>;
|
||||
@ -1641,7 +1640,7 @@
|
||||
ranges = <0x0 0xd8000 0x1000>;
|
||||
|
||||
mmc2: mmc@0 {
|
||||
compatible = "ti,omap4-hsmmc";
|
||||
compatible = "ti,am437-sdhci";
|
||||
reg = <0x0 0x1000>;
|
||||
ti,needs-special-reset;
|
||||
dmas = <&edma 2 0>,
|
||||
|
@ -694,7 +694,7 @@
|
||||
pinctrl-1 = <&mmc3_pins_sleep>;
|
||||
cap-power-off-card;
|
||||
keep-power-in-suspend;
|
||||
ti,non-removable;
|
||||
non-removable;
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
@ -155,6 +155,7 @@
|
||||
|
||||
pci: pciv3@62000000 {
|
||||
compatible = "arm,integrator-ap-pci", "v3,v360epc-pci";
|
||||
device_type = "pci";
|
||||
#interrupt-cells = <1>;
|
||||
#size-cells = <2>;
|
||||
#address-cells = <3>;
|
||||
|
@ -4542,6 +4542,10 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
|
||||
{ "PIONEER DVD-RW DVR-212D", NULL, ATA_HORKAGE_NOSETXFER },
|
||||
{ "PIONEER DVD-RW DVR-216D", NULL, ATA_HORKAGE_NOSETXFER },
|
||||
|
||||
/* These specific Pioneer models have LPM issues */
|
||||
{ "PIONEER BD-RW BDR-207M", NULL, ATA_HORKAGE_NOLPM },
|
||||
{ "PIONEER BD-RW BDR-205", NULL, ATA_HORKAGE_NOLPM },
|
||||
|
||||
/* Crucial BX100 SSD 500GB has broken LPM support */
|
||||
{ "CT500BX100SSD1", NULL, ATA_HORKAGE_NOLPM },
|
||||
|
||||
|
@ -736,6 +736,7 @@ void iproc_pll_clk_setup(struct device_node *node,
|
||||
const char *parent_name;
|
||||
struct iproc_clk *iclk_array;
|
||||
struct clk_hw_onecell_data *clk_data;
|
||||
const char *clk_name;
|
||||
|
||||
if (WARN_ON(!pll_ctrl) || WARN_ON(!clk_ctrl))
|
||||
return;
|
||||
@ -783,7 +784,12 @@ void iproc_pll_clk_setup(struct device_node *node,
|
||||
iclk = &iclk_array[0];
|
||||
iclk->pll = pll;
|
||||
|
||||
init.name = node->name;
|
||||
ret = of_property_read_string_index(node, "clock-output-names",
|
||||
0, &clk_name);
|
||||
if (WARN_ON(ret))
|
||||
goto err_pll_register;
|
||||
|
||||
init.name = clk_name;
|
||||
init.ops = &iproc_pll_ops;
|
||||
init.flags = 0;
|
||||
parent_name = of_clk_get_parent_name(node, 0);
|
||||
@ -803,13 +809,11 @@ void iproc_pll_clk_setup(struct device_node *node,
|
||||
goto err_pll_register;
|
||||
|
||||
clk_data->hws[0] = &iclk->hw;
|
||||
parent_name = clk_name;
|
||||
|
||||
/* now initialize and register all leaf clocks */
|
||||
for (i = 1; i < num_clks; i++) {
|
||||
const char *clk_name;
|
||||
|
||||
memset(&init, 0, sizeof(init));
|
||||
parent_name = node->name;
|
||||
|
||||
ret = of_property_read_string_index(node, "clock-output-names",
|
||||
i, &clk_name);
|
||||
|
@ -287,13 +287,13 @@ static void __init imx6sx_clocks_init(struct device_node *ccm_node)
|
||||
hws[IMX6SX_CLK_SSI3_SEL] = imx_clk_hw_mux("ssi3_sel", base + 0x1c, 14, 2, ssi_sels, ARRAY_SIZE(ssi_sels));
|
||||
hws[IMX6SX_CLK_SSI2_SEL] = imx_clk_hw_mux("ssi2_sel", base + 0x1c, 12, 2, ssi_sels, ARRAY_SIZE(ssi_sels));
|
||||
hws[IMX6SX_CLK_SSI1_SEL] = imx_clk_hw_mux("ssi1_sel", base + 0x1c, 10, 2, ssi_sels, ARRAY_SIZE(ssi_sels));
|
||||
hws[IMX6SX_CLK_QSPI1_SEL] = imx_clk_hw_mux_flags("qspi1_sel", base + 0x1c, 7, 3, qspi1_sels, ARRAY_SIZE(qspi1_sels), CLK_SET_RATE_PARENT);
|
||||
hws[IMX6SX_CLK_QSPI1_SEL] = imx_clk_hw_mux("qspi1_sel", base + 0x1c, 7, 3, qspi1_sels, ARRAY_SIZE(qspi1_sels));
|
||||
hws[IMX6SX_CLK_PERCLK_SEL] = imx_clk_hw_mux("perclk_sel", base + 0x1c, 6, 1, perclk_sels, ARRAY_SIZE(perclk_sels));
|
||||
hws[IMX6SX_CLK_VID_SEL] = imx_clk_hw_mux("vid_sel", base + 0x20, 21, 3, vid_sels, ARRAY_SIZE(vid_sels));
|
||||
hws[IMX6SX_CLK_ESAI_SEL] = imx_clk_hw_mux("esai_sel", base + 0x20, 19, 2, audio_sels, ARRAY_SIZE(audio_sels));
|
||||
hws[IMX6SX_CLK_CAN_SEL] = imx_clk_hw_mux("can_sel", base + 0x20, 8, 2, can_sels, ARRAY_SIZE(can_sels));
|
||||
hws[IMX6SX_CLK_UART_SEL] = imx_clk_hw_mux("uart_sel", base + 0x24, 6, 1, uart_sels, ARRAY_SIZE(uart_sels));
|
||||
hws[IMX6SX_CLK_QSPI2_SEL] = imx_clk_hw_mux_flags("qspi2_sel", base + 0x2c, 15, 3, qspi2_sels, ARRAY_SIZE(qspi2_sels), CLK_SET_RATE_PARENT);
|
||||
hws[IMX6SX_CLK_QSPI2_SEL] = imx_clk_hw_mux("qspi2_sel", base + 0x2c, 15, 3, qspi2_sels, ARRAY_SIZE(qspi2_sels));
|
||||
hws[IMX6SX_CLK_SPDIF_SEL] = imx_clk_hw_mux("spdif_sel", base + 0x30, 20, 2, audio_sels, ARRAY_SIZE(audio_sels));
|
||||
hws[IMX6SX_CLK_AUDIO_SEL] = imx_clk_hw_mux("audio_sel", base + 0x30, 7, 2, audio_sels, ARRAY_SIZE(audio_sels));
|
||||
hws[IMX6SX_CLK_ENET_PRE_SEL] = imx_clk_hw_mux("enet_pre_sel", base + 0x34, 15, 3, enet_pre_sels, ARRAY_SIZE(enet_pre_sels));
|
||||
|
@ -100,15 +100,11 @@ static bool ingenic_tcu_enable_regs(struct clk_hw *hw)
|
||||
bool enabled = false;
|
||||
|
||||
/*
|
||||
* If the SoC has no global TCU clock, we must ungate the channel's
|
||||
* clock to be able to access its registers.
|
||||
* If we have a TCU clock, it will be enabled automatically as it has
|
||||
* been attached to the regmap.
|
||||
* According to the programming manual, a timer channel's registers can
|
||||
* only be accessed when the channel's stop bit is clear.
|
||||
*/
|
||||
if (!tcu->clk) {
|
||||
enabled = !!ingenic_tcu_is_enabled(hw);
|
||||
regmap_write(tcu->map, TCU_REG_TSCR, BIT(info->gate_bit));
|
||||
}
|
||||
enabled = !!ingenic_tcu_is_enabled(hw);
|
||||
regmap_write(tcu->map, TCU_REG_TSCR, BIT(info->gate_bit));
|
||||
|
||||
return enabled;
|
||||
}
|
||||
@ -119,8 +115,7 @@ static void ingenic_tcu_disable_regs(struct clk_hw *hw)
|
||||
const struct ingenic_tcu_clk_info *info = tcu_clk->info;
|
||||
struct ingenic_tcu *tcu = tcu_clk->tcu;
|
||||
|
||||
if (!tcu->clk)
|
||||
regmap_write(tcu->map, TCU_REG_TSSR, BIT(info->gate_bit));
|
||||
regmap_write(tcu->map, TCU_REG_TSSR, BIT(info->gate_bit));
|
||||
}
|
||||
|
||||
static u8 ingenic_tcu_get_parent(struct clk_hw *hw)
|
||||
|
@ -1823,12 +1823,6 @@ EXPORT_SYMBOL_GPL(analogix_dp_remove);
|
||||
int analogix_dp_suspend(struct analogix_dp_device *dp)
|
||||
{
|
||||
clk_disable_unprepare(dp->clock);
|
||||
|
||||
if (dp->plat_data->panel) {
|
||||
if (drm_panel_unprepare(dp->plat_data->panel))
|
||||
DRM_ERROR("failed to turnoff the panel\n");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(analogix_dp_suspend);
|
||||
@ -1843,13 +1837,6 @@ int analogix_dp_resume(struct analogix_dp_device *dp)
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (dp->plat_data->panel) {
|
||||
if (drm_panel_prepare(dp->plat_data->panel)) {
|
||||
DRM_ERROR("failed to setup the panel\n");
|
||||
return -EBUSY;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(analogix_dp_resume);
|
||||
|
@ -1453,7 +1453,7 @@ static int mip4_probe(struct i2c_client *client, const struct i2c_device_id *id)
|
||||
"ce", GPIOD_OUT_LOW);
|
||||
if (IS_ERR(ts->gpio_ce)) {
|
||||
error = PTR_ERR(ts->gpio_ce);
|
||||
if (error != EPROBE_DEFER)
|
||||
if (error != -EPROBE_DEFER)
|
||||
dev_err(&client->dev,
|
||||
"Failed to get gpio: %d\n", error);
|
||||
return error;
|
||||
|
@ -358,6 +358,12 @@ int dvb_vb2_reqbufs(struct dvb_vb2_ctx *ctx, struct dmx_requestbuffers *req)
|
||||
|
||||
int dvb_vb2_querybuf(struct dvb_vb2_ctx *ctx, struct dmx_buffer *b)
|
||||
{
|
||||
struct vb2_queue *q = &ctx->vb_q;
|
||||
|
||||
if (b->index >= q->num_buffers) {
|
||||
dprintk(1, "[%s] buffer index out of range\n", ctx->name);
|
||||
return -EINVAL;
|
||||
}
|
||||
vb2_core_querybuf(&ctx->vb_q, b->index, b);
|
||||
dprintk(3, "[%s] index=%d\n", ctx->name, b->index);
|
||||
return 0;
|
||||
@ -382,8 +388,13 @@ int dvb_vb2_expbuf(struct dvb_vb2_ctx *ctx, struct dmx_exportbuffer *exp)
|
||||
|
||||
int dvb_vb2_qbuf(struct dvb_vb2_ctx *ctx, struct dmx_buffer *b)
|
||||
{
|
||||
struct vb2_queue *q = &ctx->vb_q;
|
||||
int ret;
|
||||
|
||||
if (b->index >= q->num_buffers) {
|
||||
dprintk(1, "[%s] buffer index out of range\n", ctx->name);
|
||||
return -EINVAL;
|
||||
}
|
||||
ret = vb2_core_qbuf(&ctx->vb_q, b->index, b, NULL);
|
||||
if (ret) {
|
||||
dprintk(1, "[%s] index=%d errno=%d\n", ctx->name,
|
||||
|
@ -111,8 +111,8 @@
|
||||
#define CLK_DIV_MASK 0x7f
|
||||
|
||||
/* REG_BUS_WIDTH */
|
||||
#define BUS_WIDTH_8 BIT(2)
|
||||
#define BUS_WIDTH_4 BIT(1)
|
||||
#define BUS_WIDTH_4_SUPPORT BIT(3)
|
||||
#define BUS_WIDTH_4 BIT(2)
|
||||
#define BUS_WIDTH_1 BIT(0)
|
||||
|
||||
#define MMC_VDD_360 23
|
||||
@ -527,9 +527,6 @@ static void moxart_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
|
||||
case MMC_BUS_WIDTH_4:
|
||||
writel(BUS_WIDTH_4, host->base + REG_BUS_WIDTH);
|
||||
break;
|
||||
case MMC_BUS_WIDTH_8:
|
||||
writel(BUS_WIDTH_8, host->base + REG_BUS_WIDTH);
|
||||
break;
|
||||
default:
|
||||
writel(BUS_WIDTH_1, host->base + REG_BUS_WIDTH);
|
||||
break;
|
||||
@ -646,16 +643,8 @@ static int moxart_probe(struct platform_device *pdev)
|
||||
dmaengine_slave_config(host->dma_chan_rx, &cfg);
|
||||
}
|
||||
|
||||
switch ((readl(host->base + REG_BUS_WIDTH) >> 3) & 3) {
|
||||
case 1:
|
||||
if (readl(host->base + REG_BUS_WIDTH) & BUS_WIDTH_4_SUPPORT)
|
||||
mmc->caps |= MMC_CAP_4_BIT_DATA;
|
||||
break;
|
||||
case 2:
|
||||
mmc->caps |= MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
writel(0, host->base + REG_INTERRUPT_MASK);
|
||||
|
||||
|
@ -700,10 +700,10 @@ void mvpp2_dbgfs_cleanup(struct mvpp2 *priv)
|
||||
|
||||
void mvpp2_dbgfs_init(struct mvpp2 *priv, const char *name)
|
||||
{
|
||||
static struct dentry *mvpp2_root;
|
||||
struct dentry *mvpp2_dir;
|
||||
struct dentry *mvpp2_dir, *mvpp2_root;
|
||||
int ret, i;
|
||||
|
||||
mvpp2_root = debugfs_lookup(MVPP2_DRIVER_NAME, NULL);
|
||||
if (!mvpp2_root)
|
||||
mvpp2_root = debugfs_create_dir(MVPP2_DRIVER_NAME, NULL);
|
||||
|
||||
|
@ -1354,6 +1354,7 @@ static const struct usb_device_id products[] = {
|
||||
{QMI_FIXED_INTF(0x413c, 0x81b3, 8)}, /* Dell Wireless 5809e Gobi(TM) 4G LTE Mobile Broadband Card (rev3) */
|
||||
{QMI_FIXED_INTF(0x413c, 0x81b6, 8)}, /* Dell Wireless 5811e */
|
||||
{QMI_FIXED_INTF(0x413c, 0x81b6, 10)}, /* Dell Wireless 5811e */
|
||||
{QMI_FIXED_INTF(0x413c, 0x81c2, 8)}, /* Dell Wireless 5811e */
|
||||
{QMI_FIXED_INTF(0x413c, 0x81cc, 8)}, /* Dell Wireless 5816e */
|
||||
{QMI_FIXED_INTF(0x413c, 0x81d7, 0)}, /* Dell Wireless 5821e */
|
||||
{QMI_FIXED_INTF(0x413c, 0x81d7, 1)}, /* Dell Wireless 5821e preproduction config */
|
||||
|
@ -1592,6 +1592,7 @@ void usbnet_disconnect (struct usb_interface *intf)
|
||||
struct usbnet *dev;
|
||||
struct usb_device *xdev;
|
||||
struct net_device *net;
|
||||
struct urb *urb;
|
||||
|
||||
dev = usb_get_intfdata(intf);
|
||||
usb_set_intfdata(intf, NULL);
|
||||
@ -1608,7 +1609,11 @@ void usbnet_disconnect (struct usb_interface *intf)
|
||||
net = dev->net;
|
||||
unregister_netdev (net);
|
||||
|
||||
usb_scuttle_anchored_urbs(&dev->deferred);
|
||||
while ((urb = usb_get_from_anchor(&dev->deferred))) {
|
||||
dev_kfree_skb(urb->context);
|
||||
kfree(urb->sg);
|
||||
usb_free_urb(urb);
|
||||
}
|
||||
|
||||
if (dev->driver_info->unbind)
|
||||
dev->driver_info->unbind (dev, intf);
|
||||
|
@ -2018,18 +2018,21 @@ static int nvme_pr_preempt(struct block_device *bdev, u64 old, u64 new,
|
||||
enum pr_type type, bool abort)
|
||||
{
|
||||
u32 cdw10 = nvme_pr_type(type) << 8 | (abort ? 2 : 1);
|
||||
|
||||
return nvme_pr_command(bdev, cdw10, old, new, nvme_cmd_resv_acquire);
|
||||
}
|
||||
|
||||
static int nvme_pr_clear(struct block_device *bdev, u64 key)
|
||||
{
|
||||
u32 cdw10 = 1 | (key ? 1 << 3 : 0);
|
||||
return nvme_pr_command(bdev, cdw10, key, 0, nvme_cmd_resv_register);
|
||||
u32 cdw10 = 1 | (key ? 0 : 1 << 3);
|
||||
|
||||
return nvme_pr_command(bdev, cdw10, key, 0, nvme_cmd_resv_release);
|
||||
}
|
||||
|
||||
static int nvme_pr_release(struct block_device *bdev, u64 key, enum pr_type type)
|
||||
{
|
||||
u32 cdw10 = nvme_pr_type(type) << 8 | (key ? 1 << 3 : 0);
|
||||
u32 cdw10 = nvme_pr_type(type) << 8 | (key ? 0 : 1 << 3);
|
||||
|
||||
return nvme_pr_command(bdev, cdw10, key, 0, nvme_cmd_resv_release);
|
||||
}
|
||||
|
||||
|
@ -78,8 +78,8 @@ static struct sunxi_sram_desc sun4i_a10_sram_d = {
|
||||
|
||||
static struct sunxi_sram_desc sun50i_a64_sram_c = {
|
||||
.data = SUNXI_SRAM_DATA("C", 0x4, 24, 1,
|
||||
SUNXI_SRAM_MAP(0, 1, "cpu"),
|
||||
SUNXI_SRAM_MAP(1, 0, "de2")),
|
||||
SUNXI_SRAM_MAP(1, 0, "cpu"),
|
||||
SUNXI_SRAM_MAP(0, 1, "de2")),
|
||||
};
|
||||
|
||||
static const struct of_device_id sunxi_sram_dt_ids[] = {
|
||||
@ -254,6 +254,7 @@ int sunxi_sram_claim(struct device *dev)
|
||||
writel(val | ((device << sram_data->offset) & mask),
|
||||
base + sram_data->reg);
|
||||
|
||||
sram_desc->claimed = true;
|
||||
spin_unlock(&sram_lock);
|
||||
|
||||
return 0;
|
||||
@ -318,12 +319,11 @@ static struct regmap_config sunxi_sram_emac_clock_regmap = {
|
||||
.writeable_reg = sunxi_sram_regmap_accessible_reg,
|
||||
};
|
||||
|
||||
static int sunxi_sram_probe(struct platform_device *pdev)
|
||||
static int __init sunxi_sram_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct resource *res;
|
||||
struct dentry *d;
|
||||
struct regmap *emac_clock;
|
||||
const struct sunxi_sramc_variant *variant;
|
||||
struct device *dev = &pdev->dev;
|
||||
|
||||
sram_dev = &pdev->dev;
|
||||
|
||||
@ -331,18 +331,10 @@ static int sunxi_sram_probe(struct platform_device *pdev)
|
||||
if (!variant)
|
||||
return -EINVAL;
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
base = devm_ioremap_resource(&pdev->dev, res);
|
||||
base = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(base))
|
||||
return PTR_ERR(base);
|
||||
|
||||
of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev);
|
||||
|
||||
d = debugfs_create_file("sram", S_IRUGO, NULL, NULL,
|
||||
&sunxi_sram_fops);
|
||||
if (!d)
|
||||
return -ENOMEM;
|
||||
|
||||
if (variant->has_emac_clock) {
|
||||
emac_clock = devm_regmap_init_mmio(&pdev->dev, base,
|
||||
&sunxi_sram_emac_clock_regmap);
|
||||
@ -351,6 +343,10 @@ static int sunxi_sram_probe(struct platform_device *pdev)
|
||||
return PTR_ERR(emac_clock);
|
||||
}
|
||||
|
||||
of_platform_populate(dev->of_node, NULL, NULL, dev);
|
||||
|
||||
debugfs_create_file("sram", 0444, NULL, NULL, &sunxi_sram_fops);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -396,9 +392,8 @@ static struct platform_driver sunxi_sram_driver = {
|
||||
.name = "sunxi-sram",
|
||||
.of_match_table = sunxi_sram_dt_match,
|
||||
},
|
||||
.probe = sunxi_sram_probe,
|
||||
};
|
||||
module_platform_driver(sunxi_sram_driver);
|
||||
builtin_platform_driver_probe(sunxi_sram_driver, sunxi_sram_probe);
|
||||
|
||||
MODULE_AUTHOR("Maxime Ripard <maxime.ripard@free-electrons.com>");
|
||||
MODULE_DESCRIPTION("Allwinner sunXi SRAM Controller Driver");
|
||||
|
@ -52,6 +52,13 @@ UNUSUAL_DEV(0x059f, 0x1061, 0x0000, 0x9999,
|
||||
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||
US_FL_NO_REPORT_OPCODES | US_FL_NO_SAME),
|
||||
|
||||
/* Reported-by: Hongling Zeng <zenghongling@kylinos.cn> */
|
||||
UNUSUAL_DEV(0x090c, 0x2000, 0x0000, 0x9999,
|
||||
"Hiksemi",
|
||||
"External HDD",
|
||||
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||
US_FL_IGNORE_UAS),
|
||||
|
||||
/*
|
||||
* Apricorn USB3 dongle sometimes returns "USBSUSBSUSBS" in response to SCSI
|
||||
* commands in UAS mode. Observed with the 1.28 firmware; are there others?
|
||||
@ -76,6 +83,13 @@ UNUSUAL_DEV(0x0bc2, 0x331a, 0x0000, 0x9999,
|
||||
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||
US_FL_NO_REPORT_LUNS),
|
||||
|
||||
/* Reported-by: Hongling Zeng <zenghongling@kylinos.cn> */
|
||||
UNUSUAL_DEV(0x0bda, 0x9210, 0x0000, 0x9999,
|
||||
"Hiksemi",
|
||||
"External HDD",
|
||||
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||
US_FL_IGNORE_UAS),
|
||||
|
||||
/* Reported-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> */
|
||||
UNUSUAL_DEV(0x13fd, 0x3940, 0x0000, 0x9999,
|
||||
"Initio Corporation",
|
||||
@ -118,6 +132,13 @@ UNUSUAL_DEV(0x154b, 0xf00d, 0x0000, 0x9999,
|
||||
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||
US_FL_NO_ATA_1X),
|
||||
|
||||
/* Reported-by: Hongling Zeng <zenghongling@kylinos.cn> */
|
||||
UNUSUAL_DEV(0x17ef, 0x3899, 0x0000, 0x9999,
|
||||
"Thinkplus",
|
||||
"External HDD",
|
||||
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||
US_FL_IGNORE_UAS),
|
||||
|
||||
/* Reported-by: Hans de Goede <hdegoede@redhat.com> */
|
||||
UNUSUAL_DEV(0x2109, 0x0711, 0x0000, 0x9999,
|
||||
"VIA",
|
||||
|
@ -2092,7 +2092,8 @@ get_ctx_vol_failed:
|
||||
// TODO: Initialize security.
|
||||
/* Get the extended system files' directory inode. */
|
||||
vol->extend_ino = ntfs_iget(sb, FILE_Extend);
|
||||
if (IS_ERR(vol->extend_ino) || is_bad_inode(vol->extend_ino)) {
|
||||
if (IS_ERR(vol->extend_ino) || is_bad_inode(vol->extend_ino) ||
|
||||
!S_ISDIR(vol->extend_ino->i_mode)) {
|
||||
if (!IS_ERR(vol->extend_ino))
|
||||
iput(vol->extend_ino);
|
||||
ntfs_error(sb, "Failed to load $Extend.");
|
||||
|
@ -428,8 +428,11 @@ regular_page:
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Do not interfere with other mappings of this page */
|
||||
if (page_mapcount(page) != 1)
|
||||
/*
|
||||
* Do not interfere with other mappings of this page and
|
||||
* non-LRU page.
|
||||
*/
|
||||
if (!PageLRU(page) || page_mapcount(page) != 1)
|
||||
continue;
|
||||
|
||||
VM_BUG_ON_PAGE(PageTransCompound(page), page);
|
||||
|
@ -2343,13 +2343,14 @@ next:
|
||||
migrate->dst[migrate->npages] = 0;
|
||||
migrate->src[migrate->npages++] = mpfn;
|
||||
}
|
||||
arch_leave_lazy_mmu_mode();
|
||||
pte_unmap_unlock(ptep - 1, ptl);
|
||||
|
||||
/* Only flush the TLB if we actually modified any entries */
|
||||
if (unmapped)
|
||||
flush_tlb_range(walk->vma, start, end);
|
||||
|
||||
arch_leave_lazy_mmu_mode();
|
||||
pte_unmap_unlock(ptep - 1, ptl);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -4205,6 +4205,30 @@ void fs_reclaim_release(gfp_t gfp_mask)
|
||||
EXPORT_SYMBOL_GPL(fs_reclaim_release);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Zonelists may change due to hotplug during allocation. Detect when zonelists
|
||||
* have been rebuilt so allocation retries. Reader side does not lock and
|
||||
* retries the allocation if zonelist changes. Writer side is protected by the
|
||||
* embedded spin_lock.
|
||||
*/
|
||||
static DEFINE_SEQLOCK(zonelist_update_seq);
|
||||
|
||||
static unsigned int zonelist_iter_begin(void)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_MEMORY_HOTREMOVE))
|
||||
return read_seqbegin(&zonelist_update_seq);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned int check_retry_zonelist(unsigned int seq)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_MEMORY_HOTREMOVE))
|
||||
return read_seqretry(&zonelist_update_seq, seq);
|
||||
|
||||
return seq;
|
||||
}
|
||||
|
||||
/* Perform direct synchronous page reclaim */
|
||||
static int
|
||||
__perform_reclaim(gfp_t gfp_mask, unsigned int order,
|
||||
@ -4512,6 +4536,7 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
|
||||
int compaction_retries;
|
||||
int no_progress_loops;
|
||||
unsigned int cpuset_mems_cookie;
|
||||
unsigned int zonelist_iter_cookie;
|
||||
int reserve_flags;
|
||||
|
||||
/*
|
||||
@ -4522,11 +4547,12 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
|
||||
(__GFP_ATOMIC|__GFP_DIRECT_RECLAIM)))
|
||||
gfp_mask &= ~__GFP_ATOMIC;
|
||||
|
||||
retry_cpuset:
|
||||
restart:
|
||||
compaction_retries = 0;
|
||||
no_progress_loops = 0;
|
||||
compact_priority = DEF_COMPACT_PRIORITY;
|
||||
cpuset_mems_cookie = read_mems_allowed_begin();
|
||||
zonelist_iter_cookie = zonelist_iter_begin();
|
||||
|
||||
/*
|
||||
* The fast path uses conservative alloc_flags to succeed only until
|
||||
@ -4699,9 +4725,13 @@ retry:
|
||||
goto retry;
|
||||
|
||||
|
||||
/* Deal with possible cpuset update races before we start OOM killing */
|
||||
if (check_retry_cpuset(cpuset_mems_cookie, ac))
|
||||
goto retry_cpuset;
|
||||
/*
|
||||
* Deal with possible cpuset update races or zonelist updates to avoid
|
||||
* a unnecessary OOM kill.
|
||||
*/
|
||||
if (check_retry_cpuset(cpuset_mems_cookie, ac) ||
|
||||
check_retry_zonelist(zonelist_iter_cookie))
|
||||
goto restart;
|
||||
|
||||
/* Reclaim has failed us, start killing things */
|
||||
page = __alloc_pages_may_oom(gfp_mask, order, ac, &did_some_progress);
|
||||
@ -4721,9 +4751,13 @@ retry:
|
||||
}
|
||||
|
||||
nopage:
|
||||
/* Deal with possible cpuset update races before we fail */
|
||||
if (check_retry_cpuset(cpuset_mems_cookie, ac))
|
||||
goto retry_cpuset;
|
||||
/*
|
||||
* Deal with possible cpuset update races or zonelist updates to avoid
|
||||
* a unnecessary OOM kill.
|
||||
*/
|
||||
if (check_retry_cpuset(cpuset_mems_cookie, ac) ||
|
||||
check_retry_zonelist(zonelist_iter_cookie))
|
||||
goto restart;
|
||||
|
||||
/*
|
||||
* Make sure that __GFP_NOFAIL request doesn't leak out and make sure
|
||||
@ -5027,6 +5061,18 @@ refill:
|
||||
/* reset page count bias and offset to start of new frag */
|
||||
nc->pagecnt_bias = PAGE_FRAG_CACHE_MAX_SIZE + 1;
|
||||
offset = size - fragsz;
|
||||
if (unlikely(offset < 0)) {
|
||||
/*
|
||||
* The caller is trying to allocate a fragment
|
||||
* with fragsz > PAGE_SIZE but the cache isn't big
|
||||
* enough to satisfy the request, this may
|
||||
* happen in low memory conditions.
|
||||
* We don't release the cache page because
|
||||
* it could make memory pressure worse
|
||||
* so we simply return NULL here.
|
||||
*/
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
nc->pagecnt_bias--;
|
||||
@ -5858,9 +5904,8 @@ static void __build_all_zonelists(void *data)
|
||||
int nid;
|
||||
int __maybe_unused cpu;
|
||||
pg_data_t *self = data;
|
||||
static DEFINE_SPINLOCK(lock);
|
||||
|
||||
spin_lock(&lock);
|
||||
write_seqlock(&zonelist_update_seq);
|
||||
|
||||
#ifdef CONFIG_NUMA
|
||||
memset(node_load, 0, sizeof(node_load));
|
||||
@ -5893,7 +5938,7 @@ static void __build_all_zonelists(void *data)
|
||||
#endif
|
||||
}
|
||||
|
||||
spin_unlock(&lock);
|
||||
write_sequnlock(&zonelist_update_seq);
|
||||
}
|
||||
|
||||
static noinline void __init
|
||||
|
@ -330,7 +330,7 @@ static void test_extra_filter(const struct test_params p)
|
||||
if (bind(fd1, addr, sockaddr_size()))
|
||||
error(1, errno, "failed to bind recv socket 1");
|
||||
|
||||
if (!bind(fd2, addr, sockaddr_size()) && errno != EADDRINUSE)
|
||||
if (!bind(fd2, addr, sockaddr_size()) || errno != EADDRINUSE)
|
||||
error(1, errno, "bind socket 2 should fail with EADDRINUSE");
|
||||
|
||||
free(addr);
|
||||
|
Loading…
Reference in New Issue
Block a user