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:
@@ -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.
|
||||||
|
2
Makefile
2
Makefile
@@ -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
|
||||||
|
|
||||||
|
@@ -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"
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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");
|
||||||
|
@@ -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");
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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(
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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)
|
||||||
|
@@ -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 */
|
||||||
|
@@ -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;
|
||||||
|
@@ -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;
|
||||||
|
@@ -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;
|
||||||
|
@@ -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;
|
||||||
|
14
mm/mmzone.c
14
mm/mmzone.c
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user