kernel: bump 4.9 to 4.9.143
authorKoen Vandeputte <koen.vandeputte@ncentric.com>
Thu, 6 Dec 2018 09:48:21 +0000 (10:48 +0100)
committerKoen Vandeputte <koen.vandeputte@ncentric.com>
Mon, 10 Dec 2018 10:48:44 +0000 (11:48 +0100)
Refreshed all patches.

Altered patches:
- 950-0063-Improve-__copy_to_user-and-__copy_from_user-performa.patch
- 201-extra_optimization.patch

New symbol:
- CONFIG_HARDEN_BRANCH_PREDICTOR

Compile-tested on: ar7, at91, brcm2708, ixp4xx, layerscape, orion
Runtime-tested on: none

Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
[fix brcm2708/950-0149-Update-vfpmodule.c.patch]
Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
16 files changed:
include/kernel-version.mk
target/linux/at91/config-4.9
target/linux/brcm2708/patches-4.9/950-0001-smsx95xx-fix-crimes-against-truesize.patch
target/linux/brcm2708/patches-4.9/950-0028-kbuild-Ignore-dtco-targets-when-filtering-symbols.patch
target/linux/brcm2708/patches-4.9/950-0031-Add-dwc_otg-driver.patch
target/linux/brcm2708/patches-4.9/950-0063-Improve-__copy_to_user-and-__copy_from_user-performa.patch
target/linux/brcm2708/patches-4.9/950-0149-Update-vfpmodule.c.patch
target/linux/generic/backport-4.9/023-1-smsc95xx-Use-skb_cow_head-to-deal-with-cloned-skbs.patch
target/linux/generic/hack-4.9/207-disable-modorder.patch
target/linux/generic/hack-4.9/220-gc_sections.patch
target/linux/generic/hack-4.9/221-module_exports.patch
target/linux/generic/pending-4.9/201-extra_optimization.patch
target/linux/generic/pending-4.9/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch
target/linux/generic/pending-4.9/680-NET-skip-GRO-for-foreign-MAC-addresses.patch
target/linux/layerscape/patches-4.9/202-core-linux-support-layerscape.patch
target/linux/layerscape/patches-4.9/817-usb-support-layerscape.patch

index c99d113fb0e04ff45ecbc1f71e8d286a9d78ffda..46c2641e17c05e2d022ace76573f8ab16b5e8a55 100644 (file)
@@ -3,11 +3,11 @@
 LINUX_RELEASE?=1
 
 LINUX_VERSION-3.18 = .128
-LINUX_VERSION-4.9 = .138
+LINUX_VERSION-4.9 = .143
 LINUX_VERSION-4.14 = .82
 
 LINUX_KERNEL_HASH-3.18.128 = 396368ef7eadf639c6f62ef43ea9c63a05280f926f731c3a86b0aa0e2b3ad2e3
-LINUX_KERNEL_HASH-4.9.138 = 92301242601d50854b173a3fdec318480e24fc86f32102003a9ed7108fab21b7
+LINUX_KERNEL_HASH-4.9.143 = 0eb76464a696675fd4f8762e390328a377e973bfa263b00544ca1b5b10ac2cbf
 LINUX_KERNEL_HASH-4.14.82 = a790a2e6f6a76d70decec91d1b7bcfba90f821b076273da070f6e0e1e6391dad
 
 remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1))))
index 926681fb3c264b101c1d39f0d31cb4f31ba84372..45faf55155fc5202445a5947bfd4a7766283f03e 100644 (file)
@@ -198,6 +198,7 @@ CONFIG_GPIOLIB_IRQCHIP=y
 CONFIG_GPIO_SYSFS=y
 CONFIG_GRACE_PERIOD=y
 CONFIG_HANDLE_DOMAIN_IRQ=y
+CONFIG_HARDEN_BRANCH_PREDICTOR=y
 CONFIG_HARDIRQS_SW_RESEND=y
 CONFIG_HAS_DMA=y
 CONFIG_HAS_IOMEM=y
