kernel: bump 6.12 to 6.12.95

Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.95

Upstream merged patch:
- bcm27xx/patches-6.12/950-0859-drm-v3d-Set-job-pointer-to-NULL-when-the-job-s-fence.patch[1]

Manually rebased patches:
- bcm27xx/patches-6.12/950-0501-gpiolib-Override-gpiochip-numbers-with-DT-aliases.patch
- bcm27xx/patches-6.12/950-0777-drm-v3d-Remove-v3d-cpu_job.patch

All other patches are automatically refreshed.

[1] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.95&id=0e64be02dfc83e28c5ec8c21513da86dcf079bdd
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
Link: https://github.com/openwrt/openwrt/pull/24081
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
Shiji Yang 2026-07-05 11:29:02 +08:00 committed by Hauke Mehrtens
parent 520d6d9784
commit 77262b2d2e
17 changed files with 48 additions and 133 deletions

View file

@ -70,7 +70,7 @@ Signed-off-by: popcornmix <popcornmix@gmail.com>
--- a/drivers/gpu/drm/v3d/v3d_drv.h
+++ b/drivers/gpu/drm/v3d/v3d_drv.h
@@ -121,6 +121,12 @@ struct v3d_dev {
@@ -124,6 +124,12 @@ struct v3d_dev {
void __iomem *bridge_regs;
void __iomem *gca_regs;
struct clk *clk;
@ -83,7 +83,7 @@ Signed-off-by: popcornmix <popcornmix@gmail.com>
struct reset_control *reset;
/* Virtual and DMA addresses of the single shared page table. */
@@ -597,3 +603,4 @@ int v3d_perfmon_get_counter_ioctl(struct
@@ -596,3 +602,4 @@ int v3d_perfmon_get_counter_ioctl(struct
/* v3d_sysfs.c */
int v3d_sysfs_init(struct device *dev);
void v3d_sysfs_destroy(struct device *dev);

View file

@ -13,7 +13,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
--- a/drivers/gpu/drm/v3d/v3d_irq.c
+++ b/drivers/gpu/drm/v3d/v3d_irq.c
@@ -197,6 +197,7 @@ v3d_hub_irq(int irq, void *arg)
@@ -183,6 +183,7 @@ v3d_hub_irq(int irq, void *arg)
"GMP",
};
const char *client = "?";
@ -21,7 +21,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
V3D_WRITE(V3D_MMU_CTL, V3D_READ(V3D_MMU_CTL));
@@ -206,6 +207,7 @@ v3d_hub_irq(int irq, void *arg)
@@ -192,6 +193,7 @@ v3d_hub_irq(int irq, void *arg)
client = v3d41_axi_ids[axi_id];
}
@ -29,7 +29,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
dev_err(v3d->drm.dev, "MMU error from client %s (%d) at 0x%llx%s%s%s\n",
client, axi_id, (long long)vio_addr,
((intsts & V3D_HUB_INT_MMU_WRV) ?
@@ -214,6 +216,7 @@ v3d_hub_irq(int irq, void *arg)
@@ -200,6 +202,7 @@ v3d_hub_irq(int irq, void *arg)
", pte invalid" : ""),
((intsts & V3D_HUB_INT_MMU_CAP) ?
", cap exceeded" : ""));

View file

@ -26,7 +26,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
/* Device and char device-related information */
static DEFINE_IDA(gpio_ida);
static dev_t gpio_devt;
@@ -2813,8 +2815,8 @@ int gpiod_direction_output(struct gpio_d
@@ -2815,8 +2817,8 @@ int gpiod_direction_output(struct gpio_d
value = !!value;
/* GPIOs used for enabled IRQs shall not be set as output */
@ -37,7 +37,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
gpiod_err(desc,
"%s: tried to set a GPIO tied to an IRQ as output\n",
__func__);
@@ -3765,8 +3767,8 @@ int gpiochip_lock_as_irq(struct gpio_chi
@@ -3767,8 +3769,8 @@ int gpiochip_lock_as_irq(struct gpio_chi
}
/* To be valid for IRQ the line needs to be input or open drain */

View file

@ -22,19 +22,19 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
const char *gpiod_get_label(struct gpio_desc *desc)
{
@@ -927,6 +928,7 @@ int gpiochip_add_data_with_key(struct gp
@@ -946,6 +947,7 @@ int gpiochip_add_data_with_key(struct gp
unsigned int desc_index;
int base = 0;
int ret = 0;
int ret;
+ int id;
/*
* First: allocate and populate the internal stat container, and
gdev = kzalloc(sizeof(*gdev), GFP_KERNEL);
if (!gdev)
@@ -953,7 +955,16 @@ int gpiochip_add_data_with_key(struct gp
else if (gc->parent)
device_set_node(&gdev->dev, dev_fwnode(gc->parent));
gc->gpiodev = gdev;
gpiochip_set_data(gc, data);
- gdev->id = ida_alloc(&gpio_ida, GFP_KERNEL);
- ret = ida_alloc(&gpio_ida, GFP_KERNEL);
+ if (first_dynamic_gpiochip_num < 0) {
+ id = of_alias_get_highest_id("gpiochip");
+ first_dynamic_gpiochip_num = (id >= 0) ? (id + 1) : 0;
@ -44,7 +44,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
+ if (id < 0)
+ id = first_dynamic_gpiochip_num;
+
+ gdev->id = ida_alloc_range(&gpio_ida, id, ~0, GFP_KERNEL);
if (gdev->id < 0) {
ret = gdev->id;
+ ret = ida_alloc_range(&gpio_ida, id, ~0, GFP_KERNEL);
if (ret < 0)
goto err_free_gdev;
gdev->id = ret;

View file

@ -39,7 +39,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20240923141348.2422499-6-mca
--- a/drivers/gpu/drm/v3d/v3d_drv.h
+++ b/drivers/gpu/drm/v3d/v3d_drv.h
@@ -151,6 +151,11 @@ struct v3d_dev {
@@ -154,6 +154,11 @@ struct v3d_dev {
struct drm_mm mm;
spinlock_t mm_lock;
@ -50,8 +50,8 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20240923141348.2422499-6-mca
+
struct work_struct overflow_mem_work;
struct v3d_bin_job *bin_job;
@@ -548,6 +553,10 @@ void v3d_reset(struct v3d_dev *v3d);
struct v3d_cpu_job *cpu_job;
@@ -547,6 +552,10 @@ void v3d_reset(struct v3d_dev *v3d);
void v3d_invalidate_caches(struct v3d_dev *v3d);
void v3d_clean_caches(struct v3d_dev *v3d);
@ -73,8 +73,8 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20240923141348.2422499-6-mca
ret = v3d_sched_init(v3d);
if (ret) {
drm_mm_takedown(&v3d->mm);
@@ -310,6 +312,7 @@ v3d_gem_destroy(struct drm_device *dev)
struct v3d_dev *v3d = to_v3d_dev(dev);
@@ -311,6 +313,7 @@ v3d_gem_destroy(struct drm_device *dev)
enum v3d_queue q;
v3d_sched_fini(v3d);
+ v3d_gemfs_fini(v3d);

View file

@ -39,7 +39,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20240923141348.2422499-11-mc
{
--- a/drivers/gpu/drm/v3d/v3d_drv.h
+++ b/drivers/gpu/drm/v3d/v3d_drv.h
@@ -553,6 +553,7 @@ void v3d_invalidate_caches(struct v3d_de
@@ -552,6 +552,7 @@ void v3d_invalidate_caches(struct v3d_de
void v3d_clean_caches(struct v3d_dev *v3d);
/* v3d_gemfs.c */

View file

@ -39,7 +39,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20241202140615.74802-1-chris
static const struct drm_driver v3d_drm_driver = {
--- a/drivers/gpu/drm/v3d/v3d_drv.h
+++ b/drivers/gpu/drm/v3d/v3d_drv.h
@@ -197,6 +197,12 @@ struct v3d_dev {
@@ -196,6 +196,12 @@ struct v3d_dev {
u32 num_allocated;
u32 pages_allocated;
} bo_stats;
@ -52,7 +52,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20241202140615.74802-1-chris
};
static inline struct v3d_dev *
@@ -608,6 +614,8 @@ int v3d_perfmon_get_values_ioctl(struct
@@ -607,6 +613,8 @@ int v3d_perfmon_get_values_ioctl(struct
struct drm_file *file_priv);
int v3d_perfmon_get_counter_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv);

View file

@ -25,17 +25,17 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20250113154741.67520-2-mcana
--- a/drivers/gpu/drm/v3d/v3d_drv.h
+++ b/drivers/gpu/drm/v3d/v3d_drv.h
@@ -161,7 +161,6 @@ struct v3d_dev {
struct v3d_render_job *render_job;
struct v3d_tfu_job *tfu_job;
struct v3d_csd_job *csd_job;
@@ -160,7 +160,6 @@ struct v3d_dev {
struct work_struct overflow_mem_work;
- struct v3d_cpu_job *cpu_job;
struct v3d_queue_state queue[V3D_MAX_QUEUES];
--- a/drivers/gpu/drm/v3d/v3d_sched.c
+++ b/drivers/gpu/drm/v3d/v3d_sched.c
@@ -664,8 +664,6 @@ v3d_cpu_job_run(struct drm_sched_job *sc
@@ -684,8 +684,6 @@ v3d_cpu_job_run(struct drm_sched_job *sc
struct v3d_cpu_job *job = to_cpu_job(sched_job);
struct v3d_dev *v3d = job->base.v3d;

View file

@ -1,85 +0,0 @@
From 23f61178926efa5b4b75c91a45fd315217bcb6c6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ma=C3=ADra=20Canal?= <mcanal@igalia.com>
Date: Tue, 11 Mar 2025 15:13:44 -0300
Subject: [PATCH] drm/v3d: Set job pointer to NULL when the job's fence has an
error
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Similar to commit e4b5ccd392b9 ("drm/v3d: Ensure job pointer is set to
NULL after job completion"), ensure the job pointer is set to `NULL` when
a job's fence has an error. Failing to do so can trigger kernel warnings
in specific scenarios, such as:
1. v3d_csd_job_run() assigns `v3d->csd_job = job`
2. CSD job exceeds hang limit, causing a timeout → v3d_gpu_reset_for_timeout()
3. GPU reset
4. drm_sched_resubmit_jobs() sets the job's fence to `-ECANCELED`.
5. v3d_csd_job_run() detects the fence error and returns NULL, not
submitting the job to the GPU
6. User-space runs `modprobe -r v3d`
7. v3d_gem_destroy()
v3d_gem_destroy() triggers a warning indicating that the CSD job never
ended, as we didn't set `v3d->csd_job` to NULL after the timeout. The same
can also happen to BIN, RENDER, and TFU jobs.
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Signed-off-by: Maíra Canal <mcanal@igalia.com>
---
drivers/gpu/drm/v3d/v3d_sched.c | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
--- a/drivers/gpu/drm/v3d/v3d_sched.c
+++ b/drivers/gpu/drm/v3d/v3d_sched.c
@@ -216,8 +216,12 @@ static struct dma_fence *v3d_bin_job_run
struct dma_fence *fence;
unsigned long irqflags;
- if (unlikely(job->base.base.s_fence->finished.error))
+ if (unlikely(job->base.base.s_fence->finished.error)) {
+ spin_lock_irqsave(&v3d->job_lock, irqflags);
+ v3d->bin_job = NULL;
+ spin_unlock_irqrestore(&v3d->job_lock, irqflags);
return NULL;
+ }
/* Lock required around bin_job update vs
* v3d_overflow_mem_work().
@@ -271,8 +275,10 @@ static struct dma_fence *v3d_render_job_
struct drm_device *dev = &v3d->drm;
struct dma_fence *fence;
- if (unlikely(job->base.base.s_fence->finished.error))
+ if (unlikely(job->base.base.s_fence->finished.error)) {
+ v3d->render_job = NULL;
return NULL;
+ }
v3d->render_job = job;
@@ -317,8 +323,10 @@ v3d_tfu_job_run(struct drm_sched_job *sc
struct drm_device *dev = &v3d->drm;
struct dma_fence *fence;
- if (unlikely(job->base.base.s_fence->finished.error))
+ if (unlikely(job->base.base.s_fence->finished.error)) {
+ v3d->tfu_job = NULL;
return NULL;
+ }
v3d->tfu_job = job;
@@ -363,8 +371,10 @@ v3d_csd_job_run(struct drm_sched_job *sc
struct dma_fence *fence;
int i, csd_cfg0_reg;
- if (unlikely(job->base.base.s_fence->finished.error))
+ if (unlikely(job->base.base.s_fence->finished.error)) {
+ v3d->csd_job = NULL;
return NULL;
+ }
v3d->csd_job = job;

View file

@ -324,7 +324,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
goto clk_disable;
--- a/drivers/gpu/drm/v3d/v3d_drv.h
+++ b/drivers/gpu/drm/v3d/v3d_drv.h
@@ -100,11 +100,18 @@ enum v3d_irq {
@@ -103,11 +103,18 @@ enum v3d_irq {
V3D_MAX_IRQS,
};
@ -344,7 +344,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
/* Short representation (e.g. 5, 6) of the V3D tech revision */
int rev;
@@ -213,7 +220,7 @@ to_v3d_dev(struct drm_device *dev)
@@ -212,7 +219,7 @@ to_v3d_dev(struct drm_device *dev)
static inline bool
v3d_has_csd(struct v3d_dev *v3d)
{
@ -400,7 +400,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
V3D_CORE_WRITE(core, V3D_CTL_L2CACTL,
--- a/drivers/gpu/drm/v3d/v3d_irq.c
+++ b/drivers/gpu/drm/v3d/v3d_irq.c
@@ -143,7 +143,7 @@ v3d_irq(int irq, void *arg)
@@ -137,7 +137,7 @@ v3d_irq(int irq, void *arg)
/* We shouldn't be triggering these if we have GMP in
* always-allowed mode.
*/
@ -409,7 +409,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
dev_err(v3d->drm.dev, "GMP violation\n");
/* V3D 4.2 wires the hub and core IRQs together, so if we &
@@ -201,7 +201,7 @@ v3d_hub_irq(int irq, void *arg)
@@ -187,7 +187,7 @@ v3d_hub_irq(int irq, void *arg)
V3D_WRITE(V3D_MMU_CTL, V3D_READ(V3D_MMU_CTL));
@ -418,7 +418,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
axi_id = axi_id >> 5;
if (axi_id < ARRAY_SIZE(v3d41_axi_ids))
client = v3d41_axi_ids[axi_id];
@@ -220,7 +220,7 @@ v3d_hub_irq(int irq, void *arg)
@@ -206,7 +206,7 @@ v3d_hub_irq(int irq, void *arg)
status = IRQ_HANDLED;
}
@ -458,7 +458,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
V3D_WRITE(V3D_TFU_COEF1(v3d->ver), job->args.coef[1]);
V3D_WRITE(V3D_TFU_COEF2(v3d->ver), job->args.coef[2]);
V3D_WRITE(V3D_TFU_COEF3(v3d->ver), job->args.coef[3]);
@@ -402,7 +402,7 @@ v3d_csd_job_run(struct drm_sched_job *sc
@@ -412,7 +412,7 @@ v3d_csd_job_run(struct drm_sched_job *sc
*
* XXX: Set the CFG7 register
*/

View file

@ -40,7 +40,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
--- a/drivers/gpu/drm/v3d/v3d_drv.h
+++ b/drivers/gpu/drm/v3d/v3d_drv.h
@@ -126,6 +126,7 @@ struct v3d_dev {
@@ -129,6 +129,7 @@ struct v3d_dev {
void __iomem *core_regs[3];
void __iomem *bridge_regs;
void __iomem *gca_regs;
@ -48,7 +48,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
struct clk *clk;
struct delayed_work clk_down_work;
unsigned long clk_up_rate, clk_down_rate;
@@ -282,6 +283,15 @@ to_v3d_fence(struct dma_fence *fence)
@@ -281,6 +282,15 @@ to_v3d_fence(struct dma_fence *fence)
#define V3D_GCA_READ(offset) readl(v3d->gca_regs + offset)
#define V3D_GCA_WRITE(offset, val) writel(val, v3d->gca_regs + offset)
@ -64,7 +64,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
#define V3D_CORE_READ(core, offset) readl(v3d->core_regs[core] + offset)
#define V3D_CORE_WRITE(core, offset, val) writel(val, v3d->core_regs[core] + offset)
@@ -560,6 +570,7 @@ struct dma_fence *v3d_fence_create(struc
@@ -559,6 +569,7 @@ struct dma_fence *v3d_fence_create(struc
/* v3d_gem.c */
int v3d_gem_init(struct drm_device *dev);
void v3d_gem_destroy(struct drm_device *dev);

View file

@ -69,7 +69,7 @@ Signed-off-by: Bevan Weiss <bevan.weiss@gmail.com>
print_constraints(rdev);
return 0;
}
@@ -4651,6 +4678,87 @@ int regulator_get_current_limit(struct r
@@ -4659,6 +4686,87 @@ int regulator_get_current_limit(struct r
EXPORT_SYMBOL_GPL(regulator_get_current_limit);
/**
@ -157,7 +157,7 @@ Signed-off-by: Bevan Weiss <bevan.weiss@gmail.com>
* regulator_set_mode - set regulator operating mode
* @regulator: regulator source
* @mode: operating mode - one of the REGULATOR_MODE constants
@@ -5288,6 +5396,8 @@ static struct attribute *regulator_dev_a
@@ -5296,6 +5404,8 @@ static struct attribute *regulator_dev_a
&dev_attr_suspend_standby_mode.attr,
&dev_attr_suspend_mem_mode.attr,
&dev_attr_suspend_disk_mode.attr,
@ -166,7 +166,7 @@ Signed-off-by: Bevan Weiss <bevan.weiss@gmail.com>
NULL
};
@@ -5369,6 +5479,10 @@ static umode_t regulator_attr_is_visible
@@ -5377,6 +5487,10 @@ static umode_t regulator_attr_is_visible
attr == &dev_attr_suspend_disk_mode.attr)
return ops->set_suspend_mode ? mode : 0;

View file

@ -1,2 +1,2 @@
LINUX_VERSION-6.12 = .94
LINUX_KERNEL_HASH-6.12.94 = e998a232b9418db3301cb58468e291a4f41d6ab8306029b30d991f56251dc8d2
LINUX_VERSION-6.12 = .95
LINUX_KERNEL_HASH-6.12.95 = a9e8c51fcb1e695d1d35dde5886cba579cb6f29c9646c5889f39d63841d4b9f6

View file

@ -149,7 +149,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
+device_initcall(blk_notifications_init);
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -1753,4 +1753,12 @@ static inline bool bdev_can_atomic_write
@@ -1749,4 +1749,12 @@ static inline bool bdev_can_atomic_write
#define DEFINE_IO_COMP_BATCH(name) struct io_comp_batch name = { }

View file

@ -161,7 +161,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
struct rtnl_link {
rtnl_doit_func doit;
@@ -5013,7 +5013,9 @@ int ndo_dflt_bridge_getlink(struct sk_bu
@@ -5021,7 +5021,9 @@ int ndo_dflt_bridge_getlink(struct sk_bu
brport_nla_put_flag(skb, flags, mask,
IFLA_BRPORT_MCAST_FLOOD, BR_MCAST_FLOOD) ||
brport_nla_put_flag(skb, flags, mask,

View file

@ -25,7 +25,7 @@ Signed-off-by: Bjorn Andersson <andersson@kernel.org>
--- a/include/linux/err.h
+++ b/include/linux/err.h
@@ -41,6 +41,14 @@ static inline void * __must_check ERR_PT
@@ -41,6 +41,14 @@ static __always_inline void * __must_che
return (void *) error;
}

View file

@ -21,7 +21,7 @@ Link: https://patch.msgid.link/20250326-ipq5018-pcie-v7-4-e1828fef06c9@outlook.c
--- a/drivers/pci/controller/dwc/pcie-qcom.c
+++ b/drivers/pci/controller/dwc/pcie-qcom.c
@@ -1832,6 +1832,7 @@ static const struct of_device_id qcom_pc
@@ -1827,6 +1827,7 @@ static const struct of_device_id qcom_pc
{ .compatible = "qcom,pcie-apq8064", .data = &cfg_2_1_0 },
{ .compatible = "qcom,pcie-apq8084", .data = &cfg_1_0_0 },
{ .compatible = "qcom,pcie-ipq4019", .data = &cfg_2_4_0 },