commit:     e3c14a90a3d9b3c0076842b5fbc28e710836fe1e
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Sun May 15 22:10:17 2022 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Sun May 15 22:10:17 2022 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=e3c14a90

Linux patch 5.10.116

Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>

 0000_README               |   4 +
 1115_linux-5.10.116.patch | 563 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 567 insertions(+)

diff --git a/0000_README b/0000_README
index 46bc953b..3d86ae35 100644
--- a/0000_README
+++ b/0000_README
@@ -503,6 +503,10 @@ Patch:  1114_linux-5.10.115.patch
 From:   http://www.kernel.org
 Desc:   Linux 5.10.115
 
+Patch:  1115_linux-5.10.116.patch
+From:   http://www.kernel.org
+Desc:   Linux 5.10.116
+
 Patch:  1500_XATTR_USER_PREFIX.patch
 From:   https://bugs.gentoo.org/show_bug.cgi?id=470644
 Desc:   Support for namespace user.pax.* on tmpfs.

diff --git a/1115_linux-5.10.116.patch b/1115_linux-5.10.116.patch
new file mode 100644
index 00000000..ef864f4c
--- /dev/null
+++ b/1115_linux-5.10.116.patch
@@ -0,0 +1,563 @@
+diff --git a/Documentation/vm/memory-model.rst 
b/Documentation/vm/memory-model.rst
+index 9daadf9faba14..ce398a7dc6cd5 100644
+--- a/Documentation/vm/memory-model.rst
++++ b/Documentation/vm/memory-model.rst
+@@ -51,8 +51,7 @@ call :c:func:`free_area_init` function. Yet, the mappings 
array is not
+ usable until the call to :c:func:`memblock_free_all` that hands all the
+ memory to the page allocator.
+ 
+-If an architecture enables `CONFIG_ARCH_HAS_HOLES_MEMORYMODEL` option,
+-it may free parts of the `mem_map` array that do not cover the
++An architecture may free parts of the `mem_map` array that do not cover the
+ actual physical pages. In such case, the architecture specific
+ :c:func:`pfn_valid` implementation should take the holes in the
+ `mem_map` into account.
+diff --git a/Makefile b/Makefile
+index 86d3e137d7f2d..c999de1b6a6b2 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,7 +1,7 @@
+ # SPDX-License-Identifier: GPL-2.0
+ VERSION = 5
+ PATCHLEVEL = 10
+-SUBLEVEL = 115
++SUBLEVEL = 116
+ EXTRAVERSION =
+ NAME = Dare mighty things
+ 
+diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
+index a0eac00e2c81a..b587ecc6f9493 100644
+--- a/arch/arm/Kconfig
++++ b/arch/arm/Kconfig
+@@ -25,7 +25,7 @@ config ARM
+       select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
+       select ARCH_HAVE_CUSTOM_GPIO_H
+       select ARCH_HAS_GCOV_PROFILE_ALL
+-      select ARCH_KEEP_MEMBLOCK if HAVE_ARCH_PFN_VALID || KEXEC
++      select ARCH_KEEP_MEMBLOCK
+       select ARCH_MIGHT_HAVE_PC_PARPORT
+       select ARCH_NO_SG_CHAIN if !ARM_HAS_SG_CHAIN
+       select ARCH_OPTIONAL_KERNEL_RWX if ARCH_HAS_STRICT_KERNEL_RWX
+@@ -521,7 +521,6 @@ config ARCH_S3C24XX
+ config ARCH_OMAP1
+       bool "TI OMAP1"
+       depends on MMU
+-      select ARCH_HAS_HOLES_MEMORYMODEL
+       select ARCH_OMAP
+       select CLKDEV_LOOKUP
+       select CLKSRC_MMIO
+@@ -1481,9 +1480,6 @@ config OABI_COMPAT
+         UNPREDICTABLE (in fact it can be predicted that it won't work
+         at all). If in doubt say N.
+ 
+-config ARCH_HAS_HOLES_MEMORYMODEL
+-      bool
+-
+ config ARCH_SELECT_MEMORY_MODEL
+       bool
+ 
+@@ -1495,7 +1491,7 @@ config ARCH_SPARSEMEM_ENABLE
+       select SPARSEMEM_STATIC if SPARSEMEM
+ 
+ config HAVE_ARCH_PFN_VALID
+-      def_bool ARCH_HAS_HOLES_MEMORYMODEL || !SPARSEMEM
++      def_bool y
+ 
+ config HIGHMEM
+       bool "High Memory Support"
+diff --git a/arch/arm/mach-bcm/Kconfig b/arch/arm/mach-bcm/Kconfig
+index ae790908fc74a..9b594ae98153c 100644
+--- a/arch/arm/mach-bcm/Kconfig
++++ b/arch/arm/mach-bcm/Kconfig
+@@ -211,7 +211,6 @@ config ARCH_BRCMSTB
+       select BCM7038_L1_IRQ
+       select BRCMSTB_L2_IRQ
+       select BCM7120_L2_IRQ
+-      select ARCH_HAS_HOLES_MEMORYMODEL
+       select ZONE_DMA if ARM_LPAE
+       select SOC_BRCMSTB
+       select SOC_BUS
+diff --git a/arch/arm/mach-davinci/Kconfig b/arch/arm/mach-davinci/Kconfig
+index f56ff8c24043d..de11030748d0b 100644
+--- a/arch/arm/mach-davinci/Kconfig
++++ b/arch/arm/mach-davinci/Kconfig
+@@ -5,7 +5,6 @@ menuconfig ARCH_DAVINCI
+       depends on ARCH_MULTI_V5
+       select DAVINCI_TIMER
+       select ZONE_DMA
+-      select ARCH_HAS_HOLES_MEMORYMODEL
+       select PM_GENERIC_DOMAINS if PM
+       select PM_GENERIC_DOMAINS_OF if PM && OF
+       select REGMAP_MMIO
+diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig
+index 56314b1c74089..b5df98ee5d176 100644
+--- a/arch/arm/mach-exynos/Kconfig
++++ b/arch/arm/mach-exynos/Kconfig
+@@ -8,7 +8,6 @@
+ menuconfig ARCH_EXYNOS
+       bool "Samsung Exynos"
+       depends on ARCH_MULTI_V7
+-      select ARCH_HAS_HOLES_MEMORYMODEL
+       select ARCH_SUPPORTS_BIG_ENDIAN
+       select ARM_AMBA
+       select ARM_GIC
+diff --git a/arch/arm/mach-highbank/Kconfig b/arch/arm/mach-highbank/Kconfig
+index 1bc68913d62c1..9de38ce8124f2 100644
+--- a/arch/arm/mach-highbank/Kconfig
++++ b/arch/arm/mach-highbank/Kconfig
+@@ -2,7 +2,6 @@
+ config ARCH_HIGHBANK
+       bool "Calxeda ECX-1000/2000 (Highbank/Midway)"
+       depends on ARCH_MULTI_V7
+-      select ARCH_HAS_HOLES_MEMORYMODEL
+       select ARCH_SUPPORTS_BIG_ENDIAN
+       select ARM_AMBA
+       select ARM_ERRATA_764369 if SMP
+diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
+index 3f62a0c9450dd..164985505f9e5 100644
+--- a/arch/arm/mach-omap2/Kconfig
++++ b/arch/arm/mach-omap2/Kconfig
+@@ -93,7 +93,6 @@ config SOC_DRA7XX
+ config ARCH_OMAP2PLUS
+       bool
+       select ARCH_HAS_BANDGAP
+-      select ARCH_HAS_HOLES_MEMORYMODEL
+       select ARCH_HAS_RESET_CONTROLLER
+       select ARCH_OMAP
+       select CLKSRC_MMIO
+diff --git a/arch/arm/mach-s5pv210/Kconfig b/arch/arm/mach-s5pv210/Kconfig
+index 95d4e82848662..d644b45bc29d0 100644
+--- a/arch/arm/mach-s5pv210/Kconfig
++++ b/arch/arm/mach-s5pv210/Kconfig
+@@ -8,7 +8,6 @@
+ config ARCH_S5PV210
+       bool "Samsung S5PV210/S5PC110"
+       depends on ARCH_MULTI_V7
+-      select ARCH_HAS_HOLES_MEMORYMODEL
+       select ARM_VIC
+       select CLKSRC_SAMSUNG_PWM
+       select COMMON_CLK_SAMSUNG
+diff --git a/arch/arm/mach-tango/Kconfig b/arch/arm/mach-tango/Kconfig
+index 25b2fd4348617..a9eeda36aeb15 100644
+--- a/arch/arm/mach-tango/Kconfig
++++ b/arch/arm/mach-tango/Kconfig
+@@ -3,7 +3,6 @@ config ARCH_TANGO
+       bool "Sigma Designs Tango4 (SMP87xx)"
+       depends on ARCH_MULTI_V7
+       # Cortex-A9 MPCore r3p0, PL310 r3p2
+-      select ARCH_HAS_HOLES_MEMORYMODEL
+       select ARM_ERRATA_754322
+       select ARM_ERRATA_764369 if SMP
+       select ARM_ERRATA_775420
+diff --git a/arch/mips/bmips/setup.c b/arch/mips/bmips/setup.c
+index 19308df5f5779..1b06b25aea87d 100644
+--- a/arch/mips/bmips/setup.c
++++ b/arch/mips/bmips/setup.c
+@@ -167,7 +167,7 @@ void __init plat_mem_setup(void)
+               dtb = phys_to_virt(fw_arg2);
+       else if (fw_passed_dtb) /* UHI interface or appended dtb */
+               dtb = (void *)fw_passed_dtb;
+-      else if (__dtb_start != __dtb_end)
++      else if (&__dtb_start != &__dtb_end)
+               dtb = (void *)__dtb_start;
+       else
+               panic("no dtb found");
+diff --git a/arch/mips/lantiq/prom.c b/arch/mips/lantiq/prom.c
+index 51a218f04fe0d..3f568f5aae2d1 100644
+--- a/arch/mips/lantiq/prom.c
++++ b/arch/mips/lantiq/prom.c
+@@ -79,7 +79,7 @@ void __init plat_mem_setup(void)
+ 
+       if (fw_passed_dtb) /* UHI interface */
+               dtb = (void *)fw_passed_dtb;
+-      else if (__dtb_start != __dtb_end)
++      else if (&__dtb_start != &__dtb_end)
+               dtb = (void *)__dtb_start;
+       else
+               panic("no dtb found");
+diff --git a/arch/mips/pic32/pic32mzda/init.c 
b/arch/mips/pic32/pic32mzda/init.c
+index 50f376f058f43..f232c77ff5265 100644
+--- a/arch/mips/pic32/pic32mzda/init.c
++++ b/arch/mips/pic32/pic32mzda/init.c
+@@ -28,7 +28,7 @@ static ulong get_fdtaddr(void)
+       if (fw_passed_dtb && !fw_arg2 && !fw_arg3)
+               return (ulong)fw_passed_dtb;
+ 
+-      if (__dtb_start < __dtb_end)
++      if (&__dtb_start < &__dtb_end)
+               ftaddr = (ulong)__dtb_start;
+ 
+       return ftaddr;
+diff --git a/arch/mips/ralink/of.c b/arch/mips/ralink/of.c
+index a971f1aca096c..3017263ac4f9f 100644
+--- a/arch/mips/ralink/of.c
++++ b/arch/mips/ralink/of.c
+@@ -77,7 +77,7 @@ void __init plat_mem_setup(void)
+        */
+       if (fw_passed_dtb)
+               dtb = (void *)fw_passed_dtb;
+-      else if (__dtb_start != __dtb_end)
++      else if (&__dtb_start != &__dtb_end)
+               dtb = (void *)__dtb_start;
+ 
+       __dt_setup_arch(dtb);
+diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c
+index f8d0146bf7852..54f77b4a0b494 100644
+--- a/drivers/block/drbd/drbd_nl.c
++++ b/drivers/block/drbd/drbd_nl.c
+@@ -790,9 +790,11 @@ int drbd_adm_set_role(struct sk_buff *skb, struct 
genl_info *info)
+       mutex_lock(&adm_ctx.resource->adm_mutex);
+ 
+       if (info->genlhdr->cmd == DRBD_ADM_PRIMARY)
+-              retcode = drbd_set_role(adm_ctx.device, R_PRIMARY, 
parms.assume_uptodate);
++              retcode = (enum drbd_ret_code)drbd_set_role(adm_ctx.device,
++                                              R_PRIMARY, 
parms.assume_uptodate);
+       else
+-              retcode = drbd_set_role(adm_ctx.device, R_SECONDARY, 0);
++              retcode = (enum drbd_ret_code)drbd_set_role(adm_ctx.device,
++                                              R_SECONDARY, 0);
+ 
+       mutex_unlock(&adm_ctx.resource->adm_mutex);
+       genl_lock();
+@@ -1962,7 +1964,7 @@ int drbd_adm_attach(struct sk_buff *skb, struct 
genl_info *info)
+       drbd_flush_workqueue(&connection->sender_work);
+ 
+       rv = _drbd_request_state(device, NS(disk, D_ATTACHING), CS_VERBOSE);
+-      retcode = rv;  /* FIXME: Type mismatch. */
++      retcode = (enum drbd_ret_code)rv;
+       drbd_resume_io(device);
+       if (rv < SS_SUCCESS)
+               goto fail;
+@@ -2687,7 +2689,8 @@ int drbd_adm_connect(struct sk_buff *skb, struct 
genl_info *info)
+       }
+       rcu_read_unlock();
+ 
+-      retcode = conn_request_state(connection, NS(conn, C_UNCONNECTED), 
CS_VERBOSE);
++      retcode = (enum drbd_ret_code)conn_request_state(connection,
++                                      NS(conn, C_UNCONNECTED), CS_VERBOSE);
+ 
+       conn_reconfig_done(connection);
+       mutex_unlock(&adm_ctx.resource->adm_mutex);
+@@ -2800,7 +2803,7 @@ int drbd_adm_disconnect(struct sk_buff *skb, struct 
genl_info *info)
+       mutex_lock(&adm_ctx.resource->adm_mutex);
+       rv = conn_try_disconnect(connection, parms.force_disconnect);
+       if (rv < SS_SUCCESS)
+-              retcode = rv;  /* FIXME: Type mismatch. */
++              retcode = (enum drbd_ret_code)rv;
+       else
+               retcode = NO_ERROR;
+       mutex_unlock(&adm_ctx.resource->adm_mutex);
+diff --git a/drivers/gpu/drm/amd/display/dc/gpio/gpio_service.c 
b/drivers/gpu/drm/amd/display/dc/gpio/gpio_service.c
+index 92280cc05e2db..dae8e489c8cf4 100644
+--- a/drivers/gpu/drm/amd/display/dc/gpio/gpio_service.c
++++ b/drivers/gpu/drm/amd/display/dc/gpio/gpio_service.c
+@@ -53,8 +53,8 @@
+  */
+ 
+ struct gpio_service *dal_gpio_service_create(
+-      enum dce_version dce_version_major,
+-      enum dce_version dce_version_minor,
++      enum dce_version dce_version,
++      enum dce_environment dce_environment,
+       struct dc_context *ctx)
+ {
+       struct gpio_service *service;
+@@ -67,14 +67,14 @@ struct gpio_service *dal_gpio_service_create(
+               return NULL;
+       }
+ 
+-      if (!dal_hw_translate_init(&service->translate, dce_version_major,
+-                      dce_version_minor)) {
++      if (!dal_hw_translate_init(&service->translate, dce_version,
++                      dce_environment)) {
+               BREAK_TO_DEBUGGER();
+               goto failure_1;
+       }
+ 
+-      if (!dal_hw_factory_init(&service->factory, dce_version_major,
+-                      dce_version_minor)) {
++      if (!dal_hw_factory_init(&service->factory, dce_version,
++                      dce_environment)) {
+               BREAK_TO_DEBUGGER();
+               goto failure_1;
+       }
+diff --git a/drivers/gpu/drm/amd/display/include/gpio_service_interface.h 
b/drivers/gpu/drm/amd/display/include/gpio_service_interface.h
+index 9c55d247227ea..7e3240e73c1fc 100644
+--- a/drivers/gpu/drm/amd/display/include/gpio_service_interface.h
++++ b/drivers/gpu/drm/amd/display/include/gpio_service_interface.h
+@@ -42,8 +42,8 @@ void dal_gpio_destroy(
+       struct gpio **ptr);
+ 
+ struct gpio_service *dal_gpio_service_create(
+-      enum dce_version dce_version_major,
+-      enum dce_version dce_version_minor,
++      enum dce_version dce_version,
++      enum dce_environment dce_environment,
+       struct dc_context *ctx);
+ 
+ struct gpio *dal_gpio_service_create_irq(
+diff --git a/drivers/net/ethernet/netronome/nfp/nfp_asm.c 
b/drivers/net/ethernet/netronome/nfp/nfp_asm.c
+index 2643ea5948f48..154399c5453fe 100644
+--- a/drivers/net/ethernet/netronome/nfp/nfp_asm.c
++++ b/drivers/net/ethernet/netronome/nfp/nfp_asm.c
+@@ -196,7 +196,7 @@ int swreg_to_unrestricted(swreg dst, swreg lreg, swreg 
rreg,
+       }
+ 
+       reg->dst_lmextn = swreg_lmextn(dst);
+-      reg->src_lmextn = swreg_lmextn(lreg) | swreg_lmextn(rreg);
++      reg->src_lmextn = swreg_lmextn(lreg) || swreg_lmextn(rreg);
+ 
+       return 0;
+ }
+@@ -277,7 +277,7 @@ int swreg_to_restricted(swreg dst, swreg lreg, swreg rreg,
+       }
+ 
+       reg->dst_lmextn = swreg_lmextn(dst);
+-      reg->src_lmextn = swreg_lmextn(lreg) | swreg_lmextn(rreg);
++      reg->src_lmextn = swreg_lmextn(lreg) || swreg_lmextn(rreg);
+ 
+       return 0;
+ }
+diff --git a/fs/proc/kcore.c b/fs/proc/kcore.c
+index e502414b35564..4d2e64e9016c1 100644
+--- a/fs/proc/kcore.c
++++ b/fs/proc/kcore.c
+@@ -193,8 +193,6 @@ kclist_add_private(unsigned long pfn, unsigned long 
nr_pages, void *arg)
+               return 1;
+ 
+       p = pfn_to_page(pfn);
+-      if (!memmap_valid_within(pfn, p, page_zone(p)))
+-              return 1;
+ 
+       ent = kmalloc(sizeof(*ent), GFP_KERNEL);
+       if (!ent)
+diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
+index f3016b8e698ab..b2e4599b88832 100644
+--- a/include/linux/mmzone.h
++++ b/include/linux/mmzone.h
+@@ -1443,37 +1443,6 @@ struct mminit_pfnnid_cache {
+ #define pfn_valid_within(pfn) (1)
+ #endif
+ 
+-#ifdef CONFIG_ARCH_HAS_HOLES_MEMORYMODEL
+-/*
+- * pfn_valid() is meant to be able to tell if a given PFN has valid memmap
+- * associated with it or not. This means that a struct page exists for this
+- * pfn. The caller cannot assume the page is fully initialized in general.
+- * Hotplugable pages might not have been onlined yet. pfn_to_online_page()
+- * will ensure the struct page is fully online and initialized. Special pages
+- * (e.g. ZONE_DEVICE) are never onlined and should be treated accordingly.
+- *
+- * In FLATMEM, it is expected that holes always have valid memmap as long as
+- * there is valid PFNs either side of the hole. In SPARSEMEM, it is assumed
+- * that a valid section has a memmap for the entire section.
+- *
+- * However, an ARM, and maybe other embedded architectures in the future
+- * free memmap backing holes to save memory on the assumption the memmap is
+- * never used. The page_zone linkages are then broken even though pfn_valid()
+- * returns true. A walker of the full memmap must then do this additional
+- * check to ensure the memmap they are looking at is sane by making sure
+- * the zone and PFN linkages are still valid. This is expensive, but walkers
+- * of the full memmap are extremely rare.
+- */
+-bool memmap_valid_within(unsigned long pfn,
+-                                      struct page *page, struct zone *zone);
+-#else
+-static inline bool memmap_valid_within(unsigned long pfn,
+-                                      struct page *page, struct zone *zone)
+-{
+-      return true;
+-}
+-#endif /* CONFIG_ARCH_HAS_HOLES_MEMORYMODEL */
+-
+ #endif /* !__GENERATING_BOUNDS.H */
+ #endif /* !__ASSEMBLY__ */
+ #endif /* _LINUX_MMZONE_H */
+diff --git a/include/linux/regulator/consumer.h 
b/include/linux/regulator/consumer.h
+index 2024944fd2f78..20e84a84fb779 100644
+--- a/include/linux/regulator/consumer.h
++++ b/include/linux/regulator/consumer.h
+@@ -331,6 +331,12 @@ regulator_get_exclusive(struct device *dev, const char 
*id)
+       return ERR_PTR(-ENODEV);
+ }
+ 
++static inline struct regulator *__must_check
++devm_regulator_get_exclusive(struct device *dev, const char *id)
++{
++      return ERR_PTR(-ENODEV);
++}
++
+ static inline struct regulator *__must_check
+ regulator_get_optional(struct device *dev, const char *id)
+ {
+@@ -486,6 +492,11 @@ static inline int regulator_get_voltage(struct regulator 
*regulator)
+       return -EINVAL;
+ }
+ 
++static inline int regulator_sync_voltage(struct regulator *regulator)
++{
++      return -EINVAL;
++}
++
+ static inline int regulator_is_supported_voltage(struct regulator *regulator,
+                                  int min_uV, int max_uV)
+ {
+@@ -578,6 +589,25 @@ static inline int 
devm_regulator_unregister_notifier(struct regulator *regulator
+       return 0;
+ }
+ 
++static inline int regulator_suspend_enable(struct regulator_dev *rdev,
++                                         suspend_state_t state)
++{
++      return -EINVAL;
++}
++
++static inline int regulator_suspend_disable(struct regulator_dev *rdev,
++                                          suspend_state_t state)
++{
++      return -EINVAL;
++}
++
++static inline int regulator_set_suspend_voltage(struct regulator *regulator,
++                                              int min_uV, int max_uV,
++                                              suspend_state_t state)
++{
++      return -EINVAL;
++}
++
+ static inline void *regulator_get_drvdata(struct regulator *regulator)
+ {
+       return NULL;
+diff --git a/include/net/bluetooth/hci_core.h 
b/include/net/bluetooth/hci_core.h
+index a592a826e2fb5..09104ca14a3e4 100644
+--- a/include/net/bluetooth/hci_core.h
++++ b/include/net/bluetooth/hci_core.h
+@@ -35,6 +35,9 @@
+ /* HCI priority */
+ #define HCI_PRIO_MAX  7
+ 
++/* HCI maximum id value */
++#define HCI_MAX_ID 10000
++
+ /* HCI Core structures */
+ struct inquiry_data {
+       bdaddr_t        bdaddr;
+diff --git a/mm/memory.c b/mm/memory.c
+index 14f91c7467d6f..72236b1ce5903 100644
+--- a/mm/memory.c
++++ b/mm/memory.c
+@@ -5295,6 +5295,8 @@ long copy_huge_page_from_user(struct page *dst_page,
+               if (rc)
+                       break;
+ 
++              flush_dcache_page(subpage);
++
+               cond_resched();
+       }
+       return ret_val;
+diff --git a/mm/migrate.c b/mm/migrate.c
+index 278e6f3fa62ce..495bdac5cf929 100644
+--- a/mm/migrate.c
++++ b/mm/migrate.c
+@@ -1010,9 +1010,12 @@ static int move_to_new_page(struct page *newpage, 
struct page *page,
+               if (!PageMappingFlags(page))
+                       page->mapping = NULL;
+ 
+-              if (likely(!is_zone_device_page(newpage)))
+-                      flush_dcache_page(newpage);
++              if (likely(!is_zone_device_page(newpage))) {
++                      int i, nr = compound_nr(newpage);
+ 
++                      for (i = 0; i < nr; i++)
++                              flush_dcache_page(newpage + i);
++              }
+       }
+ out:
+       return rc;
+diff --git a/mm/mmzone.c b/mm/mmzone.c
+index 4686fdc23bb96..f337831affc2d 100644
+--- a/mm/mmzone.c
++++ b/mm/mmzone.c
+@@ -72,20 +72,6 @@ struct zoneref *__next_zones_zonelist(struct zoneref *z,
+       return z;
+ }
+ 
+-#ifdef CONFIG_ARCH_HAS_HOLES_MEMORYMODEL
+-bool memmap_valid_within(unsigned long pfn,
+-                                      struct page *page, struct zone *zone)
+-{
+-      if (page_to_pfn(page) != pfn)
+-              return false;
+-
+-      if (page_zone(page) != zone)
+-              return false;
+-
+-      return true;
+-}
+-#endif /* CONFIG_ARCH_HAS_HOLES_MEMORYMODEL */
+-
+ void lruvec_init(struct lruvec *lruvec)
+ {
+       enum lru_list lru;
+diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c
+index 9a3d451402d7b..078d95cd32c53 100644
+--- a/mm/userfaultfd.c
++++ b/mm/userfaultfd.c
+@@ -83,6 +83,8 @@ static int mcopy_atomic_pte(struct mm_struct *dst_mm,
+                       /* don't free the page */
+                       goto out;
+               }
++
++              flush_dcache_page(page);
+       } else {
+               page = *pagep;
+               *pagep = NULL;
+@@ -595,6 +597,7 @@ retry:
+                               err = -EFAULT;
+                               goto out;
+                       }
++                      flush_dcache_page(page);
+                       goto retry;
+               } else
+                       BUG_ON(page);
+diff --git a/mm/vmstat.c b/mm/vmstat.c
+index 698bc0bc18d14..e292e63afebf2 100644
+--- a/mm/vmstat.c
++++ b/mm/vmstat.c
+@@ -1503,10 +1503,6 @@ static void pagetypeinfo_showblockcount_print(struct 
seq_file *m,
+               if (!page)
+                       continue;
+ 
+-              /* Watch for unexpected holes punched in the memmap */
+-              if (!memmap_valid_within(pfn, page, zone))
+-                      continue;
+-
+               if (page_zone(page) != zone)
+                       continue;
+ 
+diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
+index 2e7998bad133b..c331b4176de73 100644
+--- a/net/bluetooth/hci_core.c
++++ b/net/bluetooth/hci_core.c
+@@ -3718,10 +3718,10 @@ int hci_register_dev(struct hci_dev *hdev)
+        */
+       switch (hdev->dev_type) {
+       case HCI_PRIMARY:
+-              id = ida_simple_get(&hci_index_ida, 0, 0, GFP_KERNEL);
++              id = ida_simple_get(&hci_index_ida, 0, HCI_MAX_ID, GFP_KERNEL);
+               break;
+       case HCI_AMP:
+-              id = ida_simple_get(&hci_index_ida, 1, 0, GFP_KERNEL);
++              id = ida_simple_get(&hci_index_ida, 1, HCI_MAX_ID, GFP_KERNEL);
+               break;
+       default:
+               return -EINVAL;
+@@ -3730,7 +3730,7 @@ int hci_register_dev(struct hci_dev *hdev)
+       if (id < 0)
+               return id;
+ 
+-      sprintf(hdev->name, "hci%d", id);
++      snprintf(hdev->name, sizeof(hdev->name), "hci%d", id);
+       hdev->id = id;
+ 
+       BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);

Reply via email to