Linux 5.19-rc6
-----BEGIN PGP SIGNATURE----- iQFSBAABCAA8FiEEq68RxlopcLEwq+PEeb4+QwBBGIYFAmLLR2MeHHRvcnZhbGRz QGxpbnV4LWZvdW5kYXRpb24ub3JnAAoJEHm+PkMAQRiG+hMH/jKGMOAbicR/CRq8 WLKmpb1eTJP2dbeiEs5amBk9DZQhqjx6tIQRCpZoGxBL+XWq7DX2fRLkAT56yS5/ NwferpR6IR9GlhjbfczF0JuQkP6eRUXnLrIKS5MViLI5QrCI80kkj4/mdqUXSiBV cMfXl5T1j+pb3zHUVXjnmvY+77q6rZTPoGxa/l8d6MaIhAg+jhu2E1HaSaSCX/YK TViq7ciI9cXoFV9yqhLkkBdGjBV8VQsKmeWEcA738bdSy1WAJSV1SVTJqLFvwdPI PM1asxkPoQ7jRrwsY4G8pZ3zPskJMS4Qwdn64HK+no2AKhJt2p6MePD1XblcrGHK QNStMY0= =LfuD -----END PGP SIGNATURE----- Merge tag 'v5.19-rc6' into android-mainline Linux 5.19-rc6 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: I070025a28a098f9cb3aa8b6f45a3dac95b56c7f8
This commit is contained in:
commit
c20d4a4f8c
@ -67,7 +67,7 @@ if:
|
||||
then:
|
||||
properties:
|
||||
clocks:
|
||||
maxItems: 2
|
||||
minItems: 2
|
||||
|
||||
required:
|
||||
- clock-names
|
||||
|
2
Makefile
2
Makefile
@ -2,7 +2,7 @@
|
||||
VERSION = 5
|
||||
PATCHLEVEL = 19
|
||||
SUBLEVEL = 0
|
||||
EXTRAVERSION = -rc5
|
||||
EXTRAVERSION = -rc6
|
||||
NAME = Superb Owl
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
@ -110,6 +110,7 @@ void kernel_add_identity_map(unsigned long start, unsigned long end)
|
||||
void initialize_identity_maps(void *rmode)
|
||||
{
|
||||
unsigned long cmdline;
|
||||
struct setup_data *sd;
|
||||
|
||||
/* Exclude the encryption mask from __PHYSICAL_MASK */
|
||||
physical_mask &= ~sme_me_mask;
|
||||
@ -163,6 +164,18 @@ void initialize_identity_maps(void *rmode)
|
||||
cmdline = get_cmd_line_ptr();
|
||||
kernel_add_identity_map(cmdline, cmdline + COMMAND_LINE_SIZE);
|
||||
|
||||
/*
|
||||
* Also map the setup_data entries passed via boot_params in case they
|
||||
* need to be accessed by uncompressed kernel via the identity mapping.
|
||||
*/
|
||||
sd = (struct setup_data *)boot_params->hdr.setup_data;
|
||||
while (sd) {
|
||||
unsigned long sd_addr = (unsigned long)sd;
|
||||
|
||||
kernel_add_identity_map(sd_addr, sd_addr + sizeof(*sd) + sd->len);
|
||||
sd = (struct setup_data *)sd->next;
|
||||
}
|
||||
|
||||
sev_prep_identity_maps(top_level_pgt);
|
||||
|
||||
/* Load the new page-table. */
|
||||
|
@ -120,6 +120,9 @@ void *extend_brk(size_t size, size_t align);
|
||||
static char __brk_##name[size]
|
||||
|
||||
extern void probe_roms(void);
|
||||
|
||||
void clear_bss(void);
|
||||
|
||||
#ifdef __i386__
|
||||
|
||||
asmlinkage void __init i386_start_kernel(void);
|
||||
|
@ -15,7 +15,7 @@
|
||||
#define SETUP_INDIRECT (1<<31)
|
||||
|
||||
/* SETUP_INDIRECT | max(SETUP_*) */
|
||||
#define SETUP_TYPE_MAX (SETUP_INDIRECT | SETUP_JAILHOUSE)
|
||||
#define SETUP_TYPE_MAX (SETUP_INDIRECT | SETUP_CC_BLOB)
|
||||
|
||||
/* ram_size flags */
|
||||
#define RAMDISK_IMAGE_START_MASK 0x07FF
|
||||
|
@ -426,10 +426,12 @@ void __init do_early_exception(struct pt_regs *regs, int trapnr)
|
||||
|
||||
/* Don't add a printk in there. printk relies on the PDA which is not initialized
|
||||
yet. */
|
||||
static void __init clear_bss(void)
|
||||
void __init clear_bss(void)
|
||||
{
|
||||
memset(__bss_start, 0,
|
||||
(unsigned long) __bss_stop - (unsigned long) __bss_start);
|
||||
memset(__brk_base, 0,
|
||||
(unsigned long) __brk_limit - (unsigned long) __brk_base);
|
||||
}
|
||||
|
||||
static unsigned long get_cmd_line_ptr(void)
|
||||
|
@ -385,7 +385,7 @@ SECTIONS
|
||||
__end_of_kernel_reserve = .;
|
||||
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
.brk (NOLOAD) : AT(ADDR(.brk) - LOAD_OFFSET) {
|
||||
.brk : AT(ADDR(.brk) - LOAD_OFFSET) {
|
||||
__brk_base = .;
|
||||
. += 64 * 1024; /* 64k alignment slop space */
|
||||
*(.bss..brk) /* areas brk users have reserved */
|
||||
|
@ -1183,15 +1183,19 @@ static void __init xen_domu_set_legacy_features(void)
|
||||
extern void early_xen_iret_patch(void);
|
||||
|
||||
/* First C function to be called on Xen boot */
|
||||
asmlinkage __visible void __init xen_start_kernel(void)
|
||||
asmlinkage __visible void __init xen_start_kernel(struct start_info *si)
|
||||
{
|
||||
struct physdev_set_iopl set_iopl;
|
||||
unsigned long initrd_start = 0;
|
||||
int rc;
|
||||
|
||||
if (!xen_start_info)
|
||||
if (!si)
|
||||
return;
|
||||
|
||||
clear_bss();
|
||||
|
||||
xen_start_info = si;
|
||||
|
||||
__text_gen_insn(&early_xen_iret_patch,
|
||||
JMP32_INSN_OPCODE, &early_xen_iret_patch, &xen_iret,
|
||||
JMP32_INSN_SIZE);
|
||||
|
@ -48,15 +48,6 @@ SYM_CODE_START(startup_xen)
|
||||
ANNOTATE_NOENDBR
|
||||
cld
|
||||
|
||||
/* Clear .bss */
|
||||
xor %eax,%eax
|
||||
mov $__bss_start, %rdi
|
||||
mov $__bss_stop, %rcx
|
||||
sub %rdi, %rcx
|
||||
shr $3, %rcx
|
||||
rep stosq
|
||||
|
||||
mov %rsi, xen_start_info
|
||||
mov initial_stack(%rip), %rsp
|
||||
|
||||
/* Set up %gs.
|
||||
@ -71,6 +62,7 @@ SYM_CODE_START(startup_xen)
|
||||
cdq
|
||||
wrmsr
|
||||
|
||||
mov %rsi, %rdi
|
||||
call xen_start_kernel
|
||||
SYM_CODE_END(startup_xen)
|
||||
__FINIT
|
||||
|
@ -1900,6 +1900,11 @@ static int at_xdmac_alloc_chan_resources(struct dma_chan *chan)
|
||||
for (i = 0; i < init_nr_desc_per_channel; i++) {
|
||||
desc = at_xdmac_alloc_desc(chan, GFP_KERNEL);
|
||||
if (!desc) {
|
||||
if (i == 0) {
|
||||
dev_warn(chan2dev(chan),
|
||||
"can't allocate any descriptors\n");
|
||||
return -EIO;
|
||||
}
|
||||
dev_warn(chan2dev(chan),
|
||||
"only %d descriptors have been allocated\n", i);
|
||||
break;
|
||||
|
@ -675,16 +675,10 @@ static int dmatest_func(void *data)
|
||||
/*
|
||||
* src and dst buffers are freed by ourselves below
|
||||
*/
|
||||
if (params->polled) {
|
||||
if (params->polled)
|
||||
flags = DMA_CTRL_ACK;
|
||||
} else {
|
||||
if (dma_has_cap(DMA_INTERRUPT, dev->cap_mask)) {
|
||||
flags = DMA_CTRL_ACK | DMA_PREP_INTERRUPT;
|
||||
} else {
|
||||
pr_err("Channel does not support interrupt!\n");
|
||||
goto err_pq_array;
|
||||
}
|
||||
}
|
||||
else
|
||||
flags = DMA_CTRL_ACK | DMA_PREP_INTERRUPT;
|
||||
|
||||
ktime = ktime_get();
|
||||
while (!(kthread_should_stop() ||
|
||||
@ -912,7 +906,6 @@ static int dmatest_func(void *data)
|
||||
runtime = ktime_to_us(ktime);
|
||||
|
||||
ret = 0;
|
||||
err_pq_array:
|
||||
kfree(dma_pq);
|
||||
err_srcs_array:
|
||||
kfree(srcs);
|
||||
|
@ -1164,8 +1164,9 @@ static int dma_chan_pause(struct dma_chan *dchan)
|
||||
BIT(chan->id) << DMAC_CHAN_SUSP_WE_SHIFT;
|
||||
axi_dma_iowrite32(chan->chip, DMAC_CHEN, val);
|
||||
} else {
|
||||
val = BIT(chan->id) << DMAC_CHAN_SUSP2_SHIFT |
|
||||
BIT(chan->id) << DMAC_CHAN_SUSP2_WE_SHIFT;
|
||||
val = axi_dma_ioread32(chan->chip, DMAC_CHSUSPREG);
|
||||
val |= BIT(chan->id) << DMAC_CHAN_SUSP2_SHIFT |
|
||||
BIT(chan->id) << DMAC_CHAN_SUSP2_WE_SHIFT;
|
||||
axi_dma_iowrite32(chan->chip, DMAC_CHSUSPREG, val);
|
||||
}
|
||||
|
||||
@ -1190,12 +1191,13 @@ static inline void axi_chan_resume(struct axi_dma_chan *chan)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
val = axi_dma_ioread32(chan->chip, DMAC_CHEN);
|
||||
if (chan->chip->dw->hdata->reg_map_8_channels) {
|
||||
val = axi_dma_ioread32(chan->chip, DMAC_CHEN);
|
||||
val &= ~(BIT(chan->id) << DMAC_CHAN_SUSP_SHIFT);
|
||||
val |= (BIT(chan->id) << DMAC_CHAN_SUSP_WE_SHIFT);
|
||||
axi_dma_iowrite32(chan->chip, DMAC_CHEN, val);
|
||||
} else {
|
||||
val = axi_dma_ioread32(chan->chip, DMAC_CHSUSPREG);
|
||||
val &= ~(BIT(chan->id) << DMAC_CHAN_SUSP2_SHIFT);
|
||||
val |= (BIT(chan->id) << DMAC_CHAN_SUSP2_WE_SHIFT);
|
||||
axi_dma_iowrite32(chan->chip, DMAC_CHSUSPREG, val);
|
||||
|
@ -716,10 +716,7 @@ static void idxd_device_wqs_clear_state(struct idxd_device *idxd)
|
||||
struct idxd_wq *wq = idxd->wqs[i];
|
||||
|
||||
mutex_lock(&wq->wq_lock);
|
||||
if (wq->state == IDXD_WQ_ENABLED) {
|
||||
idxd_wq_disable_cleanup(wq);
|
||||
wq->state = IDXD_WQ_DISABLED;
|
||||
}
|
||||
idxd_wq_disable_cleanup(wq);
|
||||
idxd_wq_device_reset_cleanup(wq);
|
||||
mutex_unlock(&wq->wq_lock);
|
||||
}
|
||||
|
@ -512,15 +512,16 @@ static int idxd_probe(struct idxd_device *idxd)
|
||||
dev_dbg(dev, "IDXD reset complete\n");
|
||||
|
||||
if (IS_ENABLED(CONFIG_INTEL_IDXD_SVM) && sva) {
|
||||
if (iommu_dev_enable_feature(dev, IOMMU_DEV_FEAT_SVA))
|
||||
if (iommu_dev_enable_feature(dev, IOMMU_DEV_FEAT_SVA)) {
|
||||
dev_warn(dev, "Unable to turn on user SVA feature.\n");
|
||||
else
|
||||
} else {
|
||||
set_bit(IDXD_FLAG_USER_PASID_ENABLED, &idxd->flags);
|
||||
|
||||
if (idxd_enable_system_pasid(idxd))
|
||||
dev_warn(dev, "No in-kernel DMA with PASID.\n");
|
||||
else
|
||||
set_bit(IDXD_FLAG_PASID_ENABLED, &idxd->flags);
|
||||
if (idxd_enable_system_pasid(idxd))
|
||||
dev_warn(dev, "No in-kernel DMA with PASID.\n");
|
||||
else
|
||||
set_bit(IDXD_FLAG_PASID_ENABLED, &idxd->flags);
|
||||
}
|
||||
} else if (!sva) {
|
||||
dev_warn(dev, "User forced SVA off via module param.\n");
|
||||
}
|
||||
|
@ -891,7 +891,7 @@ static void sdma_update_channel_loop(struct sdma_channel *sdmac)
|
||||
* SDMA stops cyclic channel when DMA request triggers a channel and no SDMA
|
||||
* owned buffer is available (i.e. BD_DONE was set too late).
|
||||
*/
|
||||
if (!is_sdma_channel_enabled(sdmac->sdma, sdmac->channel)) {
|
||||
if (sdmac->desc && !is_sdma_channel_enabled(sdmac->sdma, sdmac->channel)) {
|
||||
dev_warn(sdmac->sdma->dev, "restart cyclic channel %d\n", sdmac->channel);
|
||||
sdma_enable_channel(sdmac->sdma, sdmac->channel);
|
||||
}
|
||||
@ -2346,7 +2346,7 @@ MODULE_DESCRIPTION("i.MX SDMA driver");
|
||||
#if IS_ENABLED(CONFIG_SOC_IMX6Q)
|
||||
MODULE_FIRMWARE("imx/sdma/sdma-imx6q.bin");
|
||||
#endif
|
||||
#if IS_ENABLED(CONFIG_SOC_IMX7D)
|
||||
#if IS_ENABLED(CONFIG_SOC_IMX7D) || IS_ENABLED(CONFIG_SOC_IMX8M)
|
||||
MODULE_FIRMWARE("imx/sdma/sdma-imx7d.bin");
|
||||
#endif
|
||||
MODULE_LICENSE("GPL");
|
||||
|
@ -1593,11 +1593,12 @@ static int intel_ldma_probe(struct platform_device *pdev)
|
||||
d->core_clk = devm_clk_get_optional(dev, NULL);
|
||||
if (IS_ERR(d->core_clk))
|
||||
return PTR_ERR(d->core_clk);
|
||||
clk_prepare_enable(d->core_clk);
|
||||
|
||||
d->rst = devm_reset_control_get_optional(dev, NULL);
|
||||
if (IS_ERR(d->rst))
|
||||
return PTR_ERR(d->rst);
|
||||
|
||||
clk_prepare_enable(d->core_clk);
|
||||
reset_control_deassert(d->rst);
|
||||
|
||||
ret = devm_add_action_or_reset(dev, ldma_clk_disable, d);
|
||||
|
@ -2589,7 +2589,7 @@ static struct dma_pl330_desc *pl330_get_desc(struct dma_pl330_chan *pch)
|
||||
|
||||
/* If the DMAC pool is empty, alloc new */
|
||||
if (!desc) {
|
||||
DEFINE_SPINLOCK(lock);
|
||||
static DEFINE_SPINLOCK(lock);
|
||||
LIST_HEAD(pool);
|
||||
|
||||
if (!add_desc(&pool, &lock, GFP_ATOMIC, 1))
|
||||
|
@ -558,14 +558,6 @@ static int bam_alloc_chan(struct dma_chan *chan)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bam_pm_runtime_get_sync(struct device *dev)
|
||||
{
|
||||
if (pm_runtime_enabled(dev))
|
||||
return pm_runtime_get_sync(dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* bam_free_chan - Frees dma resources associated with specific channel
|
||||
* @chan: specified channel
|
||||
@ -581,7 +573,7 @@ static void bam_free_chan(struct dma_chan *chan)
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
|
||||
ret = bam_pm_runtime_get_sync(bdev->dev);
|
||||
ret = pm_runtime_get_sync(bdev->dev);
|
||||
if (ret < 0)
|
||||
return;
|
||||
|
||||
@ -784,7 +776,7 @@ static int bam_pause(struct dma_chan *chan)
|
||||
unsigned long flag;
|
||||
int ret;
|
||||
|
||||
ret = bam_pm_runtime_get_sync(bdev->dev);
|
||||
ret = pm_runtime_get_sync(bdev->dev);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
@ -810,7 +802,7 @@ static int bam_resume(struct dma_chan *chan)
|
||||
unsigned long flag;
|
||||
int ret;
|
||||
|
||||
ret = bam_pm_runtime_get_sync(bdev->dev);
|
||||
ret = pm_runtime_get_sync(bdev->dev);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
@ -919,7 +911,7 @@ static irqreturn_t bam_dma_irq(int irq, void *data)
|
||||
if (srcs & P_IRQ)
|
||||
tasklet_schedule(&bdev->task);
|
||||
|
||||
ret = bam_pm_runtime_get_sync(bdev->dev);
|
||||
ret = pm_runtime_get_sync(bdev->dev);
|
||||
if (ret < 0)
|
||||
return IRQ_NONE;
|
||||
|
||||
@ -1037,7 +1029,7 @@ static void bam_start_dma(struct bam_chan *bchan)
|
||||
if (!vd)
|
||||
return;
|
||||
|
||||
ret = bam_pm_runtime_get_sync(bdev->dev);
|
||||
ret = pm_runtime_get_sync(bdev->dev);
|
||||
if (ret < 0)
|
||||
return;
|
||||
|
||||
@ -1374,11 +1366,6 @@ static int bam_dma_probe(struct platform_device *pdev)
|
||||
if (ret)
|
||||
goto err_unregister_dma;
|
||||
|
||||
if (!bdev->bamclk) {
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
pm_runtime_irq_safe(&pdev->dev);
|
||||
pm_runtime_set_autosuspend_delay(&pdev->dev, BAM_DMA_AUTOSUSPEND_DELAY);
|
||||
pm_runtime_use_autosuspend(&pdev->dev);
|
||||
@ -1462,10 +1449,8 @@ static int __maybe_unused bam_dma_suspend(struct device *dev)
|
||||
{
|
||||
struct bam_device *bdev = dev_get_drvdata(dev);
|
||||
|
||||
if (bdev->bamclk) {
|
||||
pm_runtime_force_suspend(dev);
|
||||
clk_unprepare(bdev->bamclk);
|
||||
}
|
||||
pm_runtime_force_suspend(dev);
|
||||
clk_unprepare(bdev->bamclk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -1475,13 +1460,11 @@ static int __maybe_unused bam_dma_resume(struct device *dev)
|
||||
struct bam_device *bdev = dev_get_drvdata(dev);
|
||||
int ret;
|
||||
|
||||
if (bdev->bamclk) {
|
||||
ret = clk_prepare(bdev->bamclk);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = clk_prepare(bdev->bamclk);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
pm_runtime_force_resume(dev);
|
||||
}
|
||||
pm_runtime_force_resume(dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -245,6 +245,7 @@ static void *ti_dra7_xbar_route_allocate(struct of_phandle_args *dma_spec,
|
||||
if (dma_spec->args[0] >= xbar->xbar_requests) {
|
||||
dev_err(&pdev->dev, "Invalid XBAR request number: %d\n",
|
||||
dma_spec->args[0]);
|
||||
put_device(&pdev->dev);
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
@ -252,12 +253,14 @@ static void *ti_dra7_xbar_route_allocate(struct of_phandle_args *dma_spec,
|
||||
dma_spec->np = of_parse_phandle(ofdma->of_node, "dma-masters", 0);
|
||||
if (!dma_spec->np) {
|
||||
dev_err(&pdev->dev, "Can't get DMA master\n");
|
||||
put_device(&pdev->dev);
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
map = kzalloc(sizeof(*map), GFP_KERNEL);
|
||||
if (!map) {
|
||||
of_node_put(dma_spec->np);
|
||||
put_device(&pdev->dev);
|
||||
return ERR_PTR(-ENOMEM);
|
||||
}
|
||||
|
||||
@ -268,6 +271,8 @@ static void *ti_dra7_xbar_route_allocate(struct of_phandle_args *dma_spec,
|
||||
mutex_unlock(&xbar->mutex);
|
||||
dev_err(&pdev->dev, "Run out of free DMA requests\n");
|
||||
kfree(map);
|
||||
of_node_put(dma_spec->np);
|
||||
put_device(&pdev->dev);
|
||||
return ERR_PTR(-ENOMEM);
|
||||
}
|
||||
set_bit(map->xbar_out, xbar->dma_inuse);
|
||||
|
@ -329,7 +329,20 @@ int drm_aperture_remove_conflicting_pci_framebuffers(struct pci_dev *pdev,
|
||||
const struct drm_driver *req_driver)
|
||||
{
|
||||
resource_size_t base, size;
|
||||
int bar, ret = 0;
|
||||
int bar, ret;
|
||||
|
||||
/*
|
||||
* WARNING: Apparently we must kick fbdev drivers before vgacon,
|
||||
* otherwise the vga fbdev driver falls over.
|
||||
*/
|
||||
#if IS_REACHABLE(CONFIG_FB)
|
||||
ret = remove_conflicting_pci_framebuffers(pdev, req_driver->name);
|
||||
if (ret)
|
||||
return ret;
|
||||
#endif
|
||||
ret = vga_remove_vgacon(pdev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
for (bar = 0; bar < PCI_STD_NUM_BARS; ++bar) {
|
||||
if (!(pci_resource_flags(pdev, bar) & IORESOURCE_MEM))
|
||||
@ -339,15 +352,6 @@ int drm_aperture_remove_conflicting_pci_framebuffers(struct pci_dev *pdev,
|
||||
drm_aperture_detach_drivers(base, size);
|
||||
}
|
||||
|
||||
/*
|
||||
* WARNING: Apparently we must kick fbdev drivers before vgacon,
|
||||
* otherwise the vga fbdev driver falls over.
|
||||
*/
|
||||
#if IS_REACHABLE(CONFIG_FB)
|
||||
ret = remove_conflicting_pci_framebuffers(pdev, req_driver->name);
|
||||
#endif
|
||||
if (ret == 0)
|
||||
ret = vga_remove_vgacon(pdev);
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(drm_aperture_remove_conflicting_pci_framebuffers);
|
||||
|
@ -298,7 +298,7 @@ config XTENSA_MX
|
||||
|
||||
config XILINX_INTC
|
||||
bool "Xilinx Interrupt Controller IP"
|
||||
depends on OF
|
||||
depends on OF_ADDRESS
|
||||
select IRQ_DOMAIN
|
||||
help
|
||||
Support for the Xilinx Interrupt Controller IP core.
|
||||
|
@ -228,7 +228,7 @@
|
||||
#define AIC_TMR_EL02_PHYS AIC_TMR_GUEST_PHYS
|
||||
#define AIC_TMR_EL02_VIRT AIC_TMR_GUEST_VIRT
|
||||
|
||||
DEFINE_STATIC_KEY_TRUE(use_fast_ipi);
|
||||
static DEFINE_STATIC_KEY_TRUE(use_fast_ipi);
|
||||
|
||||
struct aic_info {
|
||||
int version;
|
||||
|
@ -2042,15 +2042,40 @@ static void __init gic_of_setup_kvm_info(struct device_node *node)
|
||||
vgic_set_kvm_info(&gic_v3_kvm_info);
|
||||
}
|
||||
|
||||
static void gic_request_region(resource_size_t base, resource_size_t size,
|
||||
const char *name)
|
||||
{
|
||||
if (!request_mem_region(base, size, name))
|
||||
pr_warn_once(FW_BUG "%s region %pa has overlapping address\n",
|
||||
name, &base);
|
||||
}
|
||||
|
||||
static void __iomem *gic_of_iomap(struct device_node *node, int idx,
|
||||
const char *name, struct resource *res)
|
||||
{
|
||||
void __iomem *base;
|
||||
int ret;
|
||||
|
||||
ret = of_address_to_resource(node, idx, res);
|
||||
if (ret)
|
||||
return IOMEM_ERR_PTR(ret);
|
||||
|
||||
gic_request_region(res->start, resource_size(res), name);
|
||||
base = of_iomap(node, idx);
|
||||
|
||||
return base ?: IOMEM_ERR_PTR(-ENOMEM);
|
||||
}
|
||||
|
||||
static int __init gic_of_init(struct device_node *node, struct device_node *parent)
|
||||
{
|
||||
void __iomem *dist_base;
|
||||
struct redist_region *rdist_regs;
|
||||
struct resource res;
|
||||
u64 redist_stride;
|
||||
u32 nr_redist_regions;
|
||||
int err, i;
|
||||
|
||||
dist_base = of_io_request_and_map(node, 0, "GICD");
|
||||
dist_base = gic_of_iomap(node, 0, "GICD", &res);
|
||||
if (IS_ERR(dist_base)) {
|
||||
pr_err("%pOF: unable to map gic dist registers\n", node);
|
||||
return PTR_ERR(dist_base);
|
||||
@ -2073,12 +2098,8 @@ static int __init gic_of_init(struct device_node *node, struct device_node *pare
|
||||
}
|
||||
|
||||
for (i = 0; i < nr_redist_regions; i++) {
|
||||
struct resource res;
|
||||
int ret;
|
||||
|
||||
ret = of_address_to_resource(node, 1 + i, &res);
|
||||
rdist_regs[i].redist_base = of_io_request_and_map(node, 1 + i, "GICR");
|
||||
if (ret || IS_ERR(rdist_regs[i].redist_base)) {
|
||||
rdist_regs[i].redist_base = gic_of_iomap(node, 1 + i, "GICR", &res);
|
||||
if (IS_ERR(rdist_regs[i].redist_base)) {
|
||||
pr_err("%pOF: couldn't map region %d\n", node, i);
|
||||
err = -ENODEV;
|
||||
goto out_unmap_rdist;
|
||||
@ -2151,7 +2172,7 @@ gic_acpi_parse_madt_redist(union acpi_subtable_headers *header,
|
||||
pr_err("Couldn't map GICR region @%llx\n", redist->base_address);
|
||||
return -ENOMEM;
|
||||
}
|
||||
request_mem_region(redist->base_address, redist->length, "GICR");
|
||||
gic_request_region(redist->base_address, redist->length, "GICR");
|
||||
|
||||
gic_acpi_register_redist(redist->base_address, redist_base);
|
||||
return 0;
|
||||
@ -2174,7 +2195,7 @@ gic_acpi_parse_madt_gicc(union acpi_subtable_headers *header,
|
||||
redist_base = ioremap(gicc->gicr_base_address, size);
|
||||
if (!redist_base)
|
||||
return -ENOMEM;
|
||||
request_mem_region(gicc->gicr_base_address, size, "GICR");
|
||||
gic_request_region(gicc->gicr_base_address, size, "GICR");
|
||||
|
||||
gic_acpi_register_redist(gicc->gicr_base_address, redist_base);
|
||||
return 0;
|
||||
@ -2376,7 +2397,7 @@ gic_acpi_init(union acpi_subtable_headers *header, const unsigned long end)
|
||||
pr_err("Unable to map GICD registers\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
request_mem_region(dist->base_address, ACPI_GICV3_DIST_MEM_SIZE, "GICD");
|
||||
gic_request_region(dist->base_address, ACPI_GICV3_DIST_MEM_SIZE, "GICD");
|
||||
|
||||
err = gic_validate_dist_version(acpi_data.dist_base);
|
||||
if (err) {
|
||||
|
@ -631,16 +631,20 @@ static int rtsx_usb_probe(struct usb_interface *intf,
|
||||
|
||||
ucr->pusb_dev = usb_dev;
|
||||
|
||||
ucr->iobuf = usb_alloc_coherent(ucr->pusb_dev, IOBUF_SIZE,
|
||||
GFP_KERNEL, &ucr->iobuf_dma);
|
||||
if (!ucr->iobuf)
|
||||
ucr->cmd_buf = kmalloc(IOBUF_SIZE, GFP_KERNEL);
|
||||
if (!ucr->cmd_buf)
|
||||
return -ENOMEM;
|
||||
|
||||
ucr->rsp_buf = kmalloc(IOBUF_SIZE, GFP_KERNEL);
|
||||
if (!ucr->rsp_buf) {
|
||||
ret = -ENOMEM;
|
||||
goto out_free_cmd_buf;
|
||||
}
|
||||
|
||||
usb_set_intfdata(intf, ucr);
|
||||
|
||||
ucr->vendor_id = id->idVendor;
|
||||
ucr->product_id = id->idProduct;
|
||||
ucr->cmd_buf = ucr->rsp_buf = ucr->iobuf;
|
||||
|
||||
mutex_init(&ucr->dev_mutex);
|
||||
|
||||
@ -668,8 +672,11 @@ static int rtsx_usb_probe(struct usb_interface *intf,
|
||||
|
||||
out_init_fail:
|
||||
usb_set_intfdata(ucr->pusb_intf, NULL);
|
||||
usb_free_coherent(ucr->pusb_dev, IOBUF_SIZE, ucr->iobuf,
|
||||
ucr->iobuf_dma);
|
||||
kfree(ucr->rsp_buf);
|
||||
ucr->rsp_buf = NULL;
|
||||
out_free_cmd_buf:
|
||||
kfree(ucr->cmd_buf);
|
||||
ucr->cmd_buf = NULL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -682,8 +689,12 @@ static void rtsx_usb_disconnect(struct usb_interface *intf)
|
||||
mfd_remove_devices(&intf->dev);
|
||||
|
||||
usb_set_intfdata(ucr->pusb_intf, NULL);
|
||||
usb_free_coherent(ucr->pusb_dev, IOBUF_SIZE, ucr->iobuf,
|
||||
ucr->iobuf_dma);
|
||||
|
||||
kfree(ucr->cmd_buf);
|
||||
ucr->cmd_buf = NULL;
|
||||
|
||||
kfree(ucr->rsp_buf);
|
||||
ucr->rsp_buf = NULL;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
@ -80,10 +80,9 @@ static int at25_ee_read(void *priv, unsigned int offset,
|
||||
struct at25_data *at25 = priv;
|
||||
char *buf = val;
|
||||
size_t max_chunk = spi_max_transfer_size(at25->spi);
|
||||
size_t num_msgs = DIV_ROUND_UP(count, max_chunk);
|
||||
size_t nr_bytes = 0;
|
||||
unsigned int msg_offset;
|
||||
size_t msg_count;
|
||||
unsigned int msg_offset = offset;
|
||||
size_t bytes_left = count;
|
||||
size_t segment;
|
||||
u8 *cp;
|
||||
ssize_t status;
|
||||
struct spi_transfer t[2];
|
||||
@ -97,9 +96,8 @@ static int at25_ee_read(void *priv, unsigned int offset,
|
||||
if (unlikely(!count))
|
||||
return -EINVAL;
|
||||
|
||||
msg_offset = (unsigned int)offset;
|
||||
msg_count = min(count, max_chunk);
|
||||
while (num_msgs) {
|
||||
do {
|
||||
segment = min(bytes_left, max_chunk);
|
||||
cp = at25->command;
|
||||
|
||||
instr = AT25_READ;
|
||||
@ -131,8 +129,8 @@ static int at25_ee_read(void *priv, unsigned int offset,
|
||||
t[0].len = at25->addrlen + 1;
|
||||
spi_message_add_tail(&t[0], &m);
|
||||
|
||||
t[1].rx_buf = buf + nr_bytes;
|
||||
t[1].len = msg_count;
|
||||
t[1].rx_buf = buf;
|
||||
t[1].len = segment;
|
||||
spi_message_add_tail(&t[1], &m);
|
||||
|
||||
status = spi_sync(at25->spi, &m);
|
||||
@ -142,10 +140,10 @@ static int at25_ee_read(void *priv, unsigned int offset,
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
--num_msgs;
|
||||
msg_offset += msg_count;
|
||||
nr_bytes += msg_count;
|
||||
}
|
||||
msg_offset += segment;
|
||||
buf += segment;
|
||||
bytes_left -= segment;
|
||||
} while (bytes_left > 0);
|
||||
|
||||
dev_dbg(&at25->spi->dev, "read %zu bytes at %d\n",
|
||||
count, offset);
|
||||
@ -229,7 +227,7 @@ static int at25_ee_write(void *priv, unsigned int off, void *val, size_t count)
|
||||
do {
|
||||
unsigned long timeout, retries;
|
||||
unsigned segment;
|
||||
unsigned offset = (unsigned) off;
|
||||
unsigned offset = off;
|
||||
u8 *cp = bounce;
|
||||
int sr;
|
||||
u8 instr;
|
||||
|
@ -2632,7 +2632,7 @@ static void hfa384x_usbctlx_reaper_task(struct work_struct *work)
|
||||
*/
|
||||
static void hfa384x_usbctlx_completion_task(struct work_struct *work)
|
||||
{
|
||||
struct hfa384x *hw = container_of(work, struct hfa384x, reaper_bh);
|
||||
struct hfa384x *hw = container_of(work, struct hfa384x, completion_bh);
|
||||
struct hfa384x_usbctlx *ctlx, *temp;
|
||||
unsigned long flags;
|
||||
|
||||
|
@ -7973,6 +7973,9 @@ static int io_files_update_with_index_alloc(struct io_kiocb *req,
|
||||
struct file *file;
|
||||
int ret, fd;
|
||||
|
||||
if (!req->ctx->file_data)
|
||||
return -ENXIO;
|
||||
|
||||
for (done = 0; done < req->rsrc_update.nr_args; done++) {
|
||||
if (copy_from_user(&fd, &fds[done], sizeof(fd))) {
|
||||
ret = -EFAULT;
|
||||
|
@ -54,8 +54,6 @@ struct rtsx_ucr {
|
||||
struct usb_device *pusb_dev;
|
||||
struct usb_interface *pusb_intf;
|
||||
struct usb_sg_request current_sg;
|
||||
unsigned char *iobuf;
|
||||
dma_addr_t iobuf_dma;
|
||||
|
||||
struct timer_list sg_timer;
|
||||
struct mutex dev_mutex;
|
||||
|
@ -222,7 +222,7 @@ static void ptrace_unfreeze_traced(struct task_struct *task)
|
||||
if (lock_task_sighand(task, &flags)) {
|
||||
task->jobctl &= ~JOBCTL_PTRACE_FROZEN;
|
||||
if (__fatal_signal_pending(task)) {
|
||||
task->jobctl &= ~TASK_TRACED;
|
||||
task->jobctl &= ~JOBCTL_TRACED;
|
||||
wake_up_state(task, __TASK_TRACED);
|
||||
}
|
||||
unlock_task_sighand(task, &flags);
|
||||
|
@ -491,7 +491,8 @@ void ida_free(struct ida *ida, unsigned int id)
|
||||
struct ida_bitmap *bitmap;
|
||||
unsigned long flags;
|
||||
|
||||
BUG_ON((int)id < 0);
|
||||
if ((int)id < 0)
|
||||
return;
|
||||
|
||||
xas_lock_irqsave(&xas, flags);
|
||||
bitmap = xas_load(&xas);
|
||||
|
@ -32,9 +32,6 @@ endif
|
||||
__modinst: $(modules)
|
||||
@:
|
||||
|
||||
quiet_cmd_none =
|
||||
cmd_none = :
|
||||
|
||||
#
|
||||
# Installation
|
||||
#
|
||||
|
@ -157,10 +157,10 @@ def cmdfiles_for_modorder(modorder):
|
||||
if ext != '.ko':
|
||||
sys.exit('{}: module path must end with .ko'.format(ko))
|
||||
mod = base + '.mod'
|
||||
# The first line of *.mod lists the objects that compose the module.
|
||||
# Read from *.mod, to get a list of objects that compose the module.
|
||||
with open(mod) as m:
|
||||
for obj in m.readline().split():
|
||||
yield to_cmdfile(obj)
|
||||
for mod_line in m:
|
||||
yield to_cmdfile(mod_line.rstrip())
|
||||
|
||||
|
||||
def process_line(root_directory, command_prefix, file_path):
|
||||
|
@ -3826,8 +3826,7 @@ static int validate_ibt(struct objtool_file *file)
|
||||
!strcmp(sec->name, "__bug_table") ||
|
||||
!strcmp(sec->name, "__ex_table") ||
|
||||
!strcmp(sec->name, "__jump_table") ||
|
||||
!strcmp(sec->name, "__mcount_loc") ||
|
||||
!strcmp(sec->name, "__tracepoints"))
|
||||
!strcmp(sec->name, "__mcount_loc"))
|
||||
continue;
|
||||
|
||||
list_for_each_entry(reloc, &sec->reloc->reloc_list, list)
|
||||
|
Loading…
Reference in New Issue
Block a user