mirror of
https://github.com/Fishwaldo/build.git
synced 2025-07-12 16:08:49 +00:00
* add upstream patches * Add more patches Co-authored-by: Igor Pecovnik <igor.pecovnik@gmail.com>
1006 lines
33 KiB
Diff
1006 lines
33 KiB
Diff
diff --git a/Makefile b/Makefile
|
|
index cb76f64abb6da..1d4a50ebe3b77 100644
|
|
--- a/Makefile
|
|
+++ b/Makefile
|
|
@@ -1,7 +1,7 @@
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
VERSION = 5
|
|
PATCHLEVEL = 10
|
|
-SUBLEVEL = 28
|
|
+SUBLEVEL = 29
|
|
EXTRAVERSION =
|
|
NAME = Dare mighty things
|
|
|
|
@@ -1083,6 +1083,17 @@ ifdef CONFIG_STACK_VALIDATION
|
|
endif
|
|
endif
|
|
|
|
+PHONY += resolve_btfids_clean
|
|
+
|
|
+resolve_btfids_O = $(abspath $(objtree))/tools/bpf/resolve_btfids
|
|
+
|
|
+# tools/bpf/resolve_btfids directory might not exist
|
|
+# in output directory, skip its clean in that case
|
|
+resolve_btfids_clean:
|
|
+ifneq ($(wildcard $(resolve_btfids_O)),)
|
|
+ $(Q)$(MAKE) -sC $(srctree)/tools/bpf/resolve_btfids O=$(resolve_btfids_O) clean
|
|
+endif
|
|
+
|
|
ifdef CONFIG_BPF
|
|
ifdef CONFIG_DEBUG_INFO_BTF
|
|
ifeq ($(has_libelf),1)
|
|
@@ -1500,7 +1511,7 @@ vmlinuxclean:
|
|
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/link-vmlinux.sh clean
|
|
$(Q)$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) clean)
|
|
|
|
-clean: archclean vmlinuxclean
|
|
+clean: archclean vmlinuxclean resolve_btfids_clean
|
|
|
|
# mrproper - Delete all generated files, including .config
|
|
#
|
|
diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi
|
|
index 4c22980241377..f09a61cac2dc9 100644
|
|
--- a/arch/arm/boot/dts/am33xx.dtsi
|
|
+++ b/arch/arm/boot/dts/am33xx.dtsi
|
|
@@ -40,6 +40,9 @@
|
|
ethernet1 = &cpsw_emac1;
|
|
spi0 = &spi0;
|
|
spi1 = &spi1;
|
|
+ mmc0 = &mmc1;
|
|
+ mmc1 = &mmc2;
|
|
+ mmc2 = &mmc3;
|
|
};
|
|
|
|
cpus {
|
|
diff --git a/arch/ia64/kernel/err_inject.c b/arch/ia64/kernel/err_inject.c
|
|
index 8b5b8e6bc9d9a..dd5bfed52031d 100644
|
|
--- a/arch/ia64/kernel/err_inject.c
|
|
+++ b/arch/ia64/kernel/err_inject.c
|
|
@@ -59,7 +59,7 @@ show_##name(struct device *dev, struct device_attribute *attr, \
|
|
char *buf) \
|
|
{ \
|
|
u32 cpu=dev->id; \
|
|
- return sprintf(buf, "%lx\n", name[cpu]); \
|
|
+ return sprintf(buf, "%llx\n", name[cpu]); \
|
|
}
|
|
|
|
#define store(name) \
|
|
@@ -86,9 +86,9 @@ store_call_start(struct device *dev, struct device_attribute *attr,
|
|
|
|
#ifdef ERR_INJ_DEBUG
|
|
printk(KERN_DEBUG "pal_mc_err_inject for cpu%d:\n", cpu);
|
|
- printk(KERN_DEBUG "err_type_info=%lx,\n", err_type_info[cpu]);
|
|
- printk(KERN_DEBUG "err_struct_info=%lx,\n", err_struct_info[cpu]);
|
|
- printk(KERN_DEBUG "err_data_buffer=%lx, %lx, %lx.\n",
|
|
+ printk(KERN_DEBUG "err_type_info=%llx,\n", err_type_info[cpu]);
|
|
+ printk(KERN_DEBUG "err_struct_info=%llx,\n", err_struct_info[cpu]);
|
|
+ printk(KERN_DEBUG "err_data_buffer=%llx, %llx, %llx.\n",
|
|
err_data_buffer[cpu].data1,
|
|
err_data_buffer[cpu].data2,
|
|
err_data_buffer[cpu].data3);
|
|
@@ -117,8 +117,8 @@ store_call_start(struct device *dev, struct device_attribute *attr,
|
|
|
|
#ifdef ERR_INJ_DEBUG
|
|
printk(KERN_DEBUG "Returns: status=%d,\n", (int)status[cpu]);
|
|
- printk(KERN_DEBUG "capabilities=%lx,\n", capabilities[cpu]);
|
|
- printk(KERN_DEBUG "resources=%lx\n", resources[cpu]);
|
|
+ printk(KERN_DEBUG "capabilities=%llx,\n", capabilities[cpu]);
|
|
+ printk(KERN_DEBUG "resources=%llx\n", resources[cpu]);
|
|
#endif
|
|
return size;
|
|
}
|
|
@@ -131,7 +131,7 @@ show_virtual_to_phys(struct device *dev, struct device_attribute *attr,
|
|
char *buf)
|
|
{
|
|
unsigned int cpu=dev->id;
|
|
- return sprintf(buf, "%lx\n", phys_addr[cpu]);
|
|
+ return sprintf(buf, "%llx\n", phys_addr[cpu]);
|
|
}
|
|
|
|
static ssize_t
|
|
@@ -145,7 +145,7 @@ store_virtual_to_phys(struct device *dev, struct device_attribute *attr,
|
|
ret = get_user_pages_fast(virt_addr, 1, FOLL_WRITE, NULL);
|
|
if (ret<=0) {
|
|
#ifdef ERR_INJ_DEBUG
|
|
- printk("Virtual address %lx is not existing.\n",virt_addr);
|
|
+ printk("Virtual address %llx is not existing.\n", virt_addr);
|
|
#endif
|
|
return -EINVAL;
|
|
}
|
|
@@ -163,7 +163,7 @@ show_err_data_buffer(struct device *dev,
|
|
{
|
|
unsigned int cpu=dev->id;
|
|
|
|
- return sprintf(buf, "%lx, %lx, %lx\n",
|
|
+ return sprintf(buf, "%llx, %llx, %llx\n",
|
|
err_data_buffer[cpu].data1,
|
|
err_data_buffer[cpu].data2,
|
|
err_data_buffer[cpu].data3);
|
|
@@ -178,13 +178,13 @@ store_err_data_buffer(struct device *dev,
|
|
int ret;
|
|
|
|
#ifdef ERR_INJ_DEBUG
|
|
- printk("write err_data_buffer=[%lx,%lx,%lx] on cpu%d\n",
|
|
+ printk("write err_data_buffer=[%llx,%llx,%llx] on cpu%d\n",
|
|
err_data_buffer[cpu].data1,
|
|
err_data_buffer[cpu].data2,
|
|
err_data_buffer[cpu].data3,
|
|
cpu);
|
|
#endif
|
|
- ret=sscanf(buf, "%lx, %lx, %lx",
|
|
+ ret = sscanf(buf, "%llx, %llx, %llx",
|
|
&err_data_buffer[cpu].data1,
|
|
&err_data_buffer[cpu].data2,
|
|
&err_data_buffer[cpu].data3);
|
|
diff --git a/arch/ia64/kernel/mca.c b/arch/ia64/kernel/mca.c
|
|
index 2703f7795672d..bd0a51dc345af 100644
|
|
--- a/arch/ia64/kernel/mca.c
|
|
+++ b/arch/ia64/kernel/mca.c
|
|
@@ -1822,7 +1822,7 @@ ia64_mca_cpu_init(void *cpu_data)
|
|
data = mca_bootmem();
|
|
first_time = 0;
|
|
} else
|
|
- data = (void *)__get_free_pages(GFP_KERNEL,
|
|
+ data = (void *)__get_free_pages(GFP_ATOMIC,
|
|
get_order(sz));
|
|
if (!data)
|
|
panic("Could not allocate MCA memory for cpu %d\n",
|
|
diff --git a/arch/x86/Makefile b/arch/x86/Makefile
|
|
index 0a6d497221e49..9c86f2dc16b1d 100644
|
|
--- a/arch/x86/Makefile
|
|
+++ b/arch/x86/Makefile
|
|
@@ -34,7 +34,7 @@ M16_CFLAGS := $(call cc-option, -m16, $(CODE16GCC_CFLAGS))
|
|
REALMODE_CFLAGS := $(M16_CFLAGS) -g -Os -DDISABLE_BRANCH_PROFILING \
|
|
-Wall -Wstrict-prototypes -march=i386 -mregparm=3 \
|
|
-fno-strict-aliasing -fomit-frame-pointer -fno-pic \
|
|
- -mno-mmx -mno-sse
|
|
+ -mno-mmx -mno-sse $(call cc-option,-fcf-protection=none)
|
|
|
|
REALMODE_CFLAGS += -ffreestanding
|
|
REALMODE_CFLAGS += -fno-stack-protector
|
|
diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
|
|
index 023ac12f54a29..a11796bbb9cee 100644
|
|
--- a/arch/x86/net/bpf_jit_comp.c
|
|
+++ b/arch/x86/net/bpf_jit_comp.c
|
|
@@ -1476,7 +1476,16 @@ emit_jmp:
|
|
}
|
|
|
|
if (image) {
|
|
- if (unlikely(proglen + ilen > oldproglen)) {
|
|
+ /*
|
|
+ * When populating the image, assert that:
|
|
+ *
|
|
+ * i) We do not write beyond the allocated space, and
|
|
+ * ii) addrs[i] did not change from the prior run, in order
|
|
+ * to validate assumptions made for computing branch
|
|
+ * displacements.
|
|
+ */
|
|
+ if (unlikely(proglen + ilen > oldproglen ||
|
|
+ proglen + ilen != addrs[i])) {
|
|
pr_err("bpf_jit: fatal error\n");
|
|
return -EFAULT;
|
|
}
|
|
@@ -2038,7 +2047,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
|
|
extra_pass = true;
|
|
goto skip_init_addrs;
|
|
}
|
|
- addrs = kmalloc_array(prog->len + 1, sizeof(*addrs), GFP_KERNEL);
|
|
+ addrs = kvmalloc_array(prog->len + 1, sizeof(*addrs), GFP_KERNEL);
|
|
if (!addrs) {
|
|
prog = orig_prog;
|
|
goto out_addrs;
|
|
@@ -2128,7 +2137,7 @@ out_image:
|
|
if (image)
|
|
bpf_prog_fill_jited_linfo(prog, addrs + 1);
|
|
out_addrs:
|
|
- kfree(addrs);
|
|
+ kvfree(addrs);
|
|
kfree(jit_data);
|
|
prog->aux->jit_data = NULL;
|
|
}
|
|
diff --git a/arch/x86/net/bpf_jit_comp32.c b/arch/x86/net/bpf_jit_comp32.c
|
|
index 96fde03aa9877..2cf4d217840d8 100644
|
|
--- a/arch/x86/net/bpf_jit_comp32.c
|
|
+++ b/arch/x86/net/bpf_jit_comp32.c
|
|
@@ -2278,7 +2278,16 @@ notyet:
|
|
}
|
|
|
|
if (image) {
|
|
- if (unlikely(proglen + ilen > oldproglen)) {
|
|
+ /*
|
|
+ * When populating the image, assert that:
|
|
+ *
|
|
+ * i) We do not write beyond the allocated space, and
|
|
+ * ii) addrs[i] did not change from the prior run, in order
|
|
+ * to validate assumptions made for computing branch
|
|
+ * displacements.
|
|
+ */
|
|
+ if (unlikely(proglen + ilen > oldproglen ||
|
|
+ proglen + ilen != addrs[i])) {
|
|
pr_err("bpf_jit: fatal error\n");
|
|
return -EFAULT;
|
|
}
|
|
diff --git a/drivers/bus/ti-sysc.c b/drivers/bus/ti-sysc.c
|
|
index 45f5530666d3f..16e389dce1118 100644
|
|
--- a/drivers/bus/ti-sysc.c
|
|
+++ b/drivers/bus/ti-sysc.c
|
|
@@ -3044,7 +3044,9 @@ static int sysc_remove(struct platform_device *pdev)
|
|
|
|
pm_runtime_put_sync(&pdev->dev);
|
|
pm_runtime_disable(&pdev->dev);
|
|
- reset_control_assert(ddata->rsts);
|
|
+
|
|
+ if (!reset_control_status(ddata->rsts))
|
|
+ reset_control_assert(ddata->rsts);
|
|
|
|
unprepare:
|
|
sysc_unprepare(ddata);
|
|
diff --git a/drivers/gpu/drm/msm/adreno/a5xx_power.c b/drivers/gpu/drm/msm/adreno/a5xx_power.c
|
|
index f176a6f3eff66..e58670a61df4b 100644
|
|
--- a/drivers/gpu/drm/msm/adreno/a5xx_power.c
|
|
+++ b/drivers/gpu/drm/msm/adreno/a5xx_power.c
|
|
@@ -304,7 +304,7 @@ int a5xx_power_init(struct msm_gpu *gpu)
|
|
/* Set up the limits management */
|
|
if (adreno_is_a530(adreno_gpu))
|
|
a530_lm_setup(gpu);
|
|
- else
|
|
+ else if (adreno_is_a540(adreno_gpu))
|
|
a540_lm_setup(gpu);
|
|
|
|
/* Set up SP/TP power collpase */
|
|
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
|
|
index d93c44f6996db..e69ea810e18d9 100644
|
|
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
|
|
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
|
|
@@ -43,6 +43,8 @@
|
|
#define DPU_DEBUGFS_DIR "msm_dpu"
|
|
#define DPU_DEBUGFS_HWMASKNAME "hw_log_mask"
|
|
|
|
+#define MIN_IB_BW 400000000ULL /* Min ib vote 400MB */
|
|
+
|
|
static int dpu_kms_hw_init(struct msm_kms *kms);
|
|
static void _dpu_kms_mmu_destroy(struct dpu_kms *dpu_kms);
|
|
|
|
@@ -929,6 +931,9 @@ static int dpu_kms_hw_init(struct msm_kms *kms)
|
|
DPU_DEBUG("REG_DMA is not defined");
|
|
}
|
|
|
|
+ if (of_device_is_compatible(dev->dev->of_node, "qcom,sc7180-mdss"))
|
|
+ dpu_kms_parse_data_bus_icc_path(dpu_kms);
|
|
+
|
|
pm_runtime_get_sync(&dpu_kms->pdev->dev);
|
|
|
|
dpu_kms->core_rev = readl_relaxed(dpu_kms->mmio + 0x0);
|
|
@@ -1030,9 +1035,6 @@ static int dpu_kms_hw_init(struct msm_kms *kms)
|
|
|
|
dpu_vbif_init_memtypes(dpu_kms);
|
|
|
|
- if (of_device_is_compatible(dev->dev->of_node, "qcom,sc7180-mdss"))
|
|
- dpu_kms_parse_data_bus_icc_path(dpu_kms);
|
|
-
|
|
pm_runtime_put_sync(&dpu_kms->pdev->dev);
|
|
|
|
return 0;
|
|
@@ -1189,10 +1191,10 @@ static int __maybe_unused dpu_runtime_resume(struct device *dev)
|
|
|
|
ddev = dpu_kms->dev;
|
|
|
|
+ WARN_ON(!(dpu_kms->num_paths));
|
|
/* Min vote of BW is required before turning on AXI clk */
|
|
for (i = 0; i < dpu_kms->num_paths; i++)
|
|
- icc_set_bw(dpu_kms->path[i], 0,
|
|
- dpu_kms->catalog->perf.min_dram_ib);
|
|
+ icc_set_bw(dpu_kms->path[i], 0, Bps_to_icc(MIN_IB_BW));
|
|
|
|
rc = msm_dss_enable_clk(mp->clk_config, mp->num_clk, true);
|
|
if (rc) {
|
|
diff --git a/drivers/gpu/drm/msm/dsi/pll/dsi_pll_7nm.c b/drivers/gpu/drm/msm/dsi/pll/dsi_pll_7nm.c
|
|
index c1f6708367ae9..c1c41846b6b2b 100644
|
|
--- a/drivers/gpu/drm/msm/dsi/pll/dsi_pll_7nm.c
|
|
+++ b/drivers/gpu/drm/msm/dsi/pll/dsi_pll_7nm.c
|
|
@@ -325,7 +325,7 @@ static void dsi_pll_commit(struct dsi_pll_7nm *pll)
|
|
pll_write(base + REG_DSI_7nm_PHY_PLL_FRAC_DIV_START_LOW_1, reg->frac_div_start_low);
|
|
pll_write(base + REG_DSI_7nm_PHY_PLL_FRAC_DIV_START_MID_1, reg->frac_div_start_mid);
|
|
pll_write(base + REG_DSI_7nm_PHY_PLL_FRAC_DIV_START_HIGH_1, reg->frac_div_start_high);
|
|
- pll_write(base + REG_DSI_7nm_PHY_PLL_PLL_LOCKDET_RATE_1, 0x40);
|
|
+ pll_write(base + REG_DSI_7nm_PHY_PLL_PLL_LOCKDET_RATE_1, reg->pll_lockdet_rate);
|
|
pll_write(base + REG_DSI_7nm_PHY_PLL_PLL_LOCK_DELAY, 0x06);
|
|
pll_write(base + REG_DSI_7nm_PHY_PLL_CMODE_1, 0x10); /* TODO: 0x00 for CPHY */
|
|
pll_write(base + REG_DSI_7nm_PHY_PLL_CLOCK_INVERTERS, reg->pll_clock_inverters);
|
|
diff --git a/drivers/gpu/drm/msm/msm_fence.c b/drivers/gpu/drm/msm/msm_fence.c
|
|
index ad2703698b052..cd59a59180385 100644
|
|
--- a/drivers/gpu/drm/msm/msm_fence.c
|
|
+++ b/drivers/gpu/drm/msm/msm_fence.c
|
|
@@ -45,7 +45,7 @@ int msm_wait_fence(struct msm_fence_context *fctx, uint32_t fence,
|
|
int ret;
|
|
|
|
if (fence > fctx->last_fence) {
|
|
- DRM_ERROR("%s: waiting on invalid fence: %u (of %u)\n",
|
|
+ DRM_ERROR_RATELIMITED("%s: waiting on invalid fence: %u (of %u)\n",
|
|
fctx->name, fence, fctx->last_fence);
|
|
return -EINVAL;
|
|
}
|
|
diff --git a/drivers/isdn/hardware/mISDN/mISDNipac.c b/drivers/isdn/hardware/mISDN/mISDNipac.c
|
|
index ec475087fbf93..39f841b424883 100644
|
|
--- a/drivers/isdn/hardware/mISDN/mISDNipac.c
|
|
+++ b/drivers/isdn/hardware/mISDN/mISDNipac.c
|
|
@@ -694,7 +694,7 @@ isac_release(struct isac_hw *isac)
|
|
{
|
|
if (isac->type & IPAC_TYPE_ISACX)
|
|
WriteISAC(isac, ISACX_MASK, 0xff);
|
|
- else
|
|
+ else if (isac->type != 0)
|
|
WriteISAC(isac, ISAC_MASK, 0xff);
|
|
if (isac->dch.timer.function != NULL) {
|
|
del_timer(&isac->dch.timer);
|
|
diff --git a/drivers/net/ethernet/marvell/pxa168_eth.c b/drivers/net/ethernet/marvell/pxa168_eth.c
|
|
index d1e4d42e497d8..3712e1786091f 100644
|
|
--- a/drivers/net/ethernet/marvell/pxa168_eth.c
|
|
+++ b/drivers/net/ethernet/marvell/pxa168_eth.c
|
|
@@ -1544,8 +1544,8 @@ static int pxa168_eth_remove(struct platform_device *pdev)
|
|
clk_disable_unprepare(pep->clk);
|
|
mdiobus_unregister(pep->smi_bus);
|
|
mdiobus_free(pep->smi_bus);
|
|
- unregister_netdev(dev);
|
|
cancel_work_sync(&pep->tx_timeout_task);
|
|
+ unregister_netdev(dev);
|
|
free_netdev(dev);
|
|
return 0;
|
|
}
|
|
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
|
|
index e2006c6053c9c..9a12df43becc4 100644
|
|
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
|
|
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
|
|
@@ -2326,8 +2326,9 @@ static u8 mlx5e_build_icosq_log_wq_sz(struct mlx5e_params *params,
|
|
{
|
|
switch (params->rq_wq_type) {
|
|
case MLX5_WQ_TYPE_LINKED_LIST_STRIDING_RQ:
|
|
- return order_base_2(MLX5E_UMR_WQEBBS) +
|
|
- mlx5e_get_rq_log_wq_sz(rqp->rqc);
|
|
+ return max_t(u8, MLX5E_PARAMS_MINIMUM_LOG_SQ_SIZE,
|
|
+ order_base_2(MLX5E_UMR_WQEBBS) +
|
|
+ mlx5e_get_rq_log_wq_sz(rqp->rqc));
|
|
default: /* MLX5_WQ_TYPE_CYCLIC */
|
|
return MLX5E_PARAMS_MINIMUM_LOG_SQ_SIZE;
|
|
}
|
|
diff --git a/drivers/net/ipa/ipa_cmd.c b/drivers/net/ipa/ipa_cmd.c
|
|
index 46d8b7336d8f2..a47378b7d9b2f 100644
|
|
--- a/drivers/net/ipa/ipa_cmd.c
|
|
+++ b/drivers/net/ipa/ipa_cmd.c
|
|
@@ -175,21 +175,23 @@ bool ipa_cmd_table_valid(struct ipa *ipa, const struct ipa_mem *mem,
|
|
: field_max(IP_FLTRT_FLAGS_NHASH_ADDR_FMASK);
|
|
if (mem->offset > offset_max ||
|
|
ipa->mem_offset > offset_max - mem->offset) {
|
|
- dev_err(dev, "IPv%c %s%s table region offset too large "
|
|
- "(0x%04x + 0x%04x > 0x%04x)\n",
|
|
- ipv6 ? '6' : '4', hashed ? "hashed " : "",
|
|
- route ? "route" : "filter",
|
|
- ipa->mem_offset, mem->offset, offset_max);
|
|
+ dev_err(dev, "IPv%c %s%s table region offset too large\n",
|
|
+ ipv6 ? '6' : '4', hashed ? "hashed " : "",
|
|
+ route ? "route" : "filter");
|
|
+ dev_err(dev, " (0x%04x + 0x%04x > 0x%04x)\n",
|
|
+ ipa->mem_offset, mem->offset, offset_max);
|
|
+
|
|
return false;
|
|
}
|
|
|
|
if (mem->offset > ipa->mem_size ||
|
|
mem->size > ipa->mem_size - mem->offset) {
|
|
- dev_err(dev, "IPv%c %s%s table region out of range "
|
|
- "(0x%04x + 0x%04x > 0x%04x)\n",
|
|
- ipv6 ? '6' : '4', hashed ? "hashed " : "",
|
|
- route ? "route" : "filter",
|
|
- mem->offset, mem->size, ipa->mem_size);
|
|
+ dev_err(dev, "IPv%c %s%s table region out of range\n",
|
|
+ ipv6 ? '6' : '4', hashed ? "hashed " : "",
|
|
+ route ? "route" : "filter");
|
|
+ dev_err(dev, " (0x%04x + 0x%04x > 0x%04x)\n",
|
|
+ mem->offset, mem->size, ipa->mem_size);
|
|
+
|
|
return false;
|
|
}
|
|
|
|
@@ -205,22 +207,36 @@ static bool ipa_cmd_header_valid(struct ipa *ipa)
|
|
u32 size_max;
|
|
u32 size;
|
|
|
|
+ /* In ipa_cmd_hdr_init_local_add() we record the offset and size
|
|
+ * of the header table memory area. Make sure the offset and size
|
|
+ * fit in the fields that need to hold them, and that the entire
|
|
+ * range is within the overall IPA memory range.
|
|
+ */
|
|
offset_max = field_max(HDR_INIT_LOCAL_FLAGS_HDR_ADDR_FMASK);
|
|
if (mem->offset > offset_max ||
|
|
ipa->mem_offset > offset_max - mem->offset) {
|
|
- dev_err(dev, "header table region offset too large "
|
|
- "(0x%04x + 0x%04x > 0x%04x)\n",
|
|
- ipa->mem_offset + mem->offset, offset_max);
|
|
+ dev_err(dev, "header table region offset too large\n");
|
|
+ dev_err(dev, " (0x%04x + 0x%04x > 0x%04x)\n",
|
|
+ ipa->mem_offset, mem->offset, offset_max);
|
|
+
|
|
return false;
|
|
}
|
|
|
|
size_max = field_max(HDR_INIT_LOCAL_FLAGS_TABLE_SIZE_FMASK);
|
|
size = ipa->mem[IPA_MEM_MODEM_HEADER].size;
|
|
size += ipa->mem[IPA_MEM_AP_HEADER].size;
|
|
- if (mem->offset > ipa->mem_size || size > ipa->mem_size - mem->offset) {
|
|
- dev_err(dev, "header table region out of range "
|
|
- "(0x%04x + 0x%04x > 0x%04x)\n",
|
|
- mem->offset, size, ipa->mem_size);
|
|
+
|
|
+ if (size > size_max) {
|
|
+ dev_err(dev, "header table region size too large\n");
|
|
+ dev_err(dev, " (0x%04x > 0x%08x)\n", size, size_max);
|
|
+
|
|
+ return false;
|
|
+ }
|
|
+ if (size > ipa->mem_size || mem->offset > ipa->mem_size - size) {
|
|
+ dev_err(dev, "header table region out of range\n");
|
|
+ dev_err(dev, " (0x%04x + 0x%04x > 0x%04x)\n",
|
|
+ mem->offset, size, ipa->mem_size);
|
|
+
|
|
return false;
|
|
}
|
|
|
|
diff --git a/drivers/platform/x86/intel-hid.c b/drivers/platform/x86/intel-hid.c
|
|
index 86261970bd8f3..8a0cd5bf00657 100644
|
|
--- a/drivers/platform/x86/intel-hid.c
|
|
+++ b/drivers/platform/x86/intel-hid.c
|
|
@@ -86,6 +86,13 @@ static const struct dmi_system_id button_array_table[] = {
|
|
DMI_MATCH(DMI_PRODUCT_NAME, "HP Spectre x2 Detachable"),
|
|
},
|
|
},
|
|
+ {
|
|
+ .ident = "Lenovo ThinkPad X1 Tablet Gen 2",
|
|
+ .matches = {
|
|
+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
|
+ DMI_MATCH(DMI_PRODUCT_FAMILY, "ThinkPad X1 Tablet Gen 2"),
|
|
+ },
|
|
+ },
|
|
{ }
|
|
};
|
|
|
|
diff --git a/drivers/platform/x86/intel_pmc_core.c b/drivers/platform/x86/intel_pmc_core.c
|
|
index 3e5fe66333f13..e06b36e87a33f 100644
|
|
--- a/drivers/platform/x86/intel_pmc_core.c
|
|
+++ b/drivers/platform/x86/intel_pmc_core.c
|
|
@@ -863,34 +863,45 @@ out_unlock:
|
|
}
|
|
DEFINE_SHOW_ATTRIBUTE(pmc_core_pll);
|
|
|
|
-static ssize_t pmc_core_ltr_ignore_write(struct file *file,
|
|
- const char __user *userbuf,
|
|
- size_t count, loff_t *ppos)
|
|
+static int pmc_core_send_ltr_ignore(u32 value)
|
|
{
|
|
struct pmc_dev *pmcdev = &pmc;
|
|
const struct pmc_reg_map *map = pmcdev->map;
|
|
- u32 val, buf_size, fd;
|
|
- int err;
|
|
-
|
|
- buf_size = count < 64 ? count : 64;
|
|
-
|
|
- err = kstrtou32_from_user(userbuf, buf_size, 10, &val);
|
|
- if (err)
|
|
- return err;
|
|
+ u32 reg;
|
|
+ int err = 0;
|
|
|
|
mutex_lock(&pmcdev->lock);
|
|
|
|
- if (val > map->ltr_ignore_max) {
|
|
+ if (value > map->ltr_ignore_max) {
|
|
err = -EINVAL;
|
|
goto out_unlock;
|
|
}
|
|
|
|
- fd = pmc_core_reg_read(pmcdev, map->ltr_ignore_offset);
|
|
- fd |= (1U << val);
|
|
- pmc_core_reg_write(pmcdev, map->ltr_ignore_offset, fd);
|
|
+ reg = pmc_core_reg_read(pmcdev, map->ltr_ignore_offset);
|
|
+ reg |= BIT(value);
|
|
+ pmc_core_reg_write(pmcdev, map->ltr_ignore_offset, reg);
|
|
|
|
out_unlock:
|
|
mutex_unlock(&pmcdev->lock);
|
|
+
|
|
+ return err;
|
|
+}
|
|
+
|
|
+static ssize_t pmc_core_ltr_ignore_write(struct file *file,
|
|
+ const char __user *userbuf,
|
|
+ size_t count, loff_t *ppos)
|
|
+{
|
|
+ u32 buf_size, value;
|
|
+ int err;
|
|
+
|
|
+ buf_size = min_t(u32, count, 64);
|
|
+
|
|
+ err = kstrtou32_from_user(userbuf, buf_size, 10, &value);
|
|
+ if (err)
|
|
+ return err;
|
|
+
|
|
+ err = pmc_core_send_ltr_ignore(value);
|
|
+
|
|
return err == 0 ? count : err;
|
|
}
|
|
|
|
@@ -1244,6 +1255,15 @@ static int pmc_core_probe(struct platform_device *pdev)
|
|
pmcdev->pmc_xram_read_bit = pmc_core_check_read_lock_bit();
|
|
dmi_check_system(pmc_core_dmi_table);
|
|
|
|
+ /*
|
|
+ * On TGL, due to a hardware limitation, the GBE LTR blocks PC10 when
|
|
+ * a cable is attached. Tell the PMC to ignore it.
|
|
+ */
|
|
+ if (pmcdev->map == &tgl_reg_map) {
|
|
+ dev_dbg(&pdev->dev, "ignoring GBE LTR\n");
|
|
+ pmc_core_send_ltr_ignore(3);
|
|
+ }
|
|
+
|
|
pmc_core_dbgfs_register(pmcdev);
|
|
|
|
device_initialized = true;
|
|
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
|
|
index 69402758b99c3..3b0acaeb20cf7 100644
|
|
--- a/drivers/platform/x86/thinkpad_acpi.c
|
|
+++ b/drivers/platform/x86/thinkpad_acpi.c
|
|
@@ -4079,13 +4079,19 @@ static bool hotkey_notify_6xxx(const u32 hkey,
|
|
|
|
case TP_HKEY_EV_KEY_NUMLOCK:
|
|
case TP_HKEY_EV_KEY_FN:
|
|
- case TP_HKEY_EV_KEY_FN_ESC:
|
|
/* key press events, we just ignore them as long as the EC
|
|
* is still reporting them in the normal keyboard stream */
|
|
*send_acpi_ev = false;
|
|
*ignore_acpi_ev = true;
|
|
return true;
|
|
|
|
+ case TP_HKEY_EV_KEY_FN_ESC:
|
|
+ /* Get the media key status to foce the status LED to update */
|
|
+ acpi_evalf(hkey_handle, NULL, "GMKS", "v");
|
|
+ *send_acpi_ev = false;
|
|
+ *ignore_acpi_ev = true;
|
|
+ return true;
|
|
+
|
|
case TP_HKEY_EV_TABLET_CHANGED:
|
|
tpacpi_input_send_tabletsw();
|
|
hotkey_tablet_mode_notify_change();
|
|
diff --git a/drivers/ptp/ptp_qoriq.c b/drivers/ptp/ptp_qoriq.c
|
|
index beb5f74944cdf..08f4cf0ad9e3c 100644
|
|
--- a/drivers/ptp/ptp_qoriq.c
|
|
+++ b/drivers/ptp/ptp_qoriq.c
|
|
@@ -189,15 +189,16 @@ int ptp_qoriq_adjfine(struct ptp_clock_info *ptp, long scaled_ppm)
|
|
tmr_add = ptp_qoriq->tmr_add;
|
|
adj = tmr_add;
|
|
|
|
- /* calculate diff as adj*(scaled_ppm/65536)/1000000
|
|
- * and round() to the nearest integer
|
|
+ /*
|
|
+ * Calculate diff and round() to the nearest integer
|
|
+ *
|
|
+ * diff = adj * (ppb / 1000000000)
|
|
+ * = adj * scaled_ppm / 65536000000
|
|
*/
|
|
- adj *= scaled_ppm;
|
|
- diff = div_u64(adj, 8000000);
|
|
- diff = (diff >> 13) + ((diff >> 12) & 1);
|
|
+ diff = mul_u64_u64_div_u64(adj, scaled_ppm, 32768000000);
|
|
+ diff = DIV64_U64_ROUND_UP(diff, 2);
|
|
|
|
tmr_add = neg_adj ? tmr_add - diff : tmr_add + diff;
|
|
-
|
|
ptp_qoriq->write(®s->ctrl_regs->tmr_add, tmr_add);
|
|
|
|
return 0;
|
|
diff --git a/drivers/target/target_core_pscsi.c b/drivers/target/target_core_pscsi.c
|
|
index 4e37fa9b409d5..723a51a3f4316 100644
|
|
--- a/drivers/target/target_core_pscsi.c
|
|
+++ b/drivers/target/target_core_pscsi.c
|
|
@@ -939,6 +939,14 @@ new_bio:
|
|
|
|
return 0;
|
|
fail:
|
|
+ if (bio)
|
|
+ bio_put(bio);
|
|
+ while (req->bio) {
|
|
+ bio = req->bio;
|
|
+ req->bio = bio->bi_next;
|
|
+ bio_put(bio);
|
|
+ }
|
|
+ req->biotail = NULL;
|
|
return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
|
|
}
|
|
|
|
diff --git a/fs/block_dev.c b/fs/block_dev.c
|
|
index fe201b757baa4..6516051807b89 100644
|
|
--- a/fs/block_dev.c
|
|
+++ b/fs/block_dev.c
|
|
@@ -1404,13 +1404,13 @@ int bdev_disk_changed(struct block_device *bdev, bool invalidate)
|
|
|
|
lockdep_assert_held(&bdev->bd_mutex);
|
|
|
|
- clear_bit(GD_NEED_PART_SCAN, &bdev->bd_disk->state);
|
|
-
|
|
rescan:
|
|
ret = blk_drop_partitions(bdev);
|
|
if (ret)
|
|
return ret;
|
|
|
|
+ clear_bit(GD_NEED_PART_SCAN, &disk->state);
|
|
+
|
|
/*
|
|
* Historically we only set the capacity to zero for devices that
|
|
* support partitions (independ of actually having partitions created).
|
|
diff --git a/fs/cifs/file.c b/fs/cifs/file.c
|
|
index be46fab4c96d8..da057570bb93d 100644
|
|
--- a/fs/cifs/file.c
|
|
+++ b/fs/cifs/file.c
|
|
@@ -164,6 +164,7 @@ int cifs_posix_open(char *full_path, struct inode **pinode,
|
|
goto posix_open_ret;
|
|
}
|
|
} else {
|
|
+ cifs_revalidate_mapping(*pinode);
|
|
cifs_fattr_to_inode(*pinode, &fattr);
|
|
}
|
|
|
|
diff --git a/fs/cifs/smb2misc.c b/fs/cifs/smb2misc.c
|
|
index db22d686c61ff..be3df90bb2bcc 100644
|
|
--- a/fs/cifs/smb2misc.c
|
|
+++ b/fs/cifs/smb2misc.c
|
|
@@ -745,8 +745,8 @@ smb2_is_valid_oplock_break(char *buffer, struct TCP_Server_Info *server)
|
|
}
|
|
}
|
|
spin_unlock(&cifs_tcp_ses_lock);
|
|
- cifs_dbg(FYI, "Can not process oplock break for non-existent connection\n");
|
|
- return false;
|
|
+ cifs_dbg(FYI, "No file id matched, oplock break ignored\n");
|
|
+ return true;
|
|
}
|
|
|
|
void
|
|
diff --git a/fs/io_uring.c b/fs/io_uring.c
|
|
index 4ccf99cb8cdc0..0de27e75460d1 100644
|
|
--- a/fs/io_uring.c
|
|
+++ b/fs/io_uring.c
|
|
@@ -1489,7 +1489,7 @@ static void io_queue_async_work(struct io_kiocb *req)
|
|
io_queue_linked_timeout(link);
|
|
}
|
|
|
|
-static void io_kill_timeout(struct io_kiocb *req)
|
|
+static void io_kill_timeout(struct io_kiocb *req, int status)
|
|
{
|
|
struct io_timeout_data *io = req->async_data;
|
|
int ret;
|
|
@@ -1499,7 +1499,7 @@ static void io_kill_timeout(struct io_kiocb *req)
|
|
atomic_set(&req->ctx->cq_timeouts,
|
|
atomic_read(&req->ctx->cq_timeouts) + 1);
|
|
list_del_init(&req->timeout.list);
|
|
- io_cqring_fill_event(req, 0);
|
|
+ io_cqring_fill_event(req, status);
|
|
io_put_req_deferred(req, 1);
|
|
}
|
|
}
|
|
@@ -1516,7 +1516,7 @@ static bool io_kill_timeouts(struct io_ring_ctx *ctx, struct task_struct *tsk,
|
|
spin_lock_irq(&ctx->completion_lock);
|
|
list_for_each_entry_safe(req, tmp, &ctx->timeout_list, timeout.list) {
|
|
if (io_match_task(req, tsk, files)) {
|
|
- io_kill_timeout(req);
|
|
+ io_kill_timeout(req, -ECANCELED);
|
|
canceled++;
|
|
}
|
|
}
|
|
@@ -1568,7 +1568,7 @@ static void io_flush_timeouts(struct io_ring_ctx *ctx)
|
|
break;
|
|
|
|
list_del_init(&req->timeout.list);
|
|
- io_kill_timeout(req);
|
|
+ io_kill_timeout(req, 0);
|
|
} while (!list_empty(&ctx->timeout_list));
|
|
|
|
ctx->cq_last_tm_flush = seq;
|
|
diff --git a/init/Kconfig b/init/Kconfig
|
|
index d559abf38c905..fc4c9f416fadb 100644
|
|
--- a/init/Kconfig
|
|
+++ b/init/Kconfig
|
|
@@ -114,8 +114,7 @@ config INIT_ENV_ARG_LIMIT
|
|
|
|
config COMPILE_TEST
|
|
bool "Compile also drivers which will not load"
|
|
- depends on !UML
|
|
- default n
|
|
+ depends on HAS_IOMEM
|
|
help
|
|
Some drivers can be compiled on a different platform than they are
|
|
intended to be run on. Despite they cannot be loaded there (or even
|
|
diff --git a/lib/math/div64.c b/lib/math/div64.c
|
|
index 3952a07130d88..edd1090c9edb1 100644
|
|
--- a/lib/math/div64.c
|
|
+++ b/lib/math/div64.c
|
|
@@ -230,4 +230,5 @@ u64 mul_u64_u64_div_u64(u64 a, u64 b, u64 c)
|
|
|
|
return res + div64_u64(a * b, c);
|
|
}
|
|
+EXPORT_SYMBOL(mul_u64_u64_div_u64);
|
|
#endif
|
|
diff --git a/net/mac80211/aead_api.c b/net/mac80211/aead_api.c
|
|
index d7b3d905d5353..b00d6f5b33f40 100644
|
|
--- a/net/mac80211/aead_api.c
|
|
+++ b/net/mac80211/aead_api.c
|
|
@@ -23,6 +23,7 @@ int aead_encrypt(struct crypto_aead *tfm, u8 *b_0, u8 *aad, size_t aad_len,
|
|
struct aead_request *aead_req;
|
|
int reqsize = sizeof(*aead_req) + crypto_aead_reqsize(tfm);
|
|
u8 *__aad;
|
|
+ int ret;
|
|
|
|
aead_req = kzalloc(reqsize + aad_len, GFP_ATOMIC);
|
|
if (!aead_req)
|
|
@@ -40,10 +41,10 @@ int aead_encrypt(struct crypto_aead *tfm, u8 *b_0, u8 *aad, size_t aad_len,
|
|
aead_request_set_crypt(aead_req, sg, sg, data_len, b_0);
|
|
aead_request_set_ad(aead_req, sg[0].length);
|
|
|
|
- crypto_aead_encrypt(aead_req);
|
|
+ ret = crypto_aead_encrypt(aead_req);
|
|
kfree_sensitive(aead_req);
|
|
|
|
- return 0;
|
|
+ return ret;
|
|
}
|
|
|
|
int aead_decrypt(struct crypto_aead *tfm, u8 *b_0, u8 *aad, size_t aad_len,
|
|
diff --git a/net/mac80211/aes_gmac.c b/net/mac80211/aes_gmac.c
|
|
index 6f3b3a0cc10a4..512cab073f2e8 100644
|
|
--- a/net/mac80211/aes_gmac.c
|
|
+++ b/net/mac80211/aes_gmac.c
|
|
@@ -22,6 +22,7 @@ int ieee80211_aes_gmac(struct crypto_aead *tfm, const u8 *aad, u8 *nonce,
|
|
struct aead_request *aead_req;
|
|
int reqsize = sizeof(*aead_req) + crypto_aead_reqsize(tfm);
|
|
const __le16 *fc;
|
|
+ int ret;
|
|
|
|
if (data_len < GMAC_MIC_LEN)
|
|
return -EINVAL;
|
|
@@ -59,10 +60,10 @@ int ieee80211_aes_gmac(struct crypto_aead *tfm, const u8 *aad, u8 *nonce,
|
|
aead_request_set_crypt(aead_req, sg, sg, 0, iv);
|
|
aead_request_set_ad(aead_req, GMAC_AAD_LEN + data_len);
|
|
|
|
- crypto_aead_encrypt(aead_req);
|
|
+ ret = crypto_aead_encrypt(aead_req);
|
|
kfree_sensitive(aead_req);
|
|
|
|
- return 0;
|
|
+ return ret;
|
|
}
|
|
|
|
struct crypto_aead *ieee80211_aes_gmac_key_setup(const u8 key[],
|
|
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
|
|
index 523380aed92eb..19c093bb3876e 100644
|
|
--- a/net/mac80211/main.c
|
|
+++ b/net/mac80211/main.c
|
|
@@ -982,8 +982,19 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
|
|
continue;
|
|
|
|
if (!dflt_chandef.chan) {
|
|
+ /*
|
|
+ * Assign the first enabled channel to dflt_chandef
|
|
+ * from the list of channels
|
|
+ */
|
|
+ for (i = 0; i < sband->n_channels; i++)
|
|
+ if (!(sband->channels[i].flags &
|
|
+ IEEE80211_CHAN_DISABLED))
|
|
+ break;
|
|
+ /* if none found then use the first anyway */
|
|
+ if (i == sband->n_channels)
|
|
+ i = 0;
|
|
cfg80211_chandef_create(&dflt_chandef,
|
|
- &sband->channels[0],
|
|
+ &sband->channels[i],
|
|
NL80211_CHAN_NO_HT);
|
|
/* init channel we're on */
|
|
if (!local->use_chanctx && !local->_oper_chandef.chan) {
|
|
diff --git a/net/netfilter/nf_conntrack_proto_gre.c b/net/netfilter/nf_conntrack_proto_gre.c
|
|
index 5b05487a60d21..db11e403d8187 100644
|
|
--- a/net/netfilter/nf_conntrack_proto_gre.c
|
|
+++ b/net/netfilter/nf_conntrack_proto_gre.c
|
|
@@ -218,9 +218,6 @@ int nf_conntrack_gre_packet(struct nf_conn *ct,
|
|
enum ip_conntrack_info ctinfo,
|
|
const struct nf_hook_state *state)
|
|
{
|
|
- if (state->pf != NFPROTO_IPV4)
|
|
- return -NF_ACCEPT;
|
|
-
|
|
if (!nf_ct_is_confirmed(ct)) {
|
|
unsigned int *timeouts = nf_ct_timeout_lookup(ct);
|
|
|
|
diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
|
|
index 978a968d7aeda..2e76935db2c88 100644
|
|
--- a/net/netfilter/nf_tables_api.c
|
|
+++ b/net/netfilter/nf_tables_api.c
|
|
@@ -6573,6 +6573,9 @@ static int nft_register_flowtable_net_hooks(struct net *net,
|
|
|
|
list_for_each_entry(hook, hook_list, list) {
|
|
list_for_each_entry(ft, &table->flowtables, list) {
|
|
+ if (!nft_is_active_next(net, ft))
|
|
+ continue;
|
|
+
|
|
list_for_each_entry(hook2, &ft->hook_list, list) {
|
|
if (hook->ops.dev == hook2->ops.dev &&
|
|
hook->ops.pf == hook2->ops.pf) {
|
|
diff --git a/tools/bpf/resolve_btfids/.gitignore b/tools/bpf/resolve_btfids/.gitignore
|
|
index a026df7dc2809..16913fffc9859 100644
|
|
--- a/tools/bpf/resolve_btfids/.gitignore
|
|
+++ b/tools/bpf/resolve_btfids/.gitignore
|
|
@@ -1,4 +1,3 @@
|
|
-/FEATURE-DUMP.libbpf
|
|
-/bpf_helper_defs.h
|
|
/fixdep
|
|
/resolve_btfids
|
|
+/libbpf/
|
|
diff --git a/tools/bpf/resolve_btfids/Makefile b/tools/bpf/resolve_btfids/Makefile
|
|
index bf656432ad736..bb9fa8de7e625 100644
|
|
--- a/tools/bpf/resolve_btfids/Makefile
|
|
+++ b/tools/bpf/resolve_btfids/Makefile
|
|
@@ -2,11 +2,7 @@
|
|
include ../../scripts/Makefile.include
|
|
include ../../scripts/Makefile.arch
|
|
|
|
-ifeq ($(srctree),)
|
|
-srctree := $(patsubst %/,%,$(dir $(CURDIR)))
|
|
-srctree := $(patsubst %/,%,$(dir $(srctree)))
|
|
-srctree := $(patsubst %/,%,$(dir $(srctree)))
|
|
-endif
|
|
+srctree := $(abspath $(CURDIR)/../../../)
|
|
|
|
ifeq ($(V),1)
|
|
Q =
|
|
@@ -22,28 +18,29 @@ AR = $(HOSTAR)
|
|
CC = $(HOSTCC)
|
|
LD = $(HOSTLD)
|
|
ARCH = $(HOSTARCH)
|
|
+RM ?= rm
|
|
|
|
OUTPUT ?= $(srctree)/tools/bpf/resolve_btfids/
|
|
|
|
LIBBPF_SRC := $(srctree)/tools/lib/bpf/
|
|
SUBCMD_SRC := $(srctree)/tools/lib/subcmd/
|
|
|
|
-BPFOBJ := $(OUTPUT)/libbpf.a
|
|
-SUBCMDOBJ := $(OUTPUT)/libsubcmd.a
|
|
+BPFOBJ := $(OUTPUT)/libbpf/libbpf.a
|
|
+SUBCMDOBJ := $(OUTPUT)/libsubcmd/libsubcmd.a
|
|
|
|
BINARY := $(OUTPUT)/resolve_btfids
|
|
BINARY_IN := $(BINARY)-in.o
|
|
|
|
all: $(BINARY)
|
|
|
|
-$(OUTPUT):
|
|
+$(OUTPUT) $(OUTPUT)/libbpf $(OUTPUT)/libsubcmd:
|
|
$(call msg,MKDIR,,$@)
|
|
- $(Q)mkdir -p $(OUTPUT)
|
|
+ $(Q)mkdir -p $(@)
|
|
|
|
-$(SUBCMDOBJ): fixdep FORCE
|
|
- $(Q)$(MAKE) -C $(SUBCMD_SRC) OUTPUT=$(OUTPUT)
|
|
+$(SUBCMDOBJ): fixdep FORCE | $(OUTPUT)/libsubcmd
|
|
+ $(Q)$(MAKE) -C $(SUBCMD_SRC) OUTPUT=$(abspath $(dir $@))/ $(abspath $@)
|
|
|
|
-$(BPFOBJ): $(wildcard $(LIBBPF_SRC)/*.[ch] $(LIBBPF_SRC)/Makefile) | $(OUTPUT)
|
|
+$(BPFOBJ): $(wildcard $(LIBBPF_SRC)/*.[ch] $(LIBBPF_SRC)/Makefile) | $(OUTPUT)/libbpf
|
|
$(Q)$(MAKE) $(submake_extras) -C $(LIBBPF_SRC) OUTPUT=$(abspath $(dir $@))/ $(abspath $@)
|
|
|
|
CFLAGS := -g \
|
|
@@ -57,24 +54,27 @@ LIBS = -lelf -lz
|
|
export srctree OUTPUT CFLAGS Q
|
|
include $(srctree)/tools/build/Makefile.include
|
|
|
|
-$(BINARY_IN): fixdep FORCE
|
|
+$(BINARY_IN): fixdep FORCE | $(OUTPUT)
|
|
$(Q)$(MAKE) $(build)=resolve_btfids
|
|
|
|
$(BINARY): $(BPFOBJ) $(SUBCMDOBJ) $(BINARY_IN)
|
|
$(call msg,LINK,$@)
|
|
$(Q)$(CC) $(BINARY_IN) $(LDFLAGS) -o $@ $(BPFOBJ) $(SUBCMDOBJ) $(LIBS)
|
|
|
|
-libsubcmd-clean:
|
|
- $(Q)$(MAKE) -C $(SUBCMD_SRC) OUTPUT=$(OUTPUT) clean
|
|
-
|
|
-libbpf-clean:
|
|
- $(Q)$(MAKE) -C $(LIBBPF_SRC) OUTPUT=$(OUTPUT) clean
|
|
+clean_objects := $(wildcard $(OUTPUT)/*.o \
|
|
+ $(OUTPUT)/.*.o.cmd \
|
|
+ $(OUTPUT)/.*.o.d \
|
|
+ $(OUTPUT)/libbpf \
|
|
+ $(OUTPUT)/libsubcmd \
|
|
+ $(OUTPUT)/resolve_btfids)
|
|
|
|
-clean: libsubcmd-clean libbpf-clean fixdep-clean
|
|
+ifneq ($(clean_objects),)
|
|
+clean: fixdep-clean
|
|
$(call msg,CLEAN,$(BINARY))
|
|
- $(Q)$(RM) -f $(BINARY); \
|
|
- $(RM) -rf $(if $(OUTPUT),$(OUTPUT),.)/feature; \
|
|
- find $(if $(OUTPUT),$(OUTPUT),.) -name \*.o -or -name \*.o.cmd -or -name \*.o.d | xargs $(RM)
|
|
+ $(Q)$(RM) -rf $(clean_objects)
|
|
+else
|
|
+clean:
|
|
+endif
|
|
|
|
tags:
|
|
$(call msg,GEN,,tags)
|
|
diff --git a/tools/testing/kunit/kunit_config.py b/tools/testing/kunit/kunit_config.py
|
|
index 02ffc3a3e5dc7..b30e9d6db6b40 100644
|
|
--- a/tools/testing/kunit/kunit_config.py
|
|
+++ b/tools/testing/kunit/kunit_config.py
|
|
@@ -12,7 +12,7 @@ import re
|
|
CONFIG_IS_NOT_SET_PATTERN = r'^# CONFIG_(\w+) is not set$'
|
|
CONFIG_PATTERN = r'^CONFIG_(\w+)=(\S+|".*")$'
|
|
|
|
-KconfigEntryBase = collections.namedtuple('KconfigEntry', ['name', 'value'])
|
|
+KconfigEntryBase = collections.namedtuple('KconfigEntryBase', ['name', 'value'])
|
|
|
|
class KconfigEntry(KconfigEntryBase):
|
|
|
|
diff --git a/tools/testing/selftests/arm64/fp/sve-test.S b/tools/testing/selftests/arm64/fp/sve-test.S
|
|
index f95074c9b48b7..07f14e279a904 100644
|
|
--- a/tools/testing/selftests/arm64/fp/sve-test.S
|
|
+++ b/tools/testing/selftests/arm64/fp/sve-test.S
|
|
@@ -284,16 +284,28 @@ endfunction
|
|
// Set up test pattern in the FFR
|
|
// x0: pid
|
|
// x2: generation
|
|
+//
|
|
+// We need to generate a canonical FFR value, which consists of a number of
|
|
+// low "1" bits, followed by a number of zeros. This gives us 17 unique values
|
|
+// per 16 bits of FFR, so we create a 4 bit signature out of the PID and
|
|
+// generation, and use that as the initial number of ones in the pattern.
|
|
+// We fill the upper lanes of FFR with zeros.
|
|
// Beware: corrupts P0.
|
|
function setup_ffr
|
|
mov x4, x30
|
|
|
|
- bl pattern
|
|
+ and w0, w0, #0x3
|
|
+ bfi w0, w2, #2, #2
|
|
+ mov w1, #1
|
|
+ lsl w1, w1, w0
|
|
+ sub w1, w1, #1
|
|
+
|
|
ldr x0, =ffrref
|
|
- ldr x1, =scratch
|
|
- rdvl x2, #1
|
|
- lsr x2, x2, #3
|
|
- bl memcpy
|
|
+ strh w1, [x0], 2
|
|
+ rdvl x1, #1
|
|
+ lsr x1, x1, #3
|
|
+ sub x1, x1, #2
|
|
+ bl memclr
|
|
|
|
mov x0, #0
|
|
ldr x1, =ffrref
|
|
diff --git a/tools/testing/selftests/vm/Makefile b/tools/testing/selftests/vm/Makefile
|
|
index e63f316327080..2cf32e6b376e1 100644
|
|
--- a/tools/testing/selftests/vm/Makefile
|
|
+++ b/tools/testing/selftests/vm/Makefile
|
|
@@ -99,7 +99,7 @@ endef
|
|
ifeq ($(CAN_BUILD_I386),1)
|
|
$(BINARIES_32): CFLAGS += -m32
|
|
$(BINARIES_32): LDLIBS += -lrt -ldl -lm
|
|
-$(BINARIES_32): %_32: %.c
|
|
+$(BINARIES_32): $(OUTPUT)/%_32: %.c
|
|
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(notdir $^) $(LDLIBS) -o $@
|
|
$(foreach t,$(TARGETS),$(eval $(call gen-target-rule-32,$(t))))
|
|
endif
|
|
@@ -107,7 +107,7 @@ endif
|
|
ifeq ($(CAN_BUILD_X86_64),1)
|
|
$(BINARIES_64): CFLAGS += -m64
|
|
$(BINARIES_64): LDLIBS += -lrt -ldl
|
|
-$(BINARIES_64): %_64: %.c
|
|
+$(BINARIES_64): $(OUTPUT)/%_64: %.c
|
|
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(notdir $^) $(LDLIBS) -o $@
|
|
$(foreach t,$(TARGETS),$(eval $(call gen-target-rule-64,$(t))))
|
|
endif
|