Merge 5.10.116 into android12-5.10-lts

Changes in 5.10.116
	MIPS: Use address-of operator on section symbols
	regulator: consumer: Add missing stubs to regulator/consumer.h
	block: drbd: drbd_nl: Make conversion to 'enum drbd_ret_code' explicit
	drm/amd/display/dc/gpio/gpio_service: Pass around correct dce_{version, environment} types
	nfp: bpf: silence bitwise vs. logical OR warning
	arm: remove CONFIG_ARCH_HAS_HOLES_MEMORYMODEL
	Bluetooth: Fix the creation of hdev->name
	mm: fix missing cache flush for all tail pages of compound page
	mm: hugetlb: fix missing cache flush in copy_huge_page_from_user()
	mm: userfaultfd: fix missing cache flush in mcopy_atomic_pte() and __mcopy_atomic()
	Linux 5.10.116

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: Ie56f60d172ca37af63c180390007d6b65d0618a5
This commit is contained in:
Greg Kroah-Hartman
2022-05-16 08:45:59 +02:00
28 changed files with 72 additions and 91 deletions

View File

@@ -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 usable until the call to :c:func:`memblock_free_all` that hands all the
memory to the page allocator. memory to the page allocator.
If an architecture enables `CONFIG_ARCH_HAS_HOLES_MEMORYMODEL` option, An architecture may free parts of the `mem_map` array that do not cover the
it may free parts of the `mem_map` array that do not cover the
actual physical pages. In such case, the architecture specific actual physical pages. In such case, the architecture specific
:c:func:`pfn_valid` implementation should take the holes in the :c:func:`pfn_valid` implementation should take the holes in the
`mem_map` into account. `mem_map` into account.

View File

@@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0 # SPDX-License-Identifier: GPL-2.0
VERSION = 5 VERSION = 5
PATCHLEVEL = 10 PATCHLEVEL = 10
SUBLEVEL = 115 SUBLEVEL = 116
EXTRAVERSION = EXTRAVERSION =
NAME = Dare mighty things NAME = Dare mighty things

View File

@@ -25,7 +25,7 @@ config ARM
select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
select ARCH_HAVE_CUSTOM_GPIO_H select ARCH_HAVE_CUSTOM_GPIO_H
select ARCH_HAS_GCOV_PROFILE_ALL 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_MIGHT_HAVE_PC_PARPORT
select ARCH_NO_SG_CHAIN if !ARM_HAS_SG_CHAIN select ARCH_NO_SG_CHAIN if !ARM_HAS_SG_CHAIN
select ARCH_OPTIONAL_KERNEL_RWX if ARCH_HAS_STRICT_KERNEL_RWX select ARCH_OPTIONAL_KERNEL_RWX if ARCH_HAS_STRICT_KERNEL_RWX
@@ -522,7 +522,6 @@ config ARCH_S3C24XX
config ARCH_OMAP1 config ARCH_OMAP1
bool "TI OMAP1" bool "TI OMAP1"
depends on MMU depends on MMU
select ARCH_HAS_HOLES_MEMORYMODEL
select ARCH_OMAP select ARCH_OMAP
select CLKDEV_LOOKUP select CLKDEV_LOOKUP
select CLKSRC_MMIO select CLKSRC_MMIO
@@ -1482,9 +1481,6 @@ config OABI_COMPAT
UNPREDICTABLE (in fact it can be predicted that it won't work UNPREDICTABLE (in fact it can be predicted that it won't work
at all). If in doubt say N. at all). If in doubt say N.
config ARCH_HAS_HOLES_MEMORYMODEL
bool
config ARCH_SELECT_MEMORY_MODEL config ARCH_SELECT_MEMORY_MODEL
bool bool
@@ -1496,7 +1492,7 @@ config ARCH_SPARSEMEM_ENABLE
select SPARSEMEM_STATIC if SPARSEMEM select SPARSEMEM_STATIC if SPARSEMEM
config HAVE_ARCH_PFN_VALID config HAVE_ARCH_PFN_VALID
def_bool ARCH_HAS_HOLES_MEMORYMODEL || !SPARSEMEM def_bool y
config HIGHMEM config HIGHMEM
bool "High Memory Support" bool "High Memory Support"

