mirror of https://github.com/hak5/openwrt.git
kernel: Update kernel 5.4 to version 5.4.50
Run tested: ath79, ipq40xx Build tested: ath79, ipq40xx Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>master
parent
6062d85892
commit
68d9cb8214
|
@ -8,11 +8,11 @@ endif
|
||||||
|
|
||||||
LINUX_VERSION-4.14 = .187
|
LINUX_VERSION-4.14 = .187
|
||||||
LINUX_VERSION-4.19 = .131
|
LINUX_VERSION-4.19 = .131
|
||||||
LINUX_VERSION-5.4 = .48
|
LINUX_VERSION-5.4 = .50
|
||||||
|
|
||||||
LINUX_KERNEL_HASH-4.14.187 = 5b223475eaeea196aa7e127d3f253bca5c35d8afdc72ca75230ce1ecdd1454bd
|
LINUX_KERNEL_HASH-4.14.187 = 5b223475eaeea196aa7e127d3f253bca5c35d8afdc72ca75230ce1ecdd1454bd
|
||||||
LINUX_KERNEL_HASH-4.19.131 = 19dfb9f6cc4ba30104b65dcce7d78240a4ae188cb366747d5f8eae35e98964ba
|
LINUX_KERNEL_HASH-4.19.131 = 19dfb9f6cc4ba30104b65dcce7d78240a4ae188cb366747d5f8eae35e98964ba
|
||||||
LINUX_KERNEL_HASH-5.4.48 = bf20ddafcd04c114d34654bb10d1eb74f1864f3d14b676c6f0d42d60bbcf1d53
|
LINUX_KERNEL_HASH-5.4.50 = ad10f4c1e900f4e3eb4903b65dbcb4ca74250de63aa9fa7105b9b3c3f9a8a6e2
|
||||||
|
|
||||||
remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1))))
|
remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1))))
|
||||||
sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1)))))))
|
sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1)))))))
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/arch/powerpc/platforms/4xx/pci.c
|
--- a/arch/powerpc/platforms/4xx/pci.c
|
||||||
+++ b/arch/powerpc/platforms/4xx/pci.c
|
+++ b/arch/powerpc/platforms/4xx/pci.c
|
||||||
@@ -1904,9 +1904,9 @@ static void __init ppc4xx_configure_pcie
|
@@ -1902,9 +1902,9 @@ static void __init ppc4xx_configure_pcie
|
||||||
* if it works
|
* if it works
|
||||||
*/
|
*/
|
||||||
out_le32(mbase + PECFG_PIM0LAL, 0x00000000);
|
out_le32(mbase + PECFG_PIM0LAL, 0x00000000);
|
||||||
|
|
|
@ -10,7 +10,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||||
|
|
||||||
--- a/drivers/usb/host/ehci-platform.c
|
--- a/drivers/usb/host/ehci-platform.c
|
||||||
+++ b/drivers/usb/host/ehci-platform.c
|
+++ b/drivers/usb/host/ehci-platform.c
|
||||||
@@ -159,6 +159,11 @@ static int ehci_platform_probe(struct pl
|
@@ -269,6 +269,11 @@ static int ehci_platform_probe(struct pl
|
||||||
ehci = hcd_to_ehci(hcd);
|
ehci = hcd_to_ehci(hcd);
|
||||||
|
|
||||||
if (pdata == &ehci_platform_defaults && dev->dev.of_node) {
|
if (pdata == &ehci_platform_defaults && dev->dev.of_node) {
|
||||||
|
|
|
@ -706,7 +706,7 @@
|
||||||
EXPORT_SYMBOL(xfrm_parse_spi);
|
EXPORT_SYMBOL(xfrm_parse_spi);
|
||||||
--- a/net/ipv4/tcp_input.c
|
--- a/net/ipv4/tcp_input.c
|
||||||
+++ b/net/ipv4/tcp_input.c
|
+++ b/net/ipv4/tcp_input.c
|
||||||
@@ -3958,14 +3958,16 @@ static bool tcp_parse_aligned_timestamp(
|
@@ -3968,14 +3968,16 @@ static bool tcp_parse_aligned_timestamp(
|
||||||
{
|
{
|
||||||
const __be32 *ptr = (const __be32 *)(th + 1);
|
const __be32 *ptr = (const __be32 *)(th + 1);
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||||
- reg
|
- reg
|
||||||
--- a/drivers/tty/serial/amba-pl011.c
|
--- a/drivers/tty/serial/amba-pl011.c
|
||||||
+++ b/drivers/tty/serial/amba-pl011.c
|
+++ b/drivers/tty/serial/amba-pl011.c
|
||||||
@@ -2659,6 +2659,11 @@ static int pl011_probe(struct amba_devic
|
@@ -2660,6 +2660,11 @@ static int pl011_probe(struct amba_devic
|
||||||
if (IS_ERR(uap->clk))
|
if (IS_ERR(uap->clk))
|
||||||
return PTR_ERR(uap->clk);
|
return PTR_ERR(uap->clk);
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ Signed-off-by: Phil Howard <phil@pimoroni.com>
|
||||||
struct nvmem_config nvmem_cfg = {
|
struct nvmem_config nvmem_cfg = {
|
||||||
.name = "rv3028_nvram",
|
.name = "rv3028_nvram",
|
||||||
.word_size = 1,
|
.word_size = 1,
|
||||||
@@ -669,6 +671,21 @@ static int rv3028_probe(struct i2c_clien
|
@@ -671,6 +673,21 @@ static int rv3028_probe(struct i2c_clien
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||||
|
|
||||||
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
|
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
|
||||||
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
|
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
|
||||||
@@ -2151,7 +2151,7 @@ static void bcmgenet_init_tx_ring(struct
|
@@ -2149,7 +2149,7 @@ static void bcmgenet_init_tx_ring(struct
|
||||||
|
|
||||||
bcmgenet_tdma_ring_writel(priv, index, 0, TDMA_PROD_INDEX);
|
bcmgenet_tdma_ring_writel(priv, index, 0, TDMA_PROD_INDEX);
|
||||||
bcmgenet_tdma_ring_writel(priv, index, 0, TDMA_CONS_INDEX);
|
bcmgenet_tdma_ring_writel(priv, index, 0, TDMA_CONS_INDEX);
|
||||||
|
@ -27,7 +27,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||||
/* Disable rate control for now */
|
/* Disable rate control for now */
|
||||||
bcmgenet_tdma_ring_writel(priv, index, flow_period_val,
|
bcmgenet_tdma_ring_writel(priv, index, flow_period_val,
|
||||||
TDMA_FLOW_PERIOD);
|
TDMA_FLOW_PERIOD);
|
||||||
@@ -3575,9 +3575,12 @@ static int bcmgenet_probe(struct platfor
|
@@ -3573,9 +3573,12 @@ static int bcmgenet_probe(struct platfor
|
||||||
netif_set_real_num_rx_queues(priv->dev, priv->hw_params->rx_queues + 1);
|
netif_set_real_num_rx_queues(priv->dev, priv->hw_params->rx_queues + 1);
|
||||||
|
|
||||||
/* Set default coalescing parameters */
|
/* Set default coalescing parameters */
|
||||||
|
|
|
@ -15,7 +15,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
||||||
|
|
||||||
--- a/drivers/usb/host/xhci.c
|
--- a/drivers/usb/host/xhci.c
|
||||||
+++ b/drivers/usb/host/xhci.c
|
+++ b/drivers/usb/host/xhci.c
|
||||||
@@ -1452,6 +1452,103 @@ command_cleanup:
|
@@ -1453,6 +1453,103 @@ command_cleanup:
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -119,7 +119,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
||||||
* non-error returns are a promise to giveback() the urb later
|
* non-error returns are a promise to giveback() the urb later
|
||||||
* we drop ownership so next owner (or urb unlink) can get it
|
* we drop ownership so next owner (or urb unlink) can get it
|
||||||
*/
|
*/
|
||||||
@@ -5327,6 +5424,7 @@ static const struct hc_driver xhci_hc_dr
|
@@ -5334,6 +5431,7 @@ static const struct hc_driver xhci_hc_dr
|
||||||
.endpoint_reset = xhci_endpoint_reset,
|
.endpoint_reset = xhci_endpoint_reset,
|
||||||
.check_bandwidth = xhci_check_bandwidth,
|
.check_bandwidth = xhci_check_bandwidth,
|
||||||
.reset_bandwidth = xhci_reset_bandwidth,
|
.reset_bandwidth = xhci_reset_bandwidth,
|
||||||
|
|
|
@ -33,7 +33,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
||||||
#define USB_VENDOR_ID_BELKIN 0x050d
|
#define USB_VENDOR_ID_BELKIN 0x050d
|
||||||
#define USB_DEVICE_ID_FLIP_KVM 0x3201
|
#define USB_DEVICE_ID_FLIP_KVM 0x3201
|
||||||
|
|
||||||
@@ -1231,6 +1234,9 @@
|
@@ -1234,6 +1237,9 @@
|
||||||
#define USB_VENDOR_ID_XAT 0x2505
|
#define USB_VENDOR_ID_XAT 0x2505
|
||||||
#define USB_DEVICE_ID_XAT_CSR 0x0220
|
#define USB_DEVICE_ID_XAT_CSR 0x0220
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_MULTI_TOUCH), HID_QUIRK_MULTI_INPUT },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_MULTI_TOUCH), HID_QUIRK_MULTI_INPUT },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE), HID_QUIRK_ALWAYS_POLL },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE), HID_QUIRK_ALWAYS_POLL },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE2), HID_QUIRK_ALWAYS_POLL },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE2), HID_QUIRK_ALWAYS_POLL },
|
||||||
@@ -177,6 +178,7 @@ static const struct hid_device_id hid_qu
|
@@ -178,6 +179,7 @@ static const struct hid_device_id hid_qu
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD2, USB_DEVICE_ID_SMARTJOY_DUAL_PLUS), HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD2, USB_DEVICE_ID_SMARTJOY_DUAL_PLUS), HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_QUAD_USB_JOYPAD), HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_QUAD_USB_JOYPAD), HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_XIN_MO_DUAL_ARCADE), HID_QUIRK_MULTI_INPUT },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_XIN_MO_DUAL_ARCADE), HID_QUIRK_MULTI_INPUT },
|
||||||
|
|
|
@ -38,7 +38,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||||
static inline void bcmgenet_writel(u32 value, void __iomem *offset)
|
static inline void bcmgenet_writel(u32 value, void __iomem *offset)
|
||||||
{
|
{
|
||||||
/* MIPS chips strapped for BE will automagically configure the
|
/* MIPS chips strapped for BE will automagically configure the
|
||||||
@@ -1997,6 +2001,11 @@ static void reset_umac(struct bcmgenet_p
|
@@ -1995,6 +1999,11 @@ static void reset_umac(struct bcmgenet_p
|
||||||
bcmgenet_rbuf_ctrl_set(priv, 0);
|
bcmgenet_rbuf_ctrl_set(priv, 0);
|
||||||
udelay(10);
|
udelay(10);
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||||
|
|
||||||
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
|
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
|
||||||
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
|
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
|
||||||
@@ -3476,7 +3476,7 @@ static int bcmgenet_probe(struct platfor
|
@@ -3474,7 +3474,7 @@ static int bcmgenet_probe(struct platfor
|
||||||
priv = netdev_priv(dev);
|
priv = netdev_priv(dev);
|
||||||
priv->irq0 = platform_get_irq(pdev, 0);
|
priv->irq0 = platform_get_irq(pdev, 0);
|
||||||
priv->irq1 = platform_get_irq(pdev, 1);
|
priv->irq1 = platform_get_irq(pdev, 1);
|
||||||
|
|
|
@ -65,7 +65,7 @@ Cc: linux-rockchip@lists.infradead.org
|
||||||
|
|
||||||
--- a/drivers/pci/controller/dwc/pcie-designware-host.c
|
--- a/drivers/pci/controller/dwc/pcie-designware-host.c
|
||||||
+++ b/drivers/pci/controller/dwc/pcie-designware-host.c
|
+++ b/drivers/pci/controller/dwc/pcie-designware-host.c
|
||||||
@@ -343,12 +343,8 @@ int dw_pcie_host_init(struct pcie_port *
|
@@ -345,12 +345,8 @@ int dw_pcie_host_init(struct pcie_port *
|
||||||
if (!bridge)
|
if (!bridge)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
@ -82,7 +82,7 @@ Cc: linux-rockchip@lists.infradead.org
|
||||||
|
|
||||||
--- a/drivers/pci/controller/pci-aardvark.c
|
--- a/drivers/pci/controller/pci-aardvark.c
|
||||||
+++ b/drivers/pci/controller/pci-aardvark.c
|
+++ b/drivers/pci/controller/pci-aardvark.c
|
||||||
@@ -1023,7 +1023,8 @@ static int advk_pcie_probe(struct platfo
|
@@ -1019,7 +1019,8 @@ static int advk_pcie_probe(struct platfo
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -224,7 +224,7 @@ Cc: linux-rockchip@lists.infradead.org
|
||||||
return ret;
|
return ret;
|
||||||
--- a/drivers/pci/controller/pcie-rcar.c
|
--- a/drivers/pci/controller/pcie-rcar.c
|
||||||
+++ b/drivers/pci/controller/pcie-rcar.c
|
+++ b/drivers/pci/controller/pcie-rcar.c
|
||||||
@@ -1143,7 +1143,8 @@ static int rcar_pcie_probe(struct platfo
|
@@ -1144,7 +1144,8 @@ static int rcar_pcie_probe(struct platfo
|
||||||
pcie->dev = dev;
|
pcie->dev = dev;
|
||||||
platform_set_drvdata(pdev, pcie);
|
platform_set_drvdata(pdev, pcie);
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
|
|
||||||
--- a/drivers/usb/host/ehci-platform.c
|
--- a/drivers/usb/host/ehci-platform.c
|
||||||
+++ b/drivers/usb/host/ehci-platform.c
|
+++ b/drivers/usb/host/ehci-platform.c
|
||||||
@@ -57,6 +57,9 @@ static int ehci_platform_reset(struct us
|
@@ -62,6 +62,9 @@ static int ehci_platform_reset(struct us
|
||||||
|
|
||||||
ehci->has_synopsys_hc_bug = pdata->has_synopsys_hc_bug;
|
ehci->has_synopsys_hc_bug = pdata->has_synopsys_hc_bug;
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
s32 tin_deficit;
|
s32 tin_deficit;
|
||||||
u32 tin_backlog;
|
u32 tin_backlog;
|
||||||
u32 tin_dropped;
|
u32 tin_dropped;
|
||||||
@@ -1919,7 +1918,7 @@ begin:
|
@@ -1943,7 +1942,7 @@ begin:
|
||||||
while (b->tin_deficit < 0 ||
|
while (b->tin_deficit < 0 ||
|
||||||
!(b->sparse_flow_count + b->bulk_flow_count)) {
|
!(b->sparse_flow_count + b->bulk_flow_count)) {
|
||||||
if (b->tin_deficit <= 0)
|
if (b->tin_deficit <= 0)
|
||||||
|
@ -41,7 +41,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
if (b->sparse_flow_count + b->bulk_flow_count)
|
if (b->sparse_flow_count + b->bulk_flow_count)
|
||||||
empty = false;
|
empty = false;
|
||||||
|
|
||||||
@@ -2241,8 +2240,7 @@ static int cake_config_besteffort(struct
|
@@ -2265,8 +2264,7 @@ static int cake_config_besteffort(struct
|
||||||
|
|
||||||
cake_set_rate(b, rate, mtu,
|
cake_set_rate(b, rate, mtu,
|
||||||
us_to_ns(q->target), us_to_ns(q->interval));
|
us_to_ns(q->target), us_to_ns(q->interval));
|
||||||
|
@ -51,7 +51,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -2253,8 +2251,7 @@ static int cake_config_precedence(struct
|
@@ -2277,8 +2275,7 @@ static int cake_config_precedence(struct
|
||||||
struct cake_sched_data *q = qdisc_priv(sch);
|
struct cake_sched_data *q = qdisc_priv(sch);
|
||||||
u32 mtu = psched_mtu(qdisc_dev(sch));
|
u32 mtu = psched_mtu(qdisc_dev(sch));
|
||||||
u64 rate = q->rate_bps;
|
u64 rate = q->rate_bps;
|
||||||
|
@ -61,7 +61,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
u32 i;
|
u32 i;
|
||||||
|
|
||||||
q->tin_cnt = 8;
|
q->tin_cnt = 8;
|
||||||
@@ -2267,18 +2264,14 @@ static int cake_config_precedence(struct
|
@@ -2291,18 +2288,14 @@ static int cake_config_precedence(struct
|
||||||
cake_set_rate(b, rate, mtu, us_to_ns(q->target),
|
cake_set_rate(b, rate, mtu, us_to_ns(q->target),
|
||||||
us_to_ns(q->interval));
|
us_to_ns(q->interval));
|
||||||
|
|
||||||
|
@ -83,7 +83,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -2347,8 +2340,7 @@ static int cake_config_diffserv8(struct
|
@@ -2371,8 +2364,7 @@ static int cake_config_diffserv8(struct
|
||||||
struct cake_sched_data *q = qdisc_priv(sch);
|
struct cake_sched_data *q = qdisc_priv(sch);
|
||||||
u32 mtu = psched_mtu(qdisc_dev(sch));
|
u32 mtu = psched_mtu(qdisc_dev(sch));
|
||||||
u64 rate = q->rate_bps;
|
u64 rate = q->rate_bps;
|
||||||
|
@ -93,7 +93,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
u32 i;
|
u32 i;
|
||||||
|
|
||||||
q->tin_cnt = 8;
|
q->tin_cnt = 8;
|
||||||
@@ -2364,18 +2356,14 @@ static int cake_config_diffserv8(struct
|
@@ -2388,18 +2380,14 @@ static int cake_config_diffserv8(struct
|
||||||
cake_set_rate(b, rate, mtu, us_to_ns(q->target),
|
cake_set_rate(b, rate, mtu, us_to_ns(q->target),
|
||||||
us_to_ns(q->interval));
|
us_to_ns(q->interval));
|
||||||
|
|
||||||
|
@ -115,7 +115,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -2414,17 +2402,11 @@ static int cake_config_diffserv4(struct
|
@@ -2438,17 +2426,11 @@ static int cake_config_diffserv4(struct
|
||||||
cake_set_rate(&q->tins[3], rate >> 2, mtu,
|
cake_set_rate(&q->tins[3], rate >> 2, mtu,
|
||||||
us_to_ns(q->target), us_to_ns(q->interval));
|
us_to_ns(q->target), us_to_ns(q->interval));
|
||||||
|
|
||||||
|
@ -137,7 +137,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -2455,15 +2437,10 @@ static int cake_config_diffserv3(struct
|
@@ -2479,15 +2461,10 @@ static int cake_config_diffserv3(struct
|
||||||
cake_set_rate(&q->tins[2], rate >> 2, mtu,
|
cake_set_rate(&q->tins[2], rate >> 2, mtu,
|
||||||
us_to_ns(q->target), us_to_ns(q->interval));
|
us_to_ns(q->target), us_to_ns(q->interval));
|
||||||
|
|
||||||
|
|
|
@ -1,96 +0,0 @@
|
||||||
From 9208d2863ac689a563b92f2161d8d1e7127d0add Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ilya Ponetayev <i.ponetaev@ndmsystems.com>
|
|
||||||
Date: Thu, 25 Jun 2020 22:12:07 +0200
|
|
||||||
Subject: [PATCH] sch_cake: don't try to reallocate or unshare skb
|
|
||||||
unconditionally
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
cake_handle_diffserv() tries to linearize mac and network header parts of
|
|
||||||
skb and to make it writable unconditionally. In some cases it leads to full
|
|
||||||
skb reallocation, which reduces throughput and increases CPU load. Some
|
|
||||||
measurements of IPv4 forward + NAPT on MIPS router with 580 MHz single-core
|
|
||||||
CPU was conducted. It appears that on kernel 4.9 skb_try_make_writable()
|
|
||||||
reallocates skb, if skb was allocated in ethernet driver via so-called
|
|
||||||
'build skb' method from page cache (it was discovered by strange increase
|
|
||||||
of kmalloc-2048 slab at first).
|
|
||||||
|
|
||||||
Obtain DSCP value via read-only skb_header_pointer() call, and leave
|
|
||||||
linearization only for DSCP bleaching or ECN CE setting. And, as an
|
|
||||||
additional optimisation, skip diffserv parsing entirely if it is not needed
|
|
||||||
by the current configuration.
|
|
||||||
|
|
||||||
Fixes: c87b4ecdbe8d ("sch_cake: Make sure we can write the IP header before changing DSCP bits")
|
|
||||||
Signed-off-by: Ilya Ponetayev <i.ponetaev@ndmsystems.com>
|
|
||||||
[ fix a few style issues, reflow commit message ]
|
|
||||||
Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
|
|
||||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
||||||
Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
|
|
||||||
---
|
|
||||||
net/sched/sch_cake.c | 41 ++++++++++++++++++++++++++++++-----------
|
|
||||||
1 file changed, 30 insertions(+), 11 deletions(-)
|
|
||||||
|
|
||||||
--- a/net/sched/sch_cake.c
|
|
||||||
+++ b/net/sched/sch_cake.c
|
|
||||||
@@ -1553,30 +1553,49 @@ static unsigned int cake_drop(struct Qdi
|
|
||||||
|
|
||||||
static u8 cake_handle_diffserv(struct sk_buff *skb, u16 wash)
|
|
||||||
{
|
|
||||||
- int wlen = skb_network_offset(skb);
|
|
||||||
+ const int offset = skb_network_offset(skb);
|
|
||||||
+ u16 *buf, buf_;
|
|
||||||
u8 dscp;
|
|
||||||
|
|
||||||
switch (tc_skb_protocol(skb)) {
|
|
||||||
case htons(ETH_P_IP):
|
|
||||||
- wlen += sizeof(struct iphdr);
|
|
||||||
- if (!pskb_may_pull(skb, wlen) ||
|
|
||||||
- skb_try_make_writable(skb, wlen))
|
|
||||||
+ buf = skb_header_pointer(skb, offset, sizeof(buf_), &buf_);
|
|
||||||
+ if (unlikely(!buf))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
- dscp = ipv4_get_dsfield(ip_hdr(skb)) >> 2;
|
|
||||||
- if (wash && dscp)
|
|
||||||
+ /* ToS is in the second byte of iphdr */
|
|
||||||
+ dscp = ipv4_get_dsfield((struct iphdr *)buf) >> 2;
|
|
||||||
+
|
|
||||||
+ if (wash && dscp) {
|
|
||||||
+ const int wlen = offset + sizeof(struct iphdr);
|
|
||||||
+
|
|
||||||
+ if (!pskb_may_pull(skb, wlen) ||
|
|
||||||
+ skb_try_make_writable(skb, wlen))
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
ipv4_change_dsfield(ip_hdr(skb), INET_ECN_MASK, 0);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
return dscp;
|
|
||||||
|
|
||||||
case htons(ETH_P_IPV6):
|
|
||||||
- wlen += sizeof(struct ipv6hdr);
|
|
||||||
- if (!pskb_may_pull(skb, wlen) ||
|
|
||||||
- skb_try_make_writable(skb, wlen))
|
|
||||||
+ buf = skb_header_pointer(skb, offset, sizeof(buf_), &buf_);
|
|
||||||
+ if (unlikely(!buf))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
- dscp = ipv6_get_dsfield(ipv6_hdr(skb)) >> 2;
|
|
||||||
- if (wash && dscp)
|
|
||||||
+ /* Traffic class is in the first and second bytes of ipv6hdr */
|
|
||||||
+ dscp = ipv6_get_dsfield((struct ipv6hdr *)buf) >> 2;
|
|
||||||
+
|
|
||||||
+ if (wash && dscp) {
|
|
||||||
+ const int wlen = offset + sizeof(struct ipv6hdr);
|
|
||||||
+
|
|
||||||
+ if (!pskb_may_pull(skb, wlen) ||
|
|
||||||
+ skb_try_make_writable(skb, wlen))
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
ipv6_change_dsfield(ipv6_hdr(skb), INET_ECN_MASK, 0);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
return dscp;
|
|
||||||
|
|
||||||
case htons(ETH_P_ARP):
|
|
|
@ -1,62 +0,0 @@
|
||||||
From 8c95eca0bb8c4bd2231a0d581f1ad0d50c90488c Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= <toke@redhat.com>
|
|
||||||
Date: Thu, 25 Jun 2020 22:12:08 +0200
|
|
||||||
Subject: [PATCH] sch_cake: don't call diffserv parsing code when it is not
|
|
||||||
needed
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
As a further optimisation of the diffserv parsing codepath, we can skip it
|
|
||||||
entirely if CAKE is configured to neither use diffserv-based
|
|
||||||
classification, nor to zero out the diffserv bits.
|
|
||||||
|
|
||||||
Fixes: c87b4ecdbe8d ("sch_cake: Make sure we can write the IP header before changing DSCP bits")
|
|
||||||
Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
|
|
||||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
||||||
Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
|
|
||||||
---
|
|
||||||
net/sched/sch_cake.c | 13 +++++++++----
|
|
||||||
1 file changed, 9 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
--- a/net/sched/sch_cake.c
|
|
||||||
+++ b/net/sched/sch_cake.c
|
|
||||||
@@ -1551,7 +1551,7 @@ static unsigned int cake_drop(struct Qdi
|
|
||||||
return idx + (tin << 16);
|
|
||||||
}
|
|
||||||
|
|
||||||
-static u8 cake_handle_diffserv(struct sk_buff *skb, u16 wash)
|
|
||||||
+static u8 cake_handle_diffserv(struct sk_buff *skb, bool wash)
|
|
||||||
{
|
|
||||||
const int offset = skb_network_offset(skb);
|
|
||||||
u16 *buf, buf_;
|
|
||||||
@@ -1612,14 +1612,17 @@ static struct cake_tin_data *cake_select
|
|
||||||
{
|
|
||||||
struct cake_sched_data *q = qdisc_priv(sch);
|
|
||||||
u32 tin, mark;
|
|
||||||
+ bool wash;
|
|
||||||
u8 dscp;
|
|
||||||
|
|
||||||
/* Tin selection: Default to diffserv-based selection, allow overriding
|
|
||||||
- * using firewall marks or skb->priority.
|
|
||||||
+ * using firewall marks or skb->priority. Call DSCP parsing early if
|
|
||||||
+ * wash is enabled, otherwise defer to below to skip unneeded parsing.
|
|
||||||
*/
|
|
||||||
- dscp = cake_handle_diffserv(skb,
|
|
||||||
- q->rate_flags & CAKE_FLAG_WASH);
|
|
||||||
mark = (skb->mark & q->fwmark_mask) >> q->fwmark_shft;
|
|
||||||
+ wash = !!(q->rate_flags & CAKE_FLAG_WASH);
|
|
||||||
+ if (wash)
|
|
||||||
+ dscp = cake_handle_diffserv(skb, wash);
|
|
||||||
|
|
||||||
if (q->tin_mode == CAKE_DIFFSERV_BESTEFFORT)
|
|
||||||
tin = 0;
|
|
||||||
@@ -1633,6 +1636,8 @@ static struct cake_tin_data *cake_select
|
|
||||||
tin = q->tin_order[TC_H_MIN(skb->priority) - 1];
|
|
||||||
|
|
||||||
else {
|
|
||||||
+ if (!wash)
|
|
||||||
+ dscp = cake_handle_diffserv(skb, wash);
|
|
||||||
tin = q->tin_index[dscp];
|
|
||||||
|
|
||||||
if (unlikely(tin >= q->tin_cnt))
|
|
|
@ -1,40 +0,0 @@
|
||||||
From 3f608f0c41360b11b04c763f348b712f651c8bac Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= <toke@redhat.com>
|
|
||||||
Date: Thu, 25 Jun 2020 22:12:09 +0200
|
|
||||||
Subject: [PATCH] sch_cake: fix a few style nits
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
I spotted a few nits when comparing the in-tree version of sch_cake with
|
|
||||||
the out-of-tree one: A redundant error variable declaration shadowing an
|
|
||||||
outer declaration, and an indentation alignment issue. Fix both of these.
|
|
||||||
|
|
||||||
Fixes: 046f6fd5daef ("sched: Add Common Applications Kept Enhanced (cake) qdisc")
|
|
||||||
Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
|
|
||||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
||||||
Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
|
|
||||||
---
|
|
||||||
net/sched/sch_cake.c | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
--- a/net/sched/sch_cake.c
|
|
||||||
+++ b/net/sched/sch_cake.c
|
|
||||||
@@ -2717,7 +2717,7 @@ static int cake_init(struct Qdisc *sch,
|
|
||||||
qdisc_watchdog_init(&q->watchdog, sch);
|
|
||||||
|
|
||||||
if (opt) {
|
|
||||||
- int err = cake_change(sch, opt, extack);
|
|
||||||
+ err = cake_change(sch, opt, extack);
|
|
||||||
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
@@ -3034,7 +3034,7 @@ static int cake_dump_class_stats(struct
|
|
||||||
PUT_STAT_S32(BLUE_TIMER_US,
|
|
||||||
ktime_to_us(
|
|
||||||
ktime_sub(now,
|
|
||||||
- flow->cvars.blue_timer)));
|
|
||||||
+ flow->cvars.blue_timer)));
|
|
||||||
}
|
|
||||||
if (flow->cvars.dropping) {
|
|
||||||
PUT_STAT_S32(DROP_NEXT_US,
|
|
|
@ -54,7 +54,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
#include <linux/mdio.h>
|
#include <linux/mdio.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
@@ -1183,6 +1184,65 @@ phy_standalone_show(struct device *dev,
|
@@ -1185,6 +1186,65 @@ phy_standalone_show(struct device *dev,
|
||||||
static DEVICE_ATTR_RO(phy_standalone);
|
static DEVICE_ATTR_RO(phy_standalone);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -120,7 +120,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
* phy_attach_direct - attach a network device to a given PHY device pointer
|
* phy_attach_direct - attach a network device to a given PHY device pointer
|
||||||
* @dev: network device to attach
|
* @dev: network device to attach
|
||||||
* @phydev: Pointer to phy_device to attach
|
* @phydev: Pointer to phy_device to attach
|
||||||
@@ -1259,6 +1319,9 @@ int phy_attach_direct(struct net_device
|
@@ -1261,6 +1321,9 @@ int phy_attach_direct(struct net_device
|
||||||
dev->phydev = phydev;
|
dev->phydev = phydev;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -130,7 +130,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
/* Some Ethernet drivers try to connect to a PHY device before
|
/* Some Ethernet drivers try to connect to a PHY device before
|
||||||
* calling register_netdevice() -> netdev_register_kobject() and
|
* calling register_netdevice() -> netdev_register_kobject() and
|
||||||
* does the dev->dev.kobj initialization. Here we only check for
|
* does the dev->dev.kobj initialization. Here we only check for
|
||||||
@@ -2287,6 +2350,9 @@ static int phy_remove(struct device *dev
|
@@ -2289,6 +2352,9 @@ static int phy_remove(struct device *dev
|
||||||
phydev->state = PHY_DOWN;
|
phydev->state = PHY_DOWN;
|
||||||
mutex_unlock(&phydev->lock);
|
mutex_unlock(&phydev->lock);
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
--- a/drivers/net/phy/phy_device.c
|
--- a/drivers/net/phy/phy_device.c
|
||||||
+++ b/drivers/net/phy/phy_device.c
|
+++ b/drivers/net/phy/phy_device.c
|
||||||
@@ -1679,6 +1679,40 @@ static int genphy_config_advert(struct p
|
@@ -1681,6 +1681,40 @@ static int genphy_config_advert(struct p
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -61,7 +61,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
* genphy_config_eee_advert - disable unwanted eee mode advertisement
|
* genphy_config_eee_advert - disable unwanted eee mode advertisement
|
||||||
* @phydev: target phy_device struct
|
* @phydev: target phy_device struct
|
||||||
*
|
*
|
||||||
@@ -1787,6 +1821,54 @@ int __genphy_config_aneg(struct phy_devi
|
@@ -1789,6 +1823,54 @@ int __genphy_config_aneg(struct phy_devi
|
||||||
EXPORT_SYMBOL(__genphy_config_aneg);
|
EXPORT_SYMBOL(__genphy_config_aneg);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -116,7 +116,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
* genphy_aneg_done - return auto-negotiation status
|
* genphy_aneg_done - return auto-negotiation status
|
||||||
* @phydev: target phy_device struct
|
* @phydev: target phy_device struct
|
||||||
*
|
*
|
||||||
@@ -1958,6 +2040,63 @@ int genphy_read_status(struct phy_device
|
@@ -1960,6 +2042,63 @@ int genphy_read_status(struct phy_device
|
||||||
EXPORT_SYMBOL(genphy_read_status);
|
EXPORT_SYMBOL(genphy_read_status);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -18,7 +18,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
|
|
||||||
--- a/drivers/i2c/busses/i2c-pxa.c
|
--- a/drivers/i2c/busses/i2c-pxa.c
|
||||||
+++ b/drivers/i2c/busses/i2c-pxa.c
|
+++ b/drivers/i2c/busses/i2c-pxa.c
|
||||||
@@ -675,16 +675,6 @@ static void i2c_pxa_slave_stop(struct px
|
@@ -674,16 +674,6 @@ static void i2c_pxa_slave_stop(struct px
|
||||||
* PXA I2C Master mode
|
* PXA I2C Master mode
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
static inline void i2c_pxa_start_message(struct pxa_i2c *i2c)
|
static inline void i2c_pxa_start_message(struct pxa_i2c *i2c)
|
||||||
{
|
{
|
||||||
u32 icr;
|
u32 icr;
|
||||||
@@ -692,8 +682,8 @@ static inline void i2c_pxa_start_message
|
@@ -691,8 +681,8 @@ static inline void i2c_pxa_start_message
|
||||||
/*
|
/*
|
||||||
* Step 1: target slave address into IDBR
|
* Step 1: target slave address into IDBR
|
||||||
*/
|
*/
|
||||||
|
@ -46,7 +46,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Step 2: initiate the write.
|
* Step 2: initiate the write.
|
||||||
@@ -1006,8 +996,8 @@ static void i2c_pxa_irq_txempty(struct p
|
@@ -1003,8 +993,8 @@ static void i2c_pxa_irq_txempty(struct p
|
||||||
/*
|
/*
|
||||||
* Write the next address.
|
* Write the next address.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -18,7 +18,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
|
|
||||||
--- a/drivers/i2c/busses/i2c-pxa.c
|
--- a/drivers/i2c/busses/i2c-pxa.c
|
||||||
+++ b/drivers/i2c/busses/i2c-pxa.c
|
+++ b/drivers/i2c/busses/i2c-pxa.c
|
||||||
@@ -327,7 +327,6 @@ static void i2c_pxa_scream_blue_murder(s
|
@@ -326,7 +326,6 @@ static void i2c_pxa_scream_blue_murder(s
|
||||||
#endif /* ifdef DEBUG / else */
|
#endif /* ifdef DEBUG / else */
|
||||||
|
|
||||||
static void i2c_pxa_master_complete(struct pxa_i2c *i2c, int ret);
|
static void i2c_pxa_master_complete(struct pxa_i2c *i2c, int ret);
|
||||||
|
@ -26,7 +26,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
|
|
||||||
static inline int i2c_pxa_is_slavemode(struct pxa_i2c *i2c)
|
static inline int i2c_pxa_is_slavemode(struct pxa_i2c *i2c)
|
||||||
{
|
{
|
||||||
@@ -700,34 +699,6 @@ static inline void i2c_pxa_stop_message(
|
@@ -697,34 +696,6 @@ static inline void i2c_pxa_stop_message(
|
||||||
writel(icr, _ICR(i2c));
|
writel(icr, _ICR(i2c));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
/*
|
/*
|
||||||
* PXA I2C send master code
|
* PXA I2C send master code
|
||||||
* 1. Load master code to IDBR and send it.
|
* 1. Load master code to IDBR and send it.
|
||||||
@@ -756,140 +727,6 @@ static int i2c_pxa_send_mastercode(struc
|
@@ -753,140 +724,6 @@ static int i2c_pxa_send_mastercode(struc
|
||||||
return (timeout == 0) ? I2C_RETRY : 0;
|
return (timeout == 0) ? I2C_RETRY : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,7 +202,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
/*
|
/*
|
||||||
* i2c_pxa_master_complete - complete the message and wake up.
|
* i2c_pxa_master_complete - complete the message and wake up.
|
||||||
*/
|
*/
|
||||||
@@ -1096,6 +933,71 @@ static irqreturn_t i2c_pxa_handler(int t
|
@@ -1093,6 +930,71 @@ static irqreturn_t i2c_pxa_handler(int t
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -274,7 +274,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
|
|
||||||
static int i2c_pxa_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
|
static int i2c_pxa_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
|
||||||
{
|
{
|
||||||
@@ -1129,6 +1031,103 @@ static const struct i2c_algorithm i2c_px
|
@@ -1126,6 +1028,103 @@ static const struct i2c_algorithm i2c_px
|
||||||
.functionality = i2c_pxa_functionality,
|
.functionality = i2c_pxa_functionality,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
#define ICR_START (1 << 0) /* start bit */
|
#define ICR_START (1 << 0) /* start bit */
|
||||||
#define ICR_STOP (1 << 1) /* stop bit */
|
#define ICR_STOP (1 << 1) /* stop bit */
|
||||||
#define ICR_ACKNAK (1 << 2) /* send ACK(0) or NAK(1) */
|
#define ICR_ACKNAK (1 << 2) /* send ACK(0) or NAK(1) */
|
||||||
@@ -335,7 +338,7 @@ static void i2c_pxa_abort(struct pxa_i2c
|
@@ -334,7 +337,7 @@ static void i2c_pxa_abort(struct pxa_i2c
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
unsigned long icr = readl(_ICR(i2c));
|
unsigned long icr = readl(_ICR(i2c));
|
||||||
|
|
||||||
icr &= ~ICR_START;
|
icr &= ~ICR_START;
|
||||||
@@ -390,7 +393,8 @@ static int i2c_pxa_wait_master(struct px
|
@@ -389,7 +392,8 @@ static int i2c_pxa_wait_master(struct px
|
||||||
* quick check of the i2c lines themselves to ensure they've
|
* quick check of the i2c lines themselves to ensure they've
|
||||||
* gone high...
|
* gone high...
|
||||||
*/
|
*/
|
||||||
|
@ -46,7 +46,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
if (i2c_debug > 0)
|
if (i2c_debug > 0)
|
||||||
dev_dbg(&i2c->adap.dev, "%s: done\n", __func__);
|
dev_dbg(&i2c->adap.dev, "%s: done\n", __func__);
|
||||||
return 1;
|
return 1;
|
||||||
@@ -575,7 +579,7 @@ static void i2c_pxa_slave_start(struct p
|
@@ -574,7 +578,7 @@ static void i2c_pxa_slave_start(struct p
|
||||||
timeout = 0x10000;
|
timeout = 0x10000;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
|
@ -55,7 +55,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
break;
|
break;
|
||||||
|
|
||||||
timeout--;
|
timeout--;
|
||||||
@@ -638,7 +642,7 @@ static void i2c_pxa_slave_start(struct p
|
@@ -637,7 +641,7 @@ static void i2c_pxa_slave_start(struct p
|
||||||
timeout = 0x10000;
|
timeout = 0x10000;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
|
|
|
@ -53,7 +53,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
},
|
},
|
||||||
[REGS_A3700] = {
|
[REGS_A3700] = {
|
||||||
.ibmr = 0x00,
|
.ibmr = 0x00,
|
||||||
@@ -1232,8 +1240,8 @@ static int i2c_pxa_probe(struct platform
|
@@ -1229,8 +1237,8 @@ static int i2c_pxa_probe(struct platform
|
||||||
i2c->reg_idbr = i2c->reg_base + pxa_reg_layout[i2c_type].idbr;
|
i2c->reg_idbr = i2c->reg_base + pxa_reg_layout[i2c_type].idbr;
|
||||||
i2c->reg_icr = i2c->reg_base + pxa_reg_layout[i2c_type].icr;
|
i2c->reg_icr = i2c->reg_base + pxa_reg_layout[i2c_type].icr;
|
||||||
i2c->reg_isr = i2c->reg_base + pxa_reg_layout[i2c_type].isr;
|
i2c->reg_isr = i2c->reg_base + pxa_reg_layout[i2c_type].isr;
|
||||||
|
|
|
@ -32,7 +32,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
static const struct platform_device_id i2c_pxa_id_table[] = {
|
static const struct platform_device_id i2c_pxa_id_table[] = {
|
||||||
{ "pxa2xx-i2c", REGS_PXA2XX },
|
{ "pxa2xx-i2c", REGS_PXA2XX },
|
||||||
{ "pxa3xx-pwri2c", REGS_PXA3XX },
|
{ "pxa3xx-pwri2c", REGS_PXA3XX },
|
||||||
@@ -1181,15 +1190,6 @@ static const struct i2c_algorithm i2c_px
|
@@ -1178,15 +1187,6 @@ static const struct i2c_algorithm i2c_px
|
||||||
.functionality = i2c_pxa_functionality,
|
.functionality = i2c_pxa_functionality,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,47 +0,0 @@
|
||||||
From: Russell King <rmk+kernel@armlinux.org.uk>
|
|
||||||
Bcc: linux@mail.armlinux.org.uk
|
|
||||||
Cc: linux-i2c@vger.kernel.org
|
|
||||||
Subject: [PATCH 10/17] i2c: pxa: fix i2c_pxa_scream_blue_murder() debug output
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Disposition: inline
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
Content-Type: text/plain; charset="utf-8"
|
|
||||||
|
|
||||||
The IRQ log output is supposed to appear on a single line. However,
|
|
||||||
commit 3a2dc1677b60 ("i2c: pxa: Update debug function to dump more info
|
|
||||||
on error") resulted in it being printed one-entry-per-line, which is
|
|
||||||
excessively long.
|
|
||||||
|
|
||||||
Fixing this is not a trivial matter; using pr_cont() doesn't work as
|
|
||||||
the previous dev_dbg() may not have been compiled in, or may be
|
|
||||||
dynamic.
|
|
||||||
|
|
||||||
Since the rest of this function output is at error level, and is also
|
|
||||||
debug output, promote this to error level as well to avoid this
|
|
||||||
problem.
|
|
||||||
|
|
||||||
Reduce the number of always zero prefix digits to save screen real-
|
|
||||||
estate.
|
|
||||||
|
|
||||||
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
|
||||||
---
|
|
||||||
drivers/i2c/busses/i2c-pxa.c | 7 +++----
|
|
||||||
1 file changed, 3 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/i2c/busses/i2c-pxa.c
|
|
||||||
+++ b/drivers/i2c/busses/i2c-pxa.c
|
|
||||||
@@ -364,11 +364,10 @@ static void i2c_pxa_scream_blue_murder(s
|
|
||||||
dev_err(dev, "IBMR: %08x IDBR: %08x ICR: %08x ISR: %08x\n",
|
|
||||||
readl(_IBMR(i2c)), readl(_IDBR(i2c)), readl(_ICR(i2c)),
|
|
||||||
readl(_ISR(i2c)));
|
|
||||||
- dev_dbg(dev, "log: ");
|
|
||||||
+ dev_err(dev, "log:");
|
|
||||||
for (i = 0; i < i2c->irqlogidx; i++)
|
|
||||||
- pr_debug("[%08x:%08x] ", i2c->isrlog[i], i2c->icrlog[i]);
|
|
||||||
-
|
|
||||||
- pr_debug("\n");
|
|
||||||
+ pr_cont(" [%03x:%05x]", i2c->isrlog[i], i2c->icrlog[i]);
|
|
||||||
+ pr_cont("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
#else /* ifdef DEBUG */
|
|
|
@ -18,7 +18,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
|
|
||||||
--- a/drivers/i2c/busses/i2c-pxa.c
|
--- a/drivers/i2c/busses/i2c-pxa.c
|
||||||
+++ b/drivers/i2c/busses/i2c-pxa.c
|
+++ b/drivers/i2c/busses/i2c-pxa.c
|
||||||
@@ -1061,18 +1061,20 @@ static int i2c_pxa_do_xfer(struct pxa_i2
|
@@ -1059,18 +1059,20 @@ static int i2c_pxa_do_xfer(struct pxa_i2
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
udelay(100);
|
udelay(100);
|
||||||
}
|
}
|
||||||
i2c_pxa_scream_blue_murder(i2c, "exhausted retries");
|
i2c_pxa_scream_blue_murder(i2c, "exhausted retries");
|
||||||
@@ -1082,6 +1084,14 @@ static int i2c_pxa_xfer(struct i2c_adapt
|
@@ -1080,6 +1082,14 @@ static int i2c_pxa_xfer(struct i2c_adapt
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
static u32 i2c_pxa_functionality(struct i2c_adapter *adap)
|
static u32 i2c_pxa_functionality(struct i2c_adapter *adap)
|
||||||
{
|
{
|
||||||
return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL |
|
return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL |
|
||||||
@@ -1165,7 +1175,6 @@ static int i2c_pxa_pio_xfer(struct i2c_a
|
@@ -1163,7 +1173,6 @@ static int i2c_pxa_pio_xfer(struct i2c_a
|
||||||
struct i2c_msg msgs[], int num)
|
struct i2c_msg msgs[], int num)
|
||||||
{
|
{
|
||||||
struct pxa_i2c *i2c = adap->algo_data;
|
struct pxa_i2c *i2c = adap->algo_data;
|
||||||
|
@ -67,7 +67,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
|
|
||||||
/* If the I2C controller is disabled we need to reset it
|
/* If the I2C controller is disabled we need to reset it
|
||||||
(probably due to a suspend/resume destroying state). We do
|
(probably due to a suspend/resume destroying state). We do
|
||||||
@@ -1174,20 +1183,7 @@ static int i2c_pxa_pio_xfer(struct i2c_a
|
@@ -1172,20 +1181,7 @@ static int i2c_pxa_pio_xfer(struct i2c_a
|
||||||
if (!(readl(_ICR(i2c)) & ICR_IUE))
|
if (!(readl(_ICR(i2c)) & ICR_IUE))
|
||||||
i2c_pxa_reset(i2c);
|
i2c_pxa_reset(i2c);
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
#define BUS_ERROR (-EREMOTEIO)
|
#define BUS_ERROR (-EREMOTEIO)
|
||||||
#define XFER_NAKED (-ECONNREFUSED)
|
#define XFER_NAKED (-ECONNREFUSED)
|
||||||
#define I2C_RETRY (-2000) /* an error has occurred retry transmit */
|
#define I2C_RETRY (-2000) /* an error has occurred retry transmit */
|
||||||
@@ -840,7 +841,7 @@ static void i2c_pxa_irq_txempty(struct p
|
@@ -838,7 +839,7 @@ static void i2c_pxa_irq_txempty(struct p
|
||||||
*/
|
*/
|
||||||
if (isr & ISR_ACKNAK) {
|
if (isr & ISR_ACKNAK) {
|
||||||
if (i2c->msg_ptr == 0 && i2c->msg_idx == 0)
|
if (i2c->msg_ptr == 0 && i2c->msg_idx == 0)
|
||||||
|
@ -42,7 +42,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
else
|
else
|
||||||
ret = XFER_NAKED;
|
ret = XFER_NAKED;
|
||||||
}
|
}
|
||||||
@@ -1068,16 +1069,19 @@ static int i2c_pxa_internal_xfer(struct
|
@@ -1066,16 +1067,19 @@ static int i2c_pxa_internal_xfer(struct
|
||||||
{
|
{
|
||||||
int ret, i;
|
int ret, i;
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
|
|
||||||
--- a/drivers/i2c/busses/i2c-pxa.c
|
--- a/drivers/i2c/busses/i2c-pxa.c
|
||||||
+++ b/drivers/i2c/busses/i2c-pxa.c
|
+++ b/drivers/i2c/busses/i2c-pxa.c
|
||||||
@@ -1054,7 +1054,7 @@ static int i2c_pxa_do_xfer(struct pxa_i2
|
@@ -1052,7 +1052,7 @@ static int i2c_pxa_do_xfer(struct pxa_i2
|
||||||
ret = i2c->msg_idx;
|
ret = i2c->msg_idx;
|
||||||
|
|
||||||
if (!timeout && i2c->msg_num) {
|
if (!timeout && i2c->msg_num) {
|
||||||
|
@ -25,7 +25,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
ret = I2C_RETRY;
|
ret = I2C_RETRY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1124,7 +1124,7 @@ static int i2c_pxa_pio_set_master(struct
|
@@ -1122,7 +1122,7 @@ static int i2c_pxa_pio_set_master(struct
|
||||||
if (timeout < 0) {
|
if (timeout < 0) {
|
||||||
show_state(i2c);
|
show_state(i2c);
|
||||||
dev_err(&i2c->adap.dev,
|
dev_err(&i2c->adap.dev,
|
||||||
|
@ -34,7 +34,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
return I2C_RETRY;
|
return I2C_RETRY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1168,7 +1168,7 @@ static int i2c_pxa_do_pio_xfer(struct px
|
@@ -1166,7 +1166,7 @@ static int i2c_pxa_do_pio_xfer(struct px
|
||||||
|
|
||||||
out:
|
out:
|
||||||
if (timeout == 0) {
|
if (timeout == 0) {
|
||||||
|
|
|
@ -20,7 +20,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||||
|
|
||||||
--- a/drivers/i2c/busses/i2c-pxa.c
|
--- a/drivers/i2c/busses/i2c-pxa.c
|
||||||
+++ b/drivers/i2c/busses/i2c-pxa.c
|
+++ b/drivers/i2c/busses/i2c-pxa.c
|
||||||
@@ -1116,10 +1116,8 @@ static int i2c_pxa_pio_set_master(struct
|
@@ -1114,10 +1114,8 @@ static int i2c_pxa_pio_set_master(struct
|
||||||
/*
|
/*
|
||||||
* Wait for the bus to become free.
|
* Wait for the bus to become free.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
From: Russell King <rmk+kernel@armlinux.org.uk>
|
|
||||||
Bcc: linux@mail.armlinux.org.uk
|
|
||||||
Subject: [PATCH 5/7] i2c: pxa: clear all master action bits in
|
|
||||||
i2c_pxa_stop_message()
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Disposition: inline
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
Content-Type: text/plain; charset="utf-8"
|
|
||||||
|
|
||||||
If we timeout during a message transfer, the control register may
|
|
||||||
contain bits that cause an action to be set. Read-modify-writing the
|
|
||||||
register leaving these bits set may trigger the hardware to attempt
|
|
||||||
one of these actions unintentionally.
|
|
||||||
|
|
||||||
Always clear these bits when cleaning up after a message or after
|
|
||||||
a timeout.
|
|
||||||
|
|
||||||
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
|
||||||
---
|
|
||||||
drivers/i2c/busses/i2c-pxa.c | 6 ++----
|
|
||||||
1 file changed, 2 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/i2c/busses/i2c-pxa.c
|
|
||||||
+++ b/drivers/i2c/busses/i2c-pxa.c
|
|
||||||
@@ -754,11 +754,9 @@ static inline void i2c_pxa_stop_message(
|
|
||||||
{
|
|
||||||
u32 icr;
|
|
||||||
|
|
||||||
- /*
|
|
||||||
- * Clear the STOP and ACK flags
|
|
||||||
- */
|
|
||||||
+ /* Clear the START, STOP, ACK, TB and MA flags */
|
|
||||||
icr = readl(_ICR(i2c));
|
|
||||||
- icr &= ~(ICR_STOP | ICR_ACKNAK);
|
|
||||||
+ icr &= ~(ICR_START | ICR_STOP | ICR_ACKNAK | ICR_TB | ICR_MA);
|
|
||||||
writel(icr, _ICR(i2c));
|
|
||||||
}
|
|
||||||
|
|
|
@ -106,7 +106,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
#include <linux/mutex.h>
|
#include <linux/mutex.h>
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
@@ -3124,3 +3125,5 @@ static int __init regmap_initcall(void)
|
@@ -3125,3 +3126,5 @@ static int __init regmap_initcall(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
postcore_initcall(regmap_initcall);
|
postcore_initcall(regmap_initcall);
|
||||||
|
|
|
@ -55,7 +55,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
depends on DEBUG_KERNEL && !CRYPTO_MANAGER_DISABLE_TESTS
|
depends on DEBUG_KERNEL && !CRYPTO_MANAGER_DISABLE_TESTS
|
||||||
--- a/crypto/algboss.c
|
--- a/crypto/algboss.c
|
||||||
+++ b/crypto/algboss.c
|
+++ b/crypto/algboss.c
|
||||||
@@ -242,8 +242,12 @@ static int cryptomgr_schedule_test(struc
|
@@ -240,8 +240,12 @@ static int cryptomgr_schedule_test(struc
|
||||||
type = alg->cra_flags;
|
type = alg->cra_flags;
|
||||||
|
|
||||||
/* Do not test internal algorithms. */
|
/* Do not test internal algorithms. */
|
||||||
|
|
|
@ -83,7 +83,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
EXPORT_SYMBOL(default_qdisc_ops);
|
EXPORT_SYMBOL(default_qdisc_ops);
|
||||||
|
|
||||||
/* Main transmission queue. */
|
/* Main transmission queue. */
|
||||||
@@ -1034,12 +1034,12 @@ static void attach_one_default_qdisc(str
|
@@ -1035,12 +1035,12 @@ static void attach_one_default_qdisc(str
|
||||||
void *_unused)
|
void *_unused)
|
||||||
{
|
{
|
||||||
struct Qdisc *qdisc;
|
struct Qdisc *qdisc;
|
||||||
|
|
|
@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
--- a/net/sched/sch_generic.c
|
--- a/net/sched/sch_generic.c
|
||||||
+++ b/net/sched/sch_generic.c
|
+++ b/net/sched/sch_generic.c
|
||||||
@@ -594,211 +594,6 @@ struct Qdisc_ops noqueue_qdisc_ops __rea
|
@@ -595,211 +595,6 @@ struct Qdisc_ops noqueue_qdisc_ops __rea
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
|
|
||||||
--- a/drivers/net/phy/phy_device.c
|
--- a/drivers/net/phy/phy_device.c
|
||||||
+++ b/drivers/net/phy/phy_device.c
|
+++ b/drivers/net/phy/phy_device.c
|
||||||
@@ -1909,6 +1909,9 @@ int genphy_update_link(struct phy_device
|
@@ -1911,6 +1911,9 @@ int genphy_update_link(struct phy_device
|
||||||
if (bmcr & BMCR_ANRESTART)
|
if (bmcr & BMCR_ANRESTART)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
|
|
|
@ -101,7 +101,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
help
|
help
|
||||||
--- a/net/core/dev.c
|
--- a/net/core/dev.c
|
||||||
+++ b/net/core/dev.c
|
+++ b/net/core/dev.c
|
||||||
@@ -3195,10 +3195,20 @@ static int xmit_one(struct sk_buff *skb,
|
@@ -3191,10 +3191,20 @@ static int xmit_one(struct sk_buff *skb,
|
||||||
if (dev_nit_active(dev))
|
if (dev_nit_active(dev))
|
||||||
dev_queue_xmit_nit(skb, dev);
|
dev_queue_xmit_nit(skb, dev);
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
struct dst_entry *__sk_dst_check(struct sock *sk, u32 cookie)
|
struct dst_entry *__sk_dst_check(struct sock *sk, u32 cookie)
|
||||||
{
|
{
|
||||||
struct dst_entry *dst = __sk_dst_get(sk);
|
struct dst_entry *dst = __sk_dst_get(sk);
|
||||||
@@ -1746,9 +1759,11 @@ static void __sk_free(struct sock *sk)
|
@@ -1747,9 +1760,11 @@ static void __sk_free(struct sock *sk)
|
||||||
if (likely(sk->sk_net_refcnt))
|
if (likely(sk->sk_net_refcnt))
|
||||||
sock_inuse_add(sock_net(sk), -1);
|
sock_inuse_add(sock_net(sk), -1);
|
||||||
|
|
||||||
|
|
|
@ -330,7 +330,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
--- a/net/core/sock.c
|
--- a/net/core/sock.c
|
||||||
+++ b/net/core/sock.c
|
+++ b/net/core/sock.c
|
||||||
@@ -3606,6 +3606,8 @@ static __net_initdata struct pernet_oper
|
@@ -3608,6 +3608,8 @@ static __net_initdata struct pernet_oper
|
||||||
|
|
||||||
static int __init proto_init(void)
|
static int __init proto_init(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -48,7 +48,7 @@ Signed-off-by: Florian Fainelli <florian@openwrt.org>
|
||||||
/*
|
/*
|
||||||
--- a/drivers/usb/host/ehci-platform.c
|
--- a/drivers/usb/host/ehci-platform.c
|
||||||
+++ b/drivers/usb/host/ehci-platform.c
|
+++ b/drivers/usb/host/ehci-platform.c
|
||||||
@@ -206,6 +206,8 @@ static int ehci_platform_probe(struct pl
|
@@ -319,6 +319,8 @@ static int ehci_platform_probe(struct pl
|
||||||
hcd->has_tt = 1;
|
hcd->has_tt = 1;
|
||||||
if (pdata->reset_on_resume)
|
if (pdata->reset_on_resume)
|
||||||
priv->reset_on_resume = true;
|
priv->reset_on_resume = true;
|
||||||
|
|
|
@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
__u16 tc_index; /* traffic control index */
|
__u16 tc_index; /* traffic control index */
|
||||||
--- a/net/core/dev.c
|
--- a/net/core/dev.c
|
||||||
+++ b/net/core/dev.c
|
+++ b/net/core/dev.c
|
||||||
@@ -5471,6 +5471,9 @@ static enum gro_result dev_gro_receive(s
|
@@ -5469,6 +5469,9 @@ static enum gro_result dev_gro_receive(s
|
||||||
int same_flow;
|
int same_flow;
|
||||||
int grow;
|
int grow;
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
if (netif_elide_gro(skb->dev))
|
if (netif_elide_gro(skb->dev))
|
||||||
goto normal;
|
goto normal;
|
||||||
|
|
||||||
@@ -7264,6 +7267,48 @@ static void __netdev_adjacent_dev_unlink
|
@@ -7262,6 +7265,48 @@ static void __netdev_adjacent_dev_unlink
|
||||||
&upper_dev->adj_list.lower);
|
&upper_dev->adj_list.lower);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
static int __netdev_upper_dev_link(struct net_device *dev,
|
static int __netdev_upper_dev_link(struct net_device *dev,
|
||||||
struct net_device *upper_dev, bool master,
|
struct net_device *upper_dev, bool master,
|
||||||
void *upper_priv, void *upper_info,
|
void *upper_priv, void *upper_info,
|
||||||
@@ -7314,6 +7359,7 @@ static int __netdev_upper_dev_link(struc
|
@@ -7312,6 +7357,7 @@ static int __netdev_upper_dev_link(struc
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -99,7 +99,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
|
ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
|
||||||
&changeupper_info.info);
|
&changeupper_info.info);
|
||||||
ret = notifier_to_errno(ret);
|
ret = notifier_to_errno(ret);
|
||||||
@@ -7407,6 +7453,7 @@ void netdev_upper_dev_unlink(struct net_
|
@@ -7405,6 +7451,7 @@ void netdev_upper_dev_unlink(struct net_
|
||||||
|
|
||||||
__netdev_adjacent_dev_unlink_neighbour(dev, upper_dev);
|
__netdev_adjacent_dev_unlink_neighbour(dev, upper_dev);
|
||||||
|
|
||||||
|
@ -107,7 +107,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
|
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
|
||||||
&changeupper_info.info);
|
&changeupper_info.info);
|
||||||
|
|
||||||
@@ -8137,6 +8184,7 @@ int dev_set_mac_address(struct net_devic
|
@@ -8135,6 +8182,7 @@ int dev_set_mac_address(struct net_devic
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
dev->addr_assign_type = NET_ADDR_SET;
|
dev->addr_assign_type = NET_ADDR_SET;
|
||||||
|
|
|
@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
|
|
||||||
--- a/drivers/net/phy/phy_device.c
|
--- a/drivers/net/phy/phy_device.c
|
||||||
+++ b/drivers/net/phy/phy_device.c
|
+++ b/drivers/net/phy/phy_device.c
|
||||||
@@ -1463,6 +1463,9 @@ void phy_detach(struct phy_device *phyde
|
@@ -1465,6 +1465,9 @@ void phy_detach(struct phy_device *phyde
|
||||||
struct module *ndev_owner = NULL;
|
struct module *ndev_owner = NULL;
|
||||||
struct mii_bus *bus;
|
struct mii_bus *bus;
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ ChangeLog v1->v2:
|
||||||
|
|
||||||
#include "libata.h"
|
#include "libata.h"
|
||||||
#include "libata-transport.h"
|
#include "libata-transport.h"
|
||||||
@@ -4570,6 +4571,34 @@ int ata_scsi_add_hosts(struct ata_host *
|
@@ -4573,6 +4574,34 @@ int ata_scsi_add_hosts(struct ata_host *
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ ChangeLog v1->v2:
|
||||||
void ata_scsi_scan_host(struct ata_port *ap, int sync)
|
void ata_scsi_scan_host(struct ata_port *ap, int sync)
|
||||||
{
|
{
|
||||||
int tries = 5;
|
int tries = 5;
|
||||||
@@ -4595,6 +4624,7 @@ void ata_scsi_scan_host(struct ata_port
|
@@ -4598,6 +4627,7 @@ void ata_scsi_scan_host(struct ata_port
|
||||||
NULL);
|
NULL);
|
||||||
if (!IS_ERR(sdev)) {
|
if (!IS_ERR(sdev)) {
|
||||||
dev->sdev = sdev;
|
dev->sdev = sdev;
|
||||||
|
|
|
@ -45,7 +45,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||||
depends on ACPI
|
depends on ACPI
|
||||||
--- a/drivers/ata/libata-core.c
|
--- a/drivers/ata/libata-core.c
|
||||||
+++ b/drivers/ata/libata-core.c
|
+++ b/drivers/ata/libata-core.c
|
||||||
@@ -715,6 +715,19 @@ u64 ata_tf_read_block(const struct ata_t
|
@@ -714,6 +714,19 @@ u64 ata_tf_read_block(const struct ata_t
|
||||||
return block;
|
return block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||||
/**
|
/**
|
||||||
* ata_build_rw_tf - Build ATA taskfile for given read/write request
|
* ata_build_rw_tf - Build ATA taskfile for given read/write request
|
||||||
* @tf: Target ATA taskfile
|
* @tf: Target ATA taskfile
|
||||||
@@ -5116,6 +5129,9 @@ struct ata_queued_cmd *ata_qc_new_init(s
|
@@ -5115,6 +5128,9 @@ struct ata_queued_cmd *ata_qc_new_init(s
|
||||||
if (tag < 0)
|
if (tag < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -75,7 +75,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||||
|
|
||||||
qc = __ata_qc_from_tag(ap, tag);
|
qc = __ata_qc_from_tag(ap, tag);
|
||||||
qc->tag = qc->hw_tag = tag;
|
qc->tag = qc->hw_tag = tag;
|
||||||
@@ -6050,6 +6066,9 @@ struct ata_port *ata_port_alloc(struct a
|
@@ -6049,6 +6065,9 @@ struct ata_port *ata_port_alloc(struct a
|
||||||
ap->stats.unhandled_irq = 1;
|
ap->stats.unhandled_irq = 1;
|
||||||
ap->stats.idle_irq = 1;
|
ap->stats.idle_irq = 1;
|
||||||
#endif
|
#endif
|
||||||
|
@ -85,7 +85,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||||
ata_sff_port_init(ap);
|
ata_sff_port_init(ap);
|
||||||
|
|
||||||
return ap;
|
return ap;
|
||||||
@@ -6085,6 +6104,12 @@ static void ata_host_release(struct kref
|
@@ -6084,6 +6103,12 @@ static void ata_host_release(struct kref
|
||||||
|
|
||||||
kfree(ap->pmp_link);
|
kfree(ap->pmp_link);
|
||||||
kfree(ap->slave_link);
|
kfree(ap->slave_link);
|
||||||
|
@ -98,7 +98,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||||
kfree(ap);
|
kfree(ap);
|
||||||
host->ports[i] = NULL;
|
host->ports[i] = NULL;
|
||||||
}
|
}
|
||||||
@@ -6548,7 +6573,23 @@ int ata_host_register(struct ata_host *h
|
@@ -6547,7 +6572,23 @@ int ata_host_register(struct ata_host *h
|
||||||
host->ports[i]->print_id = atomic_inc_return(&ata_print_id);
|
host->ports[i]->print_id = atomic_inc_return(&ata_print_id);
|
||||||
host->ports[i]->local_port_no = i + 1;
|
host->ports[i]->local_port_no = i + 1;
|
||||||
}
|
}
|
||||||
|
@ -124,17 +124,17 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||||
rc = ata_tport_add(host->dev,host->ports[i]);
|
rc = ata_tport_add(host->dev,host->ports[i]);
|
||||||
--- a/include/linux/libata.h
|
--- a/include/linux/libata.h
|
||||||
+++ b/include/linux/libata.h
|
+++ b/include/linux/libata.h
|
||||||
@@ -22,6 +22,9 @@
|
@@ -23,6 +23,9 @@
|
||||||
#include <linux/acpi.h>
|
|
||||||
#include <linux/cdrom.h>
|
#include <linux/cdrom.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
|
#include <linux/async.h>
|
||||||
+#ifdef CONFIG_ATA_LEDS
|
+#ifdef CONFIG_ATA_LEDS
|
||||||
+#include <linux/leds.h>
|
+#include <linux/leds.h>
|
||||||
+#endif
|
+#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Define if arch has non-standard setup. This is a _PCI_ standard
|
* Define if arch has non-standard setup. This is a _PCI_ standard
|
||||||
@@ -876,6 +879,12 @@ struct ata_port {
|
@@ -879,6 +882,12 @@ struct ata_port {
|
||||||
#ifdef CONFIG_ATA_ACPI
|
#ifdef CONFIG_ATA_ACPI
|
||||||
struct ata_acpi_gtm __acpi_init_gtm; /* use ata_acpi_init_gtm() */
|
struct ata_acpi_gtm __acpi_init_gtm; /* use ata_acpi_init_gtm() */
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/drivers/firmware/qcom_scm.c
|
--- a/drivers/firmware/qcom_scm.c
|
||||||
+++ b/drivers/firmware/qcom_scm.c
|
+++ b/drivers/firmware/qcom_scm.c
|
||||||
@@ -601,6 +601,7 @@ static const struct of_device_id qcom_sc
|
@@ -598,6 +598,7 @@ static const struct of_device_id qcom_sc
|
||||||
SCM_HAS_BUS_CLK)
|
SCM_HAS_BUS_CLK)
|
||||||
},
|
},
|
||||||
{ .compatible = "qcom,scm-ipq4019" },
|
{ .compatible = "qcom,scm-ipq4019" },
|
||||||
|
|
|
@ -74,7 +74,7 @@ Signed-off-by: Alex Marginean <alexandru.marginean@nxp.com>
|
||||||
- enetc_wr_reg(v->rbier, 0);
|
- enetc_wr_reg(v->rbier, 0);
|
||||||
+ enetc_wr_reg_hot(v->rbier, 0);
|
+ enetc_wr_reg_hot(v->rbier, 0);
|
||||||
|
|
||||||
for_each_set_bit(i, &v->tx_rings_map, v->count_tx_rings)
|
for_each_set_bit(i, &v->tx_rings_map, ENETC_MAX_NUM_TXQS)
|
||||||
- enetc_wr_reg(v->tbier_base + ENETC_BDR_OFF(i), 0);
|
- enetc_wr_reg(v->tbier_base + ENETC_BDR_OFF(i), 0);
|
||||||
+ enetc_wr_reg_hot(v->tbier_base + ENETC_BDR_OFF(i), 0);
|
+ enetc_wr_reg_hot(v->tbier_base + ENETC_BDR_OFF(i), 0);
|
||||||
+
|
+
|
||||||
|
@ -103,7 +103,7 @@ Signed-off-by: Alex Marginean <alexandru.marginean@nxp.com>
|
||||||
- enetc_wr_reg(v->rbier, ENETC_RBIER_RXTIE);
|
- enetc_wr_reg(v->rbier, ENETC_RBIER_RXTIE);
|
||||||
+ enetc_wr_reg_hot(v->rbier, ENETC_RBIER_RXTIE);
|
+ enetc_wr_reg_hot(v->rbier, ENETC_RBIER_RXTIE);
|
||||||
|
|
||||||
for_each_set_bit(i, &v->tx_rings_map, v->count_tx_rings)
|
for_each_set_bit(i, &v->tx_rings_map, ENETC_MAX_NUM_TXQS)
|
||||||
- enetc_wr_reg(v->tbier_base + ENETC_BDR_OFF(i),
|
- enetc_wr_reg(v->tbier_base + ENETC_BDR_OFF(i),
|
||||||
- ENETC_TBIER_TXTIE);
|
- ENETC_TBIER_TXTIE);
|
||||||
+ enetc_wr_reg_hot(v->tbier_base + ENETC_BDR_OFF(i),
|
+ enetc_wr_reg_hot(v->tbier_base + ENETC_BDR_OFF(i),
|
||||||
|
|
|
@ -114,7 +114,7 @@ Signed-off-by: Claudiu Manoil <claudiu.manoil@nxp.com>
|
||||||
/* disable interrupts */
|
/* disable interrupts */
|
||||||
enetc_wr_reg_hot(v->rbier, 0);
|
enetc_wr_reg_hot(v->rbier, 0);
|
||||||
@@ -273,7 +262,7 @@ static irqreturn_t enetc_msix(int irq, v
|
@@ -273,7 +262,7 @@ static irqreturn_t enetc_msix(int irq, v
|
||||||
for_each_set_bit(i, &v->tx_rings_map, v->count_tx_rings)
|
for_each_set_bit(i, &v->tx_rings_map, ENETC_MAX_NUM_TXQS)
|
||||||
enetc_wr_reg_hot(v->tbier_base + ENETC_BDR_OFF(i), 0);
|
enetc_wr_reg_hot(v->tbier_base + ENETC_BDR_OFF(i), 0);
|
||||||
|
|
||||||
- spin_unlock_irqrestore(lock, flags);
|
- spin_unlock_irqrestore(lock, flags);
|
||||||
|
|
|
@ -152,7 +152,7 @@ This reverts commit cf9441adb1a35506d7606866c382b9d8614169b5.
|
||||||
dev_name(&pdev->dev), asrc_priv);
|
dev_name(&pdev->dev), asrc_priv);
|
||||||
--- a/sound/soc/fsl/fsl_esai.c
|
--- a/sound/soc/fsl/fsl_esai.c
|
||||||
+++ b/sound/soc/fsl/fsl_esai.c
|
+++ b/sound/soc/fsl/fsl_esai.c
|
||||||
@@ -973,8 +973,10 @@ static int fsl_esai_probe(struct platfor
|
@@ -977,8 +977,10 @@ static int fsl_esai_probe(struct platfor
|
||||||
PTR_ERR(esai_priv->spbaclk));
|
PTR_ERR(esai_priv->spbaclk));
|
||||||
|
|
||||||
irq = platform_get_irq(pdev, 0);
|
irq = platform_get_irq(pdev, 0);
|
||||||
|
@ -194,7 +194,7 @@ This reverts commit cf9441adb1a35506d7606866c382b9d8614169b5.
|
||||||
dev_name(&pdev->dev), spdif_priv);
|
dev_name(&pdev->dev), spdif_priv);
|
||||||
--- a/sound/soc/fsl/fsl_ssi.c
|
--- a/sound/soc/fsl/fsl_ssi.c
|
||||||
+++ b/sound/soc/fsl/fsl_ssi.c
|
+++ b/sound/soc/fsl/fsl_ssi.c
|
||||||
@@ -1510,8 +1510,10 @@ static int fsl_ssi_probe(struct platform
|
@@ -1515,8 +1515,10 @@ static int fsl_ssi_probe(struct platform
|
||||||
}
|
}
|
||||||
|
|
||||||
ssi->irq = platform_get_irq(pdev, 0);
|
ssi->irq = platform_get_irq(pdev, 0);
|
||||||
|
|
|
@ -39,7 +39,7 @@ Signed-off-by: Fugang Duan <fugang.duan@nxp.com>
|
||||||
|
|
||||||
raw_spin_unlock_irqrestore(&pp->lock, flags);
|
raw_spin_unlock_irqrestore(&pp->lock, flags);
|
||||||
}
|
}
|
||||||
@@ -657,15 +657,10 @@ void dw_pcie_setup_rc(struct pcie_port *
|
@@ -659,15 +659,10 @@ void dw_pcie_setup_rc(struct pcie_port *
|
||||||
num_ctrls = pp->num_vectors / MAX_MSI_IRQS_PER_CTRL;
|
num_ctrls = pp->num_vectors / MAX_MSI_IRQS_PER_CTRL;
|
||||||
|
|
||||||
/* Initialize IRQ Status array */
|
/* Initialize IRQ Status array */
|
||||||
|
|
|
@ -17,7 +17,7 @@ Acked-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
|
||||||
|
|
||||||
--- a/drivers/pci/controller/dwc/pcie-designware-host.c
|
--- a/drivers/pci/controller/dwc/pcie-designware-host.c
|
||||||
+++ b/drivers/pci/controller/dwc/pcie-designware-host.c
|
+++ b/drivers/pci/controller/dwc/pcie-designware-host.c
|
||||||
@@ -654,6 +654,12 @@ void dw_pcie_setup_rc(struct pcie_port *
|
@@ -656,6 +656,12 @@ void dw_pcie_setup_rc(struct pcie_port *
|
||||||
dw_pcie_setup(pci);
|
dw_pcie_setup(pci);
|
||||||
|
|
||||||
if (!pp->ops->msi_host_init) {
|
if (!pp->ops->msi_host_init) {
|
||||||
|
|
|
@ -54,7 +54,7 @@ Signed-off-by: Peter Chen <peter.chen@nxp.com>
|
||||||
* All 3.1 IP version constants are greater than the 3.0 IP
|
* All 3.1 IP version constants are greater than the 3.0 IP
|
||||||
--- a/drivers/usb/dwc3/gadget.c
|
--- a/drivers/usb/dwc3/gadget.c
|
||||||
+++ b/drivers/usb/dwc3/gadget.c
|
+++ b/drivers/usb/dwc3/gadget.c
|
||||||
@@ -3389,6 +3389,10 @@ int dwc3_gadget_init(struct dwc3 *dwc)
|
@@ -3427,6 +3427,10 @@ int dwc3_gadget_init(struct dwc3 *dwc)
|
||||||
dwc->gadget.sg_supported = true;
|
dwc->gadget.sg_supported = true;
|
||||||
dwc->gadget.name = "dwc3-gadget";
|
dwc->gadget.name = "dwc3-gadget";
|
||||||
dwc->gadget.lpm_capable = true;
|
dwc->gadget.lpm_capable = true;
|
||||||
|
|
|
@ -174,7 +174,7 @@ Signed-off-by: Peter Chen <peter.chen@nxp.com>
|
||||||
* bursts that are required to move all packets in this TD. Only SuperSpeed
|
* bursts that are required to move all packets in this TD. Only SuperSpeed
|
||||||
--- a/drivers/usb/host/xhci.c
|
--- a/drivers/usb/host/xhci.c
|
||||||
+++ b/drivers/usb/host/xhci.c
|
+++ b/drivers/usb/host/xhci.c
|
||||||
@@ -5354,6 +5354,7 @@ static const struct hc_driver xhci_hc_dr
|
@@ -5361,6 +5361,7 @@ static const struct hc_driver xhci_hc_dr
|
||||||
.disable_usb3_lpm_timeout = xhci_disable_usb3_lpm_timeout,
|
.disable_usb3_lpm_timeout = xhci_disable_usb3_lpm_timeout,
|
||||||
.find_raw_port_number = xhci_find_raw_port_number,
|
.find_raw_port_number = xhci_find_raw_port_number,
|
||||||
.clear_tt_buffer_complete = xhci_clear_tt_buffer_complete,
|
.clear_tt_buffer_complete = xhci_clear_tt_buffer_complete,
|
||||||
|
|
|
@ -24,7 +24,7 @@ Signed-off-by: Peter Chen <peter.chen@nxp.com>
|
||||||
|
|
||||||
--- a/drivers/usb/host/xhci.c
|
--- a/drivers/usb/host/xhci.c
|
||||||
+++ b/drivers/usb/host/xhci.c
|
+++ b/drivers/usb/host/xhci.c
|
||||||
@@ -5371,6 +5371,8 @@ void xhci_init_driver(struct hc_driver *
|
@@ -5378,6 +5378,8 @@ void xhci_init_driver(struct hc_driver *
|
||||||
drv->reset = over->reset;
|
drv->reset = over->reset;
|
||||||
if (over->start)
|
if (over->start)
|
||||||
drv->start = over->start;
|
drv->start = over->start;
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
},
|
},
|
||||||
[PORT_NPCM] = {
|
[PORT_NPCM] = {
|
||||||
.name = "Nuvoton 16550",
|
.name = "Nuvoton 16550",
|
||||||
@@ -2559,6 +2559,11 @@ serial8250_do_set_termios(struct uart_po
|
@@ -2561,6 +2561,11 @@ serial8250_do_set_termios(struct uart_po
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
unsigned int baud, quot, frac = 0;
|
unsigned int baud, quot, frac = 0;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/arch/powerpc/Kconfig
|
--- a/arch/powerpc/Kconfig
|
||||||
+++ b/arch/powerpc/Kconfig
|
+++ b/arch/powerpc/Kconfig
|
||||||
@@ -883,6 +883,14 @@ config CMDLINE_FORCE
|
@@ -884,6 +884,14 @@ config CMDLINE_FORCE
|
||||||
This is useful if you cannot or don't want to change the
|
This is useful if you cannot or don't want to change the
|
||||||
command-line options your boot loader passes to the kernel.
|
command-line options your boot loader passes to the kernel.
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/drivers/ata/libata-core.c
|
--- a/drivers/ata/libata-core.c
|
||||||
+++ b/drivers/ata/libata-core.c
|
+++ b/drivers/ata/libata-core.c
|
||||||
@@ -1584,6 +1584,14 @@ unsigned ata_exec_internal_sg(struct ata
|
@@ -1583,6 +1583,14 @@ unsigned ata_exec_internal_sg(struct ata
|
||||||
return AC_ERR_SYSTEM;
|
return AC_ERR_SYSTEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
/* initialize internal qc */
|
/* initialize internal qc */
|
||||||
qc = __ata_qc_from_tag(ap, ATA_TAG_INTERNAL);
|
qc = __ata_qc_from_tag(ap, ATA_TAG_INTERNAL);
|
||||||
|
|
||||||
@@ -5123,6 +5131,9 @@ struct ata_queued_cmd *ata_qc_new_init(s
|
@@ -5122,6 +5130,9 @@ struct ata_queued_cmd *ata_qc_new_init(s
|
||||||
if (unlikely(ap->pflags & ATA_PFLAG_FROZEN))
|
if (unlikely(ap->pflags & ATA_PFLAG_FROZEN))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@
|
||||||
/* libsas case */
|
/* libsas case */
|
||||||
if (ap->flags & ATA_FLAG_SAS_HOST) {
|
if (ap->flags & ATA_FLAG_SAS_HOST) {
|
||||||
tag = ata_sas_allocate_tag(ap);
|
tag = ata_sas_allocate_tag(ap);
|
||||||
@@ -5168,6 +5179,8 @@ void ata_qc_free(struct ata_queued_cmd *
|
@@ -5167,6 +5178,8 @@ void ata_qc_free(struct ata_queued_cmd *
|
||||||
qc->tag = ATA_TAG_POISON;
|
qc->tag = ATA_TAG_POISON;
|
||||||
if (ap->flags & ATA_FLAG_SAS_HOST)
|
if (ap->flags & ATA_FLAG_SAS_HOST)
|
||||||
ata_sas_free_tag(tag, ap);
|
ata_sas_free_tag(tag, ap);
|
||||||
|
@ -36,7 +36,7 @@
|
||||||
|
|
||||||
--- a/include/linux/libata.h
|
--- a/include/linux/libata.h
|
||||||
+++ b/include/linux/libata.h
|
+++ b/include/linux/libata.h
|
||||||
@@ -905,6 +905,8 @@ struct ata_port_operations {
|
@@ -908,6 +908,8 @@ struct ata_port_operations {
|
||||||
void (*qc_prep)(struct ata_queued_cmd *qc);
|
void (*qc_prep)(struct ata_queued_cmd *qc);
|
||||||
unsigned int (*qc_issue)(struct ata_queued_cmd *qc);
|
unsigned int (*qc_issue)(struct ata_queued_cmd *qc);
|
||||||
bool (*qc_fill_rtf)(struct ata_queued_cmd *qc);
|
bool (*qc_fill_rtf)(struct ata_queued_cmd *qc);
|
||||||
|
@ -45,7 +45,7 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Configuration and exception handling
|
* Configuration and exception handling
|
||||||
@@ -995,6 +997,9 @@ struct ata_port_operations {
|
@@ -998,6 +1000,9 @@ struct ata_port_operations {
|
||||||
void (*phy_reset)(struct ata_port *ap);
|
void (*phy_reset)(struct ata_port *ap);
|
||||||
void (*eng_timeout)(struct ata_port *ap);
|
void (*eng_timeout)(struct ata_port *ap);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue