[PATCH v2 0/7] Initial steps to constify irq_chip

Christophe JAILLET <[email protected]>
Newsgroups org.kernel.vger.kernel-janitors,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
This v2 is related to an old v1 from 11/2024. [0]
The goal of this v2 is to address the comment made on patch 4/5. It
was asked to make a treewide update using a coccinelle script.

So, better late that never, here it is.

 * * * * * * * * * * * * * * * * * *
 
Struct irq_chip holds many function pointers and so, is a good
candidate for constification.


Some steps to constify these structures have already been done in 2022
with commit 393e1280f765 ("genirq: Allow irq_chip registration functions
to take a const irq_chip") and ef6e5d61eb7a ("genirq: Allow
irq_set_chip_handler_name_locked() to take a const irq_chip")

However these commits introduce some ugly casting to store some const
parameters into non-const struct members. [1] [2]

The goal of this serie is to remove these cast and have a cleaner and
safer API.

It will need to constify the return value of irq_get_chip(),
irq_data_get_irq_chip() and irq_desc_get_chip() which are widely used.


Patch 1, 2 and 3 only update the prototypes of some functions and
should be straightforward.
They could be applied even in case of comment/build failure in the
other patches.

Patch 4 and 5 update files that do not match the coccinelle script that
does most of the job.

Pacth 6 is generated by coccinelle. It does 99% of the upgrade.
The script is included.

Finaly, patch 7 correctly constify the 'chip' field in struct irq_data,
update corresponding asseccors and remove the now useless cast in
irq_set_chip_handler_name_locked() and irq_set_chip().


This has been 95% build-tested on x86.
So it is likely that some corner cases will be spotted by build-bots
on other architectures.
Sorry about that, but I don't have enough cycles on my personnal
machine to cross-build the serie on different architecture.

CJ

[0]: https://lore.kernel.org/all/[email protected]/
[1]: https://elixir.bootlin.com/linux/v7.1-rc5/source/kernel/irq/chip.c#L48
[2]: https://elixir.bootlin.com/linux/v7.1-rc5/source/include/linux/irqdesc.h#L250
[3]: https://elixir.bootlin.com/linux/v7.1-rc5/A/ident/irq_chip


Christophe JAILLET (7):
  irqchip: Constify "struct irq_chip *" parameter in chained_irq_xxx()
    functions
  irqchip: Constify "struct irq_chip *" parameter in cond_xxx_eoi_irq()
  pinctrl: samsung: Constify "struct irq_chip *" parameter in
    to_exynos_irq_chip()
  irqchip: Constify some struct irq_chip *
  x86/irq: Constify a struct irq_chip *
  treewide: Constify some struct irq_chip *
  genirq/chip: Constify the 'chip' field in irq_data

 arch/alpha/kernel/irq.c                       |  2 +-
 arch/arc/kernel/mcip.c                        |  2 +-
 arch/arm/mach-omap2/prm_common.c              |  2 +-
 arch/mips/alchemy/devboards/bcsr.c            |  2 +-
 arch/powerpc/kvm/book3s_hv.c                  |  2 +-
 arch/powerpc/platforms/44x/uic.c              |  2 +-
 arch/powerpc/platforms/52xx/media5200.c       |  2 +-
 arch/powerpc/platforms/85xx/common.c          |  2 +-
 arch/powerpc/platforms/85xx/mpc85xx_8259.c    |  2 +-
 .../platforms/85xx/socrates_fpga_pic.c        |  2 +-
 arch/powerpc/platforms/86xx/pic.c             |  2 +-
 arch/powerpc/platforms/chrp/setup.c           |  2 +-
 arch/powerpc/platforms/embedded6xx/hlwd-pic.c |  2 +-
 arch/powerpc/platforms/embedded6xx/mvme5100.c |  2 +-
 arch/powerpc/platforms/pasemi/setup.c         |  2 +-
 arch/powerpc/platforms/pseries/setup.c        |  2 +-
 arch/powerpc/sysdev/ge/ge_pic.c               |  2 +-
 arch/powerpc/sysdev/mpic.c                    |  2 +-
 arch/powerpc/sysdev/tsi108_pci.c              |  2 +-
 arch/powerpc/sysdev/xics/xics-common.c        |  2 +-
 arch/riscv/kernel/sbi-ipi.c                   |  2 +-
 arch/sh/boards/mach-se/7343/irq.c             |  2 +-
 arch/sh/boards/mach-se/7722/irq.c             |  2 +-
 arch/sh/boards/mach-x3proto/gpio.c            |  2 +-
 arch/sh/kernel/cpu/irq/ipr.c                  |  2 +-
 arch/x86/kernel/apic/io_apic.c                |  2 +-
 arch/x86/kernel/irq.c                         |  2 +-
 drivers/clocksource/timer-clint.c             |  2 +-
 drivers/edac/altera_edac.c                    |  2 +-
 drivers/gpio/gpio-altera.c                    |  4 +--
 drivers/gpio/gpio-aspeed-sgpio.c              |  2 +-
 drivers/gpio/gpio-aspeed.c                    |  2 +-
 drivers/gpio/gpio-ath79.c                     |  2 +-
 drivers/gpio/gpio-bcm-kona.c                  |  2 +-
 drivers/gpio/gpio-blzp1600.c                  |  2 +-
 drivers/gpio/gpio-brcmstb.c                   |  2 +-
 drivers/gpio/gpio-cadence.c                   |  2 +-
 drivers/gpio/gpio-dwapb.c                     |  2 +-
 drivers/gpio/gpio-eic-sprd.c                  |  2 +-
 drivers/gpio/gpio-ep93xx.c                    |  2 +-
 drivers/gpio/gpio-ftgpio010.c                 |  2 +-
 drivers/gpio/gpio-hisi.c                      |  2 +-
 drivers/gpio/gpio-hlwd.c                      |  2 +-
 drivers/gpio/gpio-idt3243x.c                  |  2 +-
 drivers/gpio/gpio-loongson-64bit.c            |  2 +-
 drivers/gpio/gpio-mpfs.c                      |  2 +-
 drivers/gpio/gpio-mvebu.c                     |  2 +-
 drivers/gpio/gpio-mxc.c                       |  4 +--
 drivers/gpio/gpio-npcm-sgpio.c                |  2 +-
 drivers/gpio/gpio-pl061.c                     |  2 +-
 drivers/gpio/gpio-rda.c                       |  2 +-
 drivers/gpio/gpio-realtek-otto.c              |  2 +-
 drivers/gpio/gpio-rockchip.c                  |  2 +-
 drivers/gpio/gpio-rtd.c                       |  2 +-
 drivers/gpio/gpio-sprd.c                      |  2 +-
 drivers/gpio/gpio-tangier.c                   |  2 +-
 drivers/gpio/gpio-tegra.c                     |  2 +-
 drivers/gpio/gpio-tegra186.c                  |  2 +-
 drivers/gpio/gpio-tqmx86.c                    |  2 +-
 drivers/gpio/gpio-vf610.c                     |  2 +-
 drivers/gpio/gpio-xilinx.c                    |  2 +-
 drivers/gpio/gpio-xlp.c                       |  2 +-
 drivers/gpio/gpio-zynq.c                      |  2 +-
 drivers/gpu/drm/msm/msm_mdss.c                |  2 +-
 drivers/gpu/ipu-v3/ipu-common.c               |  4 +--
 drivers/iio/adc/stm32-adc-core.c              |  2 +-
 drivers/iio/industrialio-trigger.c            |  4 +--
 drivers/irqchip/exynos-combiner.c             |  4 +--
 drivers/irqchip/irq-aclint-sswi.c             |  2 +-
 drivers/irqchip/irq-al-fic.c                  |  2 +-
 drivers/irqchip/irq-armada-370-xp.c           |  2 +-
 drivers/irqchip/irq-aspeed-i2c-ic.c           |  2 +-
 drivers/irqchip/irq-aspeed-scu-ic.c           |  4 +--
 drivers/irqchip/irq-ast2700-intc1.c           |  2 +-
 drivers/irqchip/irq-ath79-misc.c              |  2 +-
 drivers/irqchip/irq-bcm2836.c                 |  2 +-
 drivers/irqchip/irq-bcm6345-l1.c              |  2 +-
 drivers/irqchip/irq-bcm7038-l1.c              |  2 +-
 drivers/irqchip/irq-bcm7120-l2.c              |  2 +-
 drivers/irqchip/irq-brcmstb-l2.c              |  2 +-
 drivers/irqchip/irq-dw-apb-ictl.c             |  2 +-
 drivers/irqchip/irq-econet-en751221.c         |  2 +-
 drivers/irqchip/irq-gic.c                     |  2 +-
 drivers/irqchip/irq-goldfish-pic.c            |  2 +-
 drivers/irqchip/irq-idt3243x.c                |  2 +-
 drivers/irqchip/irq-imx-mu-msi.c              |  2 +-
 drivers/irqchip/irq-ingenic-tcu.c             |  2 +-
 drivers/irqchip/irq-lan966x-oic.c             |  2 +-
 drivers/irqchip/irq-loongarch-avec.c          |  2 +-
 drivers/irqchip/irq-loongson-eiointc.c        |  2 +-
 drivers/irqchip/irq-loongson-htpic.c          |  2 +-
 drivers/irqchip/irq-loongson-htvec.c          |  2 +-
 drivers/irqchip/irq-loongson-liointc.c        |  2 +-
 drivers/irqchip/irq-loongson-pch-lpc.c        |  2 +-
 drivers/irqchip/irq-lpc32xx.c                 |  2 +-
 drivers/irqchip/irq-ls1x.c                    |  2 +-
 drivers/irqchip/irq-mmp.c                     |  2 +-
 drivers/irqchip/irq-mscc-ocelot.c             |  2 +-
 drivers/irqchip/irq-mvebu-pic.c               |  2 +-
 drivers/irqchip/irq-mvebu-sei.c               |  2 +-
 drivers/irqchip/irq-pruss-intc.c              |  2 +-
 drivers/irqchip/irq-realtek-rtl.c             |  2 +-
 drivers/irqchip/irq-riscv-aplic-direct.c      |  2 +-
 drivers/irqchip/irq-riscv-imsic-early.c       |  2 +-
 drivers/irqchip/irq-sifive-plic.c             |  4 +--
 drivers/irqchip/irq-sp7021-intc.c             |  2 +-
 drivers/irqchip/irq-starfive-jhb100-intc.c    |  2 +-
 drivers/irqchip/irq-stm32-exti.c              |  2 +-
 drivers/irqchip/irq-sunxi-nmi.c               |  2 +-
 drivers/irqchip/irq-ts4800.c                  |  2 +-
 drivers/irqchip/irq-versatile-fpga.c          |  2 +-
 drivers/irqchip/irq-vic.c                     |  2 +-
 drivers/irqchip/irq-vt8500.c                  |  2 +-
 drivers/irqchip/irq-xilinx-intc.c             |  2 +-
 drivers/irqchip/qcom-irq-combiner.c           |  2 +-
 drivers/mfd/fsl-imx25-tsadc.c                 |  2 +-
 drivers/misc/rp1/rp1_pci.c                    |  2 +-
 drivers/pci/controller/dwc/pci-dra7xx.c       |  2 +-
 drivers/pci/controller/dwc/pci-keystone.c     |  4 +--
 .../pci/controller/dwc/pcie-designware-host.c |  2 +-
 drivers/pci/controller/dwc/pcie-dw-rockchip.c |  2 +-
 drivers/pci/controller/dwc/pcie-keembay.c     |  2 +-
 drivers/pci/controller/dwc/pcie-sophgo.c      |  2 +-
 drivers/pci/controller/dwc/pcie-uniphier.c    |  2 +-
 .../controller/mobiveil/pcie-mobiveil-host.c  |  2 +-
 drivers/pci/controller/pci-ftpci100.c         |  2 +-
 drivers/pci/controller/pci-mvebu.c            |  2 +-
 drivers/pci/controller/pci-tegra.c            |  2 +-
 drivers/pci/controller/pci-xgene-msi.c        |  2 +-
 drivers/pci/controller/pcie-altera-msi.c      |  2 +-
 drivers/pci/controller/pcie-altera.c          |  4 +--
 drivers/pci/controller/pcie-apple.c           |  2 +-
 drivers/pci/controller/pcie-brcmstb.c         |  2 +-
 drivers/pci/controller/pcie-iproc-msi.c       |  2 +-
 drivers/pci/controller/pcie-mediatek-gen3.c   |  2 +-
 drivers/pci/controller/pcie-mediatek.c        |  2 +-
 drivers/pci/controller/pcie-rockchip-host.c   |  2 +-
 drivers/pci/controller/pcie-rzg3s-host.c      |  2 +-
 drivers/pci/controller/pcie-xilinx-cpm.c      |  4 +--
 drivers/pci/controller/pcie-xilinx-nwl.c      |  6 ++---
 drivers/pci/controller/plda/pcie-plda-host.c  |  6 ++---
 drivers/pinctrl/actions/pinctrl-owl.c         |  2 +-
 drivers/pinctrl/bcm/pinctrl-bcm2835.c         |  2 +-
 drivers/pinctrl/bcm/pinctrl-iproc-gpio.c      |  2 +-
 drivers/pinctrl/intel/pinctrl-baytrail.c      |  2 +-
 drivers/pinctrl/intel/pinctrl-cherryview.c    |  2 +-
 drivers/pinctrl/intel/pinctrl-lynxpoint.c     |  2 +-
 drivers/pinctrl/mediatek/mtk-eint.c           |  2 +-
 drivers/pinctrl/mvebu/pinctrl-armada-37xx.c   |  2 +-
 drivers/pinctrl/nuvoton/pinctrl-ma35.c        |  2 +-
 drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c     |  2 +-
 drivers/pinctrl/nuvoton/pinctrl-npcm8xx.c     |  2 +-
 drivers/pinctrl/nuvoton/pinctrl-wpcm450.c     |  2 +-
 drivers/pinctrl/pinctrl-apple-gpio.c          |  2 +-
 drivers/pinctrl/pinctrl-at91-pio4.c           |  2 +-
 drivers/pinctrl/pinctrl-at91.c                |  2 +-
 drivers/pinctrl/pinctrl-equilibrium.c         |  2 +-
 drivers/pinctrl/pinctrl-ingenic.c             |  2 +-
 drivers/pinctrl/pinctrl-keembay.c             |  2 +-
 drivers/pinctrl/pinctrl-microchip-sgpio.c     |  2 +-
 drivers/pinctrl/pinctrl-ocelot.c              |  4 +--
 drivers/pinctrl/pinctrl-pic32.c               |  2 +-
 drivers/pinctrl/pinctrl-pistachio.c           |  2 +-
 drivers/pinctrl/pinctrl-rp1.c                 |  2 +-
 drivers/pinctrl/pinctrl-single.c              |  2 +-
 drivers/pinctrl/pinctrl-st.c                  |  4 +--
 drivers/pinctrl/qcom/pinctrl-msm.c            |  2 +-
 drivers/pinctrl/samsung/pinctrl-exynos.c      | 14 +++++------
 drivers/pinctrl/samsung/pinctrl-s3c64xx.c     |  4 +--
 drivers/pinctrl/spear/pinctrl-plgpio.c        |  2 +-
 .../starfive/pinctrl-starfive-jh7100.c        |  2 +-
 .../starfive/pinctrl-starfive-jh7110-aon.c    |  2 +-
 .../starfive/pinctrl-starfive-jh7110-sys.c    |  2 +-
 drivers/pinctrl/sunxi/pinctrl-sunxi.c         |  2 +-
 drivers/sh/intc/core.c                        |  4 +--
 drivers/sh/intc/internals.h                   |  2 +-
 drivers/sh/intc/virq.c                        |  2 +-
 drivers/soc/fsl/qe/qe_ic.c                    |  6 ++---
 drivers/spmi/spmi-mtk-pmif.c                  |  2 +-
 drivers/spmi/spmi-pmic-arb.c                  |  2 +-
 include/linux/irq.h                           |  6 ++---
 include/linux/irqchip/chained_irq.h           |  4 +--
 include/linux/irqdesc.h                       |  4 +--
 kernel/irq/chip.c                             | 25 ++++++++++---------
 kernel/irq/cpuhotplug.c                       |  2 +-
 kernel/irq/debugfs.c                          |  2 +-
 kernel/irq/ipi.c                              |  4 +--
 kernel/irq/kexec.c                            |  2 +-
 kernel/irq/manage.c                           | 22 ++++++++--------
 kernel/irq/migration.c                        |  2 +-
 190 files changed, 243 insertions(+), 242 deletions(-)

-- 
2.54.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.