View File

@@ -211,7 +211,6 @@ config ARCH_BRCMSTB
select BCM7038_L1_IRQ select BCM7038_L1_IRQ
select BRCMSTB_L2_IRQ select BRCMSTB_L2_IRQ
select BCM7120_L2_IRQ select BCM7120_L2_IRQ
select ARCH_HAS_HOLES_MEMORYMODEL
select ZONE_DMA if ARM_LPAE select ZONE_DMA if ARM_LPAE
select SOC_BRCMSTB select SOC_BRCMSTB
select SOC_BUS select SOC_BUS

View File

@@ -5,7 +5,6 @@ menuconfig ARCH_DAVINCI
depends on ARCH_MULTI_V5 depends on ARCH_MULTI_V5
select DAVINCI_TIMER select DAVINCI_TIMER
select ZONE_DMA select ZONE_DMA
select ARCH_HAS_HOLES_MEMORYMODEL
select PM_GENERIC_DOMAINS if PM select PM_GENERIC_DOMAINS if PM
select PM_GENERIC_DOMAINS_OF if PM && OF select PM_GENERIC_DOMAINS_OF if PM && OF
select REGMAP_MMIO select REGMAP_MMIO

View File

@@ -8,7 +8,6 @@
menuconfig ARCH_EXYNOS menuconfig ARCH_EXYNOS
bool "Samsung Exynos" bool "Samsung Exynos"
depends on ARCH_MULTI_V7 depends on ARCH_MULTI_V7
select ARCH_HAS_HOLES_MEMORYMODEL
select ARCH_SUPPORTS_BIG_ENDIAN select ARCH_SUPPORTS_BIG_ENDIAN
select ARM_AMBA select ARM_AMBA
select ARM_GIC select ARM_GIC

View File

@@ -2,7 +2,6 @@
config ARCH_HIGHBANK config ARCH_HIGHBANK
bool "Calxeda ECX-1000/2000 (Highbank/Midway)" bool "Calxeda ECX-1000/2000 (Highbank/Midway)"
depends on ARCH_MULTI_V7 depends on ARCH_MULTI_V7
select ARCH_HAS_HOLES_MEMORYMODEL
select ARCH_SUPPORTS_BIG_ENDIAN select ARCH_SUPPORTS_BIG_ENDIAN
select ARM_AMBA select ARM_AMBA
select ARM_ERRATA_764369 if SMP select ARM_ERRATA_764369 if SMP

View File

@@ -93,7 +93,6 @@ config SOC_DRA7XX
config ARCH_OMAP2PLUS config ARCH_OMAP2PLUS
bool bool
select ARCH_HAS_BANDGAP select ARCH_HAS_BANDGAP
select ARCH_HAS_HOLES_MEMORYMODEL
select ARCH_HAS_RESET_CONTROLLER select ARCH_HAS_RESET_CONTROLLER
select ARCH_OMAP select ARCH_OMAP
select CLKSRC_MMIO select CLKSRC_MMIO

View File

@@ -8,7 +8,6 @@
config ARCH_S5PV210 config ARCH_S5PV210
bool "Samsung S5PV210/S5PC110" bool "Samsung S5PV210/S5PC110"
depends on ARCH_MULTI_V7 depends on ARCH_MULTI_V7
select ARCH_HAS_HOLES_MEMORYMODEL
select ARM_VIC select ARM_VIC
select CLKSRC_SAMSUNG_PWM select CLKSRC_SAMSUNG_PWM
select COMMON_CLK_SAMSUNG select COMMON_CLK_SAMSUNG

View File

