kernel: bump 6.6 to 6.6.85
Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.6.85 Removed upstreamed: bcm27xx/patches-6.6/950-1498-dts-bcm2711-PL011-UARTs-are-actually-r1p5.patch[1] bcm27xx/patches-6.6/950-1551-drm-v3d-Don-t-run-jobs-that-have-errors-flagged-in-i.patch[2] Manually rebased: bcm27xx/patches-6.6/950-1512-dts-bcm2711-Don-t-mark-timer-regs-unconfigured.patch All other patches automatically rebased. 1. https://web.git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.6.85&id=61820187b3ef5a15aed7ef49ed1fcc13398b449c 2. https://web.git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.6.85&id=7cd375d46afcce906cfcddf5aec6b318199d1f16 Build system: x86/64 Build-tested: flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3, x86/64 Run-tested: flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3, x86/64 Signed-off-by: John Audia <therealgraysky@proton.me> Link: https://github.com/openwrt/openwrt/pull/18379 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
parent
7728f66606
commit
2e71e41ce6
@ -1,2 +1,2 @@
|
|||||||
LINUX_VERSION-6.6 = .84
|
LINUX_VERSION-6.6 = .85
|
||||||
LINUX_KERNEL_HASH-6.6.84 = 7fd20721551a61db347c5ac6ca05818e24058682be4e4389dc51e88d4ac17ba7
|
LINUX_KERNEL_HASH-6.6.85 = 5ebaccf4ca3428cd26817bae62171f4efd270eed866a3e3d0a1d9e970b7b7529
|
||||||
|
@ -423,7 +423,7 @@ Signed-off-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
|
|||||||
v3d_switch_perfmon(v3d, &job->base);
|
v3d_switch_perfmon(v3d, &job->base);
|
||||||
|
|
||||||
/* XXX: Set the QCFG */
|
/* XXX: Set the QCFG */
|
||||||
@@ -190,6 +301,7 @@ v3d_tfu_job_run(struct drm_sched_job *sc
|
@@ -194,6 +305,7 @@ v3d_tfu_job_run(struct drm_sched_job *sc
|
||||||
|
|
||||||
trace_v3d_submit_tfu(dev, to_v3d_fence(fence)->seqno);
|
trace_v3d_submit_tfu(dev, to_v3d_fence(fence)->seqno);
|
||||||
|
|
||||||
@ -431,7 +431,7 @@ Signed-off-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
|
|||||||
V3D_WRITE(V3D_TFU_IIA, job->args.iia);
|
V3D_WRITE(V3D_TFU_IIA, job->args.iia);
|
||||||
V3D_WRITE(V3D_TFU_IIS, job->args.iis);
|
V3D_WRITE(V3D_TFU_IIS, job->args.iis);
|
||||||
V3D_WRITE(V3D_TFU_ICA, job->args.ica);
|
V3D_WRITE(V3D_TFU_ICA, job->args.ica);
|
||||||
@@ -231,6 +343,7 @@ v3d_csd_job_run(struct drm_sched_job *sc
|
@@ -238,6 +350,7 @@ v3d_csd_job_run(struct drm_sched_job *sc
|
||||||
|
|
||||||
trace_v3d_submit_csd(dev, to_v3d_fence(fence)->seqno);
|
trace_v3d_submit_csd(dev, to_v3d_fence(fence)->seqno);
|
||||||
|
|
||||||
@ -439,7 +439,7 @@ Signed-off-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
|
|||||||
v3d_switch_perfmon(v3d, &job->base);
|
v3d_switch_perfmon(v3d, &job->base);
|
||||||
|
|
||||||
for (i = 1; i <= 6; i++)
|
for (i = 1; i <= 6; i++)
|
||||||
@@ -247,7 +360,10 @@ v3d_cache_clean_job_run(struct drm_sched
|
@@ -254,7 +367,10 @@ v3d_cache_clean_job_run(struct drm_sched
|
||||||
struct v3d_job *job = to_v3d_job(sched_job);
|
struct v3d_job *job = to_v3d_job(sched_job);
|
||||||
struct v3d_dev *v3d = job->v3d;
|
struct v3d_dev *v3d = job->v3d;
|
||||||
|
|
||||||
@ -450,7 +450,7 @@ Signed-off-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
|
|||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -385,8 +501,18 @@ v3d_sched_init(struct v3d_dev *v3d)
|
@@ -392,8 +508,18 @@ v3d_sched_init(struct v3d_dev *v3d)
|
||||||
int hw_jobs_limit = 1;
|
int hw_jobs_limit = 1;
|
||||||
int job_hang_limit = 0;
|
int job_hang_limit = 0;
|
||||||
int hang_limit_ms = 500;
|
int hang_limit_ms = 500;
|
||||||
@ -469,7 +469,7 @@ Signed-off-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
|
|||||||
ret = drm_sched_init(&v3d->queue[V3D_BIN].sched,
|
ret = drm_sched_init(&v3d->queue[V3D_BIN].sched,
|
||||||
&v3d_bin_sched_ops,
|
&v3d_bin_sched_ops,
|
||||||
hw_jobs_limit, job_hang_limit,
|
hw_jobs_limit, job_hang_limit,
|
||||||
@@ -440,9 +566,20 @@ void
|
@@ -447,9 +573,20 @@ void
|
||||||
v3d_sched_fini(struct v3d_dev *v3d)
|
v3d_sched_fini(struct v3d_dev *v3d)
|
||||||
{
|
{
|
||||||
enum v3d_queue q;
|
enum v3d_queue q;
|
||||||
|
@ -600,7 +600,7 @@ v2: fix kernel panic with debug-fs interface to list registers
|
|||||||
static struct dma_fence *
|
static struct dma_fence *
|
||||||
v3d_tfu_job_run(struct drm_sched_job *sched_job)
|
v3d_tfu_job_run(struct drm_sched_job *sched_job)
|
||||||
{
|
{
|
||||||
@@ -302,20 +304,22 @@ v3d_tfu_job_run(struct drm_sched_job *sc
|
@@ -306,20 +308,22 @@ v3d_tfu_job_run(struct drm_sched_job *sc
|
||||||
trace_v3d_submit_tfu(dev, to_v3d_fence(fence)->seqno);
|
trace_v3d_submit_tfu(dev, to_v3d_fence(fence)->seqno);
|
||||||
|
|
||||||
v3d_sched_stats_add_job(&v3d->gpu_queue_stats[V3D_TFU], sched_job);
|
v3d_sched_stats_add_job(&v3d->gpu_queue_stats[V3D_TFU], sched_job);
|
||||||
@ -635,16 +635,16 @@ v2: fix kernel panic with debug-fs interface to list registers
|
|||||||
|
|
||||||
return fence;
|
return fence;
|
||||||
}
|
}
|
||||||
@@ -327,7 +331,7 @@ v3d_csd_job_run(struct drm_sched_job *sc
|
@@ -331,7 +335,7 @@ v3d_csd_job_run(struct drm_sched_job *sc
|
||||||
struct v3d_dev *v3d = job->base.v3d;
|
struct v3d_dev *v3d = job->base.v3d;
|
||||||
struct drm_device *dev = &v3d->drm;
|
struct drm_device *dev = &v3d->drm;
|
||||||
struct dma_fence *fence;
|
struct dma_fence *fence;
|
||||||
- int i;
|
- int i;
|
||||||
+ int i, csd_cfg0_reg, csd_cfg_reg_count;
|
+ int i, csd_cfg0_reg, csd_cfg_reg_count;
|
||||||
|
|
||||||
v3d->csd_job = job;
|
if (unlikely(job->base.base.s_fence->finished.error))
|
||||||
|
return NULL;
|
||||||
@@ -346,10 +350,12 @@ v3d_csd_job_run(struct drm_sched_job *sc
|
@@ -353,10 +357,12 @@ v3d_csd_job_run(struct drm_sched_job *sc
|
||||||
v3d_sched_stats_add_job(&v3d->gpu_queue_stats[V3D_CSD], sched_job);
|
v3d_sched_stats_add_job(&v3d->gpu_queue_stats[V3D_CSD], sched_job);
|
||||||
v3d_switch_perfmon(v3d, &job->base);
|
v3d_switch_perfmon(v3d, &job->base);
|
||||||
|
|
||||||
@ -660,7 +660,7 @@ v2: fix kernel panic with debug-fs interface to list registers
|
|||||||
|
|
||||||
return fence;
|
return fence;
|
||||||
}
|
}
|
||||||
@@ -452,7 +458,8 @@ v3d_csd_job_timedout(struct drm_sched_jo
|
@@ -459,7 +465,8 @@ v3d_csd_job_timedout(struct drm_sched_jo
|
||||||
{
|
{
|
||||||
struct v3d_csd_job *job = to_csd_job(sched_job);
|
struct v3d_csd_job *job = to_csd_job(sched_job);
|
||||||
struct v3d_dev *v3d = job->base.v3d;
|
struct v3d_dev *v3d = job->base.v3d;
|
||||||
|
@ -1,60 +0,0 @@
|
|||||||
From 87fc066350358ce45f5ad52424c8a2e351b1720c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Phil Elwell <phil@raspberrypi.com>
|
|
||||||
Date: Tue, 7 Jan 2025 12:05:41 +0000
|
|
||||||
Subject: [PATCH] dts: bcm2711: PL011 UARTs are actually r1p5
|
|
||||||
|
|
||||||
The ARM PL011 UART instances in BCM2711 are r1p5 spec, which means they
|
|
||||||
have 32-entry FIFOs. The correct periphid value for this is 0x00341011.
|
|
||||||
Thanks to N Buchwitz for pointing this out.
|
|
||||||
|
|
||||||
Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|
||||||
---
|
|
||||||
arch/arm/boot/dts/broadcom/bcm2711.dtsi | 9 +++++----
|
|
||||||
1 file changed, 5 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
--- a/arch/arm/boot/dts/broadcom/bcm2711.dtsi
|
|
||||||
+++ b/arch/arm/boot/dts/broadcom/bcm2711.dtsi
|
|
||||||
@@ -134,7 +134,7 @@
|
|
||||||
clocks = <&clocks BCM2835_CLOCK_UART>,
|
|
||||||
<&clocks BCM2835_CLOCK_VPU>;
|
|
||||||
clock-names = "uartclk", "apb_pclk";
|
|
||||||
- arm,primecell-periphid = <0x00241011>;
|
|
||||||
+ arm,primecell-periphid = <0x00341011>;
|
|
||||||
status = "disabled";
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -145,7 +145,7 @@
|
|
||||||
clocks = <&clocks BCM2835_CLOCK_UART>,
|
|
||||||
<&clocks BCM2835_CLOCK_VPU>;
|
|
||||||
clock-names = "uartclk", "apb_pclk";
|
|
||||||
- arm,primecell-periphid = <0x00241011>;
|
|
||||||
+ arm,primecell-periphid = <0x00341011>;
|
|
||||||
status = "disabled";
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -156,7 +156,7 @@
|
|
||||||
clocks = <&clocks BCM2835_CLOCK_UART>,
|
|
||||||
<&clocks BCM2835_CLOCK_VPU>;
|
|
||||||
clock-names = "uartclk", "apb_pclk";
|
|
||||||
- arm,primecell-periphid = <0x00241011>;
|
|
||||||
+ arm,primecell-periphid = <0x00341011>;
|
|
||||||
status = "disabled";
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -167,7 +167,7 @@
|
|
||||||
clocks = <&clocks BCM2835_CLOCK_UART>,
|
|
||||||
<&clocks BCM2835_CLOCK_VPU>;
|
|
||||||
clock-names = "uartclk", "apb_pclk";
|
|
||||||
- arm,primecell-periphid = <0x00241011>;
|
|
||||||
+ arm,primecell-periphid = <0x00341011>;
|
|
||||||
status = "disabled";
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -1155,6 +1155,7 @@
|
|
||||||
};
|
|
||||||
|
|
||||||
&uart0 {
|
|
||||||
+ arm,primecell-periphid = <0x00341011>;
|
|
||||||
interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
|
|
||||||
};
|
|
||||||
|
|
@ -20,17 +20,6 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||||||
arch/arm64/boot/dts/broadcom/bcm2712.dtsi | 2 --
|
arch/arm64/boot/dts/broadcom/bcm2712.dtsi | 2 --
|
||||||
2 files changed, 4 deletions(-)
|
2 files changed, 4 deletions(-)
|
||||||
|
|
||||||
--- a/arch/arm/boot/dts/broadcom/bcm2711.dtsi
|
|
||||||
+++ b/arch/arm/boot/dts/broadcom/bcm2711.dtsi
|
|
||||||
@@ -451,8 +451,6 @@
|
|
||||||
IRQ_TYPE_LEVEL_LOW)>,
|
|
||||||
<GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) |
|
|
||||||
IRQ_TYPE_LEVEL_LOW)>;
|
|
||||||
- /* This only applies to the ARMv7 stub */
|
|
||||||
- arm,cpu-registers-not-fw-configured;
|
|
||||||
};
|
|
||||||
|
|
||||||
cpus: cpus {
|
|
||||||
--- a/arch/arm64/boot/dts/broadcom/bcm2712.dtsi
|
--- a/arch/arm64/boot/dts/broadcom/bcm2712.dtsi
|
||||||
+++ b/arch/arm64/boot/dts/broadcom/bcm2712.dtsi
|
+++ b/arch/arm64/boot/dts/broadcom/bcm2712.dtsi
|
||||||
@@ -741,8 +741,6 @@
|
@@ -741,8 +741,6 @@
|
||||||
|
@ -1,61 +0,0 @@
|
|||||||
From 5258ca4ad089548a72657522443b9c3e46fd125b Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Ma=C3=ADra=20Canal?= <mcanal@igalia.com>
|
|
||||||
Date: Sat, 22 Feb 2025 14:40:21 -0300
|
|
||||||
Subject: [PATCH] drm/v3d: Don't run jobs that have errors flagged in its fence
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
The V3D driver still relies on `drm_sched_increase_karma()` and
|
|
||||||
`drm_sched_resubmit_jobs()` for resubmissions when a timeout occurs.
|
|
||||||
The function `drm_sched_increase_karma()` marks the job as guilty, while
|
|
||||||
`drm_sched_resubmit_jobs()` sets an error (-ECANCELED) in the DMA fence of
|
|
||||||
that guilty job.
|
|
||||||
|
|
||||||
Because of this, we must check whether the job’s DMA fence has been
|
|
||||||
flagged with an error before executing the job. Otherwise, the same guilty
|
|
||||||
job may be resubmitted indefinitely, causing repeated GPU resets.
|
|
||||||
|
|
||||||
This patch adds a check for an error on the job's fence to prevent running
|
|
||||||
a guilty job that was previously flagged when the GPU timed out.
|
|
||||||
|
|
||||||
Note that the CPU and CACHE_CLEAN queues do not require this check, as
|
|
||||||
their jobs are executed synchronously once the DRM scheduler starts them.
|
|
||||||
|
|
||||||
Cc: stable@vger.kernel.org
|
|
||||||
Fixes: d223f98f0209 ("drm/v3d: Add support for compute shader dispatch.")
|
|
||||||
Fixes: 1584f16ca96e ("drm/v3d: Add support for submitting jobs to the TFU.")
|
|
||||||
Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
|
||||||
---
|
|
||||||
drivers/gpu/drm/v3d/v3d_sched.c | 9 ++++++++-
|
|
||||||
1 file changed, 8 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/drivers/gpu/drm/v3d/v3d_sched.c
|
|
||||||
+++ b/drivers/gpu/drm/v3d/v3d_sched.c
|
|
||||||
@@ -292,11 +292,15 @@ 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))
|
|
||||||
+ return NULL;
|
|
||||||
+
|
|
||||||
+ v3d->tfu_job = job;
|
|
||||||
+
|
|
||||||
fence = v3d_fence_create(v3d, V3D_TFU);
|
|
||||||
if (IS_ERR(fence))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
- v3d->tfu_job = job;
|
|
||||||
if (job->base.irq_fence)
|
|
||||||
dma_fence_put(job->base.irq_fence);
|
|
||||||
job->base.irq_fence = dma_fence_get(fence);
|
|
||||||
@@ -333,6 +337,9 @@ v3d_csd_job_run(struct drm_sched_job *sc
|
|
||||||
struct dma_fence *fence;
|
|
||||||
int i, csd_cfg0_reg, csd_cfg_reg_count;
|
|
||||||
|
|
||||||
+ if (unlikely(job->base.base.s_fence->finished.error))
|
|
||||||
+ return NULL;
|
|
||||||
+
|
|
||||||
v3d->csd_job = job;
|
|
||||||
|
|
||||||
v3d_invalidate_caches(v3d);
|
|
@ -157,7 +157,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
case RTN_THROW:
|
case RTN_THROW:
|
||||||
case RTN_UNREACHABLE:
|
case RTN_UNREACHABLE:
|
||||||
default:
|
default:
|
||||||
@@ -4551,6 +4570,17 @@ static int ip6_pkt_prohibit_out(struct n
|
@@ -4554,6 +4573,17 @@ static int ip6_pkt_prohibit_out(struct n
|
||||||
return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES);
|
return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,7 +175,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
/*
|
/*
|
||||||
* Allocate a dst for local (unicast / anycast) address.
|
* Allocate a dst for local (unicast / anycast) address.
|
||||||
*/
|
*/
|
||||||
@@ -5042,7 +5072,8 @@ static int rtm_to_fib6_config(struct sk_
|
@@ -5045,7 +5075,8 @@ static int rtm_to_fib6_config(struct sk_
|
||||||
if (rtm->rtm_type == RTN_UNREACHABLE ||
|
if (rtm->rtm_type == RTN_UNREACHABLE ||
|
||||||
rtm->rtm_type == RTN_BLACKHOLE ||
|
rtm->rtm_type == RTN_BLACKHOLE ||
|
||||||
rtm->rtm_type == RTN_PROHIBIT ||
|
rtm->rtm_type == RTN_PROHIBIT ||
|
||||||
@ -185,7 +185,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
cfg->fc_flags |= RTF_REJECT;
|
cfg->fc_flags |= RTF_REJECT;
|
||||||
|
|
||||||
if (rtm->rtm_type == RTN_LOCAL)
|
if (rtm->rtm_type == RTN_LOCAL)
|
||||||
@@ -6304,6 +6335,8 @@ static int ip6_route_dev_notify(struct n
|
@@ -6307,6 +6338,8 @@ static int ip6_route_dev_notify(struct n
|
||||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
net->ipv6.ip6_prohibit_entry->dst.dev = dev;
|
net->ipv6.ip6_prohibit_entry->dst.dev = dev;
|
||||||
net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev);
|
net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev);
|
||||||
@ -194,7 +194,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
|
net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
|
||||||
net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
|
net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
|
||||||
#endif
|
#endif
|
||||||
@@ -6315,6 +6348,7 @@ static int ip6_route_dev_notify(struct n
|
@@ -6318,6 +6351,7 @@ static int ip6_route_dev_notify(struct n
|
||||||
in6_dev_put_clear(&net->ipv6.ip6_null_entry->rt6i_idev);
|
in6_dev_put_clear(&net->ipv6.ip6_null_entry->rt6i_idev);
|
||||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
in6_dev_put_clear(&net->ipv6.ip6_prohibit_entry->rt6i_idev);
|
in6_dev_put_clear(&net->ipv6.ip6_prohibit_entry->rt6i_idev);
|
||||||
@ -202,7 +202,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
in6_dev_put_clear(&net->ipv6.ip6_blk_hole_entry->rt6i_idev);
|
in6_dev_put_clear(&net->ipv6.ip6_blk_hole_entry->rt6i_idev);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -6515,6 +6549,8 @@ static int __net_init ip6_route_net_init
|
@@ -6518,6 +6552,8 @@ static int __net_init ip6_route_net_init
|
||||||
|
|
||||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
net->ipv6.fib6_has_custom_rules = false;
|
net->ipv6.fib6_has_custom_rules = false;
|
||||||
@ -211,7 +211,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
net->ipv6.ip6_prohibit_entry = kmemdup(&ip6_prohibit_entry_template,
|
net->ipv6.ip6_prohibit_entry = kmemdup(&ip6_prohibit_entry_template,
|
||||||
sizeof(*net->ipv6.ip6_prohibit_entry),
|
sizeof(*net->ipv6.ip6_prohibit_entry),
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
@@ -6525,11 +6561,21 @@ static int __net_init ip6_route_net_init
|
@@ -6528,11 +6564,21 @@ static int __net_init ip6_route_net_init
|
||||||
ip6_template_metrics, true);
|
ip6_template_metrics, true);
|
||||||
INIT_LIST_HEAD(&net->ipv6.ip6_prohibit_entry->dst.rt_uncached);
|
INIT_LIST_HEAD(&net->ipv6.ip6_prohibit_entry->dst.rt_uncached);
|
||||||
|
|
||||||
@ -234,7 +234,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops;
|
net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops;
|
||||||
dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst,
|
dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst,
|
||||||
ip6_template_metrics, true);
|
ip6_template_metrics, true);
|
||||||
@@ -6556,6 +6602,8 @@ out:
|
@@ -6559,6 +6605,8 @@ out:
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
@ -243,7 +243,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
out_ip6_prohibit_entry:
|
out_ip6_prohibit_entry:
|
||||||
kfree(net->ipv6.ip6_prohibit_entry);
|
kfree(net->ipv6.ip6_prohibit_entry);
|
||||||
out_ip6_null_entry:
|
out_ip6_null_entry:
|
||||||
@@ -6575,6 +6623,7 @@ static void __net_exit ip6_route_net_exi
|
@@ -6578,6 +6626,7 @@ static void __net_exit ip6_route_net_exi
|
||||||
kfree(net->ipv6.ip6_null_entry);
|
kfree(net->ipv6.ip6_null_entry);
|
||||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
kfree(net->ipv6.ip6_prohibit_entry);
|
kfree(net->ipv6.ip6_prohibit_entry);
|
||||||
@ -251,7 +251,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
kfree(net->ipv6.ip6_blk_hole_entry);
|
kfree(net->ipv6.ip6_blk_hole_entry);
|
||||||
#endif
|
#endif
|
||||||
dst_entries_destroy(&net->ipv6.ip6_dst_ops);
|
dst_entries_destroy(&net->ipv6.ip6_dst_ops);
|
||||||
@@ -6658,6 +6707,9 @@ void __init ip6_route_init_special_entri
|
@@ -6661,6 +6710,9 @@ void __init ip6_route_init_special_entri
|
||||||
init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
||||||
init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev;
|
init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev;
|
||||||
init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user