]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.0-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 5 Oct 2022 11:28:13 +0000 (13:28 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 5 Oct 2022 11:28:13 +0000 (13:28 +0200)
added patches:
docs-update-mediator-information-in-coc-docs.patch
hardening-remove-clang-s-enable-flag-for-ftrivial-auto-var-init-zero.patch
hwmon-aquacomputer_d5next-fix-quadro-fan-speed-offsets.patch
makefile.extrawarn-move-wcast-function-type-strict-to-w-1.patch
sparc-unbreak-the-build.patch

queue-6.0/docs-update-mediator-information-in-coc-docs.patch [new file with mode: 0644]
queue-6.0/hardening-remove-clang-s-enable-flag-for-ftrivial-auto-var-init-zero.patch [new file with mode: 0644]
queue-6.0/hwmon-aquacomputer_d5next-fix-quadro-fan-speed-offsets.patch [new file with mode: 0644]
queue-6.0/makefile.extrawarn-move-wcast-function-type-strict-to-w-1.patch [new file with mode: 0644]
queue-6.0/series
queue-6.0/sparc-unbreak-the-build.patch [new file with mode: 0644]

diff --git a/queue-6.0/docs-update-mediator-information-in-coc-docs.patch b/queue-6.0/docs-update-mediator-information-in-coc-docs.patch
new file mode 100644 (file)
index 0000000..3178116
--- /dev/null
@@ -0,0 +1,31 @@
+From 8bfdfa0d6b929ede7b6189e0e546ceb6a124d05d Mon Sep 17 00:00:00 2001
+From: Shuah Khan <skhan@linuxfoundation.org>
+Date: Thu, 1 Sep 2022 15:23:19 -0600
+Subject: docs: update mediator information in CoC docs
+
+From: Shuah Khan <skhan@linuxfoundation.org>
+
+commit 8bfdfa0d6b929ede7b6189e0e546ceb6a124d05d upstream.
+
+Update mediator information in the CoC interpretation document.
+
+Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
+Link: https://lore.kernel.org/r/20220901212319.56644-1-skhan@linuxfoundation.org
+Cc: stable@vger.kernel.org
+Signed-off-by: Jonathan Corbet <corbet@lwn.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ Documentation/process/code-of-conduct-interpretation.rst |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/Documentation/process/code-of-conduct-interpretation.rst
++++ b/Documentation/process/code-of-conduct-interpretation.rst
+@@ -51,7 +51,7 @@ the Technical Advisory Board (TAB) or ot
+ uncertain how to handle situations that come up.  It will not be
+ considered a violation report unless you want it to be.  If you are
+ uncertain about approaching the TAB or any other maintainers, please
+-reach out to our conflict mediator, Mishi Choudhary <mishi@linux.com>.
++reach out to our conflict mediator, Joanna Lee <joanna.lee@gesmer.com>.
+ In the end, "be kind to each other" is really what the end goal is for
+ everybody.  We know everyone is human and we all fail at times, but the
diff --git a/queue-6.0/hardening-remove-clang-s-enable-flag-for-ftrivial-auto-var-init-zero.patch b/queue-6.0/hardening-remove-clang-s-enable-flag-for-ftrivial-auto-var-init-zero.patch
new file mode 100644 (file)
index 0000000..db9f687
--- /dev/null
@@ -0,0 +1,66 @@
+From 607e57c6c62c00965ae276902c166834ce73014a Mon Sep 17 00:00:00 2001
+From: Kees Cook <keescook@chromium.org>
+Date: Thu, 29 Sep 2022 22:57:43 -0700
+Subject: hardening: Remove Clang's enable flag for -ftrivial-auto-var-init=zero
+
+From: Kees Cook <keescook@chromium.org>
+
+commit 607e57c6c62c00965ae276902c166834ce73014a upstream.
+
+Now that Clang's -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang
+option is no longer required, remove it from the command line. Clang 16
+and later will warn when it is used, which will cause Kconfig to think
+it can't use -ftrivial-auto-var-init=zero at all. Check for whether it
+is required and only use it when so.
+
+Cc: Nathan Chancellor <nathan@kernel.org>
+Cc: Masahiro Yamada <masahiroy@kernel.org>
+Cc: Nick Desaulniers <ndesaulniers@google.com>
+Cc: linux-kbuild@vger.kernel.org
+Cc: llvm@lists.linux.dev
+Cc: stable@vger.kernel.org
+Fixes: f02003c860d9 ("hardening: Avoid harmless Clang option under CONFIG_INIT_STACK_ALL_ZERO")
+Signed-off-by: Kees Cook <keescook@chromium.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ Makefile                   |    4 ++--
+ security/Kconfig.hardening |   14 ++++++++++----
+ 2 files changed, 12 insertions(+), 6 deletions(-)
+
+--- a/Makefile
++++ b/Makefile
+@@ -831,8 +831,8 @@ endif
+ # Initialize all stack variables with a zero value.
+ ifdef CONFIG_INIT_STACK_ALL_ZERO
+ KBUILD_CFLAGS += -ftrivial-auto-var-init=zero
+-ifdef CONFIG_CC_IS_CLANG
+-# https://bugs.llvm.org/show_bug.cgi?id=45497
++ifdef CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO_ENABLER
++# https://github.com/llvm/llvm-project/issues/44842
+ KBUILD_CFLAGS += -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang
+ endif
+ endif
+--- a/security/Kconfig.hardening
++++ b/security/Kconfig.hardening
+@@ -22,11 +22,17 @@ menu "Memory initialization"
+ config CC_HAS_AUTO_VAR_INIT_PATTERN
+       def_bool $(cc-option,-ftrivial-auto-var-init=pattern)
+-config CC_HAS_AUTO_VAR_INIT_ZERO
+-      # GCC ignores the -enable flag, so we can test for the feature with
+-      # a single invocation using the flag, but drop it as appropriate in
+-      # the Makefile, depending on the presence of Clang.
++config CC_HAS_AUTO_VAR_INIT_ZERO_BARE
++      def_bool $(cc-option,-ftrivial-auto-var-init=zero)
++
++config CC_HAS_AUTO_VAR_INIT_ZERO_ENABLER
++      # Clang 16 and later warn about using the -enable flag, but it
++      # is required before then.
+       def_bool $(cc-option,-ftrivial-auto-var-init=zero -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang)
++      depends on !CC_HAS_AUTO_VAR_INIT_ZERO_BARE
++
++config CC_HAS_AUTO_VAR_INIT_ZERO
++      def_bool CC_HAS_AUTO_VAR_INIT_ZERO_BARE || CC_HAS_AUTO_VAR_INIT_ZERO_ENABLER
+ choice
+       prompt "Initialize kernel stack variables at function entry"
diff --git a/queue-6.0/hwmon-aquacomputer_d5next-fix-quadro-fan-speed-offsets.patch b/queue-6.0/hwmon-aquacomputer_d5next-fix-quadro-fan-speed-offsets.patch
new file mode 100644 (file)
index 0000000..789d030
--- /dev/null
@@ -0,0 +1,38 @@
+From b7f3e9650f12d1e06b94a0257bcb90279f691bf5 Mon Sep 17 00:00:00 2001
+From: Aleksa Savic <savicaleksa83@gmail.com>
+Date: Wed, 14 Sep 2022 13:43:27 +0200
+Subject: hwmon: (aquacomputer_d5next) Fix Quadro fan speed offsets
+
+From: Aleksa Savic <savicaleksa83@gmail.com>
+
+commit b7f3e9650f12d1e06b94a0257bcb90279f691bf5 upstream.
+
+The offsets for setting speeds of fans connected to Quadro are off by one.
+Set them to their correct values.
+
+The offsets as shown point to registers for setting the fan control mode,
+which will be explored in future patches, but slipped in here. When
+setting fan speeds, the resulting values were overlapping, which made the
+fans still run in my initial testing.
+
+Fixes: cdbe34da01e3 ("hwmon: (aquacomputer_d5next) Add support for Aquacomputer Quadro fan controller")
+Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>
+Link: https://lore.kernel.org/r/20220914114327.6941-1-savicaleksa83@gmail.com
+Cc: stable@vger.kenrel.org
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/hwmon/aquacomputer_d5next.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/hwmon/aquacomputer_d5next.c
++++ b/drivers/hwmon/aquacomputer_d5next.c
+@@ -110,7 +110,7 @@ static u16 octo_ctrl_fan_offsets[] = { 0
+ static u8 quadro_sensor_fan_offsets[] = { 0x70, 0x7D, 0x8A, 0x97 };
+ /* Fan speed registers in Quadro control report (from 0-100%) */
+-static u16 quadro_ctrl_fan_offsets[] = { 0x36, 0x8b, 0xe0, 0x135 };
++static u16 quadro_ctrl_fan_offsets[] = { 0x37, 0x8c, 0xe1, 0x136 };
+ /* Labels for D5 Next */
+ static const char *const label_d5next_temp[] = {
diff --git a/queue-6.0/makefile.extrawarn-move-wcast-function-type-strict-to-w-1.patch b/queue-6.0/makefile.extrawarn-move-wcast-function-type-strict-to-w-1.patch
new file mode 100644 (file)
index 0000000..054a64f
--- /dev/null
@@ -0,0 +1,39 @@
+From 2120635108b35ecad9c59c8b44f6cbdf4f98214e Mon Sep 17 00:00:00 2001
+From: Sami Tolvanen <samitolvanen@google.com>
+Date: Fri, 30 Sep 2022 20:33:10 +0000
+Subject: Makefile.extrawarn: Move -Wcast-function-type-strict to W=1
+
+From: Sami Tolvanen <samitolvanen@google.com>
+
+commit 2120635108b35ecad9c59c8b44f6cbdf4f98214e upstream.
+
+We enable -Wcast-function-type globally in the kernel to warn about
+mismatching types in function pointer casts. Compilers currently
+warn only about ABI incompability with this flag, but Clang 16 will
+enable a stricter version of the check by default that checks for an
+exact type match. This will be very noisy in the kernel, so disable
+-Wcast-function-type-strict without W=1 until the new warnings have
+been addressed.
+
+Cc: stable@vger.kernel.org
+Link: https://reviews.llvm.org/D134831
+Link: https://github.com/ClangBuiltLinux/linux/issues/1724
+Suggested-by: Nathan Chancellor <nathan@kernel.org>
+Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
+Signed-off-by: Kees Cook <keescook@chromium.org>
+Link: https://lore.kernel.org/r/20220930203310.4010564-1-samitolvanen@google.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ scripts/Makefile.extrawarn |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/scripts/Makefile.extrawarn
++++ b/scripts/Makefile.extrawarn
+@@ -64,6 +64,7 @@ KBUILD_CFLAGS += -Wno-sign-compare
+ KBUILD_CFLAGS += $(call cc-disable-warning, pointer-to-enum-cast)
+ KBUILD_CFLAGS += -Wno-tautological-constant-out-of-range-compare
+ KBUILD_CFLAGS += $(call cc-disable-warning, unaligned-access)
++KBUILD_CFLAGS += $(call cc-disable-warning, cast-function-type-strict)
+ endif
+ endif
index e18b247983faba4fdec2163cf153e4d2925514c9..7fc21abbd2254da7aedc666b5cf0310dc4d38cd5 100644 (file)
@@ -1 +1,6 @@
 fix-coredump-breakage.patch
+sparc-unbreak-the-build.patch
+makefile.extrawarn-move-wcast-function-type-strict-to-w-1.patch
+hardening-remove-clang-s-enable-flag-for-ftrivial-auto-var-init-zero.patch
+docs-update-mediator-information-in-coc-docs.patch
+hwmon-aquacomputer_d5next-fix-quadro-fan-speed-offsets.patch
diff --git a/queue-6.0/sparc-unbreak-the-build.patch b/queue-6.0/sparc-unbreak-the-build.patch
new file mode 100644 (file)
index 0000000..f54f96c
--- /dev/null
@@ -0,0 +1,326 @@
+From 17006e86a7641fa3c50324cfb602f0e74dac8527 Mon Sep 17 00:00:00 2001
+From: Bart Van Assche <bvanassche@acm.org>
+Date: Tue, 30 Aug 2022 13:58:42 -0700
+Subject: sparc: Unbreak the build
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Bart Van Assche <bvanassche@acm.org>
+
+commit 17006e86a7641fa3c50324cfb602f0e74dac8527 upstream.
+
+Fix the following build errors:
+
+arch/sparc/mm/srmmu.c: In function ‘smp_flush_page_for_dma’:
+arch/sparc/mm/srmmu.c:1639:13: error: cast between incompatible function types from ‘void (*)(long unsigned int)’ to ‘void (*)(long unsigned int,  long unsigned int,  long unsigned int,  long unsigned int,  long unsigned int)’ [-Werror=cast-function-type]
+ 1639 |         xc1((smpfunc_t) local_ops->page_for_dma, page);
+      |             ^
+arch/sparc/mm/srmmu.c: In function ‘smp_flush_cache_mm’:
+arch/sparc/mm/srmmu.c:1662:29: error: cast between incompatible function types from ‘void (*)(struct mm_struct *)’ to ‘void (*)(long unsigned int,  long unsigned int,  long unsigned int,  long unsigned int,  long unsigned int)’ [-Werror=cast-function-type]
+ 1662 |                         xc1((smpfunc_t) local_ops->cache_mm, (unsigned long) mm);
+      |
+[ ... ]
+
+Compile-tested only.
+
+Fixes: 552a23a0e5d0 ("Makefile: Enable -Wcast-function-type")
+Cc: stable@vger.kernel.org
+Signed-off-by: Bart Van Assche <bvanassche@acm.org>
+Tested-by: Andreas Larsson <andreas@gaisler.com>
+Signed-off-by: Kees Cook <keescook@chromium.org>
+Link: https://lore.kernel.org/r/20220830205854.1918026-1-bvanassche@acm.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/sparc/include/asm/smp_32.h |   15 ++++++---------
+ arch/sparc/kernel/leon_smp.c    |   12 +++++++-----
+ arch/sparc/kernel/sun4d_smp.c   |   12 +++++++-----
+ arch/sparc/kernel/sun4m_smp.c   |   10 ++++++----
+ arch/sparc/mm/srmmu.c           |   29 +++++++++++++----------------
+ 5 files changed, 39 insertions(+), 39 deletions(-)
+
+--- a/arch/sparc/include/asm/smp_32.h
++++ b/arch/sparc/include/asm/smp_32.h
+@@ -33,9 +33,6 @@ extern volatile unsigned long cpu_callin
+ extern cpumask_t smp_commenced_mask;
+ extern struct linux_prom_registers smp_penguin_ctable;
+-typedef void (*smpfunc_t)(unsigned long, unsigned long, unsigned long,
+-                     unsigned long, unsigned long);
+-
+ void cpu_panic(void);
+ /*
+@@ -57,7 +54,7 @@ void smp_bogo(struct seq_file *);
+ void smp_info(struct seq_file *);
+ struct sparc32_ipi_ops {
+-      void (*cross_call)(smpfunc_t func, cpumask_t mask, unsigned long arg1,
++      void (*cross_call)(void *func, cpumask_t mask, unsigned long arg1,
+                          unsigned long arg2, unsigned long arg3,
+                          unsigned long arg4);
+       void (*resched)(int cpu);
+@@ -66,28 +63,28 @@ struct sparc32_ipi_ops {
+ };
+ extern const struct sparc32_ipi_ops *sparc32_ipi_ops;
+-static inline void xc0(smpfunc_t func)
++static inline void xc0(void *func)
+ {
+       sparc32_ipi_ops->cross_call(func, *cpu_online_mask, 0, 0, 0, 0);
+ }
+-static inline void xc1(smpfunc_t func, unsigned long arg1)
++static inline void xc1(void *func, unsigned long arg1)
+ {
+       sparc32_ipi_ops->cross_call(func, *cpu_online_mask, arg1, 0, 0, 0);
+ }
+-static inline void xc2(smpfunc_t func, unsigned long arg1, unsigned long arg2)
++static inline void xc2(void *func, unsigned long arg1, unsigned long arg2)
+ {
+       sparc32_ipi_ops->cross_call(func, *cpu_online_mask, arg1, arg2, 0, 0);
+ }
+-static inline void xc3(smpfunc_t func, unsigned long arg1, unsigned long arg2,
++static inline void xc3(void *func, unsigned long arg1, unsigned long arg2,
+                      unsigned long arg3)
+ {
+       sparc32_ipi_ops->cross_call(func, *cpu_online_mask,
+                                   arg1, arg2, arg3, 0);
+ }
+-static inline void xc4(smpfunc_t func, unsigned long arg1, unsigned long arg2,
++static inline void xc4(void *func, unsigned long arg1, unsigned long arg2,
+                      unsigned long arg3, unsigned long arg4)
+ {
+       sparc32_ipi_ops->cross_call(func, *cpu_online_mask,
+--- a/arch/sparc/kernel/leon_smp.c
++++ b/arch/sparc/kernel/leon_smp.c
+@@ -359,7 +359,7 @@ void leonsmp_ipi_interrupt(void)
+ }
+ static struct smp_funcall {
+-      smpfunc_t func;
++      void *func;
+       unsigned long arg1;
+       unsigned long arg2;
+       unsigned long arg3;
+@@ -372,7 +372,7 @@ static struct smp_funcall {
+ static DEFINE_SPINLOCK(cross_call_lock);
+ /* Cross calls must be serialized, at least currently. */
+-static void leon_cross_call(smpfunc_t func, cpumask_t mask, unsigned long arg1,
++static void leon_cross_call(void *func, cpumask_t mask, unsigned long arg1,
+                           unsigned long arg2, unsigned long arg3,
+                           unsigned long arg4)
+ {
+@@ -384,7 +384,7 @@ static void leon_cross_call(smpfunc_t fu
+               {
+                       /* If you make changes here, make sure gcc generates proper code... */
+-                      register smpfunc_t f asm("i0") = func;
++                      register void *f asm("i0") = func;
+                       register unsigned long a1 asm("i1") = arg1;
+                       register unsigned long a2 asm("i2") = arg2;
+                       register unsigned long a3 asm("i3") = arg3;
+@@ -444,11 +444,13 @@ static void leon_cross_call(smpfunc_t fu
+ /* Running cross calls. */
+ void leon_cross_call_irq(void)
+ {
++      void (*func)(unsigned long, unsigned long, unsigned long, unsigned long,
++                   unsigned long) = ccall_info.func;
+       int i = smp_processor_id();
+       ccall_info.processors_in[i] = 1;
+-      ccall_info.func(ccall_info.arg1, ccall_info.arg2, ccall_info.arg3,
+-                      ccall_info.arg4, ccall_info.arg5);
++      func(ccall_info.arg1, ccall_info.arg2, ccall_info.arg3, ccall_info.arg4,
++           ccall_info.arg5);
+       ccall_info.processors_out[i] = 1;
+ }
+--- a/arch/sparc/kernel/sun4d_smp.c
++++ b/arch/sparc/kernel/sun4d_smp.c
+@@ -268,7 +268,7 @@ static void sun4d_ipi_resched(int cpu)
+ }
+ static struct smp_funcall {
+-      smpfunc_t func;
++      void *func;
+       unsigned long arg1;
+       unsigned long arg2;
+       unsigned long arg3;
+@@ -281,7 +281,7 @@ static struct smp_funcall {
+ static DEFINE_SPINLOCK(cross_call_lock);
+ /* Cross calls must be serialized, at least currently. */
+-static void sun4d_cross_call(smpfunc_t func, cpumask_t mask, unsigned long arg1,
++static void sun4d_cross_call(void *func, cpumask_t mask, unsigned long arg1,
+                            unsigned long arg2, unsigned long arg3,
+                            unsigned long arg4)
+ {
+@@ -296,7 +296,7 @@ static void sun4d_cross_call(smpfunc_t f
+                        * If you make changes here, make sure
+                        * gcc generates proper code...
+                        */
+-                      register smpfunc_t f asm("i0") = func;
++                      register void *f asm("i0") = func;
+                       register unsigned long a1 asm("i1") = arg1;
+                       register unsigned long a2 asm("i2") = arg2;
+                       register unsigned long a3 asm("i3") = arg3;
+@@ -353,11 +353,13 @@ static void sun4d_cross_call(smpfunc_t f
+ /* Running cross calls. */
+ void smp4d_cross_call_irq(void)
+ {
++      void (*func)(unsigned long, unsigned long, unsigned long, unsigned long,
++                   unsigned long) = ccall_info.func;
+       int i = hard_smp_processor_id();
+       ccall_info.processors_in[i] = 1;
+-      ccall_info.func(ccall_info.arg1, ccall_info.arg2, ccall_info.arg3,
+-                      ccall_info.arg4, ccall_info.arg5);
++      func(ccall_info.arg1, ccall_info.arg2, ccall_info.arg3, ccall_info.arg4,
++           ccall_info.arg5);
+       ccall_info.processors_out[i] = 1;
+ }
+--- a/arch/sparc/kernel/sun4m_smp.c
++++ b/arch/sparc/kernel/sun4m_smp.c
+@@ -157,7 +157,7 @@ static void sun4m_ipi_mask_one(int cpu)
+ }
+ static struct smp_funcall {
+-      smpfunc_t func;
++      void *func;
+       unsigned long arg1;
+       unsigned long arg2;
+       unsigned long arg3;
+@@ -170,7 +170,7 @@ static struct smp_funcall {
+ static DEFINE_SPINLOCK(cross_call_lock);
+ /* Cross calls must be serialized, at least currently. */
+-static void sun4m_cross_call(smpfunc_t func, cpumask_t mask, unsigned long arg1,
++static void sun4m_cross_call(void *func, cpumask_t mask, unsigned long arg1,
+                            unsigned long arg2, unsigned long arg3,
+                            unsigned long arg4)
+ {
+@@ -230,11 +230,13 @@ static void sun4m_cross_call(smpfunc_t f
+ /* Running cross calls. */
+ void smp4m_cross_call_irq(void)
+ {
++      void (*func)(unsigned long, unsigned long, unsigned long, unsigned long,
++                   unsigned long) = ccall_info.func;
+       int i = smp_processor_id();
+       ccall_info.processors_in[i] = 1;
+-      ccall_info.func(ccall_info.arg1, ccall_info.arg2, ccall_info.arg3,
+-                      ccall_info.arg4, ccall_info.arg5);
++      func(ccall_info.arg1, ccall_info.arg2, ccall_info.arg3, ccall_info.arg4,
++           ccall_info.arg5);
+       ccall_info.processors_out[i] = 1;
+ }
+--- a/arch/sparc/mm/srmmu.c
++++ b/arch/sparc/mm/srmmu.c
+@@ -1636,19 +1636,19 @@ static void __init get_srmmu_type(void)
+ /* Local cross-calls. */
+ static void smp_flush_page_for_dma(unsigned long page)
+ {
+-      xc1((smpfunc_t) local_ops->page_for_dma, page);
++      xc1(local_ops->page_for_dma, page);
+       local_ops->page_for_dma(page);
+ }
+ static void smp_flush_cache_all(void)
+ {
+-      xc0((smpfunc_t) local_ops->cache_all);
++      xc0(local_ops->cache_all);
+       local_ops->cache_all();
+ }
+ static void smp_flush_tlb_all(void)
+ {
+-      xc0((smpfunc_t) local_ops->tlb_all);
++      xc0(local_ops->tlb_all);
+       local_ops->tlb_all();
+ }
+@@ -1659,7 +1659,7 @@ static void smp_flush_cache_mm(struct mm
+               cpumask_copy(&cpu_mask, mm_cpumask(mm));
+               cpumask_clear_cpu(smp_processor_id(), &cpu_mask);
+               if (!cpumask_empty(&cpu_mask))
+-                      xc1((smpfunc_t) local_ops->cache_mm, (unsigned long) mm);
++                      xc1(local_ops->cache_mm, (unsigned long)mm);
+               local_ops->cache_mm(mm);
+       }
+ }
+@@ -1671,7 +1671,7 @@ static void smp_flush_tlb_mm(struct mm_s
+               cpumask_copy(&cpu_mask, mm_cpumask(mm));
+               cpumask_clear_cpu(smp_processor_id(), &cpu_mask);
+               if (!cpumask_empty(&cpu_mask)) {
+-                      xc1((smpfunc_t) local_ops->tlb_mm, (unsigned long) mm);
++                      xc1(local_ops->tlb_mm, (unsigned long)mm);
+                       if (atomic_read(&mm->mm_users) == 1 && current->active_mm == mm)
+                               cpumask_copy(mm_cpumask(mm),
+                                            cpumask_of(smp_processor_id()));
+@@ -1691,8 +1691,8 @@ static void smp_flush_cache_range(struct
+               cpumask_copy(&cpu_mask, mm_cpumask(mm));
+               cpumask_clear_cpu(smp_processor_id(), &cpu_mask);
+               if (!cpumask_empty(&cpu_mask))
+-                      xc3((smpfunc_t) local_ops->cache_range,
+-                          (unsigned long) vma, start, end);
++                      xc3(local_ops->cache_range, (unsigned long)vma, start,
++                          end);
+               local_ops->cache_range(vma, start, end);
+       }
+ }
+@@ -1708,8 +1708,8 @@ static void smp_flush_tlb_range(struct v
+               cpumask_copy(&cpu_mask, mm_cpumask(mm));
+               cpumask_clear_cpu(smp_processor_id(), &cpu_mask);
+               if (!cpumask_empty(&cpu_mask))
+-                      xc3((smpfunc_t) local_ops->tlb_range,
+-                          (unsigned long) vma, start, end);
++                      xc3(local_ops->tlb_range, (unsigned long)vma, start,
++                          end);
+               local_ops->tlb_range(vma, start, end);
+       }
+ }
+@@ -1723,8 +1723,7 @@ static void smp_flush_cache_page(struct
+               cpumask_copy(&cpu_mask, mm_cpumask(mm));
+               cpumask_clear_cpu(smp_processor_id(), &cpu_mask);
+               if (!cpumask_empty(&cpu_mask))
+-                      xc2((smpfunc_t) local_ops->cache_page,
+-                          (unsigned long) vma, page);
++                      xc2(local_ops->cache_page, (unsigned long)vma, page);
+               local_ops->cache_page(vma, page);
+       }
+ }
+@@ -1738,8 +1737,7 @@ static void smp_flush_tlb_page(struct vm
+               cpumask_copy(&cpu_mask, mm_cpumask(mm));
+               cpumask_clear_cpu(smp_processor_id(), &cpu_mask);
+               if (!cpumask_empty(&cpu_mask))
+-                      xc2((smpfunc_t) local_ops->tlb_page,
+-                          (unsigned long) vma, page);
++                      xc2(local_ops->tlb_page, (unsigned long)vma, page);
+               local_ops->tlb_page(vma, page);
+       }
+ }
+@@ -1753,7 +1751,7 @@ static void smp_flush_page_to_ram(unsign
+        * XXX This experiment failed, research further... -DaveM
+        */
+ #if 1
+-      xc1((smpfunc_t) local_ops->page_to_ram, page);
++      xc1(local_ops->page_to_ram, page);
+ #endif
+       local_ops->page_to_ram(page);
+ }
+@@ -1764,8 +1762,7 @@ static void smp_flush_sig_insns(struct m
+       cpumask_copy(&cpu_mask, mm_cpumask(mm));
+       cpumask_clear_cpu(smp_processor_id(), &cpu_mask);
+       if (!cpumask_empty(&cpu_mask))
+-              xc2((smpfunc_t) local_ops->sig_insns,
+-                  (unsigned long) mm, insn_addr);
++              xc2(local_ops->sig_insns, (unsigned long)mm, insn_addr);
+       local_ops->sig_insns(mm, insn_addr);
+ }