@@ -3,7 +3,6 @@ config ARCH_TANGO
bool "Sigma Designs Tango4 (SMP87xx)" bool "Sigma Designs Tango4 (SMP87xx)"
depends on ARCH_MULTI_V7 depends on ARCH_MULTI_V7
# Cortex-A9 MPCore r3p0, PL310 r3p2 # Cortex-A9 MPCore r3p0, PL310 r3p2
select ARCH_HAS_HOLES_MEMORYMODEL
select ARM_ERRATA_754322 select ARM_ERRATA_754322
select ARM_ERRATA_764369 if SMP select ARM_ERRATA_764369 if SMP
select ARM_ERRATA_775420 select ARM_ERRATA_775420

View File

@@ -167,7 +167,7 @@ void __init plat_mem_setup(void)
dtb = phys_to_virt(fw_arg2); dtb = phys_to_virt(fw_arg2);
else if (fw_passed_dtb) /* UHI interface or appended dtb */ else if (fw_passed_dtb) /* UHI interface or appended dtb */
dtb = (void *)fw_passed_dtb; dtb = (void *)fw_passed_dtb;
else if (__dtb_start != __dtb_end) else if (&__dtb_start != &__dtb_end)
dtb = (void *)__dtb_start; dtb = (void *)__dtb_start;
else else
panic("no dtb found"); panic("no dtb found");

View File

@@ -79,7 +79,7 @@ void __init plat_mem_setup(void)
if (fw_passed_dtb) /* UHI interface */ if (fw_passed_dtb) /* UHI interface */
dtb = (void *)fw_passed_dtb; dtb = (void *)fw_passed_dtb;
else if (__dtb_start != __dtb_end) else if (&__dtb_start != &__dtb_end)
dtb = (void *)__dtb_start; dtb = (void *)__dtb_start;
else else
panic("no dtb found"); panic("no dtb found");

View File

@@ -28,7 +28,7 @@ static ulong get_fdtaddr(void)
if (fw_passed_dtb && !fw_arg2 && !fw_arg3) if (fw_passed_dtb && !fw_arg2 && !fw_arg3)
return (ulong)fw_passed_dtb; return (ulong)fw_passed_dtb;
if (__dtb_start < __dtb_end) if (&__dtb_start < &__dtb_end)
ftaddr = (ulong)__dtb_start; ftaddr = (ulong)__dtb_start;
return ftaddr; return ftaddr;

View File

@@ -77,7 +77,7 @@ void __init plat_mem_setup(void)
*/ */
if (fw_passed_dtb) if (fw_passed_dtb)
dtb = (void *)fw_passed_dtb; dtb = (void *)fw_passed_dtb;
else if (__dtb_start != __dtb_end) else if (&__dtb_start != &__dtb_end)
dtb = (void *)__dtb_start; dtb = (void *)__dtb_start;
__dt_setup_arch(dtb); __dt_setup_arch(dtb);

View File

@@ -790,9 +790,11 @@ int drbd_adm_set_role(struct sk_buff *skb, struct genl_info *info)
mutex_lock(&adm_ctx.resource->adm_mutex); mutex_lock(&adm_ctx.resource->adm_mutex);
if (info->genlhdr->cmd == DRBD_ADM_PRIMARY) 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 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); mutex_unlock(&adm_ctx.resource->adm_mutex);
genl_lock(); genl_lock();
@@ -1962,7 +1964,7 @@ int drbd_adm_attach(struct sk_buff *skb, struct genl_info *info)
drbd_flush_workqueue(&connection->sender_work); drbd_flush_workqueue(&connection->sender_work);
rv = _drbd_request_state(device, NS(disk, D_ATTACHING), CS_VERBOSE); 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); drbd_resume_io(device);
if (rv < SS_SUCCESS) if (rv < SS_SUCCESS)
goto fail; goto fail;
@@ -2687,7 +2689,8 @@ int drbd_adm_connect(struct sk_buff *skb, struct genl_info *info)
} }
rcu_read_unlock(); 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); conn_reconfig_done(connection);
mutex_unlock(&adm_ctx.resource->adm_mutex); 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); mutex_lock(&adm_ctx.resource->adm_mutex);
rv = conn_try_disconnect(connection, parms.force_disconnect); rv = conn_try_disconnect(connection, parms.force_disconnect);
if (rv < SS_SUCCESS) if (rv < SS_SUCCESS)
retcode = rv; /* FIXME: Type mismatch. */ retcode = (enum drbd_ret_code)rv;
else else
retcode = NO_ERROR; retcode = NO_ERROR;
mutex_unlock(&adm_ctx.resource->adm_mutex); mutex_unlock(&adm_ctx.resource->adm_mutex);

