LINUX_RELEASE?=1
LINUX_VERSION-3.18 = .43
-LINUX_VERSION-4.4 = .167
+LINUX_VERSION-4.4 = .182
LINUX_KERNEL_HASH-3.18.43 = 1236e8123a6ce537d5029232560966feed054ae31776fe8481dd7d18cdd5492c
-LINUX_KERNEL_HASH-4.4.167 = 33ca4c28a565404fc7b07f9d6b734c291035f7e7e46c280131494b04e3953edf
+LINUX_KERNEL_HASH-4.4.182 = c409d88f61cd9a37cbba36d5d9c8162263eb1e5c9380efaf880a3ec10cd88527
ifdef KERNEL_PATCHVER
LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER)))
--- /dev/null
+--- a/backport-include/linux/mm.h
++++ b/backport-include/linux/mm.h
+@@ -39,8 +39,20 @@ static inline
+ long backport_get_user_pages_locked(unsigned long start, unsigned long nr_pages,
+ int write, int force, struct page **pages, int *locked)
+ {
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,4,168))
+ return get_user_pages_locked(current, current->mm, start, nr_pages,
+ write, force, pages, locked);
++#else
++ int flags = 0;
++
++ if (write)
++ flags |= FOLL_WRITE;
++ if (force)
++ flags |= FOLL_FORCE;
++
++ return get_user_pages_locked(current, current->mm, start, nr_pages,
++ flags, pages, locked);
++#endif
+ }
+ #define get_user_pages_locked LINUX_BACKPORT(get_user_pages_locked)
+
+@@ -48,8 +60,20 @@ static inline
+ long backport_get_user_pages_unlocked(unsigned long start, unsigned long nr_pages,
+ int write, int force, struct page **pages)
+ {
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,4,168))
+ return get_user_pages_unlocked(current, current->mm, start, nr_pages,
+ write, force, pages);
++#else
++ int flags = 0;
++
++ if (write)
++ flags |= FOLL_WRITE;
++ if (force)
++ flags |= FOLL_FORCE;
++
++ return get_user_pages_unlocked(current, current->mm, start, nr_pages,
++ pages, flags);
++#endif
+ }
+ #define get_user_pages_unlocked LINUX_BACKPORT(get_user_pages_unlocked)
+ #endif
+@@ -60,8 +84,20 @@ long backport_get_user_pages(unsigned lo
+ int write, int force, struct page **pages,
+ struct vm_area_struct **vmas)
+ {
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,4,168))
+ return get_user_pages(current, current->mm, start, nr_pages,
+ write, force, pages, vmas);
++#else
++ int flags = 0;
++
++ if (write)
++ flags |= FOLL_WRITE;
++ if (force)
++ flags |= FOLL_FORCE;
++
++ return get_user_pages(current, current->mm, start, nr_pages,
++ flags, pages, vmas);
++#endif
+ }
+ #define get_user_pages LINUX_BACKPORT(get_user_pages)
+ #endif
#define PPC4XX_SEC_VERSION_STR "0.5"
-@@ -1221,6 +1222,7 @@ static int crypto4xx_probe(struct platfo
+@@ -1230,6 +1231,7 @@ static int crypto4xx_probe(struct platfo
if (rc)
goto err_start_dev;
return 0;
err_start_dev:
-@@ -1247,6 +1249,8 @@ static int crypto4xx_remove(struct platf
+@@ -1256,6 +1258,8 @@ static int crypto4xx_remove(struct platf
struct device *dev = &ofdev->dev;
struct crypto4xx_core_device *core_dev = dev_get_drvdata(dev);
free_irq(core_dev->irq, dev);
irq_dispose_mapping(core_dev->irq);
-@@ -1267,7 +1271,7 @@ MODULE_DEVICE_TABLE(of, crypto4xx_match)
+@@ -1276,7 +1280,7 @@ MODULE_DEVICE_TABLE(of, crypto4xx_match)
static struct platform_driver crypto4xx_driver = {
.driver = {
.of_match_table = crypto4xx_match,
},
.probe = crypto4xx_probe,
-@@ -1279,4 +1283,3 @@ module_platform_driver(crypto4xx_driver)
+@@ -1288,4 +1292,3 @@ module_platform_driver(crypto4xx_driver)
MODULE_LICENSE("GPL");
MODULE_AUTHOR("James Hsiao <jhsiao@amcc.com>");
MODULE_DESCRIPTION("Driver for AMCC PPC4xx crypto accelerator");
#include <linux/pm_runtime.h>
#include <linux/platform_device.h>
-@@ -4945,6 +4946,9 @@ void ata_qc_complete(struct ata_queued_c
+@@ -4946,6 +4947,9 @@ void ata_qc_complete(struct ata_queued_c
{
struct ata_port *ap = qc->ap;
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
-@@ -388,10 +388,14 @@ static int xhci_try_enable_msi(struct us
+@@ -386,10 +386,14 @@ static int xhci_try_enable_msi(struct us
free_irq(hcd->irq, hcd);
hcd->irq = 0;
/* hcd->irq is 0, we have MSI */
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
-@@ -1656,6 +1656,7 @@ struct xhci_hcd {
+@@ -1657,6 +1657,7 @@ struct xhci_hcd {
/* support xHCI 0.96 spec USB2 software LPM */
unsigned sw_lpm_support:1;
/* support xHCI 1.0 spec USB2 hardware LPM */
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
-@@ -1118,6 +1118,9 @@ config MIPS_MSC
+@@ -1121,6 +1121,9 @@ config MIPS_MSC
config MIPS_NILE4
bool
*/
--- a/net/ipv6/datagram.c
+++ b/net/ipv6/datagram.c
-@@ -433,7 +433,7 @@ int ipv6_recv_error(struct sock *sk, str
+@@ -434,7 +434,7 @@ int ipv6_recv_error(struct sock *sk, str
ipv6_iface_scope_id(&sin->sin6_addr,
IP6CB(skb)->iif);
} else {
&sin->sin6_addr);
sin->sin6_scope_id = 0;
}
-@@ -773,12 +773,12 @@ int ip6_datagram_send_ctl(struct net *ne
+@@ -772,12 +772,12 @@ int ip6_datagram_send_ctl(struct net *ne
}
if (fl6->flowlabel&IPV6_FLOWINFO_MASK) {
#define IP6_MF 0x0001
#define IP6_OFFSET 0xFFF8
-@@ -418,8 +418,8 @@ static inline void __ipv6_addr_set_half(
+@@ -411,8 +411,8 @@ static inline void __ipv6_addr_set_half(
}
#endif
#endif
}
static inline void ipv6_addr_set(struct in6_addr *addr,
-@@ -478,6 +478,8 @@ static inline bool ipv6_prefix_equal(con
+@@ -471,6 +471,8 @@ static inline bool ipv6_prefix_equal(con
const __be32 *a1 = addr1->s6_addr32;
const __be32 *a2 = addr2->s6_addr32;
unsigned int pdw, pbi;
/* check complete u32 in prefix */
pdw = prefixlen >> 5;
-@@ -486,7 +488,9 @@ static inline bool ipv6_prefix_equal(con
+@@ -479,7 +481,9 @@ static inline bool ipv6_prefix_equal(con
/* check incomplete u32 in prefix */
pbi = prefixlen & 0x1f;
return false;
return true;
-@@ -630,13 +634,13 @@ static inline void ipv6_addr_set_v4mappe
+@@ -608,13 +612,13 @@ static inline void ipv6_addr_set_v4mappe
*/
static inline int __ipv6_addr_diff32(const void *token1, const void *token2, int addrlen)
{
if (xb)
return i * 32 + 31 - __fls(ntohl(xb));
}
-@@ -805,17 +809,18 @@ static inline int ip6_default_np_autolab
+@@ -783,17 +787,18 @@ static inline int ip6_default_np_autolab
static inline void ip6_flow_hdr(struct ipv6hdr *hdr, unsigned int tclass,
__be32 flowlabel)
{
static struct fib6_node *node_alloc(void)
--- a/net/netfilter/nf_conntrack_proto_tcp.c
+++ b/net/netfilter/nf_conntrack_proto_tcp.c
-@@ -456,7 +456,7 @@ static void tcp_sack(const struct sk_buf
+@@ -458,7 +458,7 @@ static void tcp_sack(const struct sk_buf
/* Fast path for timestamp-only option */
if (length == TCPOLEN_TSTAMP_ALIGNED
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
-@@ -3836,14 +3836,16 @@ static bool tcp_parse_aligned_timestamp(
+@@ -3852,14 +3852,16 @@ static bool tcp_parse_aligned_timestamp(
{
const __be32 *ptr = (const __be32 *)(th + 1);
/* called during probe() after chip reset completes */
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
-@@ -152,6 +152,49 @@ static int xhci_start(struct xhci_hcd *x
+@@ -150,6 +150,49 @@ static int xhci_start(struct xhci_hcd *x
return ret;
}
/*
* Reset a halted HC.
*
-@@ -568,10 +611,20 @@ int xhci_init(struct usb_hcd *hcd)
+@@ -566,10 +609,20 @@ int xhci_init(struct usb_hcd *hcd)
static int xhci_run_finished(struct xhci_hcd *xhci)
{
xhci->shared_hcd->state = HC_STATE_RUNNING;
xhci->cmd_ring_state = CMD_RING_STATE_RUNNING;
-@@ -581,6 +634,10 @@ static int xhci_run_finished(struct xhci
+@@ -579,6 +632,10 @@ static int xhci_run_finished(struct xhci
xhci_dbg_trace(xhci, trace_xhci_dbg_init,
"Finished xhci_run for USB3 roothub");
return 0;
/*
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
-@@ -1639,6 +1639,7 @@ struct xhci_hcd {
+@@ -1640,6 +1640,7 @@ struct xhci_hcd {
#define XHCI_BROKEN_STREAMS (1 << 19)
#define XHCI_PME_STUCK_QUIRK (1 << 20)
#define XHCI_MISSING_CAS (1 << 24)
--- a/include/linux/vmstat.h
+++ b/include/linux/vmstat.h
-@@ -219,7 +219,11 @@ static inline void __inc_zone_state(stru
+@@ -220,7 +220,11 @@ static inline void __inc_zone_state(stru
static inline void __dec_zone_state(struct zone *zone, enum zone_stat_item item)
{
atomic_long_dec(&zone->vm_stat[item]);
--- a/drivers/spi/spi-bcm2835.c
+++ b/drivers/spi/spi-bcm2835.c
-@@ -688,6 +688,8 @@ static int bcm2835_spi_setup(struct spi_
+@@ -686,6 +686,8 @@ static int bcm2835_spi_setup(struct spi_
{
int err;
struct gpio_chip *chip;
/*
* sanity checking the native-chipselects
*/
-@@ -704,15 +706,42 @@ static int bcm2835_spi_setup(struct spi_
+@@ -702,15 +704,42 @@ static int bcm2835_spi_setup(struct spi_
"setup: only two native chip-selects are supported\n");
return -EINVAL;
}
}
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
-@@ -5007,7 +5007,7 @@ static void port_event(struct usb_hub *h
+@@ -5014,7 +5014,7 @@ static void port_event(struct usb_hub *h
if (portchange & USB_PORT_STAT_C_OVERCURRENT) {
u16 status = 0, unused;
msleep(100); /* Cool down */
--- a/drivers/usb/core/message.c
+++ b/drivers/usb/core/message.c
-@@ -1924,6 +1924,85 @@ free_interfaces:
+@@ -1925,6 +1925,85 @@ free_interfaces:
if (cp->string == NULL &&
!(dev->quirks & USB_QUIRK_CONFIG_INTF_STRINGS))
cp->string = usb_cache_string(dev, cp->desc.iConfiguration);
--- a/drivers/video/fbdev/core/fbmem.c
+++ b/drivers/video/fbdev/core/fbmem.c
-@@ -1084,6 +1084,25 @@ fb_blank(struct fb_info *info, int blank
+@@ -1091,6 +1091,25 @@ fb_blank(struct fb_info *info, int blank
}
EXPORT_SYMBOL(fb_blank);
static long do_fb_ioctl(struct fb_info *info, unsigned int cmd,
unsigned long arg)
{
-@@ -1094,6 +1113,7 @@ static long do_fb_ioctl(struct fb_info *
+@@ -1101,6 +1120,7 @@ static long do_fb_ioctl(struct fb_info *
struct fb_cmap cmap_from;
struct fb_cmap_user cmap;
struct fb_event event;
void __user *argp = (void __user *)arg;
long ret = 0;
-@@ -1211,6 +1231,15 @@ static long do_fb_ioctl(struct fb_info *
+@@ -1218,6 +1238,15 @@ static long do_fb_ioctl(struct fb_info *
unlock_fb_info(info);
console_unlock();
break;
default:
if (!lock_fb_info(info))
return -ENODEV;
-@@ -1365,6 +1394,7 @@ static long fb_compat_ioctl(struct file
+@@ -1372,6 +1401,7 @@ static long fb_compat_ioctl(struct file
case FBIOPAN_DISPLAY:
case FBIOGET_CON2FBMAP:
case FBIOPUT_CON2FBMAP:
--- a/drivers/mmc/card/block.c
+++ b/drivers/mmc/card/block.c
-@@ -2553,6 +2553,13 @@ static const struct mmc_fixup blk_fixups
+@@ -2547,6 +2547,13 @@ static const struct mmc_fixup blk_fixups
MMC_FIXUP("V10016", CID_MANFID_KINGSTON, CID_OEMID_ANY, add_quirk_mmc,
MMC_QUIRK_TRIM_BROKEN),
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
-@@ -2253,7 +2253,8 @@ EXPORT_SYMBOL(mmc_erase);
+@@ -2257,7 +2257,8 @@ EXPORT_SYMBOL(mmc_erase);
int mmc_can_erase(struct mmc_card *card)
{
if ((card->host->caps & MMC_CAP_ERASE) &&
--- a/drivers/mmc/card/block.c
+++ b/drivers/mmc/card/block.c
-@@ -2559,6 +2559,10 @@ static const struct mmc_fixup blk_fixups
+@@ -2553,6 +2553,10 @@ static const struct mmc_fixup blk_fixups
*/
MMC_FIXUP("SD16G", 0x41, 0x3432, add_quirk_mmc,
MMC_QUIRK_ERASE_BROKEN),
--- a/drivers/mmc/card/block.c
+++ b/drivers/mmc/card/block.c
-@@ -137,6 +137,13 @@ enum {
+@@ -134,6 +134,13 @@ enum {
module_param(perdev_minors, int, 0444);
MODULE_PARM_DESC(perdev_minors, "Minors numbers to allocate per device");
static inline int mmc_blk_part_switch(struct mmc_card *card,
struct mmc_blk_data *md);
static int get_card_status(struct mmc_card *card, u32 *status, int retries);
-@@ -2571,6 +2578,7 @@ static int mmc_blk_probe(struct mmc_card
+@@ -2565,6 +2572,7 @@ static int mmc_blk_probe(struct mmc_card
{
struct mmc_blk_data *md, *part_md;
char cap_str[10];
/*
* Check that the card supports the command class(es) we need.
-@@ -2578,7 +2586,16 @@ static int mmc_blk_probe(struct mmc_card
+@@ -2572,7 +2580,16 @@ static int mmc_blk_probe(struct mmc_card
if (!(card->csd.cmdclass & CCC_BLOCK_READ))
return -ENODEV;
md = mmc_blk_alloc(card);
if (IS_ERR(md))
-@@ -2586,9 +2603,14 @@ static int mmc_blk_probe(struct mmc_card
+@@ -2580,9 +2597,14 @@ static int mmc_blk_probe(struct mmc_card
string_get_size((u64)get_capacity(md->disk), 512, STRING_UNITS_2,
cap_str, sizeof(cap_str));
--- a/drivers/mmc/card/block.c
+++ b/drivers/mmc/card/block.c
-@@ -2564,12 +2564,9 @@ static const struct mmc_fixup blk_fixups
+@@ -2558,12 +2558,9 @@ static const struct mmc_fixup blk_fixups
* On some Kingston SD cards, multiple erases of less than 64
* sectors can cause corruption.
*/
i2c0: i2c@7e205000 {
--- a/drivers/spi/spi-bcm2835.c
+++ b/drivers/spi/spi-bcm2835.c
-@@ -707,6 +707,7 @@ static int bcm2835_spi_setup(struct spi_
+@@ -705,6 +705,7 @@ static int bcm2835_spi_setup(struct spi_
return -EINVAL;
}
/* now translate native cs to GPIO */
/* first look for chip select pins in the devices pin groups */
for (pingroup_index = 0;
-@@ -761,6 +762,7 @@ static int bcm2835_spi_setup(struct spi_
+@@ -759,6 +760,7 @@ static int bcm2835_spi_setup(struct spi_
* so we are setting it here explicitly
*/
gpio_set_value(spi->cs_gpio, (spi->mode & SPI_CS_HIGH) ? 0 : 1);
--- a/drivers/video/fbdev/core/fbmem.c
+++ b/drivers/video/fbdev/core/fbmem.c
-@@ -1090,7 +1090,13 @@ static int fb_copyarea_user(struct fb_in
+@@ -1097,7 +1097,13 @@ static int fb_copyarea_user(struct fb_in
int ret = 0;
if (!lock_fb_info(info))
return -ENODEV;
--- a/drivers/spi/spi-bcm2835.c
+++ b/drivers/spi/spi-bcm2835.c
-@@ -679,17 +679,8 @@ static void bcm2835_spi_set_cs(struct sp
+@@ -677,17 +677,8 @@ static void bcm2835_spi_set_cs(struct sp
bcm2835_wr(bs, BCM2835_SPI_CS, cs);
}
/*
* sanity checking the native-chipselects
*/
-@@ -707,63 +698,6 @@ static int bcm2835_spi_setup(struct spi_
+@@ -705,63 +696,6 @@ static int bcm2835_spi_setup(struct spi_
return -EINVAL;
}
--- a/arch/arm/mach-cns3xxx/pcie.c
+++ b/arch/arm/mach-cns3xxx/pcie.c
@@ -86,6 +86,79 @@ static void __iomem *cns3xxx_pci_map_bus
- return base + (where & 0xffc) + (devfn << 12);
+ return base + where + (devfn << 12);
}
+static inline int check_master_abort(struct pci_bus *bus, unsigned int devfn, int where)
{
@@ -95,6 +168,11 @@ static int cns3xxx_pci_read_config(struc
- ret = pci_generic_config_read32(bus, devfn, where, size, val);
+ ret = pci_generic_config_read(bus, devfn, where, size, val);
+ if (check_master_abort(bus, devfn, where)) {
+ printk(KERN_ERR "pci error: %04d:%02x:%02x.%02x %02x(%d)= master_abort on read\n", pci_domain_nr(bus), bus->number, PCI_SLOT(devfn), PCI_FUNC(devfn), where, size);
/**
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
-@@ -939,6 +939,9 @@ static int spi_transfer_one_message(stru
+@@ -941,6 +941,9 @@ static int spi_transfer_one_message(stru
list_for_each_entry(xfer, &msg->transfers, transfer_list) {
trace_spi_transfer_start(msg, xfer);
# CONFIG_LCD_S6E63M0 is not set
# CONFIG_LCD_TDO24M is not set
# CONFIG_LCD_VGG2432A4 is not set
+CONFIG_LDISC_AUTOLOAD=y
# CONFIG_LDM_PARTITION is not set
# CONFIG_LEDS_BCM6328 is not set
# CONFIG_LEDS_BCM6358 is not set
+++ /dev/null
-From e9156cd26a495a18706e796f02a81fee41ec14f4 Mon Sep 17 00:00:00 2001
-From: James Hughes <james.hughes@raspberrypi.org>
-Date: Wed, 19 Apr 2017 11:13:40 +0100
-Subject: [PATCH] smsc95xx: Use skb_cow_head to deal with cloned skbs
-
-The driver was failing to check that the SKB wasn't cloned
-before adding checksum data.
-Replace existing handling to extend/copy the header buffer
-with skb_cow_head.
-
-Signed-off-by: James Hughes <james.hughes@raspberrypi.org>
-Acked-by: Eric Dumazet <edumazet@google.com>
-Acked-by: Woojung Huh <Woojung.Huh@microchip.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/usb/smsc95xx.c | 12 ++++++------
- 1 file changed, 6 insertions(+), 6 deletions(-)
-
---- a/drivers/net/usb/smsc95xx.c
-+++ b/drivers/net/usb/smsc95xx.c
-@@ -1838,13 +1838,13 @@ static struct sk_buff *smsc95xx_tx_fixup
- /* We do not advertise SG, so skbs should be already linearized */
- BUG_ON(skb_shinfo(skb)->nr_frags);
-
-- if (skb_headroom(skb) < overhead) {
-- struct sk_buff *skb2 = skb_copy_expand(skb,
-- overhead, 0, flags);
-+ /* Make writable and expand header space by overhead if required */
-+ if (skb_cow_head(skb, overhead)) {
-+ /* Must deallocate here as returning NULL to indicate error
-+ * means the skb won't be deallocated in the caller.
-+ */
- dev_kfree_skb_any(skb);
-- skb = skb2;
-- if (!skb)
-- return NULL;
-+ return NULL;
- }
-
- if (csum) {
+++ /dev/null
-From 6bc6895bdd6744e0136eaa4a11fbdb20a7db4e40 Mon Sep 17 00:00:00 2001
-From: Eric Dumazet <edumazet@google.com>
-Date: Wed, 19 Apr 2017 09:59:25 -0700
-Subject: [PATCH] ch9200: use skb_cow_head() to deal with cloned skbs
-
-We need to ensure there is enough headroom to push extra header,
-but we also need to check if we are allowed to change headers.
-
-skb_cow_head() is the proper helper to deal with this.
-
-Fixes: 4a476bd6d1d9 ("usbnet: New driver for QinHeng CH9200 devices")
-Signed-off-by: Eric Dumazet <edumazet@google.com>
-Cc: James Hughes <james.hughes@raspberrypi.org>
-Cc: Matthew Garrett <mjg59@srcf.ucam.org>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/usb/ch9200.c | 9 ++-------
- 1 file changed, 2 insertions(+), 7 deletions(-)
-
---- a/drivers/net/usb/ch9200.c
-+++ b/drivers/net/usb/ch9200.c
-@@ -255,14 +255,9 @@ static struct sk_buff *ch9200_tx_fixup(s
- tx_overhead = 0x40;
-
- len = skb->len;
-- if (skb_headroom(skb) < tx_overhead) {
-- struct sk_buff *skb2;
--
-- skb2 = skb_copy_expand(skb, tx_overhead, 0, flags);
-+ if (skb_cow_head(skb, tx_overhead)) {
- dev_kfree_skb_any(skb);
-- skb = skb2;
-- if (!skb)
-- return NULL;
-+ return NULL;
- }
-
- __skb_push(skb, tx_overhead);
+++ /dev/null
-From 39fba7835aacda65284a86e611774cbba71dac20 Mon Sep 17 00:00:00 2001
-From: Eric Dumazet <edumazet@google.com>
-Date: Wed, 19 Apr 2017 09:59:26 -0700
-Subject: [PATCH] kaweth: use skb_cow_head() to deal with cloned skbs
-
-We can use skb_cow_head() to properly deal with clones,
-especially the ones coming from TCP stack that allow their head being
-modified. This avoids a copy.
-
-Signed-off-by: Eric Dumazet <edumazet@google.com>
-Cc: James Hughes <james.hughes@raspberrypi.org>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/usb/kaweth.c | 18 ++++++------------
- 1 file changed, 6 insertions(+), 12 deletions(-)
-
---- a/drivers/net/usb/kaweth.c
-+++ b/drivers/net/usb/kaweth.c
-@@ -812,18 +812,12 @@ static netdev_tx_t kaweth_start_xmit(str
- }
-
- /* We now decide whether we can put our special header into the sk_buff */
-- if (skb_cloned(skb) || skb_headroom(skb) < 2) {
-- /* no such luck - we make our own */
-- struct sk_buff *copied_skb;
-- copied_skb = skb_copy_expand(skb, 2, 0, GFP_ATOMIC);
-- dev_kfree_skb_irq(skb);
-- skb = copied_skb;
-- if (!copied_skb) {
-- kaweth->stats.tx_errors++;
-- netif_start_queue(net);
-- spin_unlock_irq(&kaweth->device_lock);
-- return NETDEV_TX_OK;
-- }
-+ if (skb_cow_head(skb, 2)) {
-+ kaweth->stats.tx_errors++;
-+ netif_start_queue(net);
-+ spin_unlock_irq(&kaweth->device_lock);
-+ dev_kfree_skb_any(skb);
-+ return NETDEV_TX_OK;
- }
-
- private_header = (__le16 *)__skb_push(skb, 2);
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
-@@ -1141,6 +1141,7 @@ static void __spi_pump_messages(struct s
+@@ -1143,6 +1143,7 @@ static void __spi_pump_messages(struct s
}
}
trace_spi_message_start(master->cur_msg);
if (master->prepare_message) {
-@@ -1150,6 +1151,7 @@ static void __spi_pump_messages(struct s
+@@ -1152,6 +1153,7 @@ static void __spi_pump_messages(struct s
"failed to prepare message: %d\n", ret);
master->cur_msg->status = ret;
spi_finalize_current_message(master);
return;
}
master->cur_msg_prepared = true;
-@@ -1159,6 +1161,7 @@ static void __spi_pump_messages(struct s
+@@ -1161,6 +1163,7 @@ static void __spi_pump_messages(struct s
if (ret) {
master->cur_msg->status = ret;
spi_finalize_current_message(master);
return;
}
-@@ -1166,8 +1169,10 @@ static void __spi_pump_messages(struct s
+@@ -1168,8 +1171,10 @@ static void __spi_pump_messages(struct s
if (ret) {
dev_err(&master->dev,
"failed to transfer one message from queue\n");
}
/**
-@@ -2335,6 +2340,46 @@ int spi_async_locked(struct spi_device *
+@@ -2337,6 +2342,46 @@ int spi_async_locked(struct spi_device *
EXPORT_SYMBOL_GPL(spi_async_locked);
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
-@@ -2753,10 +2753,10 @@ choice
+@@ -2756,10 +2756,10 @@ choice
the documented boot protocol using a device tree.
config MIPS_RAW_APPENDED_DTB
(e.g. cat vmlinux.bin <filename>.dtb > vmlinux_w_dtb).
This is meant as a backward compatibility convenience for those
-@@ -2768,24 +2768,6 @@ choice
+@@ -2771,24 +2771,6 @@ choice
look like a DTB header after a reboot if no actual DTB is appended
to vmlinux.bin. Do not leave this option active in a production kernel
if you don't intend to always append a DTB.
+++ /dev/null
-From cd4b1e34655d46950c065d9284b596cd8d7b28cd Mon Sep 17 00:00:00 2001
-From: John Youn <johnyoun@synopsys.com>
-Date: Thu, 3 Nov 2016 17:55:45 -0700
-Subject: [PATCH] usb: dwc2: Remove unnecessary kfree
-
-This shouldn't be freed by the HCD as it is owned by the core and
-allocated with devm_kzalloc.
-
-Signed-off-by: John Youn <johnyoun@synopsys.com>
-Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
----
- drivers/usb/dwc2/hcd.c | 1 -
- 1 file changed, 1 deletion(-)
-
---- a/drivers/usb/dwc2/hcd.c
-+++ b/drivers/usb/dwc2/hcd.c
-@@ -3164,7 +3164,6 @@ error3:
- error2:
- usb_put_hcd(hcd);
- error1:
-- kfree(hsotg->core_params);
-
- #ifdef CONFIG_USB_DWC2_TRACK_MISSED_SOFS
- kfree(hsotg->last_frame_num_array);
/* Gobi 1000 QMI/wwan interface number is 3 according to qcserial */
#define QMI_GOBI1K_DEVICE(vend, prod) \
QMI_FIXED_INTF(vend, prod, 3)
-@@ -915,6 +939,8 @@ static const struct usb_device_id produc
+@@ -916,6 +940,8 @@ static const struct usb_device_id produc
{QMI_FIXED_INTF(0x03f0, 0x9d1d, 1)}, /* HP lt4120 Snapdragon X5 LTE */
{QMI_FIXED_INTF(0x22de, 0x9061, 3)}, /* WeTelecom WPD-600N */
{QMI_FIXED_INTF(0x1e0e, 0x9001, 5)}, /* SIMCom 7230E */
+++ /dev/null
-From 03556dab1cb02d85b50d7be3ee3a3bac001f5991 Mon Sep 17 00:00:00 2001
-From: Koen Vandeputte <koen.vandeputte@ncentric.com>
-Date: Tue, 18 Dec 2018 12:14:06 +0100
-Subject: [PATCH] arm: cns3xxx: fix writing to wrong PCI registers after
- alignment
-
-Originally, cns3xxx used it's own functions for mapping, reading and writing registers.
-
-Commit 802b7c06adc7 ("ARM: cns3xxx: Convert PCI to use generic config accessors")
-removed the internal PCI config write function in favor of the generic one:
-
-cns3xxx_pci_write_config() --> pci_generic_config_write()
-
-cns3xxx_pci_write_config() expected aligned addresses, being produced by cns3xxx_pci_map_bus()
-while the generic one pci_generic_config_write() actually expects the real address
-as both the function and hardware are capable of byte-aligned writes.
-
-This currently leads to pci_generic_config_write() writing
-to the wrong registers on some ocasions.
-
-First issue seen due to this:
-
-- driver ath9k gets loaded
-- The driver wants to write value 0xA8 to register PCI_LATENCY_TIMER, located at 0x0D
-- cns3xxx_pci_map_bus() aligns the address to 0x0C
-- pci_generic_config_write() effectively writes 0xA8 into register 0x0C (CACHE_LINE_SIZE)
-
-This seems to cause some slight instability when certain PCI devices are used.
-
-Another issue example caused by this this is the PCI bus numbering,
-where the primary bus is higher than the secondary, which is impossible.
-
-Before:
-
-00:00.0 PCI bridge: Cavium, Inc. Device 3400 (rev 01) (prog-if 00 [Normal decode])
- Flags: bus master, fast devsel, latency 0, IRQ 255
- Bus: primary=02, secondary=01, subordinate=ff, sec-latency=0
-
-After fix:
-
-00:00.0 PCI bridge: Cavium, Inc. Device 3400 (rev 01) (prog-if 00 [Normal decode])
- Flags: bus master, fast devsel, latency 0, IRQ 255
- Bus: primary=00, secondary=01, subordinate=02, sec-latency=0
-
-And very likely some more ..
-
-Fix all by omitting the alignment being done in the mapping function.
-
-Fixes: 802b7c06adc7 ("ARM: cns3xxx: Convert PCI to use generic config accessors")
-Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
-CC: Arnd Bergmann <arnd@arndb.de>
-CC: Bjorn Helgaas <bhelgaas@google.com>
-CC: Krzysztof Halasa <khalasa@piap.pl>
-CC: Olof Johansson <olof@lixom.net>
-CC: Robin Leblon <robin.leblon@ncentric.com>
-CC: Rob Herring <robh@kernel.org>
-CC: Russell King <linux@armlinux.org.uk>
-CC: Tim Harvey <tharvey@gateworks.com>
-CC: stable@vger.kernel.org # v4.0+
----
- arch/arm/mach-cns3xxx/pcie.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/arch/arm/mach-cns3xxx/pcie.c b/arch/arm/mach-cns3xxx/pcie.c
-index 318394ed5c7a..5e11ad3164e0 100644
---- a/arch/arm/mach-cns3xxx/pcie.c
-+++ b/arch/arm/mach-cns3xxx/pcie.c
-@@ -83,7 +83,7 @@ static void __iomem *cns3xxx_pci_map_bus(struct pci_bus *bus,
- } else /* remote PCI bus */
- base = cnspci->cfg1_regs + ((busno & 0xf) << 20);
-
-- return base + (where & 0xffc) + (devfn << 12);
-+ return base + where + (devfn << 12);
- }
-
- static int cns3xxx_pci_read_config(struct pci_bus *bus, unsigned int devfn,
---
-2.17.1
-
arch/arm/mach-cns3xxx/pcie.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/arch/arm/mach-cns3xxx/pcie.c b/arch/arm/mach-cns3xxx/pcie.c
-index 5e11ad3164e0..95a11d5b3587 100644
--- a/arch/arm/mach-cns3xxx/pcie.c
+++ b/arch/arm/mach-cns3xxx/pcie.c
-@@ -93,7 +93,7 @@ static int cns3xxx_pci_read_config(struct pci_bus *bus, unsigned int devfn,
+@@ -93,7 +93,7 @@ static int cns3xxx_pci_read_config(struc
u32 mask = (0x1ull << (size * 8)) - 1;
int shift = (where % 4) * 8;
if (ret == PCIBIOS_SUCCESSFUL && !bus->number && !devfn &&
(where & 0xffc) == PCI_CLASS_REVISION)
---
-2.17.1
-
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
-@@ -1619,6 +1619,7 @@ config CPU_CAVIUM_OCTEON
+@@ -1622,6 +1622,7 @@ config CPU_CAVIUM_OCTEON
select USB_EHCI_BIG_ENDIAN_MMIO if CPU_BIG_ENDIAN
select USB_OHCI_BIG_ENDIAN_MMIO if CPU_BIG_ENDIAN
select MIPS_L1_CACHE_SHIFT_7
help
The Cavium Octeon processor is a highly integrated chip containing
many ethernet hardware widgets for networking tasks. The processor
-@@ -1914,6 +1915,9 @@ config MIPS_MALTA_PM
+@@ -1917,6 +1918,9 @@ config MIPS_MALTA_PM
bool
default y
dmactl |= BIT(DMA_REQUEST_OUTSTANDING);
writel(dmactl, &dma->dmactl);
-@@ -1046,7 +1046,7 @@ net2280_queue(struct usb_ep *_ep, struct
+@@ -1044,7 +1044,7 @@ net2280_queue(struct usb_ep *_ep, struct
/* kickstart this i/o queue? */
if (list_empty(&ep->queue) && !ep->stopped &&
(readl(&ep->regs->ep_rsp) & BIT(CLEAR_ENDPOINT_HALT)))) {
/* use DMA if the endpoint supports it, else pio */
-@@ -1169,7 +1169,7 @@ static void scan_dma_completions(struct
+@@ -1167,7 +1167,7 @@ static void scan_dma_completions(struct
break;
} else if (!ep->is_in &&
(req->req.length % ep->ep.maxpacket) &&
tmp = readl(&ep->regs->ep_stat);
/* AVOID TROUBLE HERE by not issuing short reads from
-@@ -1367,7 +1367,7 @@ net2280_set_halt_and_wedge(struct usb_ep
+@@ -1365,7 +1365,7 @@ net2280_set_halt_and_wedge(struct usb_ep
ep->wedged = 1;
} else {
clear_halt(ep);
!list_empty(&ep->queue) && ep->td_dma)
restart_dma(ep);
ep->wedged = 0;
-@@ -2397,7 +2397,7 @@ static int net2280_start(struct usb_gadg
+@@ -2395,7 +2395,7 @@ static int net2280_start(struct usb_gadg
*/
net2280_led_active(dev, 1);
defect7374_enable_data_eps_zero(dev);
ep0_start(dev);
-@@ -3066,7 +3066,7 @@ static void handle_stat0_irqs(struct net
+@@ -3064,7 +3064,7 @@ static void handle_stat0_irqs(struct net
}
ep->stopped = 0;
dev->protocol_stall = 0;
if (ep->dev->quirks & PLX_2280)
tmp = BIT(FIFO_OVERFLOW) |
BIT(FIFO_UNDERFLOW);
-@@ -3093,7 +3093,7 @@ static void handle_stat0_irqs(struct net
+@@ -3091,7 +3091,7 @@ static void handle_stat0_irqs(struct net
cpu_to_le32s(&u.raw[0]);
cpu_to_le32s(&u.raw[1]);
defect7374_workaround(dev, u.r);
tmp = 0;
-@@ -3176,7 +3176,7 @@ static void handle_stat0_irqs(struct net
+@@ -3174,7 +3174,7 @@ static void handle_stat0_irqs(struct net
} else {
ep_vdbg(dev, "%s clear halt\n", e->ep.name);
clear_halt(e);
!list_empty(&e->queue) && e->td_dma)
restart_dma(e);
}
-@@ -3198,7 +3198,7 @@ static void handle_stat0_irqs(struct net
+@@ -3196,7 +3196,7 @@ static void handle_stat0_irqs(struct net
if (e->ep.name == ep0name)
goto do_stall;
set_halt(e);
abort_dma(e);
allow_status(ep);
ep_vdbg(dev, "%s set halt\n", ep->ep.name);
-@@ -3237,7 +3237,7 @@ do_stall:
+@@ -3235,7 +3235,7 @@ do_stall:
#undef w_length
next_endpoints:
u32 mask = (BIT(ENDPOINT_0_INTERRUPT) |
USB3380_IRQSTAT0_EP_INTR_MASK_IN |
USB3380_IRQSTAT0_EP_INTR_MASK_OUT);
-@@ -3404,7 +3404,7 @@ __acquires(dev->lock)
+@@ -3402,7 +3402,7 @@ __acquires(dev->lock)
writel(tmp, &dma->dmastat);
/* dma sync*/
u32 r_dmacount = readl(&dma->dmacount);
if (!ep->is_in && (r_dmacount & 0x00FFFFFF) &&
(tmp & BIT(DMA_TRANSACTION_DONE_INTERRUPT)))
-@@ -3473,7 +3473,7 @@ static irqreturn_t net2280_irq(int irq,
+@@ -3471,7 +3471,7 @@ static irqreturn_t net2280_irq(int irq,
/* control requests and PIO */
handle_stat0_irqs(dev, readl(&dev->regs->irqstat0));
/* re-enable interrupt to trigger any possible new interrupt */
u32 pciirqenb1 = readl(&dev->regs->pciirqenb1);
writel(pciirqenb1 & 0x7FFFFFFF, &dev->regs->pciirqenb1);
-@@ -3518,7 +3518,7 @@ static void net2280_remove(struct pci_de
+@@ -3516,7 +3516,7 @@ static void net2280_remove(struct pci_de
}
if (dev->got_irq)
free_irq(pdev->irq, dev);
pci_disable_msi(pdev);
if (dev->regs)
iounmap(dev->regs);
-@@ -3598,7 +3598,7 @@ static int net2280_probe(struct pci_dev
+@@ -3596,7 +3596,7 @@ static int net2280_probe(struct pci_dev
dev->dep = (struct net2280_dep_regs __iomem *) (base + 0x0200);
dev->epregs = (struct net2280_ep_regs __iomem *) (base + 0x0300);
u32 fsmvalue;
u32 usbstat;
dev->usb_ext = (struct usb338x_usb_ext_regs __iomem *)
-@@ -3642,7 +3642,7 @@ static int net2280_probe(struct pci_dev
+@@ -3640,7 +3640,7 @@ static int net2280_probe(struct pci_dev
goto done;
}
if (pci_enable_msi(pdev))
ep_err(dev, "Failed to enable MSI mode\n");
-@@ -3760,10 +3760,19 @@ static const struct pci_device_id pci_id
+@@ -3758,10 +3758,19 @@ static const struct pci_device_id pci_id
.class = ((PCI_CLASS_SERIAL_USB << 8) | 0xfe),
.class_mask = ~0,
.vendor = PCI_VENDOR_ID_PLX,
},
{
.class = ((PCI_CLASS_SERIAL_USB << 8) | 0xfe),
-@@ -3772,7 +3781,7 @@ static const struct pci_device_id pci_id
+@@ -3770,7 +3779,7 @@ static const struct pci_device_id pci_id
.device = 0x3382,
.subvendor = PCI_ANY_ID,
.subdevice = PCI_ANY_ID,
KBUILD_CFLAGS += $(call cc-disable-warning, attribute-alias)
ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
--KBUILD_CFLAGS += $(call cc-option,-Oz,-Os)
-+KBUILD_CFLAGS += $(call cc-option,-Oz,-Os) $(EXTRA_OPTIMIZATION)
+-KBUILD_CFLAGS += -Os
++KBUILD_CFLAGS += -Os $(EXTRA_OPTIMIZATION)
else
ifdef CONFIG_PROFILE_ALL_BRANCHES
-KBUILD_CFLAGS += -O2
set_license(mod, get_modinfo(info, "license"));
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
-@@ -1964,7 +1964,9 @@ static void read_symbols(char *modname)
+@@ -1966,7 +1966,9 @@ static void read_symbols(char *modname)
symname = remove_dot(info.strtab + sym->st_name);
handle_modversions(mod, &info, sym, symname);
}
if (!is_vmlinux(modname) ||
(is_vmlinux(modname) && vmlinux_section_warnings))
-@@ -2108,7 +2110,9 @@ static void add_header(struct buffer *b,
+@@ -2110,7 +2112,9 @@ static void add_header(struct buffer *b,
buf_printf(b, "#include <linux/vermagic.h>\n");
buf_printf(b, "#include <linux/compiler.h>\n");
buf_printf(b, "\n");
buf_printf(b, "\n");
buf_printf(b, "__visible struct module __this_module\n");
buf_printf(b, "__attribute__((section(\".gnu.linkonce.this_module\"))) = {\n");
-@@ -2125,8 +2129,10 @@ static void add_header(struct buffer *b,
+@@ -2127,8 +2131,10 @@ static void add_header(struct buffer *b,
static void add_intree_flag(struct buffer *b, int is_intree)
{
}
/* Cannot check for assembler */
-@@ -2139,10 +2145,12 @@ static void add_retpoline(struct buffer
+@@ -2141,10 +2147,12 @@ static void add_retpoline(struct buffer
static void add_staging_flag(struct buffer *b, const char *name)
{
}
/* In kernel, this size is defined in linux/module.h;
-@@ -2246,11 +2254,13 @@ static void add_depends(struct buffer *b
+@@ -2248,11 +2256,13 @@ static void add_depends(struct buffer *b
static void add_srcversion(struct buffer *b, struct module *mod)
{
}
static void write_if_changed(struct buffer *b, const char *fname)
-@@ -2485,7 +2495,9 @@ int main(int argc, char **argv)
+@@ -2487,7 +2497,9 @@ int main(int argc, char **argv)
add_staging_flag(&buf, mod->name);
err |= add_versions(&buf, mod);
add_depends(&buf, mod, modules);
/*
* IEEE 802.3 Ethernet magic constants. The frame sizes omit the preamble
-@@ -136,11 +137,13 @@
- * This is an Ethernet frame header.
- */
-
-+#if __UAPI_DEF_ETHHDR
- struct ethhdr {
- unsigned char h_dest[ETH_ALEN]; /* destination eth addr */
- unsigned char h_source[ETH_ALEN]; /* source ether addr */
- __be16 h_proto; /* packet type ID field */
- } __attribute__((packed));
-+#endif
-
-
- #endif /* _UAPI_LINUX_IF_ETHER_H */
--- a/include/uapi/linux/libc-compat.h
+++ b/include/uapi/linux/libc-compat.h
@@ -85,6 +85,14 @@
---
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
-@@ -1033,9 +1033,6 @@ config FW_ARC
+@@ -1036,9 +1036,6 @@ config FW_ARC
config ARCH_MAY_HAVE_PC_FDC
bool
config CEVT_BCM1480
bool
-@@ -2793,6 +2790,18 @@ choice
+@@ -2796,6 +2793,18 @@ choice
bool "Bootloader kernel arguments if available"
endchoice
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
-@@ -1124,6 +1124,10 @@ config SYNC_R4K
+@@ -1127,6 +1127,10 @@ config SYNC_R4K
config MIPS_MACHINE
def_bool n
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
-@@ -2725,6 +2725,20 @@ config MIPS_O32_FP64_SUPPORT
+@@ -2728,6 +2728,20 @@ config MIPS_O32_FP64_SUPPORT
If unsure, say N.
--- a/arch/arc/kernel/head.S
+++ b/arch/arc/kernel/head.S
-@@ -49,6 +49,16 @@
- 1:
+@@ -59,6 +59,16 @@
+ #endif
.endm
+; Here "patch-dtb" will embed external .dtb
+}
--- a/fs/jffs2/super.c
+++ b/fs/jffs2/super.c
-@@ -373,14 +373,41 @@ static int __init init_jffs2_fs(void)
+@@ -377,14 +377,41 @@ static int __init init_jffs2_fs(void)
BUILD_BUG_ON(sizeof(struct jffs2_raw_inode) != 68);
BUILD_BUG_ON(sizeof(struct jffs2_raw_summary) != 32);
/* "Be conservative in what you do,
be liberal in what you accept from others."
If it's non-zero, we mark only out of window RST segments as INVALID. */
-@@ -515,6 +518,9 @@ static bool tcp_in_window(const struct n
+@@ -519,6 +522,9 @@ static bool tcp_in_window(const struct n
s32 receiver_offset;
bool res, in_recv_win;
/*
* Get the required data from the packet.
*/
-@@ -1481,6 +1487,13 @@ static struct ctl_table tcp_sysctl_table
+@@ -1485,6 +1491,13 @@ static struct ctl_table tcp_sysctl_table
.mode = 0644,
.proc_handler = proc_dointvec,
},
if (!net_eq(dev_net(dev), sock_net(sk)))
goto drop;
-@@ -3139,6 +3141,7 @@ static int packet_create(struct net *net
+@@ -3148,6 +3150,7 @@ static int packet_create(struct net *net
mutex_init(&po->pg_vec_lock);
po->rollover = NULL;
po->prot_hook.func = packet_rcv;
if (sock->type == SOCK_PACKET)
po->prot_hook.func = packet_rcv_spkt;
-@@ -3797,6 +3800,16 @@ packet_setsockopt(struct socket *sock, i
+@@ -3806,6 +3809,16 @@ packet_setsockopt(struct socket *sock, i
po->xmit = val ? packet_direct_xmit : dev_queue_xmit;
return 0;
}
default:
return -ENOPROTOOPT;
}
-@@ -3849,6 +3862,13 @@ static int packet_getsockopt(struct sock
+@@ -3858,6 +3871,13 @@ static int packet_getsockopt(struct sock
case PACKET_VNET_HDR:
val = po->has_vnet_hdr;
break;
skb = NULL;
--- a/net/bridge/br_forward.c
+++ b/net/bridge/br_forward.c
-@@ -141,7 +141,7 @@ EXPORT_SYMBOL_GPL(br_deliver);
+@@ -140,7 +140,7 @@ EXPORT_SYMBOL_GPL(br_deliver);
/* called with rcu_read_lock */
void br_forward(const struct net_bridge_port *to, struct sk_buff *skb, struct sk_buff *skb0)
{
if (skb0)
deliver_clone(to, skb, __br_forward);
else
-@@ -197,7 +197,7 @@ static void br_flood(struct net_bridge *
+@@ -196,7 +196,7 @@ static void br_flood(struct net_bridge *
struct sk_buff *skb0,
void (*__packet_hook)(const struct net_bridge_port *p,
struct sk_buff *skb),
{
struct net_bridge_port *p;
struct net_bridge_port *prev;
-@@ -205,6 +205,8 @@ static void br_flood(struct net_bridge *
+@@ -204,6 +204,8 @@ static void br_flood(struct net_bridge *
prev = NULL;
list_for_each_entry_rcu(p, &br->port_list, list) {
/* Do not flood unicast traffic to ports that turn it off */
if (unicast && !(p->flags & BR_FLOOD))
continue;
-@@ -239,14 +241,14 @@ out:
+@@ -238,14 +240,14 @@ out:
/* called with rcu_read_lock */
void br_flood_deliver(struct net_bridge *br, struct sk_buff *skb, bool unicast)
{
if (err)
break;
}
-@@ -1439,7 +1465,8 @@ br_multicast_leave_group(struct net_brid
+@@ -1432,7 +1458,8 @@ br_multicast_leave_group(struct net_brid
struct net_bridge_port *port,
struct br_ip *group,
struct bridge_mcast_other_query *other_query,
{
struct net_bridge_mdb_htable *mdb;
struct net_bridge_mdb_entry *mp;
-@@ -1463,7 +1490,7 @@ br_multicast_leave_group(struct net_brid
+@@ -1456,7 +1483,7 @@ br_multicast_leave_group(struct net_brid
for (pp = &mp->ports;
(p = mlock_dereference(*pp, br)) != NULL;
pp = &p->next) {
continue;
rcu_assign_pointer(*pp, p->next);
-@@ -1526,7 +1553,7 @@ br_multicast_leave_group(struct net_brid
+@@ -1519,7 +1546,7 @@ br_multicast_leave_group(struct net_brid
for (p = mlock_dereference(mp->ports, br);
p != NULL;
p = mlock_dereference(p->next, br)) {
continue;
if (!hlist_unhashed(&p->mglist) &&
-@@ -1544,8 +1571,8 @@ out:
+@@ -1537,8 +1564,8 @@ out:
static void br_ip4_multicast_leave_group(struct net_bridge *br,
struct net_bridge_port *port,
{
struct br_ip br_group;
struct bridge_mcast_own_query *own_query;
-@@ -1560,14 +1587,14 @@ static void br_ip4_multicast_leave_group
+@@ -1553,14 +1580,14 @@ static void br_ip4_multicast_leave_group
br_group.vid = vid;
br_multicast_leave_group(br, port, &br_group, &br->ip4_other_query,
{
struct br_ip br_group;
struct bridge_mcast_own_query *own_query;
-@@ -1582,7 +1609,7 @@ static void br_ip6_multicast_leave_group
+@@ -1575,7 +1602,7 @@ static void br_ip6_multicast_leave_group
br_group.vid = vid;
br_multicast_leave_group(br, port, &br_group, &br->ip6_other_query,
}
#endif
-@@ -1591,6 +1618,7 @@ static int br_multicast_ipv4_rcv(struct
+@@ -1584,6 +1611,7 @@ static int br_multicast_ipv4_rcv(struct
struct sk_buff *skb,
u16 vid)
{
struct sk_buff *skb_trimmed = NULL;
struct igmphdr *ih;
int err;
-@@ -1607,12 +1635,13 @@ static int br_multicast_ipv4_rcv(struct
+@@ -1600,12 +1628,13 @@ static int br_multicast_ipv4_rcv(struct
BR_INPUT_SKB_CB(skb)->igmp = 1;
ih = igmp_hdr(skb);
break;
case IGMPV3_HOST_MEMBERSHIP_REPORT:
err = br_ip4_multicast_igmp3_report(br, port, skb_trimmed, vid);
-@@ -1621,7 +1650,7 @@ static int br_multicast_ipv4_rcv(struct
+@@ -1614,7 +1643,7 @@ static int br_multicast_ipv4_rcv(struct
err = br_ip4_multicast_query(br, port, skb_trimmed, vid);
break;
case IGMP_HOST_LEAVE_MESSAGE:
break;
}
-@@ -1637,6 +1666,7 @@ static int br_multicast_ipv6_rcv(struct
+@@ -1630,6 +1659,7 @@ static int br_multicast_ipv6_rcv(struct
struct sk_buff *skb,
u16 vid)
{
struct sk_buff *skb_trimmed = NULL;
struct mld_msg *mld;
int err;
-@@ -1656,8 +1686,9 @@ static int br_multicast_ipv6_rcv(struct
+@@ -1649,8 +1679,9 @@ static int br_multicast_ipv6_rcv(struct
switch (mld->mld_type) {
case ICMPV6_MGM_REPORT:
break;
case ICMPV6_MLD2_REPORT:
err = br_ip6_multicast_mld2_report(br, port, skb_trimmed, vid);
-@@ -1666,7 +1697,8 @@ static int br_multicast_ipv6_rcv(struct
+@@ -1659,7 +1690,8 @@ static int br_multicast_ipv6_rcv(struct
err = br_ip6_multicast_query(br, port, skb_trimmed, vid);
break;
case ICMPV6_MGM_REDUCTION:
rcu_assign_pointer(*pp, p);
--- a/net/bridge/br_forward.c
+++ b/net/bridge/br_forward.c
-@@ -192,6 +192,34 @@ out:
+@@ -191,6 +191,34 @@ out:
return p;
}
/* called under bridge lock */
static void br_flood(struct net_bridge *br, struct sk_buff *skb,
struct sk_buff *skb0,
-@@ -264,6 +292,7 @@ static void br_multicast_flood(struct ne
+@@ -263,6 +291,7 @@ static void br_multicast_flood(struct ne
struct net_bridge_port *prev = NULL;
struct net_bridge_port_group *p;
struct hlist_node *rp;
rp = rcu_dereference(hlist_first_rcu(&br->router_list));
p = mdst ? rcu_dereference(mdst->ports) : NULL;
-@@ -274,10 +303,19 @@ static void br_multicast_flood(struct ne
+@@ -273,10 +302,19 @@ static void br_multicast_flood(struct ne
rport = rp ? hlist_entry(rp, struct net_bridge_port, rlist) :
NULL;
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
-@@ -2177,7 +2177,7 @@ static inline int pskb_network_may_pull(
+@@ -2182,7 +2182,7 @@ static inline int pskb_network_may_pull(
* NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8)
*/
#ifndef NET_SKB_PAD
if (!qdisc)
--- a/net/sched/sch_api.c
+++ b/net/sched/sch_api.c
-@@ -1951,7 +1951,7 @@ static int __init pktsched_init(void)
+@@ -1950,7 +1950,7 @@ static int __init pktsched_init(void)
return err;
}
static void rt_fibinfo_free(struct rtable __rcu **rtp)
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
-@@ -2370,6 +2370,7 @@ static const char *const rtn_type_names[
+@@ -2380,6 +2380,7 @@ static const char *const rtn_type_names[
[RTN_THROW] = "THROW",
[RTN_NAT] = "NAT",
[RTN_XRESOLVE] = "XRESOLVE",
static inline const char *rtn_type(char *buf, size_t len, unsigned int t)
--- a/net/ipv4/ipmr.c
+++ b/net/ipv4/ipmr.c
-@@ -182,6 +182,7 @@ static int ipmr_rule_action(struct fib_r
+@@ -183,6 +183,7 @@ static int ipmr_rule_action(struct fib_r
case FR_ACT_UNREACHABLE:
return -ENETUNREACH;
case FR_ACT_PROHIBIT:
table = fib6_get_table(net, rule->table);
--- a/net/ipv6/ip6mr.c
+++ b/net/ipv6/ip6mr.c
-@@ -167,6 +167,8 @@ static int ip6mr_rule_action(struct fib_
+@@ -169,6 +169,8 @@ static int ip6mr_rule_action(struct fib_
return -ENETUNREACH;
case FR_ACT_PROHIBIT:
return -EACCES;
#endif
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
-@@ -642,7 +642,8 @@ struct sk_buff {
+@@ -647,7 +647,8 @@ struct sk_buff {
__u8 inner_protocol_type:1;
__u8 remcsum_offload:1;
/**
* mdiobus_alloc_size - allocate a mii_bus structure
* @size: extra amount of memory to allocate for private storage.
-@@ -346,9 +348,21 @@ void mdiobus_free(struct mii_bus *bus)
+@@ -345,9 +347,21 @@ void mdiobus_free(struct mii_bus *bus)
}
EXPORT_SYMBOL(mdiobus_free);
int err;
phydev = get_phy_device(bus, addr, false);
-@@ -361,6 +375,12 @@ struct phy_device *mdiobus_scan(struct m
+@@ -360,6 +374,12 @@ struct phy_device *mdiobus_scan(struct m
*/
of_mdiobus_link_phydev(bus, phydev);
*/
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
-@@ -2208,6 +2208,10 @@ static inline int pskb_trim(struct sk_bu
+@@ -2213,6 +2213,10 @@ static inline int pskb_trim(struct sk_bu
return (len < skb->len) ? __pskb_trim(skb, len) : 0;
}
/**
* pskb_trim_unique - remove end from a paged unique (not cloned) buffer
* @skb: buffer to alter
-@@ -2314,16 +2318,6 @@ static inline struct sk_buff *dev_alloc_
+@@ -2319,16 +2323,6 @@ static inline struct sk_buff *dev_alloc_
}
#include <net/protocol.h>
#include <net/dst.h>
-@@ -520,6 +521,22 @@ skb_fail:
+@@ -524,6 +525,22 @@ skb_fail:
}
EXPORT_SYMBOL(__napi_alloc_skb);
/**
* ata_build_rw_tf - Build ATA taskfile for given read/write request
* @tf: Target ATA taskfile
-@@ -4811,6 +4824,9 @@ struct ata_queued_cmd *ata_qc_new_init(s
+@@ -4812,6 +4825,9 @@ struct ata_queued_cmd *ata_qc_new_init(s
if (tag < 0)
return NULL;
}
qc = __ata_qc_from_tag(ap, tag);
qc->tag = tag;
-@@ -5707,6 +5723,9 @@ struct ata_port *ata_port_alloc(struct a
+@@ -5708,6 +5724,9 @@ struct ata_port *ata_port_alloc(struct a
ap->stats.unhandled_irq = 1;
ap->stats.idle_irq = 1;
#endif
ata_sff_port_init(ap);
return ap;
-@@ -5728,6 +5747,12 @@ static void ata_host_release(struct devi
+@@ -5729,6 +5748,12 @@ static void ata_host_release(struct devi
kfree(ap->pmp_link);
kfree(ap->slave_link);
kfree(ap);
host->ports[i] = NULL;
}
-@@ -6174,7 +6199,23 @@ int ata_host_register(struct ata_host *h
+@@ -6175,7 +6200,23 @@ int ata_host_register(struct ata_host *h
host->ports[i]->print_id = atomic_inc_return(&ata_print_id);
host->ports[i]->local_port_no = i + 1;
}
obj-$(CONFIG_PROC_FS) += net-procfs.o
--- a/net/core/sock.c
+++ b/net/core/sock.c
-@@ -1474,9 +1474,11 @@ void sk_destruct(struct sock *sk)
+@@ -1475,9 +1475,11 @@ void sk_destruct(struct sock *sk)
static void __sk_free(struct sock *sk)
{
+ if (IS_ENABLED(CONFIG_PROC_STRIPPED))
+ return 0;
- pe = proc_create("timer_list", 0444, NULL, &timer_list_fops);
+ pe = proc_create("timer_list", 0400, NULL, &timer_list_fops);
if (!pe)
return -ENOMEM;
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
-@@ -2685,6 +2685,8 @@ static const struct file_operations proc
+@@ -2689,6 +2689,8 @@ static const struct file_operations proc
static int __init proc_vmalloc_init(void)
{
}
--- a/mm/vmstat.c
+++ b/mm/vmstat.c
-@@ -1560,10 +1560,12 @@ static int __init setup_vmstat(void)
+@@ -1574,10 +1574,12 @@ static int __init setup_vmstat(void)
cpu_notifier_register_done();
#endif
#ifdef CONFIG_PROC_FS
goto err;
--- a/net/core/sock.c
+++ b/net/core/sock.c
-@@ -3044,6 +3044,8 @@ static __net_initdata struct pernet_oper
+@@ -3048,6 +3048,8 @@ static __net_initdata struct pernet_oper
static int __init proto_init(void)
{
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
-@@ -2641,10 +2641,12 @@ static const struct file_operations fib_
+@@ -2651,10 +2651,12 @@ static const struct file_operations fib_
int __net_init fib_proc_init(struct net *net)
{
&fib_triestat_fops))
goto out2;
-@@ -2654,17 +2656,21 @@ int __net_init fib_proc_init(struct net
+@@ -2664,17 +2666,21 @@ int __net_init fib_proc_init(struct net
return 0;
out3:
--- a/net/ipv4/proc.c
+++ b/net/ipv4/proc.c
-@@ -539,6 +539,9 @@ static __net_initdata struct pernet_oper
+@@ -541,6 +541,9 @@ static __net_initdata struct pernet_oper
int __init ip_misc_proc_init(void)
{
#ifdef CONFIG_UEVENT_HELPER
/* path to the userspace helper executed on an event */
extern char uevent_helper[];
-@@ -222,4 +224,7 @@ int add_uevent_var(struct kobj_uevent_en
+@@ -239,4 +241,7 @@ int add_uevent_var(struct kobj_uevent_en
int kobject_action_type(const char *buf, size_t count,
enum kobject_action *type);
--- a/drivers/net/ethernet/marvell/sky2.c
+++ b/drivers/net/ethernet/marvell/sky2.c
-@@ -4812,7 +4812,24 @@ static struct net_device *sky2_init_netd
+@@ -4813,7 +4813,24 @@ static struct net_device *sky2_init_netd
* 1) from device tree data
* 2) from internal registers set by bootloader
*/
irq_ack = platform_get_irq_byname(pdev, "ack");
if (irq_ack < 0) {
dev_err(&pdev->dev, "required ack interrupt missing\n");
-@@ -621,7 +637,11 @@ static int qcom_rpm_probe(struct platfor
+@@ -625,7 +641,11 @@ static int qcom_rpm_probe(struct platfor
static int qcom_rpm_remove(struct platform_device *pdev)
{
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
-@@ -2571,14 +2571,14 @@ static void dwc3_process_event_entry(str
+@@ -2572,14 +2572,14 @@ static void dwc3_process_event_entry(str
}
}
left = evt->count;
if (!(evt->flags & DWC3_EVENT_PENDING))
-@@ -2603,7 +2603,7 @@ static irqreturn_t dwc3_process_event_bu
+@@ -2604,7 +2604,7 @@ static irqreturn_t dwc3_process_event_bu
evt->lpos = (evt->lpos + 4) % DWC3_EVENT_BUFFERS_SIZE;
left -= 4;
}
evt->count = 0;
-@@ -2611,9 +2611,9 @@ static irqreturn_t dwc3_process_event_bu
+@@ -2612,9 +2612,9 @@ static irqreturn_t dwc3_process_event_bu
ret = IRQ_HANDLED;
/* Unmask interrupt */
return ret;
}
-@@ -2623,27 +2623,23 @@ static irqreturn_t dwc3_thread_interrupt
+@@ -2624,27 +2624,23 @@ static irqreturn_t dwc3_thread_interrupt
struct dwc3 *dwc = _dwc;
unsigned long flags;
irqreturn_t ret = IRQ_NONE;
count &= DWC3_GEVNTCOUNT_MASK;
if (!count)
return IRQ_NONE;
-@@ -2652,9 +2648,9 @@ static irqreturn_t dwc3_check_event_buf(
+@@ -2653,9 +2649,9 @@ static irqreturn_t dwc3_check_event_buf(
evt->flags |= DWC3_EVENT_PENDING;
/* Mask interrupt */
return IRQ_WAKE_THREAD;
}
-@@ -2662,18 +2658,8 @@ static irqreturn_t dwc3_check_event_buf(
+@@ -2663,18 +2659,8 @@ static irqreturn_t dwc3_check_event_buf(
static irqreturn_t dwc3_interrupt(int irq, void *_dwc)
{
struct dwc3 *dwc = _dwc;
struct usb_gadget gadget;
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
-@@ -2578,7 +2578,7 @@ static irqreturn_t dwc3_process_event_bu
+@@ -2579,7 +2579,7 @@ static irqreturn_t dwc3_process_event_bu
int left;
u32 reg;
left = evt->count;
if (!(evt->flags & DWC3_EVENT_PENDING))
-@@ -2637,7 +2637,7 @@ static irqreturn_t dwc3_check_event_buf(
+@@ -2638,7 +2638,7 @@ static irqreturn_t dwc3_check_event_buf(
u32 count;
u32 reg;
#endif
--- a/net/dsa/slave.c
+++ b/net/dsa/slave.c
-@@ -1186,6 +1186,11 @@ int dsa_slave_create(struct dsa_switch *
+@@ -1190,6 +1190,11 @@ int dsa_slave_create(struct dsa_switch *
p->xmit = brcm_netdev_ops.xmit;
break;
#endif
+ }
+#endif
+
+ /* parameters may set static keys */
+ jump_label_init();
parse_early_param();
- after_dashes = parse_args("Booting kernel",
- static_command_line, __start___param,
/* Get the HEAD */
skb = kmem_cache_alloc_node(cache, gfp_mask & ~__GFP_DMA, node);
-@@ -1148,6 +1151,10 @@ int pskb_expand_head(struct sk_buff *skb
+@@ -1152,6 +1155,10 @@ int pskb_expand_head(struct sk_buff *skb
if (skb_shared(skb))
BUG();
---
--- a/drivers/net/ethernet/marvell/mv643xx_eth.c
+++ b/drivers/net/ethernet/marvell/mv643xx_eth.c
-@@ -3178,11 +3178,11 @@ static int mv643xx_eth_probe(struct plat
+@@ -3183,11 +3183,11 @@ static int mv643xx_eth_probe(struct plat
dev->watchdog_timeo = 2 * HZ;
dev->base_addr = 0;
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
-@@ -2221,6 +2221,12 @@ config MIPS_VPE_LOADER
+@@ -2224,6 +2224,12 @@ config MIPS_VPE_LOADER
Includes a loader for loading an elf relocatable object
onto another VPE and running it.
help
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
-@@ -787,6 +787,11 @@ config FSL_GTM
+@@ -792,6 +792,11 @@ config FSL_GTM
help
Freescale General-purpose Timers support
# Yes MCA RS/6000s exist but Linux-PPC does not currently support any
config MCA
bool
-@@ -919,14 +924,14 @@ config DYNAMIC_MEMSTART
+@@ -924,14 +929,14 @@ config DYNAMIC_MEMSTART
select NONSTATIC_KERNEL
help
This option enables the kernel to be loaded at any page aligned
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
-@@ -799,6 +799,7 @@ void kfree_skb(struct sk_buff *skb);
+@@ -804,6 +804,7 @@ void kfree_skb(struct sk_buff *skb);
void kfree_skb_list(struct sk_buff *segs);
void skb_tx_error(struct sk_buff *skb);
void consume_skb(struct sk_buff *skb);
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
-@@ -766,6 +766,32 @@ void consume_skb(struct sk_buff *skb)
+@@ -770,6 +770,32 @@ void consume_skb(struct sk_buff *skb)
}
EXPORT_SYMBOL(consume_skb);
--- a/include/linux/netdev_features.h
+++ b/include/linux/netdev_features.h
-@@ -66,6 +66,9 @@ enum {
+@@ -68,6 +68,9 @@ enum {
NETIF_F_HW_VLAN_STAG_FILTER_BIT,/* Receive filtering on VLAN STAGs */
NETIF_F_HW_L2FW_DOFFLOAD_BIT, /* Allow L2 Forwarding in Hardware */
NETIF_F_BUSY_POLL_BIT, /* Busy poll */
/*
* Add your fresh new feature above and remember to update
-@@ -124,6 +127,9 @@ enum {
+@@ -126,6 +129,9 @@ enum {
#define NETIF_F_HW_VLAN_STAG_TX __NETIF_F(HW_VLAN_STAG_TX)
#define NETIF_F_HW_L2FW_DOFFLOAD __NETIF_F(HW_L2FW_DOFFLOAD)
#define NETIF_F_BUSY_POLL __NETIF_F(BUSY_POLL)
+#define NETIF_F_HW_QDISC __NETIF_F(HW_QDISC)
+#define NETIF_F_HW_ACCEL_MQ __NETIF_F(HW_ACCEL_MQ)
- #define for_each_netdev_feature(mask_addr, bit) \
- for_each_set_bit(bit, (unsigned long *)mask_addr, NETDEV_FEATURE_COUNT)
+ /* Finds the next feature with the highest number of the range of start till 0.
+ */
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
-@@ -188,6 +188,11 @@ source "arch/arm64/Kconfig.platforms"
+@@ -187,6 +187,11 @@ source "arch/arm64/Kconfig.platforms"
menu "Bus support"
+#endif /* _PLATFORM_H_ */
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
-@@ -858,6 +858,17 @@ static inline struct sk_buff *alloc_skb_
+@@ -863,6 +863,17 @@ static inline struct sk_buff *alloc_skb_
return __alloc_skb(size, priority, SKB_ALLOC_FCLONE, NUMA_NO_NODE);
}
}
--- a/scripts/mod/file2alias.c
+++ b/scripts/mod/file2alias.c
-@@ -1271,6 +1271,18 @@ static int do_hda_entry(const char *file
+@@ -1186,6 +1186,18 @@ static int do_hda_entry(const char *file
+ return 1;
}
- ADD_TO_DEVTABLE("hdaudio", hda_device_id, do_hda_entry);
+/* Looks like: fsl-mc:vNdN */
+static int do_fsl_mc_entry(const char *filename, void *symval,
--- a/drivers/mmc/host/sdhci-of-esdhc.c
+++ b/drivers/mmc/host/sdhci-of-esdhc.c
-@@ -635,6 +635,14 @@ static int sdhci_esdhc_probe(struct plat
+@@ -640,6 +640,14 @@ static int sdhci_esdhc_probe(struct plat
if (of_device_is_compatible(np, "fsl,ls1021a-esdhc"))
host->quirks |= SDHCI_QUIRK_BROKEN_TIMEOUT_VAL;
+#endif /* _PCI_LAYERSCAPE_H */
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
-@@ -3593,8 +3593,9 @@ int pci_dev_specific_reset(struct pci_de
+@@ -3594,8 +3594,9 @@ int pci_dev_specific_reset(struct pci_de
static void quirk_dma_func0_alias(struct pci_dev *dev)
{
if (PCI_FUNC(dev->devfn) != 0) {
}
}
-@@ -3609,8 +3610,9 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_R
+@@ -3610,8 +3611,9 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_R
static void quirk_dma_func1_alias(struct pci_dev *dev)
{
if (PCI_FUNC(dev->devfn) != 1) {
}
}
-@@ -3681,11 +3683,12 @@ static void quirk_fixed_dma_alias(struct
+@@ -3684,11 +3686,12 @@ static void quirk_fixed_dma_alias(struct
id = pci_match_id(fixed_dma_alias_tbl, dev);
if (id) {
--- a/drivers/mmc/host/sdhci-of-esdhc.c
+++ b/drivers/mmc/host/sdhci-of-esdhc.c
-@@ -629,6 +629,7 @@ static int sdhci_esdhc_probe(struct plat
+@@ -634,6 +634,7 @@ static int sdhci_esdhc_probe(struct plat
of_device_is_compatible(np, "fsl,p4080-esdhc") ||
of_device_is_compatible(np, "fsl,p1020-esdhc") ||
of_device_is_compatible(np, "fsl,t1040-esdhc") ||
#endif
--- a/arch/arm64/kernel/head.S
+++ b/arch/arm64/kernel/head.S
-@@ -212,6 +212,8 @@ ENTRY(stext)
+@@ -213,6 +213,8 @@ ENTRY(stext)
bl el2_setup // Drop to EL1, w20=cpu_boot_mode
adrp x24, __PHYS_OFFSET
bl set_cpu_boot_mode_flag
bl __create_page_tables // x25=TTBR0, x26=TTBR1
/*
* The following calls CPU setup code, see arch/arm64/mm/proc.S for
-@@ -243,6 +245,24 @@ preserve_boot_args:
+@@ -244,6 +246,24 @@ preserve_boot_args:
ENDPROC(preserve_boot_args)
/*
* Macro to create a table entry to the next page.
*
* tbl: page table address
-@@ -306,7 +326,8 @@ ENDPROC(preserve_boot_args)
+@@ -307,7 +327,8 @@ ENDPROC(preserve_boot_args)
* required to get the kernel running. The following sections are required:
* - identity mapping to enable the MMU (low address, TTBR0)
* - first few MB of the kernel linear mapping to jump to once the MMU has
*/
__create_page_tables:
adrp x25, idmap_pg_dir
-@@ -396,6 +417,22 @@ __create_page_tables:
+@@ -397,6 +418,22 @@ __create_page_tables:
create_block_map x0, x7, x3, x5, x6
/*
/*
* Returns zero if the TRB isn't in this segment, otherwise it returns the DMA
-@@ -3113,17 +3114,22 @@ static u32 xhci_td_remainder(struct xhci
+@@ -3116,17 +3117,22 @@ static u32 xhci_td_remainder(struct xhci
{
u32 maxp, total_packet_count;
/* Queueing functions don't count the current TRB into transferred */
return (total_packet_count - ((transferred + trb_buff_len) / maxp));
}
-@@ -3511,7 +3517,7 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *
+@@ -3514,7 +3520,7 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *
field |= 0x1;
/* xHCI 1.0/1.1 6.4.1.2.1: Transfer Type field */
field |= TRB_TX_TYPE(TRB_DATA_IN);
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
-@@ -31,6 +31,7 @@
+@@ -32,6 +32,7 @@
#include "xhci.h"
#include "xhci-trace.h"
#define DRIVER_AUTHOR "Sarah Sharp"
#define DRIVER_DESC "'eXtensible' Host Controller (xHC) Driver"
-@@ -635,7 +636,11 @@ int xhci_run(struct usb_hcd *hcd)
+@@ -633,7 +634,11 @@ int xhci_run(struct usb_hcd *hcd)
"// Set the interrupt modulation register");
temp = readl(&xhci->ir_set->irq_control);
temp &= ~ER_IRQ_INTERVAL_MASK;
writel(temp, &xhci->ir_set->irq_control);
/* Set the HCD state before we enable the irqs */
-@@ -1730,6 +1735,9 @@ int xhci_drop_endpoint(struct usb_hcd *h
+@@ -1728,6 +1733,9 @@ int xhci_drop_endpoint(struct usb_hcd *h
xhci_endpoint_zero(xhci, xhci->devs[udev->slot_id], ep);
xhci_dbg(xhci, "drop ep 0x%x, slot id %d, new drop flags = %#x, new add flags = %#x\n",
(unsigned int) ep->desc.bEndpointAddress,
udev->slot_id,
-@@ -1825,6 +1833,15 @@ int xhci_add_endpoint(struct usb_hcd *hc
+@@ -1823,6 +1831,15 @@ int xhci_add_endpoint(struct usb_hcd *hc
return -ENOMEM;
}
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
-@@ -1638,6 +1638,7 @@ struct xhci_hcd {
+@@ -1639,6 +1639,7 @@ struct xhci_hcd {
/* For controllers with a broken beyond repair streams implementation */
#define XHCI_BROKEN_STREAMS (1 << 19)
#define XHCI_PME_STUCK_QUIRK (1 << 20)
--- a/arch/powerpc/boot/Makefile
+++ b/arch/powerpc/boot/Makefile
-@@ -114,6 +114,7 @@ src-plat-$(CONFIG_PPC_PSERIES) += pserie
+@@ -115,6 +115,7 @@ src-plat-$(CONFIG_PPC_PSERIES) += pserie
src-plat-$(CONFIG_PPC_POWERNV) += pseries-head.S
src-plat-$(CONFIG_PPC_IBM_CELL_BLADE) += pseries-head.S
src-plat-$(CONFIG_PPC_CELL_QPACE) += pseries-head.S
src-wlib := $(sort $(src-wlib-y))
src-plat := $(sort $(src-plat-y))
-@@ -297,6 +298,7 @@ image-$(CONFIG_TQM8555) += cuImage.tqm
+@@ -298,6 +299,7 @@ image-$(CONFIG_TQM8555) += cuImage.tqm
image-$(CONFIG_TQM8560) += cuImage.tqm8560
image-$(CONFIG_SBC8548) += cuImage.sbc8548
image-$(CONFIG_KSI8560) += cuImage.ksi8560
+ }
+#endif
+
+ /* parameters may set static keys */
+ jump_label_init();
parse_early_param();
- after_dashes = parse_args("Booting kernel",
- static_command_line, __start___param,
/* initialize internal qc */
/* XXX: Tag 0 is used for drivers with legacy EH as some
-@@ -4818,6 +4826,9 @@ struct ata_queued_cmd *ata_qc_new_init(s
+@@ -4819,6 +4827,9 @@ struct ata_queued_cmd *ata_qc_new_init(s
if (unlikely(ap->pflags & ATA_PFLAG_FROZEN))
return NULL;
/* libsas case */
if (ap->flags & ATA_FLAG_SAS_HOST) {
tag = ata_sas_allocate_tag(ap);
-@@ -4863,6 +4874,8 @@ void ata_qc_free(struct ata_queued_cmd *
+@@ -4864,6 +4875,8 @@ void ata_qc_free(struct ata_queued_cmd *
qc->tag = ATA_TAG_POISON;
if (ap->flags & ATA_FLAG_SAS_HOST)
ata_sas_free_tag(tag, ap);
--- a/drivers/media/usb/uvc/uvc_driver.c
+++ b/drivers/media/usb/uvc/uvc_driver.c
-@@ -2665,6 +2665,18 @@ static struct usb_device_id uvc_ids[] =
+@@ -2673,6 +2673,18 @@ static struct usb_device_id uvc_ids[] =
.bInterfaceSubClass = 1,
.bInterfaceProtocol = 0,
.driver_info = UVC_QUIRK_FORCE_Y8 },
#include <media/v4l2-common.h>
-@@ -1104,9 +1109,149 @@ static void uvc_video_decode_data(struct
+@@ -1112,9 +1117,149 @@ static void uvc_video_decode_data(struct
}
}
/* Mark the buffer as done if the EOF marker is set. */
if (data[1] & UVC_STREAM_EOF && buf->bytesused != 0) {
uvc_trace(UVC_TRACE_FRAME, "Frame complete (EOF found).\n");
-@@ -1519,6 +1664,8 @@ static int uvc_init_video_isoc(struct uv
+@@ -1527,6 +1672,8 @@ static int uvc_init_video_isoc(struct uv
if (npackets == 0)
return -ENOMEM;
/*
* Returns zero if the TRB isn't in this segment, otherwise it returns the DMA
-@@ -3113,17 +3114,22 @@ static u32 xhci_td_remainder(struct xhci
+@@ -3116,17 +3117,22 @@ static u32 xhci_td_remainder(struct xhci
{
u32 maxp, total_packet_count;
/* Queueing functions don't count the current TRB into transferred */
return (total_packet_count - ((transferred + trb_buff_len) / maxp));
}
-@@ -3511,7 +3517,7 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *
+@@ -3514,7 +3520,7 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *
field |= 0x1;
/* xHCI 1.0/1.1 6.4.1.2.1: Transfer Type field */
field |= TRB_TX_TYPE(TRB_DATA_IN);
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
-@@ -31,6 +31,7 @@
+@@ -32,6 +32,7 @@
#include "xhci.h"
#include "xhci-trace.h"
#define DRIVER_AUTHOR "Sarah Sharp"
#define DRIVER_DESC "'eXtensible' Host Controller (xHC) Driver"
-@@ -635,7 +636,11 @@ int xhci_run(struct usb_hcd *hcd)
+@@ -633,7 +634,11 @@ int xhci_run(struct usb_hcd *hcd)
"// Set the interrupt modulation register");
temp = readl(&xhci->ir_set->irq_control);
temp &= ~ER_IRQ_INTERVAL_MASK;
writel(temp, &xhci->ir_set->irq_control);
/* Set the HCD state before we enable the irqs */
-@@ -1730,6 +1735,9 @@ int xhci_drop_endpoint(struct usb_hcd *h
+@@ -1728,6 +1733,9 @@ int xhci_drop_endpoint(struct usb_hcd *h
xhci_endpoint_zero(xhci, xhci->devs[udev->slot_id], ep);
xhci_dbg(xhci, "drop ep 0x%x, slot id %d, new drop flags = %#x, new add flags = %#x\n",
(unsigned int) ep->desc.bEndpointAddress,
udev->slot_id,
-@@ -1825,6 +1833,15 @@ int xhci_add_endpoint(struct usb_hcd *hc
+@@ -1823,6 +1831,15 @@ int xhci_add_endpoint(struct usb_hcd *hc
return -ENOMEM;
}
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
-@@ -1638,6 +1638,7 @@ struct xhci_hcd {
+@@ -1639,6 +1639,7 @@ struct xhci_hcd {
/* For controllers with a broken beyond repair streams implementation */
#define XHCI_BROKEN_STREAMS (1 << 19)
#define XHCI_PME_STUCK_QUIRK (1 << 20)