index 8916e52741d1670c7c33fb470cba30cf5eaa2f7c..b0de3f211a086a4a429102fc4897a5e79f25aa3b 100644 (file)
@@ -25,7 +25,7 @@ Signed-off-by: Steve Glendinning <steve.glendinning@smsc.com>
  static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index,
                                            u32 *data, int in_pm)
  {
-@@ -1954,7 +1958,8 @@ static int smsc95xx_rx_fixup(struct usbn
+@@ -1961,7 +1965,8 @@ static int smsc95xx_rx_fixup(struct usbn
                                if (dev->net->features & NETIF_F_RXCSUM)
                                        smsc95xx_rx_csum_offload(skb);
                                skb_trim(skb, skb->len - 4); /* remove fcs */
@@ -35,7 +35,7 @@ Signed-off-by: Steve Glendinning <steve.glendinning@smsc.com>
  
                                return 1;
                        }
-@@ -1972,7 +1977,8 @@ static int smsc95xx_rx_fixup(struct usbn
+@@ -1979,7 +1984,8 @@ static int smsc95xx_rx_fixup(struct usbn
                        if (dev->net->features & NETIF_F_RXCSUM)
                                smsc95xx_rx_csum_offload(ax_skb);
                        skb_trim(ax_skb, ax_skb->len - 4); /* remove fcs */
index 52fe8a228184fbe346a1102ea3dddd285763dd3e..28f337b0e3b78b19bf3a3031931f42f189e1306d 100644 (file)
@@ -9,7 +9,7 @@ Subject: [PATCH] kbuild: Ignore dtco targets when filtering symbols
 
 --- a/scripts/Kbuild.include
 +++ b/scripts/Kbuild.include
-@@ -285,7 +285,7 @@ ksym_dep_filter =
+@@ -295,7 +295,7 @@ ksym_dep_filter =
            $(CPP) $(call flags_nodeps,c_flags) -D__KSYM_DEPS__ $< ;;        \
          as_*_S|cpp_s_S)                                                    \
            $(CPP) $(call flags_nodeps,a_flags) -D__KSYM_DEPS__ $< ;;        \
index 12174919bb37d6d9d745d91505c52d4d9f69b07c..707e1a34a1ef9973b287d0045bcfb98641024460 100644 (file)
@@ -696,7 +696,7 @@ Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
  }
 --- a/drivers/usb/core/hub.c
 +++ b/drivers/usb/core/hub.c
-@@ -5072,7 +5072,7 @@ static void port_event(struct usb_hub *h
+@@ -5074,7 +5074,7 @@ static void port_event(struct usb_hub *h
        if (portchange & USB_PORT_STAT_C_OVERCURRENT) {
                u16 status = 0, unused;
  
index 016d48dd2c53dc3204fa75c1847e3f76b5938d2a..c1e5858bce9bbb2ee23ee00016fc58d8c4fb52b9 100644 (file)
@@ -57,7 +57,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
  #define memset(p,v,n)                                                 \
 --- a/arch/arm/include/asm/uaccess.h
 +++ b/arch/arm/include/asm/uaccess.h
-@@ -477,6 +477,9 @@ do {                                                                       \
+@@ -489,6 +489,9 @@ do {                                                                       \
  extern unsigned long __must_check
  arm_copy_from_user(void *to, const void __user *from, unsigned long n);
  
@@ -262,17 +262,21 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
 +.endm
 --- a/arch/arm/lib/copy_from_user.S
 +++ b/arch/arm/lib/copy_from_user.S
-@@ -89,11 +89,13 @@
+@@ -89,7 +89,8 @@
  
        .text
  
 -ENTRY(arm_copy_from_user)
 +ENTRY(__copy_from_user_std)
 +WEAK(arm_copy_from_user)
+ #ifdef CONFIG_CPU_SPECTRE
+       get_thread_info r3
+       ldr     r3, [r3, #TI_ADDR_LIMIT]
+@@ -102,7 +103,7 @@ ENTRY(arm_copy_from_user)
  
  #include "copy_template.S"
  
- ENDPROC(arm_copy_from_user)
+-ENDPROC(arm_copy_from_user)
 +ENDPROC(__copy_from_user_std)
  
        .pushsection .fixup,"ax"
index 16d740aafb202999b726f458b2812b08fd0c51ad..78606ed61b1882a3e0029591487a2b94ed0517e9 100644 (file)
@@ -102,15 +102,15 @@ Signed-off-by: Christopher Alexander Tobias Schulze <cat.schulze@alice-dsl.net>
                vfp_save_state(&thread->vfpstate, fpexc | FPEXC_EN);
                fmxr(FPEXC, fpexc);
        }
-@@ -604,6 +611,7 @@ int vfp_restore_user_hwstate(struct user
+@@ -602,6 +609,7 @@ int vfp_restore_user_hwstate(struct user
+       struct thread_info *thread = current_thread_info();
        struct vfp_hard_struct *hwstate = &thread->vfpstate.hard;
        unsigned long fpexc;
-       int err = 0;
 +      u32 fpsid = fmrx(FPSID);
  
        /* Disable VFP to avoid corrupting the new thread state. */
        vfp_flush_hwstate(thread);
-@@ -627,8 +635,12 @@ int vfp_restore_user_hwstate(struct user
+@@ -624,8 +632,12 @@ int vfp_restore_user_hwstate(struct user
        /* Ensure the VFP is enabled. */
        fpexc |= FPEXC_EN;
  
@@ -124,8 +124,8 @@ Signed-off-by: Christopher Alexander Tobias Schulze <cat.schulze@alice-dsl.net>
 +
        hwstate->fpexc = fpexc;
  
-       __get_user_error(hwstate->fpinst, &ufp_exc->fpinst, err);
-@@ -698,7 +710,8 @@ void kernel_neon_begin(void)
+       hwstate->fpinst = ufp_exc->fpinst;
+@@ -695,7 +707,8 @@ void kernel_neon_begin(void)
        cpu = get_cpu();
  
        fpexc = fmrx(FPEXC) | FPEXC_EN;
index c665900dc4d44d7f124cf09e81f71f39ba90b5dd..9fbdfe4a0437126c8eb43fe583f88390e37a3463 100644 (file)
@@ -18,7 +18,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
 
 --- a/drivers/net/usb/smsc95xx.c
 +++ b/drivers/net/usb/smsc95xx.c
-@@ -2004,13 +2004,13 @@ static struct sk_buff *smsc95xx_tx_fixup
+@@ -2011,13 +2011,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);
  
index 22e863c2866cfdf6b32654cb0205e7916fab0e18..e92f4fa0bf31b47a22b3c258f54303a0e69d8d06 100644 (file)
@@ -15,7 +15,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 
 --- a/Makefile
 +++ b/Makefile
-@@ -1213,7 +1213,6 @@ all: modules
+@@ -1226,7 +1226,6 @@ all: modules
  
  PHONY += modules
  modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin
@@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        @$(kecho) '  Building modules, stage 2.';
        $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
        $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_modbuild
-@@ -1243,7 +1242,6 @@ _modinst_:
+@@ -1256,7 +1255,6 @@ _modinst_:
                rm -f $(MODLIB)/build ; \
                ln -s $(CURDIR) $(MODLIB)/build ; \
        fi
index 31317448992b89efa825d1f0aa8b2658397b849f..ea805090357d891e615952f0d83992a8283bd750 100644 (file)
@@ -33,7 +33,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  # Read KERNELRELEASE from include/config/kernel.release (if it exists)
  KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
  KERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION)
-@@ -638,11 +643,6 @@ KBUILD_CFLAGS     += $(call cc-disable-warni
+@@ -671,11 +676,6 @@ KBUILD_CFLAGS     += $(call cc-disable-warni
  KBUILD_CFLAGS += $(call cc-disable-warning, int-in-bool-context)
  KBUILD_CFLAGS += $(call cc-disable-warning, attribute-alias)
  
@@ -43,8 +43,8 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
 -endif
 -
  ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
- KBUILD_CFLAGS += -Os $(call cc-disable-warning,maybe-uninitialized,) $(EXTRA_OPTIMIZATION)
- else
+ KBUILD_CFLAGS += $(call cc-option,-Oz,-Os)
+ KBUILD_CFLAGS += $(call cc-disable-warning,maybe-uninitialized,) $(EXTRA_OPTIMIZATION)
 --- a/arch/arm/Kconfig
 +++ b/arch/arm/Kconfig
 @@ -81,6 +81,7 @@ config ARM
index a2027d0d5aa1ddfda2aabd1ba394a4e23282924a..f357d73d6ab8772c7f6d7c180cadfef59c50a198 100644 (file)
@@ -90,7 +90,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        __used                                                          \
 --- a/scripts/Makefile.build
 +++ b/scripts/Makefile.build
-@@ -401,7 +401,7 @@ targets += $(extra-y) $(MAKECMDGOALS) $(
+@@ -409,7 +409,7 @@ targets += $(extra-y) $(MAKECMDGOALS) $(
  # Linker scripts preprocessor (.lds.S -> .lds)
  # ---------------------------------------------------------------------------
  quiet_cmd_cpp_lds_S = LDS     $@
index 8197f7bb9f103ba151e4f97cea80ed96d5a44e61..6cc23a261c23f119a0449336b5ff30edc9b479e6 100644 (file)
@@ -14,12 +14,12 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 
 --- a/Makefile
 +++ b/Makefile
-@@ -644,12 +644,12 @@ KBUILD_CFLAGS    += $(call cc-option,-fdata
- endif
+@@ -678,12 +678,12 @@ endif
  
  ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
--KBUILD_CFLAGS += -Os $(call cc-disable-warning,maybe-uninitialized,)
-+KBUILD_CFLAGS += -Os $(call cc-disable-warning,maybe-uninitialized,) $(EXTRA_OPTIMIZATION)
+ KBUILD_CFLAGS += $(call cc-option,-Oz,-Os)
+-KBUILD_CFLAGS += $(call cc-disable-warning,maybe-uninitialized,)
++KBUILD_CFLAGS += $(call cc-disable-warning,maybe-uninitialized,) $(EXTRA_OPTIMIZATION)
  else
  ifdef CONFIG_PROFILE_ALL_BRANCHES
 -KBUILD_CFLAGS += -O2 $(call cc-disable-warning,maybe-uninitialized,)
index c8deaba842bd4464e54d4042fd69418e159c9059..2cebf55a447b63f73f80ca14256db2d978c9573d 100644 (file)
@@ -141,7 +141,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
  static const struct rt6_info ip6_blk_hole_entry_template = {
        .dst = {
                .__refcnt       = ATOMIC_INIT(1),
-@@ -1967,6 +1984,11 @@ static struct rt6_info *ip6_route_info_c
+@@ -1970,6 +1987,11 @@ static struct rt6_info *ip6_route_info_c
                        rt->dst.output = ip6_pkt_prohibit_out;
                        rt->dst.input = ip6_pkt_prohibit;
                        break;
@@ -191,7 +191,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
                case -EAGAIN:
                        rtm->rtm_type = RTN_THROW;
                        break;
-@@ -3490,6 +3527,8 @@ static int ip6_route_dev_notify(struct n
+@@ -3498,6 +3535,8 @@ static int ip6_route_dev_notify(struct n
  #ifdef CONFIG_IPV6_MULTIPLE_TABLES
                net->ipv6.ip6_prohibit_entry->dst.dev = dev;
                net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev);
@@ -200,7 +200,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
                net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
                net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
  #endif
-@@ -3501,6 +3540,7 @@ static int ip6_route_dev_notify(struct n
+@@ -3509,6 +3548,7 @@ static int ip6_route_dev_notify(struct n
                in6_dev_put(net->ipv6.ip6_null_entry->rt6i_idev);
  #ifdef CONFIG_IPV6_MULTIPLE_TABLES
                in6_dev_put(net->ipv6.ip6_prohibit_entry->rt6i_idev);
@@ -208,7 +208,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
                in6_dev_put(net->ipv6.ip6_blk_hole_entry->rt6i_idev);
  #endif
        }
-@@ -3716,6 +3756,17 @@ static int __net_init ip6_route_net_init
+@@ -3724,6 +3764,17 @@ static int __net_init ip6_route_net_init
        net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops;
        dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst,
                         ip6_template_metrics, true);
@@ -226,7 +226,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
  #endif
  
        net->ipv6.sysctl.flush_delay = 0;
-@@ -3734,6 +3785,8 @@ out:
+@@ -3742,6 +3793,8 @@ out:
        return ret;
  
  #ifdef CONFIG_IPV6_MULTIPLE_TABLES
@@ -235,7 +235,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
  out_ip6_prohibit_entry:
        kfree(net->ipv6.ip6_prohibit_entry);
  out_ip6_null_entry:
-@@ -3751,6 +3804,7 @@ static void __net_exit ip6_route_net_exi
+@@ -3759,6 +3812,7 @@ static void __net_exit ip6_route_net_exi
  #ifdef CONFIG_IPV6_MULTIPLE_TABLES
        kfree(net->ipv6.ip6_prohibit_entry);
        kfree(net->ipv6.ip6_blk_hole_entry);
@@ -243,7 +243,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
  #endif
        dst_entries_destroy(&net->ipv6.ip6_dst_ops);
  }
-@@ -3824,6 +3878,9 @@ void __init ip6_route_init_special_entri
+@@ -3832,6 +3886,9 @@ void __init ip6_route_init_special_entri
        init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
        init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev;
        init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
index 58518f9cfd2a94c76f25d8ab15925acd9833b850..037d2e138dbe30e963fbf0b2b8dacf08b61e983c 100644 (file)
@@ -44,7 +44,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        if (!(skb->dev->features & NETIF_F_GRO))
                goto normal;
  
-@@ -5860,6 +5863,48 @@ static void __netdev_adjacent_dev_unlink
+@@ -5864,6 +5867,48 @@ static void __netdev_adjacent_dev_unlink
                                           &upper_dev->adj_list.lower);
  }
  
@@ -93,7 +93,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  static int __netdev_upper_dev_link(struct net_device *dev,
                                   struct net_device *upper_dev, bool master,
                                   void *upper_priv, void *upper_info)
-@@ -5932,6 +5977,7 @@ static int __netdev_upper_dev_link(struc
+@@ -5936,6 +5981,7 @@ static int __netdev_upper_dev_link(struc
                        goto rollback_lower_mesh;
        }
  
@@ -101,7 +101,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev,
                                            &changeupper_info.info);
        ret = notifier_to_errno(ret);
-@@ -6058,6 +6104,7 @@ void netdev_upper_dev_unlink(struct net_
+@@ -6062,6 +6108,7 @@ void netdev_upper_dev_unlink(struct net_
        list_for_each_entry(i, &upper_dev->all_adj_list.upper, list)
                __netdev_adjacent_dev_unlink(dev, i->dev, i->ref_nr);
  
@@ -109,7 +109,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev,
                                      &changeupper_info.info);
  }
-@@ -6660,6 +6707,7 @@ int dev_set_mac_address(struct net_devic
+@@ -6664,6 +6711,7 @@ int dev_set_mac_address(struct net_devic
        if (err)
                return err;
        dev->addr_assign_type = NET_ADDR_SET;
index 28a4d111a5941347d58fdf7581d273def5ea4708..8a431a02e27d891408e1584eb2728cd2cb0454e8 100644 (file)
@@ -1297,7 +1297,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
  #ifdef CONFIG_XPS
  static DEFINE_MUTEX(xps_map_mutex);
  #define xmap_dereference(P)           \
-@@ -6652,9 +6669,18 @@ int dev_set_mtu(struct net_device *dev,
+@@ -6656,9 +6673,18 @@ int dev_set_mtu(struct net_device *dev,
        if (new_mtu == dev->mtu)
                return 0;
  
index cad2b41aa79947d88ff14ec9f2a9f6d0ae740a30..a6a1594a9a1a4404719e66c8700cf58638a66078 100644 (file)
@@ -157,7 +157,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
        int ret;
 --- a/drivers/usb/core/hub.c
 +++ b/drivers/usb/core/hub.c
-@@ -4431,6 +4431,14 @@ hub_port_init(struct usb_hub *hub, struc
+@@ -4433,6 +4433,14 @@ hub_port_init(struct usb_hub *hub, struc
        else
                speed = usb_speed_string(udev->speed);
  
@@ -637,7 +637,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
  
 --- a/drivers/usb/dwc3/gadget.c
 +++ b/drivers/usb/dwc3/gadget.c
-@@ -2932,6 +2932,7 @@ static irqreturn_t dwc3_interrupt(int ir
+@@ -2927,6 +2927,7 @@ static irqreturn_t dwc3_interrupt(int ir
  int dwc3_gadget_init(struct dwc3 *dwc)
  {
        int ret, irq;
@@ -645,7 +645,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
        struct platform_device *dwc3_pdev = to_platform_device(dwc->dev);
  
        irq = platform_get_irq_byname(dwc3_pdev, "peripheral");
-@@ -3046,6 +3047,12 @@ int dwc3_gadget_init(struct dwc3 *dwc)
+@@ -3041,6 +3042,12 @@ int dwc3_gadget_init(struct dwc3 *dwc)
                goto err5;
        }