View File

@@ -53,8 +53,8 @@
*/ */
struct gpio_service *dal_gpio_service_create( struct gpio_service *dal_gpio_service_create(
enum dce_version dce_version_major, enum dce_version dce_version,
enum dce_version dce_version_minor, enum dce_environment dce_environment,
struct dc_context *ctx) struct dc_context *ctx)
{ {
struct gpio_service *service; struct gpio_service *service;
@@ -67,14 +67,14 @@ struct gpio_service *dal_gpio_service_create(
return NULL; return NULL;
} }
if (!dal_hw_translate_init(&service->translate, dce_version_major, if (!dal_hw_translate_init(&service->translate, dce_version,
dce_version_minor)) { dce_environment)) {
BREAK_TO_DEBUGGER(); BREAK_TO_DEBUGGER();
goto failure_1; goto failure_1;
} }
if (!dal_hw_factory_init(&service->factory, dce_version_major, if (!dal_hw_factory_init(&service->factory, dce_version,
dce_version_minor)) { dce_environment)) {
BREAK_TO_DEBUGGER(); BREAK_TO_DEBUGGER();
goto failure_1; goto failure_1;
} }

View File

@@ -42,8 +42,8 @@ void dal_gpio_destroy(
struct gpio **ptr); struct gpio **ptr);
struct gpio_service *dal_gpio_service_create( struct gpio_service *dal_gpio_service_create(
enum dce_version dce_version_major, enum dce_version dce_version,
enum dce_version dce_version_minor, enum dce_environment dce_environment,
struct dc_context *ctx); struct dc_context *ctx);
struct gpio *dal_gpio_service_create_irq( struct gpio *dal_gpio_service_create_irq(

View File

@@ -196,7 +196,7 @@ int swreg_to_unrestricted(swreg dst, swreg lreg, swreg rreg,
} }
reg->dst_lmextn = swreg_lmextn(dst); 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; return 0;
} }
@@ -277,7 +277,7 @@ int swreg_to_restricted(swreg dst, swreg lreg, swreg rreg,
} }
reg->dst_lmextn = swreg_lmextn(dst); 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; return 0;
} }

View File

@@ -193,8 +193,6 @@ kclist_add_private(unsigned long pfn, unsigned long nr_pages, void *arg)
return 1; return 1;
p = pfn_to_page(pfn); p = pfn_to_page(pfn);
if (!memmap_valid_within(pfn, p, page_zone(p)))
return 1;
ent = kmalloc(sizeof(*ent), GFP_KERNEL); ent = kmalloc(sizeof(*ent), GFP_KERNEL);
if (!ent) if (!ent)

View File

@@ -1470,37 +1470,6 @@ struct mminit_pfnnid_cache {
#define pfn_valid_within(pfn) (1) #define pfn_valid_within(pfn) (1)
#endif #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 /* !__GENERATING_BOUNDS.H */
#endif /* !__ASSEMBLY__ */ #endif /* !__ASSEMBLY__ */
#endif /* _LINUX_MMZONE_H */ #endif /* _LINUX_MMZONE_H */

View File

@@ -331,6 +331,12 @@ regulator_get_exclusive(struct device *dev, const char *id)
return ERR_PTR(-ENODEV); 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 static inline struct regulator *__must_check
regulator_get_optional(struct device *dev, const char *id) regulator_get_optional(struct device *dev, const char *id)
{ {
@@ -486,6 +492,11 @@ static inline int regulator_get_voltage(struct regulator *regulator)
return -EINVAL; return -EINVAL;
} }
static inline int regulator_sync_voltage(struct regulator *regulator)
{
return -EINVAL;
}
static inline int regulator_is_supported_voltage(struct regulator *regulator, static inline int regulator_is_supported_voltage(struct regulator *regulator,
int min_uV, int max_uV) int min_uV, int max_uV)
{ {
@@ -578,6 +589,25 @@ static inline int devm_regulator_unregister_notifier(struct regulator *regulator
return 0; 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) static inline void *regulator_get_drvdata(struct regulator *regulator)
{ {
return NULL; return NULL;

View File

@@ -36,6 +36,9 @@
/* HCI priority */ /* HCI priority */
#define HCI_PRIO_MAX 7 #define HCI_PRIO_MAX 7
/* HCI maximum id value */
#define HCI_MAX_ID 10000
/* HCI Core structures */ /* HCI Core structures */
struct inquiry_data { struct inquiry_data {
bdaddr_t bdaddr; bdaddr_t bdaddr;

View File

@@ -5847,6 +5847,8 @@ long copy_huge_page_from_user(struct page *dst_page,
if (rc) if (rc)
break; break;
flush_dcache_page(subpage);
cond_resched(); cond_resched();
} }
return ret_val; return ret_val;

View File

@@ -985,9 +985,12 @@ static int move_to_new_page(struct page *newpage, struct page *page,
if (!PageMappingFlags(page)) if (!PageMappingFlags(page))
page->mapping = NULL; page->mapping = NULL;
if (likely(!is_zone_device_page(newpage))) if (likely(!is_zone_device_page(newpage))) {
flush_dcache_page(newpage); int i, nr = compound_nr(newpage);
for (i = 0; i < nr; i++)
flush_dcache_page(newpage + i);
}
} }
out: out:
return rc; return rc;

View File

@@ -74,20 +74,6 @@ struct zoneref *__next_zones_zonelist(struct zoneref *z,
} }
EXPORT_SYMBOL_GPL(__next_zones_zonelist); EXPORT_SYMBOL_GPL(__next_zones_zonelist);
#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) void lruvec_init(struct lruvec *lruvec)
{ {
enum lru_list lru; enum lru_list lru;

View File

@@ -151,6 +151,8 @@ static int mcopy_atomic_pte(struct mm_struct *dst_mm,
/* don't free the page */ /* don't free the page */
goto out; goto out;
} }
flush_dcache_page(page);
} else { } else {
page = *pagep; page = *pagep;
*pagep = NULL; *pagep = NULL;
@@ -669,6 +671,7 @@ retry:
err = -EFAULT; err = -EFAULT;
goto out; goto out;
} }
flush_dcache_page(page);
goto retry; goto retry;
} else } else
BUG_ON(page); BUG_ON(page);

View File

@@ -1509,10 +1509,6 @@ static void pagetypeinfo_showblockcount_print(struct seq_file *m,
if (!page) if (!page)
continue; continue;
/* Watch for unexpected holes punched in the memmap */
if (!memmap_valid_within(pfn, page, zone))
continue;
if (page_zone(page) != zone) if (page_zone(page) != zone)
continue; continue;

View File

@@ -3718,10 +3718,10 @@ int hci_register_dev(struct hci_dev *hdev)
*/ */
switch (hdev->dev_type) { switch (hdev->dev_type) {
case HCI_PRIMARY: 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; break;
case HCI_AMP: 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; break;
default: default:
return -EINVAL; return -EINVAL;
@@ -3730,7 +3730,7 @@ int hci_register_dev(struct hci_dev *hdev)
if (id < 0) if (id < 0)
return id; return id;
sprintf(hdev->name, "hci%d", id); snprintf(hdev->name, sizeof(hdev->name), "hci%d", id);
hdev->id = id; hdev->id = id;
BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus); BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);