From nobody Fri Dec 19 12:15:19 2025 Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3049B3451D1 for ; Wed, 29 Oct 2025 16:33:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761755639; cv=none; b=OjF142nUmpZIsBLmJFKMyqGVoDMGI4eJU5G3JAHQR7FEW1OZIT+MN3oSx/ZO1oU9tyvZZsSNRc/p3VvGukgG+UL3k+xReyQZbbYsS6ITUaIFszCWsQYDNkhy1fS7T72vrMzkPC/mr+nbDUHzCVyTFe+DMGD0RkDG3j1wlNyVfd8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761755639; c=relaxed/simple; bh=dLYeOkEOPuIM7U9Iue8rNz1PEvQbU/hko6IFG76HeCM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HuzrWl/HmA4ZaSNwIwKocdRvT+Yib9WmKj+cEWqMvzV+NabOIQJQyemnpFEiRUqx+g4VKwwOwxXRT35hCzqemSMYYbLFHH70uVXHZB9VXc2vg0iSldS4Mi6XS+QYITBbj5anPVXL7OtfDK9xpoEMpX/2IMkuoxVaCNMZbQIBtkg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Y3R2fIp3; arc=none smtp.client-ip=209.85.218.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Y3R2fIp3" Received: by mail-ej1-f48.google.com with SMTP id a640c23a62f3a-b6d5e04e0d3so13515866b.2 for ; Wed, 29 Oct 2025 09:33:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761755626; x=1762360426; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=FxZR2vFcKqCQTHArwAXh359MN44MgbOergiRoRTQBic=; b=Y3R2fIp3mwTX/BRVaCaWxCTbW+OS76VkB9Ot+CUjOQ6bzH/IIAwlYQp6XfxyiMP3hO /QwM9XCBuJYlmUK3B8hbJFHN1V5uuVVk8zMXGFrdv7XyjJZfsR5kEgm8Fn3MQrTeUT36 FDA9x2B7mOSUvYR+6eEclfH82TxarsOrYIT/clp0Jeb6Hv25djW391MIjdbYrSn4qEv8 Rn2+VGTxHdn89J+Dcjbwi9Q8tVGiszJdqW6Pmg7KY97aoQROnHw29JIt6RMRkEawtRsY rM+TEKtrv1Fe87MNeaRrcrXY5TNL013ByjRkzyWL8MTp+uzLMEWBGiEivyTA+6qfENaP EsDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761755626; x=1762360426; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=FxZR2vFcKqCQTHArwAXh359MN44MgbOergiRoRTQBic=; b=VH3TNdkbW71rfZtxrx+7Mem5QXOysBjL6o1KCnbb01PqweB2H1u0UcvhggSFnOhlWK FQBIFiNpd34I44inO1kFF+BbXsXRFMTjxFr9g8KZtQY/VyiO1yxpkDh1/uHaOnH3c7Mg HesX3463hUIR4/mUKEPdsiN82SLaefi5pTLeqtn9CxC8V7gFeox89RnLx9x3jORGBORQ ZuvxYZ0E/aaWSO5lZPF4n6poT4CC/zBBZcbocZ6ORWXWcgkb5bZIq4gBp8MF1dxe+1ws 31MzwkcfBwOOsiSto31g3n93Cn+DV+x7TMQoDCCI9LRf+iGimx3dMOhZEnGELwo0/Ybk I/3A== X-Forwarded-Encrypted: i=1; AJvYcCUcLcZxGUiHP8R3mv6g/ZrfpwlnraLQ0hyKOBiUt8hM/wISBsWn7wVvOgSNr48rMJMSmEURPe4iAh7zsqM=@vger.kernel.org X-Gm-Message-State: AOJu0Ywubi9RbTg6O5crbstN28HpDQZuyYhNzAHj3w0k+WZ8n7PyhFHC UGf4D+C5tjRpjNtZUxV+k9YQSgnqR2oiKBTON0J3/tz8rzyukf3ovLAW X-Gm-Gg: ASbGncujDPsdyPweOYUwFzXkfRbHrlS4L6KxQ5BOedKm1pUTZVT6KZQHtsxubJeNnPK 9MvoYT7CXCm8M8rghJnkSBIo6bhNljrAtalAc4h2Kc15exjZuutdG8BREeEAejgET3BcpCfy/BD 9F61+l0fu5aBnpP1JdZ13Zp79tgVNyvKs61djLaTlSXUELF85qqYx1jJEnPTqOCjYGZ9V/I1vBE 7GclI5FqriL418C0B5qmclYun8YyfdSqD3wFvXSU6AfNVMorZyS4cnxfBXzE566zHmixduhbI59 520r7s86EuQYQmtn6aOv8BcdSi8GbvFHm+tUYN4Wfy1XlU/QUBkyJjvZgT5KRokxLohlDwjtKgN ahcy4M6Z1pOmnMyC3tKx0dFd8TFguf0CP9s7EMXNvZHmKH0eZhB+Z+6BWsjxGr85uPcrdSqIo1L 2zwpzmfIzREAS1ArvvswPq1hz+llhWumzqSEEIm6cp54lVP42wZBoRTX0wvKI3/p857/RSetl/i MF9xIw= X-Google-Smtp-Source: AGHT+IGiCUEzJotH5SXgLN+vuCfpwRfWgWY8U/HYJV6c14Jnwv+Vc0PGPiTMMNlg/7DFar4Ied8xvA== X-Received: by 2002:a17:907:72c9:b0:b54:25dc:a644 with SMTP id a640c23a62f3a-b703d5cb645mr329074966b.60.1761755625591; Wed, 29 Oct 2025 09:33:45 -0700 (PDT) Received: from localhost (p200300e41f274600f22f74fffe1f3a53.dip0.t-ipconnect.de. [2003:e4:1f27:4600:f22f:74ff:fe1f:3a53]) by smtp.gmail.com with UTF8SMTPSA id a640c23a62f3a-b6d8540807bsm1469570266b.54.2025.10.29.09.33.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Oct 2025 09:33:43 -0700 (PDT) From: Thierry Reding To: Greg Kroah-Hartman , "Rafael J. Wysocki" Cc: x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-riscv@lists.infradead.org, linux-mips@vger.kernel.org, loongarch@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-sh@vger.kernel.org, linux-pci@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 1/7] syscore: Pass context data to callbacks Date: Wed, 29 Oct 2025 17:33:30 +0100 Message-ID: <20251029163336.2785270-2-thierry.reding@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251029163336.2785270-1-thierry.reding@gmail.com> References: <20251029163336.2785270-1-thierry.reding@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Thierry Reding Several drivers can benefit from registering per-instance data along with the syscore operations. To achieve this, move the modifiable fields out of the syscore_ops structure and into a separate struct syscore that can be registered with the framework. Add a void * driver data field for drivers to store contextual data that will be passed to the syscore ops. Signed-off-by: Thierry Reding Acked-by: Rafael J. Wysocki (Intel) --- Changes in v3: - extract modifiable field into separate structure so that syscore_ops can be constified - upon popular request, make context data void * Changes in v2: - add missing kerneldoc for added ops parameter arch/arm/mach-exynos/mcpm-exynos.c | 12 ++-- arch/arm/mach-exynos/suspend.c | 48 +++++++------ arch/arm/mach-pxa/generic.h | 6 +- arch/arm/mach-pxa/irq.c | 10 ++- arch/arm/mach-pxa/mfp-pxa2xx.c | 10 ++- arch/arm/mach-pxa/mfp-pxa3xx.c | 10 ++- arch/arm/mach-pxa/pxa25x.c | 4 +- arch/arm/mach-pxa/pxa27x.c | 4 +- arch/arm/mach-pxa/pxa3xx.c | 4 +- arch/arm/mach-pxa/smemc.c | 12 ++-- arch/arm/mach-s3c/irq-pm-s3c64xx.c | 12 ++-- arch/arm/mach-s5pv210/pm.c | 10 ++- arch/arm/mach-versatile/integrator_ap.c | 12 ++-- arch/arm/mm/cache-b15-rac.c | 12 ++-- arch/loongarch/kernel/smp.c | 12 ++-- arch/mips/alchemy/common/dbdma.c | 12 ++-- arch/mips/alchemy/common/irq.c | 24 ++++--- arch/mips/alchemy/common/usb.c | 12 ++-- arch/mips/pci/pci-alchemy.c | 16 +++-- arch/powerpc/platforms/cell/spu_base.c | 10 ++- arch/powerpc/platforms/powermac/pic.c | 12 ++-- arch/powerpc/sysdev/fsl_lbc.c | 12 ++-- arch/powerpc/sysdev/fsl_pci.c | 12 ++-- arch/powerpc/sysdev/ipic.c | 12 ++-- arch/powerpc/sysdev/mpic.c | 14 ++-- arch/powerpc/sysdev/mpic_timer.c | 10 ++- arch/sh/mm/pmb.c | 10 ++- arch/x86/events/amd/ibs.c | 12 ++-- arch/x86/hyperv/hv_init.c | 12 ++-- arch/x86/kernel/amd_gart_64.c | 10 ++- arch/x86/kernel/apic/apic.c | 12 ++-- arch/x86/kernel/apic/io_apic.c | 17 +++-- arch/x86/kernel/cpu/aperfmperf.c | 20 +++--- arch/x86/kernel/cpu/intel_epb.c | 16 +++-- arch/x86/kernel/cpu/mce/core.c | 14 ++-- arch/x86/kernel/cpu/microcode/core.c | 15 ++++- arch/x86/kernel/cpu/mtrr/legacy.c | 12 ++-- arch/x86/kernel/cpu/umwait.c | 10 ++- arch/x86/kernel/i8237.c | 10 ++- arch/x86/kernel/i8259.c | 14 ++-- arch/x86/kernel/kvm.c | 12 ++-- drivers/acpi/pci_link.c | 10 ++- drivers/acpi/sleep.c | 12 ++-- drivers/base/firmware_loader/main.c | 12 ++-- drivers/base/syscore.c | 82 ++++++++++++----------- drivers/bus/mvebu-mbus.c | 16 +++-- drivers/clk/at91/pmc.c | 12 ++-- drivers/clk/imx/clk-vf610.c | 12 ++-- drivers/clk/ingenic/jz4725b-cgu.c | 2 +- drivers/clk/ingenic/jz4740-cgu.c | 2 +- drivers/clk/ingenic/jz4755-cgu.c | 2 +- drivers/clk/ingenic/jz4760-cgu.c | 2 +- drivers/clk/ingenic/jz4770-cgu.c | 2 +- drivers/clk/ingenic/jz4780-cgu.c | 2 +- drivers/clk/ingenic/pm.c | 14 ++-- drivers/clk/ingenic/pm.h | 2 +- drivers/clk/ingenic/tcu.c | 12 ++-- drivers/clk/ingenic/x1000-cgu.c | 2 +- drivers/clk/ingenic/x1830-cgu.c | 2 +- drivers/clk/mvebu/common.c | 12 ++-- drivers/clk/rockchip/clk-rk3288.c | 12 ++-- drivers/clk/samsung/clk-s5pv210-audss.c | 12 ++-- drivers/clk/samsung/clk.c | 12 ++-- drivers/clk/tegra/clk-tegra210.c | 12 ++-- drivers/clocksource/timer-armada-370-xp.c | 12 ++-- drivers/cpuidle/cpuidle-psci.c | 12 ++-- drivers/gpio/gpio-mxc.c | 12 ++-- drivers/gpio/gpio-pxa.c | 12 ++-- drivers/gpio/gpio-sa1100.c | 12 ++-- drivers/hv/vmbus_drv.c | 14 ++-- drivers/iommu/amd/init.c | 12 ++-- drivers/iommu/intel/iommu.c | 12 ++-- drivers/irqchip/exynos-combiner.c | 14 ++-- drivers/irqchip/irq-armada-370-xp.c | 12 ++-- drivers/irqchip/irq-bcm7038-l1.c | 12 ++-- drivers/irqchip/irq-gic-v3-its.c | 12 ++-- drivers/irqchip/irq-i8259.c | 12 ++-- drivers/irqchip/irq-imx-gpcv2.c | 16 +++-- drivers/irqchip/irq-loongson-eiointc.c | 12 ++-- drivers/irqchip/irq-loongson-htpic.c | 10 ++- drivers/irqchip/irq-loongson-htvec.c | 12 ++-- drivers/irqchip/irq-loongson-pch-lpc.c | 12 ++-- drivers/irqchip/irq-loongson-pch-pic.c | 12 ++-- drivers/irqchip/irq-mchp-eic.c | 12 ++-- drivers/irqchip/irq-mst-intc.c | 12 ++-- drivers/irqchip/irq-mtk-cirq.c | 12 ++-- drivers/irqchip/irq-renesas-rzg2l.c | 12 ++-- drivers/irqchip/irq-sa11x0.c | 12 ++-- drivers/irqchip/irq-sifive-plic.c | 12 ++-- drivers/irqchip/irq-sun6i-r.c | 18 +++-- drivers/irqchip/irq-tegra.c | 12 ++-- drivers/irqchip/irq-vic.c | 12 ++-- drivers/leds/trigger/ledtrig-cpu.c | 14 ++-- drivers/macintosh/via-pmu.c | 12 ++-- drivers/power/reset/sc27xx-poweroff.c | 10 ++- drivers/sh/clk/core.c | 10 ++- drivers/sh/intc/core.c | 12 ++-- drivers/soc/bcm/brcmstb/biuctrl.c | 12 ++-- drivers/soc/tegra/pmc.c | 17 +++-- drivers/thermal/intel/intel_hfi.c | 12 ++-- drivers/xen/xen-acpi-processor.c | 12 ++-- include/linux/syscore_ops.h | 15 +++-- kernel/cpu_pm.c | 12 ++-- kernel/irq/generic-chip.c | 14 ++-- kernel/irq/pm.c | 11 ++- kernel/printk/printk.c | 11 ++- kernel/time/sched_clock.c | 22 ++++-- kernel/time/timekeeping.c | 22 ++++-- virt/kvm/kvm_main.c | 18 +++-- 109 files changed, 896 insertions(+), 468 deletions(-) diff --git a/arch/arm/mach-exynos/mcpm-exynos.c b/arch/arm/mach-exynos/mcpm= -exynos.c index fd0dbeb93357..cb7d8a7b14e0 100644 --- a/arch/arm/mach-exynos/mcpm-exynos.c +++ b/arch/arm/mach-exynos/mcpm-exynos.c @@ -215,7 +215,7 @@ static const struct of_device_id exynos_dt_mcpm_match[]= =3D { {}, }; =20 -static void exynos_mcpm_setup_entry_point(void) +static void exynos_mcpm_setup_entry_point(void *data) { /* * U-Boot SPL is hardcoded to jump to the start of ns_sram_base_addr @@ -228,10 +228,14 @@ static void exynos_mcpm_setup_entry_point(void) __raw_writel(__pa_symbol(mcpm_entry_point), ns_sram_base_addr + 8); } =20 -static struct syscore_ops exynos_mcpm_syscore_ops =3D { +static const struct syscore_ops exynos_mcpm_syscore_ops =3D { .resume =3D exynos_mcpm_setup_entry_point, }; =20 +static struct syscore exynos_mcpm_syscore =3D { + .ops =3D &exynos_mcpm_syscore_ops, +}; + static int __init exynos_mcpm_init(void) { struct device_node *node; @@ -300,9 +304,9 @@ static int __init exynos_mcpm_init(void) pmu_raw_writel(value, EXYNOS_COMMON_OPTION(i)); } =20 - exynos_mcpm_setup_entry_point(); + exynos_mcpm_setup_entry_point(NULL); =20 - register_syscore_ops(&exynos_mcpm_syscore_ops); + register_syscore(&exynos_mcpm_syscore); =20 return ret; } diff --git a/arch/arm/mach-exynos/suspend.c b/arch/arm/mach-exynos/suspend.c index 150a1e56dcae..22d723553f62 100644 --- a/arch/arm/mach-exynos/suspend.c +++ b/arch/arm/mach-exynos/suspend.c @@ -53,9 +53,9 @@ struct exynos_pm_data { =20 void (*pm_prepare)(void); void (*pm_resume_prepare)(void); - void (*pm_resume)(void); - int (*pm_suspend)(void); int (*cpu_suspend)(unsigned long); + + const struct syscore_ops *syscore_ops; }; =20 /* Used only on Exynos542x/5800 */ @@ -376,7 +376,7 @@ static void exynos5420_pm_prepare(void) } =20 =20 -static int exynos_pm_suspend(void) +static int exynos_pm_suspend(void *data) { exynos_pm_central_suspend(); =20 @@ -390,7 +390,7 @@ static int exynos_pm_suspend(void) return 0; } =20 -static int exynos5420_pm_suspend(void) +static int exynos5420_pm_suspend(void *data) { u32 this_cluster; =20 @@ -408,7 +408,7 @@ static int exynos5420_pm_suspend(void) return 0; } =20 -static void exynos_pm_resume(void) +static void exynos_pm_resume(void *data) { u32 cpuid =3D read_cpuid_part(); =20 @@ -429,7 +429,7 @@ static void exynos_pm_resume(void) exynos_set_delayed_reset_assertion(true); } =20 -static void exynos3250_pm_resume(void) +static void exynos3250_pm_resume(void *data) { u32 cpuid =3D read_cpuid_part(); =20 @@ -473,7 +473,7 @@ static void exynos5420_prepare_pm_resume(void) } } =20 -static void exynos5420_pm_resume(void) +static void exynos5420_pm_resume(void *data) { unsigned long tmp; =20 @@ -596,41 +596,52 @@ static const struct platform_suspend_ops exynos_suspe= nd_ops =3D { .valid =3D suspend_valid_only_mem, }; =20 +static const struct syscore_ops exynos3250_syscore_ops =3D { + .suspend =3D exynos_pm_suspend, + .resume =3D exynos3250_pm_resume, +}; + static const struct exynos_pm_data exynos3250_pm_data =3D { .wkup_irq =3D exynos3250_wkup_irq, .wake_disable_mask =3D ((0xFF << 8) | (0x1F << 1)), - .pm_suspend =3D exynos_pm_suspend, - .pm_resume =3D exynos3250_pm_resume, .pm_prepare =3D exynos3250_pm_prepare, .cpu_suspend =3D exynos3250_cpu_suspend, + .syscore_ops =3D &exynos3250_syscore_ops, +}; + +static const struct syscore_ops exynos_syscore_ops =3D { + .suspend =3D exynos_pm_suspend, + .resume =3D exynos_pm_resume, }; =20 static const struct exynos_pm_data exynos4_pm_data =3D { .wkup_irq =3D exynos4_wkup_irq, .wake_disable_mask =3D ((0xFF << 8) | (0x1F << 1)), - .pm_suspend =3D exynos_pm_suspend, - .pm_resume =3D exynos_pm_resume, .pm_prepare =3D exynos_pm_prepare, .cpu_suspend =3D exynos_cpu_suspend, + .syscore_ops =3D &exynos_syscore_ops, }; =20 static const struct exynos_pm_data exynos5250_pm_data =3D { .wkup_irq =3D exynos5250_wkup_irq, .wake_disable_mask =3D ((0xFF << 8) | (0x1F << 1)), - .pm_suspend =3D exynos_pm_suspend, - .pm_resume =3D exynos_pm_resume, .pm_prepare =3D exynos_pm_prepare, .cpu_suspend =3D exynos_cpu_suspend, + .syscore_ops =3D &exynos_syscore_ops, +}; + +static const struct syscore_ops exynos5420_syscore_ops =3D { + .resume =3D exynos5420_pm_resume, + .suspend =3D exynos5420_pm_suspend, }; =20 static const struct exynos_pm_data exynos5420_pm_data =3D { .wkup_irq =3D exynos5250_wkup_irq, .wake_disable_mask =3D (0x7F << 7) | (0x1F << 1), .pm_resume_prepare =3D exynos5420_prepare_pm_resume, - .pm_resume =3D exynos5420_pm_resume, - .pm_suspend =3D exynos5420_pm_suspend, .pm_prepare =3D exynos5420_pm_prepare, .cpu_suspend =3D exynos5420_cpu_suspend, + .syscore_ops =3D &exynos5420_syscore_ops, }; =20 static const struct of_device_id exynos_pmu_of_device_ids[] __initconst = =3D { @@ -656,7 +667,7 @@ static const struct of_device_id exynos_pmu_of_device_i= ds[] __initconst =3D { { /*sentinel*/ }, }; =20 -static struct syscore_ops exynos_pm_syscore_ops; +static struct syscore exynos_pm_syscore; =20 void __init exynos_pm_init(void) { @@ -684,10 +695,9 @@ void __init exynos_pm_init(void) tmp |=3D pm_data->wake_disable_mask; pmu_raw_writel(tmp, S5P_WAKEUP_MASK); =20 - exynos_pm_syscore_ops.suspend =3D pm_data->pm_suspend; - exynos_pm_syscore_ops.resume =3D pm_data->pm_resume; + exynos_pm_syscore.ops =3D pm_data->syscore_ops; =20 - register_syscore_ops(&exynos_pm_syscore_ops); + register_syscore(&exynos_pm_syscore); suspend_set_ops(&exynos_suspend_ops); =20 /* diff --git a/arch/arm/mach-pxa/generic.h b/arch/arm/mach-pxa/generic.h index c9c2c46ecead..caad4fca8de3 100644 --- a/arch/arm/mach-pxa/generic.h +++ b/arch/arm/mach-pxa/generic.h @@ -34,9 +34,9 @@ extern void __init pxa27x_map_io(void); extern void __init pxa3xx_init_irq(void); extern void __init pxa3xx_map_io(void); =20 -extern struct syscore_ops pxa_irq_syscore_ops; -extern struct syscore_ops pxa2xx_mfp_syscore_ops; -extern struct syscore_ops pxa3xx_mfp_syscore_ops; +extern struct syscore pxa_irq_syscore; +extern struct syscore pxa2xx_mfp_syscore; +extern struct syscore pxa3xx_mfp_syscore; =20 void __init pxa_set_ffuart_info(void *info); void __init pxa_set_btuart_info(void *info); diff --git a/arch/arm/mach-pxa/irq.c b/arch/arm/mach-pxa/irq.c index 5bfce8aa4102..99acebbbf065 100644 --- a/arch/arm/mach-pxa/irq.c +++ b/arch/arm/mach-pxa/irq.c @@ -178,7 +178,7 @@ void __init pxa_init_irq(int irq_nr, int (*fn)(struct i= rq_data *, unsigned int)) static unsigned long saved_icmr[MAX_INTERNAL_IRQS/32]; static unsigned long saved_ipr[MAX_INTERNAL_IRQS]; =20 -static int pxa_irq_suspend(void) +static int pxa_irq_suspend(void *data) { int i; =20 @@ -197,7 +197,7 @@ static int pxa_irq_suspend(void) return 0; } =20 -static void pxa_irq_resume(void) +static void pxa_irq_resume(void *data) { int i; =20 @@ -219,11 +219,15 @@ static void pxa_irq_resume(void) #define pxa_irq_resume NULL #endif =20 -struct syscore_ops pxa_irq_syscore_ops =3D { +static const struct syscore_ops pxa_irq_syscore_ops =3D { .suspend =3D pxa_irq_suspend, .resume =3D pxa_irq_resume, }; =20 +struct syscore pxa_irq_syscore =3D { + .ops =3D &pxa_irq_syscore_ops, +}; + #ifdef CONFIG_OF static const struct of_device_id intc_ids[] __initconst =3D { { .compatible =3D "marvell,pxa-intc", }, diff --git a/arch/arm/mach-pxa/mfp-pxa2xx.c b/arch/arm/mach-pxa/mfp-pxa2xx.c index f5a3d890f682..d1347055fbe4 100644 --- a/arch/arm/mach-pxa/mfp-pxa2xx.c +++ b/arch/arm/mach-pxa/mfp-pxa2xx.c @@ -346,7 +346,7 @@ static unsigned long saved_gpdr[4]; static unsigned long saved_gplr[4]; static unsigned long saved_pgsr[4]; =20 -static int pxa2xx_mfp_suspend(void) +static int pxa2xx_mfp_suspend(void *data) { int i; =20 @@ -385,7 +385,7 @@ static int pxa2xx_mfp_suspend(void) return 0; } =20 -static void pxa2xx_mfp_resume(void) +static void pxa2xx_mfp_resume(void *data) { int i; =20 @@ -404,11 +404,15 @@ static void pxa2xx_mfp_resume(void) #define pxa2xx_mfp_resume NULL #endif =20 -struct syscore_ops pxa2xx_mfp_syscore_ops =3D { +static const struct syscore_ops pxa2xx_mfp_syscore_ops =3D { .suspend =3D pxa2xx_mfp_suspend, .resume =3D pxa2xx_mfp_resume, }; =20 +struct syscore pxa2xx_mfp_syscore =3D { + .ops =3D &pxa2xx_mfp_syscore_ops, +}; + static int __init pxa2xx_mfp_init(void) { int i; diff --git a/arch/arm/mach-pxa/mfp-pxa3xx.c b/arch/arm/mach-pxa/mfp-pxa3xx.c index d16ab7451efe..fe7498fbb62b 100644 --- a/arch/arm/mach-pxa/mfp-pxa3xx.c +++ b/arch/arm/mach-pxa/mfp-pxa3xx.c @@ -27,13 +27,13 @@ * a pull-down mode if they're an active low chip select, and we're * just entering standby. */ -static int pxa3xx_mfp_suspend(void) +static int pxa3xx_mfp_suspend(void *data) { mfp_config_lpm(); return 0; } =20 -static void pxa3xx_mfp_resume(void) +static void pxa3xx_mfp_resume(void *data) { mfp_config_run(); =20 @@ -49,7 +49,11 @@ static void pxa3xx_mfp_resume(void) #define pxa3xx_mfp_resume NULL #endif =20 -struct syscore_ops pxa3xx_mfp_syscore_ops =3D { +static const struct syscore_ops pxa3xx_mfp_syscore_ops =3D { .suspend =3D pxa3xx_mfp_suspend, .resume =3D pxa3xx_mfp_resume, }; + +struct syscore pxa3xx_mfp_syscore =3D { + .ops =3D &pxa3xx_mfp_syscore_ops, +}; diff --git a/arch/arm/mach-pxa/pxa25x.c b/arch/arm/mach-pxa/pxa25x.c index 03e34841fc00..70509a599814 100644 --- a/arch/arm/mach-pxa/pxa25x.c +++ b/arch/arm/mach-pxa/pxa25x.c @@ -235,8 +235,8 @@ static int __init pxa25x_init(void) =20 pxa25x_init_pm(); =20 - register_syscore_ops(&pxa_irq_syscore_ops); - register_syscore_ops(&pxa2xx_mfp_syscore_ops); + register_syscore(&pxa_irq_syscore); + register_syscore(&pxa2xx_mfp_syscore); =20 if (!of_have_populated_dt()) { software_node_register(&pxa2xx_gpiochip_node); diff --git a/arch/arm/mach-pxa/pxa27x.c b/arch/arm/mach-pxa/pxa27x.c index f8382477d629..ff6361979038 100644 --- a/arch/arm/mach-pxa/pxa27x.c +++ b/arch/arm/mach-pxa/pxa27x.c @@ -337,8 +337,8 @@ static int __init pxa27x_init(void) =20 pxa27x_init_pm(); =20 - register_syscore_ops(&pxa_irq_syscore_ops); - register_syscore_ops(&pxa2xx_mfp_syscore_ops); + register_syscore(&pxa_irq_syscore); + register_syscore(&pxa2xx_mfp_syscore); =20 if (!of_have_populated_dt()) { software_node_register(&pxa2xx_gpiochip_node); diff --git a/arch/arm/mach-pxa/pxa3xx.c b/arch/arm/mach-pxa/pxa3xx.c index 1d1e5713464d..06c578ea658e 100644 --- a/arch/arm/mach-pxa/pxa3xx.c +++ b/arch/arm/mach-pxa/pxa3xx.c @@ -424,8 +424,8 @@ static int __init pxa3xx_init(void) if (cpu_is_pxa320()) enable_irq_wake(IRQ_WAKEUP1); =20 - register_syscore_ops(&pxa_irq_syscore_ops); - register_syscore_ops(&pxa3xx_mfp_syscore_ops); + register_syscore(&pxa_irq_syscore); + register_syscore(&pxa3xx_mfp_syscore); } =20 return ret; diff --git a/arch/arm/mach-pxa/smemc.c b/arch/arm/mach-pxa/smemc.c index 2d2a321d82f8..fb93a8f28356 100644 --- a/arch/arm/mach-pxa/smemc.c +++ b/arch/arm/mach-pxa/smemc.c @@ -18,7 +18,7 @@ static unsigned long msc[2]; static unsigned long sxcnfg, memclkcfg; static unsigned long csadrcfg[4]; =20 -static int pxa3xx_smemc_suspend(void) +static int pxa3xx_smemc_suspend(void *data) { msc[0] =3D __raw_readl(MSC0); msc[1] =3D __raw_readl(MSC1); @@ -32,7 +32,7 @@ static int pxa3xx_smemc_suspend(void) return 0; } =20 -static void pxa3xx_smemc_resume(void) +static void pxa3xx_smemc_resume(void *data) { __raw_writel(msc[0], MSC0); __raw_writel(msc[1], MSC1); @@ -46,11 +46,15 @@ static void pxa3xx_smemc_resume(void) __raw_writel(0x2, CSMSADRCFG); } =20 -static struct syscore_ops smemc_syscore_ops =3D { +static const struct syscore_ops smemc_syscore_ops =3D { .suspend =3D pxa3xx_smemc_suspend, .resume =3D pxa3xx_smemc_resume, }; =20 +static struct syscore smemc_syscore =3D { + .ops =3D &smemc_syscore_ops, +}; + static int __init smemc_init(void) { if (cpu_is_pxa3xx()) { @@ -64,7 +68,7 @@ static int __init smemc_init(void) */ __raw_writel(0x2, CSMSADRCFG); =20 - register_syscore_ops(&smemc_syscore_ops); + register_syscore(&smemc_syscore); } =20 return 0; diff --git a/arch/arm/mach-s3c/irq-pm-s3c64xx.c b/arch/arm/mach-s3c/irq-pm-= s3c64xx.c index 4a1e935bada1..ab726c595001 100644 --- a/arch/arm/mach-s3c/irq-pm-s3c64xx.c +++ b/arch/arm/mach-s3c/irq-pm-s3c64xx.c @@ -58,7 +58,7 @@ static struct irq_grp_save { =20 static u32 irq_uart_mask[SERIAL_SAMSUNG_UARTS]; =20 -static int s3c64xx_irq_pm_suspend(void) +static int s3c64xx_irq_pm_suspend(void *data) { struct irq_grp_save *grp =3D eint_grp_save; int i; @@ -79,7 +79,7 @@ static int s3c64xx_irq_pm_suspend(void) return 0; } =20 -static void s3c64xx_irq_pm_resume(void) +static void s3c64xx_irq_pm_resume(void *data) { struct irq_grp_save *grp =3D eint_grp_save; int i; @@ -100,18 +100,22 @@ static void s3c64xx_irq_pm_resume(void) S3C_PMDBG("%s: IRQ configuration restored\n", __func__); } =20 -static struct syscore_ops s3c64xx_irq_syscore_ops =3D { +static const struct syscore_ops s3c64xx_irq_syscore_ops =3D { .suspend =3D s3c64xx_irq_pm_suspend, .resume =3D s3c64xx_irq_pm_resume, }; =20 +static struct syscore s3c64xx_irq_syscore =3D { + .ops =3D &s3c64xx_irq_syscore_ops, +}; + static __init int s3c64xx_syscore_init(void) { /* Appropriate drivers (pinctrl, uart) handle this when using DT. */ if (of_have_populated_dt() || !soc_is_s3c64xx()) return 0; =20 - register_syscore_ops(&s3c64xx_irq_syscore_ops); + register_syscore(&s3c64xx_irq_syscore); =20 return 0; } diff --git a/arch/arm/mach-s5pv210/pm.c b/arch/arm/mach-s5pv210/pm.c index 6fa70f787df4..fa270750364c 100644 --- a/arch/arm/mach-s5pv210/pm.c +++ b/arch/arm/mach-s5pv210/pm.c @@ -195,20 +195,24 @@ static const struct platform_suspend_ops s5pv210_susp= end_ops =3D { /* * Syscore operations used to delay restore of certain registers. */ -static void s5pv210_pm_resume(void) +static void s5pv210_pm_resume(void *data) { s3c_pm_do_restore_core(s5pv210_core_save, ARRAY_SIZE(s5pv210_core_save)); } =20 -static struct syscore_ops s5pv210_pm_syscore_ops =3D { +static const struct syscore_ops s5pv210_pm_syscore_ops =3D { .resume =3D s5pv210_pm_resume, }; =20 +static struct syscore s5pv210_pm_syscore =3D { + .ops =3D &s5pv210_pm_syscore_ops, +}; + /* * Initialization entry point. */ void __init s5pv210_pm_init(void) { - register_syscore_ops(&s5pv210_pm_syscore_ops); + register_syscore(&s5pv210_pm_syscore); suspend_set_ops(&s5pv210_suspend_ops); } diff --git a/arch/arm/mach-versatile/integrator_ap.c b/arch/arm/mach-versat= ile/integrator_ap.c index 4bd6712e9f52..ee90d6619d0d 100644 --- a/arch/arm/mach-versatile/integrator_ap.c +++ b/arch/arm/mach-versatile/integrator_ap.c @@ -63,13 +63,13 @@ static void __init ap_map_io(void) #ifdef CONFIG_PM static unsigned long ic_irq_enable; =20 -static int irq_suspend(void) +static int irq_suspend(void *data) { ic_irq_enable =3D readl(VA_IC_BASE + IRQ_ENABLE); return 0; } =20 -static void irq_resume(void) +static void irq_resume(void *data) { /* disable all irq sources */ cm_clear_irqs(); @@ -83,14 +83,18 @@ static void irq_resume(void) #define irq_resume NULL #endif =20 -static struct syscore_ops irq_syscore_ops =3D { +static const struct syscore_ops irq_syscore_ops =3D { .suspend =3D irq_suspend, .resume =3D irq_resume, }; =20 +static struct syscore irq_syscore =3D { + .ops =3D &irq_syscore_ops, +}; + static int __init irq_syscore_init(void) { - register_syscore_ops(&irq_syscore_ops); + register_syscore(&irq_syscore); =20 return 0; } diff --git a/arch/arm/mm/cache-b15-rac.c b/arch/arm/mm/cache-b15-rac.c index 6f63b90f9e1a..e7807356dfab 100644 --- a/arch/arm/mm/cache-b15-rac.c +++ b/arch/arm/mm/cache-b15-rac.c @@ -256,7 +256,7 @@ static int b15_rac_dead_cpu(unsigned int cpu) return 0; } =20 -static int b15_rac_suspend(void) +static int b15_rac_suspend(void *data) { /* Suspend the read-ahead cache oeprations, forcing our cache * implementation to fallback to the regular ARMv7 calls. @@ -271,7 +271,7 @@ static int b15_rac_suspend(void) return 0; } =20 -static void b15_rac_resume(void) +static void b15_rac_resume(void *data) { /* Coming out of a S3 suspend/resume cycle, the read-ahead cache * register RAC_CONFIG0_REG will be restored to its default value, make @@ -282,11 +282,15 @@ static void b15_rac_resume(void) clear_bit(RAC_SUSPENDED, &b15_rac_flags); } =20 -static struct syscore_ops b15_rac_syscore_ops =3D { +static const struct syscore_ops b15_rac_syscore_ops =3D { .suspend =3D b15_rac_suspend, .resume =3D b15_rac_resume, }; =20 +static struct syscore b15_rac_syscore =3D { + .ops =3D &b15_rac_syscore_ops, +}; + static int __init b15_rac_init(void) { struct device_node *dn, *cpu_dn; @@ -347,7 +351,7 @@ static int __init b15_rac_init(void) } =20 if (IS_ENABLED(CONFIG_PM_SLEEP)) - register_syscore_ops(&b15_rac_syscore_ops); + register_syscore(&b15_rac_syscore); =20 spin_lock(&rac_lock); reg =3D __raw_readl(b15_rac_base + RAC_CONFIG0_REG); diff --git a/arch/loongarch/kernel/smp.c b/arch/loongarch/kernel/smp.c index 46036d98da75..8b2fcb3fb874 100644 --- a/arch/loongarch/kernel/smp.c +++ b/arch/loongarch/kernel/smp.c @@ -535,28 +535,32 @@ int hibernate_resume_nonboot_cpu_disable(void) */ #ifdef CONFIG_PM =20 -static int loongson_ipi_suspend(void) +static int loongson_ipi_suspend(void *data) { return 0; } =20 -static void loongson_ipi_resume(void) +static void loongson_ipi_resume(void *data) { iocsr_write32(0xffffffff, LOONGARCH_IOCSR_IPI_EN); } =20 -static struct syscore_ops loongson_ipi_syscore_ops =3D { +static const struct syscore_ops loongson_ipi_syscore_ops =3D { .resume =3D loongson_ipi_resume, .suspend =3D loongson_ipi_suspend, }; =20 +static struct syscore loongson_ipi_syscore =3D { + .ops =3D &loongson_ipi_syscore_ops, +}; + /* * Enable boot cpu ipi before enabling nonboot cpus * during syscore_resume. */ static int __init ipi_pm_init(void) { - register_syscore_ops(&loongson_ipi_syscore_ops); + register_syscore(&loongson_ipi_syscore); return 0; } =20 diff --git a/arch/mips/alchemy/common/dbdma.c b/arch/mips/alchemy/common/db= dma.c index 6a3c890f7bbf..6c2c2010bbae 100644 --- a/arch/mips/alchemy/common/dbdma.c +++ b/arch/mips/alchemy/common/dbdma.c @@ -982,7 +982,7 @@ u32 au1xxx_dbdma_put_dscr(u32 chanid, au1x_ddma_desc_t = *dscr) =20 static unsigned long alchemy_dbdma_pm_data[NUM_DBDMA_CHANS + 1][6]; =20 -static int alchemy_dbdma_suspend(void) +static int alchemy_dbdma_suspend(void *data) { int i; void __iomem *addr; @@ -1019,7 +1019,7 @@ static int alchemy_dbdma_suspend(void) return 0; } =20 -static void alchemy_dbdma_resume(void) +static void alchemy_dbdma_resume(void *data) { int i; void __iomem *addr; @@ -1044,11 +1044,15 @@ static void alchemy_dbdma_resume(void) } } =20 -static struct syscore_ops alchemy_dbdma_syscore_ops =3D { +static const struct syscore_ops alchemy_dbdma_syscore_ops =3D { .suspend =3D alchemy_dbdma_suspend, .resume =3D alchemy_dbdma_resume, }; =20 +static struct syscore alchemy_dbdma_syscore =3D { + .ops =3D &alchemy_dbdma_syscore_ops, +}; + static int __init dbdma_setup(unsigned int irq, dbdev_tab_t *idtable) { int ret; @@ -1071,7 +1075,7 @@ static int __init dbdma_setup(unsigned int irq, dbdev= _tab_t *idtable) printk(KERN_ERR "Cannot grab DBDMA interrupt!\n"); else { dbdma_initialized =3D 1; - register_syscore_ops(&alchemy_dbdma_syscore_ops); + register_syscore(&alchemy_dbdma_syscore); } =20 return ret; diff --git a/arch/mips/alchemy/common/irq.c b/arch/mips/alchemy/common/irq.c index da9f9220048f..2403afcd2fb9 100644 --- a/arch/mips/alchemy/common/irq.c +++ b/arch/mips/alchemy/common/irq.c @@ -758,7 +758,7 @@ static inline void alchemy_ic_resume_one(void __iomem *= base, unsigned long *d) wmb(); } =20 -static int alchemy_ic_suspend(void) +static int alchemy_ic_suspend(void *data) { alchemy_ic_suspend_one((void __iomem *)KSEG1ADDR(AU1000_IC0_PHYS_ADDR), alchemy_gpic_pmdata); @@ -767,7 +767,7 @@ static int alchemy_ic_suspend(void) return 0; } =20 -static void alchemy_ic_resume(void) +static void alchemy_ic_resume(void *data) { alchemy_ic_resume_one((void __iomem *)KSEG1ADDR(AU1000_IC1_PHYS_ADDR), &alchemy_gpic_pmdata[7]); @@ -775,7 +775,7 @@ static void alchemy_ic_resume(void) alchemy_gpic_pmdata); } =20 -static int alchemy_gpic_suspend(void) +static int alchemy_gpic_suspend(void *data) { void __iomem *base =3D (void __iomem *)KSEG1ADDR(AU1300_GPIC_PHYS_ADDR); int i; @@ -806,7 +806,7 @@ static int alchemy_gpic_suspend(void) return 0; } =20 -static void alchemy_gpic_resume(void) +static void alchemy_gpic_resume(void *data) { void __iomem *base =3D (void __iomem *)KSEG1ADDR(AU1300_GPIC_PHYS_ADDR); int i; @@ -837,16 +837,24 @@ static void alchemy_gpic_resume(void) wmb(); } =20 -static struct syscore_ops alchemy_ic_pmops =3D { +static const struct syscore_ops alchemy_ic_pmops =3D { .suspend =3D alchemy_ic_suspend, .resume =3D alchemy_ic_resume, }; =20 -static struct syscore_ops alchemy_gpic_pmops =3D { +static struct syscore alchemy_ic_pm =3D { + .ops =3D &alchemy_ic_pmops, +}; + +static const struct syscore_ops alchemy_gpic_pmops =3D { .suspend =3D alchemy_gpic_suspend, .resume =3D alchemy_gpic_resume, }; =20 +static struct syscore alchemy_gpic_pm =3D { + .ops =3D &alchemy_gpic_pmops, +}; + /*************************************************************************= *****/ =20 /* create chained handlers for the 4 IC requests to the MIPS IRQ ctrl */ @@ -880,7 +888,7 @@ static void __init au1000_init_irq(struct alchemy_irqma= p *map) =20 ic_init((void __iomem *)KSEG1ADDR(AU1000_IC0_PHYS_ADDR)); ic_init((void __iomem *)KSEG1ADDR(AU1000_IC1_PHYS_ADDR)); - register_syscore_ops(&alchemy_ic_pmops); + register_syscore(&alchemy_ic_pm); mips_cpu_irq_init(); =20 /* register all 64 possible IC0+IC1 irq sources as type "none". @@ -925,7 +933,7 @@ static void __init alchemy_gpic_init_irq(const struct a= lchemy_irqmap *dints) int i; void __iomem *bank_base; =20 - register_syscore_ops(&alchemy_gpic_pmops); + register_syscore(&alchemy_gpic_pm); mips_cpu_irq_init(); =20 /* disable & ack all possible interrupt sources */ diff --git a/arch/mips/alchemy/common/usb.c b/arch/mips/alchemy/common/usb.c index 5d618547ebf0..a55f32bf517c 100644 --- a/arch/mips/alchemy/common/usb.c +++ b/arch/mips/alchemy/common/usb.c @@ -580,22 +580,26 @@ static void alchemy_usb_pm(int susp) } } =20 -static int alchemy_usb_suspend(void) +static int alchemy_usb_suspend(void *data) { alchemy_usb_pm(1); return 0; } =20 -static void alchemy_usb_resume(void) +static void alchemy_usb_resume(void *data) { alchemy_usb_pm(0); } =20 -static struct syscore_ops alchemy_usb_pm_ops =3D { +static const struct syscore_ops alchemy_usb_pm_syscore_ops =3D { .suspend =3D alchemy_usb_suspend, .resume =3D alchemy_usb_resume, }; =20 +static struct syscore alchemy_usb_pm_syscore =3D { + .ops =3D &alchemy_usb_pm_syscore_ops, +}; + static int __init alchemy_usb_init(void) { int ret =3D 0; @@ -620,7 +624,7 @@ static int __init alchemy_usb_init(void) } =20 if (!ret) - register_syscore_ops(&alchemy_usb_pm_ops); + register_syscore(&alchemy_usb_pm_syscore); =20 return ret; } diff --git a/arch/mips/pci/pci-alchemy.c b/arch/mips/pci/pci-alchemy.c index 58625d1b6465..6bfee0f71803 100644 --- a/arch/mips/pci/pci-alchemy.c +++ b/arch/mips/pci/pci-alchemy.c @@ -304,7 +304,7 @@ static int alchemy_pci_def_idsel(unsigned int devsel, i= nt assert) } =20 /* save PCI controller register contents. */ -static int alchemy_pci_suspend(void) +static int alchemy_pci_suspend(void *data) { struct alchemy_pci_context *ctx =3D __alchemy_pci_ctx; if (!ctx) @@ -326,7 +326,7 @@ static int alchemy_pci_suspend(void) return 0; } =20 -static void alchemy_pci_resume(void) +static void alchemy_pci_resume(void *data) { struct alchemy_pci_context *ctx =3D __alchemy_pci_ctx; if (!ctx) @@ -354,9 +354,13 @@ static void alchemy_pci_resume(void) alchemy_pci_wired_entry(ctx); /* install it */ } =20 -static struct syscore_ops alchemy_pci_pmops =3D { - .suspend =3D alchemy_pci_suspend, - .resume =3D alchemy_pci_resume, +static const struct syscore_ops alchemy_pci_syscore_ops =3D { + .suspend =3D alchemy_pci_suspend, + .resume =3D alchemy_pci_resume, +}; + +static struct syscore alchemy_pci_syscore =3D { + .ops =3D &alchemy_pci_syscore_ops, }; =20 static int alchemy_pci_probe(struct platform_device *pdev) @@ -478,7 +482,7 @@ static int alchemy_pci_probe(struct platform_device *pd= ev) =20 __alchemy_pci_ctx =3D ctx; platform_set_drvdata(pdev, ctx); - register_syscore_ops(&alchemy_pci_pmops); + register_syscore(&alchemy_pci_syscore); register_pci_controller(&ctx->alchemy_pci_ctrl); =20 dev_info(&pdev->dev, "PCI controller at %ld MHz\n", diff --git a/arch/powerpc/platforms/cell/spu_base.c b/arch/powerpc/platform= s/cell/spu_base.c index 733b512992c0..3c8624870967 100644 --- a/arch/powerpc/platforms/cell/spu_base.c +++ b/arch/powerpc/platforms/cell/spu_base.c @@ -726,7 +726,7 @@ static inline void crash_register_spus(struct list_head= *list) } #endif =20 -static void spu_shutdown(void) +static void spu_shutdown(void *data) { struct spu *spu; =20 @@ -738,10 +738,14 @@ static void spu_shutdown(void) mutex_unlock(&spu_full_list_mutex); } =20 -static struct syscore_ops spu_syscore_ops =3D { +static const struct syscore_ops spu_syscore_ops =3D { .shutdown =3D spu_shutdown, }; =20 +static struct syscore spu_syscore =3D { + .ops =3D &spu_syscore_ops, +}; + static int __init init_spu_base(void) { int i, ret =3D 0; @@ -774,7 +778,7 @@ static int __init init_spu_base(void) crash_register_spus(&spu_full_list); mutex_unlock(&spu_full_list_mutex); spu_add_dev_attr(&dev_attr_stat); - register_syscore_ops(&spu_syscore_ops); + register_syscore(&spu_syscore); =20 spu_init_affinity(); =20 diff --git a/arch/powerpc/platforms/powermac/pic.c b/arch/powerpc/platforms= /powermac/pic.c index c37783a03d25..1959cc13438f 100644 --- a/arch/powerpc/platforms/powermac/pic.c +++ b/arch/powerpc/platforms/powermac/pic.c @@ -600,7 +600,7 @@ static int pmacpic_find_viaint(void) return viaint; } =20 -static int pmacpic_suspend(void) +static int pmacpic_suspend(void *data) { int viaint =3D pmacpic_find_viaint(); =20 @@ -621,7 +621,7 @@ static int pmacpic_suspend(void) return 0; } =20 -static void pmacpic_resume(void) +static void pmacpic_resume(void *data) { int i; =20 @@ -634,15 +634,19 @@ static void pmacpic_resume(void) pmac_unmask_irq(irq_get_irq_data(i)); } =20 -static struct syscore_ops pmacpic_syscore_ops =3D { +static const struct syscore_ops pmacpic_syscore_ops =3D { .suspend =3D pmacpic_suspend, .resume =3D pmacpic_resume, }; =20 +static struct syscore pmacpic_syscore =3D { + .ops =3D &pmacpic_syscore_ops, +}; + static int __init init_pmacpic_syscore(void) { if (pmac_irq_hw[0]) - register_syscore_ops(&pmacpic_syscore_ops); + register_syscore(&pmacpic_syscore); return 0; } =20 diff --git a/arch/powerpc/sysdev/fsl_lbc.c b/arch/powerpc/sysdev/fsl_lbc.c index 217cea150987..7ed07232a69a 100644 --- a/arch/powerpc/sysdev/fsl_lbc.c +++ b/arch/powerpc/sysdev/fsl_lbc.c @@ -350,7 +350,7 @@ static int fsl_lbc_ctrl_probe(struct platform_device *d= ev) #ifdef CONFIG_SUSPEND =20 /* save lbc registers */ -static int fsl_lbc_syscore_suspend(void) +static int fsl_lbc_syscore_suspend(void *data) { struct fsl_lbc_ctrl *ctrl; struct fsl_lbc_regs __iomem *lbc; @@ -374,7 +374,7 @@ static int fsl_lbc_syscore_suspend(void) } =20 /* restore lbc registers */ -static void fsl_lbc_syscore_resume(void) +static void fsl_lbc_syscore_resume(void *data) { struct fsl_lbc_ctrl *ctrl; struct fsl_lbc_regs __iomem *lbc; @@ -408,10 +408,14 @@ static const struct of_device_id fsl_lbc_match[] =3D { }; =20 #ifdef CONFIG_SUSPEND -static struct syscore_ops lbc_syscore_pm_ops =3D { +static const struct syscore_ops lbc_syscore_pm_ops =3D { .suspend =3D fsl_lbc_syscore_suspend, .resume =3D fsl_lbc_syscore_resume, }; + +static struct syscore lbc_syscore_pm =3D { + .ops =3D &lbc_syscore_pm_ops, +}; #endif =20 static struct platform_driver fsl_lbc_ctrl_driver =3D { @@ -425,7 +429,7 @@ static struct platform_driver fsl_lbc_ctrl_driver =3D { static int __init fsl_lbc_init(void) { #ifdef CONFIG_SUSPEND - register_syscore_ops(&lbc_syscore_pm_ops); + register_syscore(&lbc_syscore_pm); #endif return platform_driver_register(&fsl_lbc_ctrl_driver); } diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c index ef7707ea0db7..4e501654cb41 100644 --- a/arch/powerpc/sysdev/fsl_pci.c +++ b/arch/powerpc/sysdev/fsl_pci.c @@ -1258,7 +1258,7 @@ static void fsl_pci_syscore_do_suspend(struct pci_con= troller *hose) send_pme_turnoff_message(hose); } =20 -static int fsl_pci_syscore_suspend(void) +static int fsl_pci_syscore_suspend(void *data) { struct pci_controller *hose, *tmp; =20 @@ -1291,7 +1291,7 @@ static void fsl_pci_syscore_do_resume(struct pci_cont= roller *hose) setup_pci_atmu(hose); } =20 -static void fsl_pci_syscore_resume(void) +static void fsl_pci_syscore_resume(void *data) { struct pci_controller *hose, *tmp; =20 @@ -1299,10 +1299,14 @@ static void fsl_pci_syscore_resume(void) fsl_pci_syscore_do_resume(hose); } =20 -static struct syscore_ops pci_syscore_pm_ops =3D { +static const struct syscore_ops pci_syscore_pm_ops =3D { .suspend =3D fsl_pci_syscore_suspend, .resume =3D fsl_pci_syscore_resume, }; + +static struct syscore pci_syscore_pm =3D { + .ops =3D &pci_syscore_pm_ops, +}; #endif =20 void fsl_pcibios_fixup_phb(struct pci_controller *phb) @@ -1359,7 +1363,7 @@ static struct platform_driver fsl_pci_driver =3D { static int __init fsl_pci_init(void) { #ifdef CONFIG_PM_SLEEP - register_syscore_ops(&pci_syscore_pm_ops); + register_syscore(&pci_syscore_pm); #endif return platform_driver_register(&fsl_pci_driver); } diff --git a/arch/powerpc/sysdev/ipic.c b/arch/powerpc/sysdev/ipic.c index 70be2105865d..290ba8427239 100644 --- a/arch/powerpc/sysdev/ipic.c +++ b/arch/powerpc/sysdev/ipic.c @@ -817,7 +817,7 @@ static struct { u32 sercr; } ipic_saved_state; =20 -static int ipic_suspend(void) +static int ipic_suspend(void *data) { struct ipic *ipic =3D primary_ipic; =20 @@ -848,7 +848,7 @@ static int ipic_suspend(void) return 0; } =20 -static void ipic_resume(void) +static void ipic_resume(void *data) { struct ipic *ipic =3D primary_ipic; =20 @@ -870,18 +870,22 @@ static void ipic_resume(void) #define ipic_resume NULL #endif =20 -static struct syscore_ops ipic_syscore_ops =3D { +static const struct syscore_ops ipic_syscore_ops =3D { .suspend =3D ipic_suspend, .resume =3D ipic_resume, }; =20 +static struct syscore ipic_syscore =3D { + .ops =3D &ipic_syscore_ops, +}; + static int __init init_ipic_syscore(void) { if (!primary_ipic || !primary_ipic->regs) return -ENODEV; =20 printk(KERN_DEBUG "Registering ipic system core operations\n"); - register_syscore_ops(&ipic_syscore_ops); + register_syscore(&ipic_syscore); =20 return 0; } diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c index ad7310bba00b..67e51998d1ae 100644 --- a/arch/powerpc/sysdev/mpic.c +++ b/arch/powerpc/sysdev/mpic.c @@ -1944,7 +1944,7 @@ static void mpic_suspend_one(struct mpic *mpic) } } =20 -static int mpic_suspend(void) +static int mpic_suspend(void *data) { struct mpic *mpic =3D mpics; =20 @@ -1986,7 +1986,7 @@ static void mpic_resume_one(struct mpic *mpic) } /* end for loop */ } =20 -static void mpic_resume(void) +static void mpic_resume(void *data) { struct mpic *mpic =3D mpics; =20 @@ -1996,19 +1996,23 @@ static void mpic_resume(void) } } =20 -static struct syscore_ops mpic_syscore_ops =3D { +static const struct syscore_ops mpic_syscore_ops =3D { .resume =3D mpic_resume, .suspend =3D mpic_suspend, }; =20 +static struct syscore mpic_syscore =3D { + .ops =3D &mpic_syscore_ops, +}; + static int mpic_init_sys(void) { int rc; =20 - register_syscore_ops(&mpic_syscore_ops); + register_syscore(&mpic_syscore); rc =3D subsys_system_register(&mpic_subsys, NULL); if (rc) { - unregister_syscore_ops(&mpic_syscore_ops); + unregister_syscore(&mpic_syscore); pr_err("mpic: Failed to register subsystem!\n"); return rc; } diff --git a/arch/powerpc/sysdev/mpic_timer.c b/arch/powerpc/sysdev/mpic_ti= mer.c index 7166e2e0baaf..60f5b3934b51 100644 --- a/arch/powerpc/sysdev/mpic_timer.c +++ b/arch/powerpc/sysdev/mpic_timer.c @@ -519,7 +519,7 @@ static void __init timer_group_init(struct device_node = *np) kfree(priv); } =20 -static void mpic_timer_resume(void) +static void mpic_timer_resume(void *data) { struct timer_group_priv *priv; =20 @@ -535,10 +535,14 @@ static const struct of_device_id mpic_timer_ids[] =3D= { {}, }; =20 -static struct syscore_ops mpic_timer_syscore_ops =3D { +static const struct syscore_ops mpic_timer_syscore_ops =3D { .resume =3D mpic_timer_resume, }; =20 +static struct syscore mpic_timer_syscore =3D { + .ops =3D &mpic_timer_syscore_ops, +}; + static int __init mpic_timer_init(void) { struct device_node *np =3D NULL; @@ -546,7 +550,7 @@ static int __init mpic_timer_init(void) for_each_matching_node(np, mpic_timer_ids) timer_group_init(np); =20 - register_syscore_ops(&mpic_timer_syscore_ops); + register_syscore(&mpic_timer_syscore); =20 if (list_empty(&timer_group_list)) return -ENODEV; diff --git a/arch/sh/mm/pmb.c b/arch/sh/mm/pmb.c index 68eb7cc6e564..482eec50f404 100644 --- a/arch/sh/mm/pmb.c +++ b/arch/sh/mm/pmb.c @@ -857,7 +857,7 @@ static int __init pmb_debugfs_init(void) subsys_initcall(pmb_debugfs_init); =20 #ifdef CONFIG_PM -static void pmb_syscore_resume(void) +static void pmb_syscore_resume(void *data) { struct pmb_entry *pmbe; int i; @@ -874,13 +874,17 @@ static void pmb_syscore_resume(void) read_unlock(&pmb_rwlock); } =20 -static struct syscore_ops pmb_syscore_ops =3D { +static const struct syscore_ops pmb_syscore_ops =3D { .resume =3D pmb_syscore_resume, }; =20 +static struct syscore pmb_syscore =3D { + .ops =3D &pmb_syscore_ops, +}; + static int __init pmb_sysdev_init(void) { - register_syscore_ops(&pmb_syscore_ops); + register_syscore(&pmb_syscore); return 0; } subsys_initcall(pmb_sysdev_init); diff --git a/arch/x86/events/amd/ibs.c b/arch/x86/events/amd/ibs.c index 112f43b23ebf..aca89f23d2e0 100644 --- a/arch/x86/events/amd/ibs.c +++ b/arch/x86/events/amd/ibs.c @@ -1718,26 +1718,30 @@ static int x86_pmu_amd_ibs_starting_cpu(unsigned in= t cpu) =20 #ifdef CONFIG_PM =20 -static int perf_ibs_suspend(void) +static int perf_ibs_suspend(void *data) { clear_APIC_ibs(); return 0; } =20 -static void perf_ibs_resume(void) +static void perf_ibs_resume(void *data) { ibs_eilvt_setup(); setup_APIC_ibs(); } =20 -static struct syscore_ops perf_ibs_syscore_ops =3D { +static const struct syscore_ops perf_ibs_syscore_ops =3D { .resume =3D perf_ibs_resume, .suspend =3D perf_ibs_suspend, }; =20 +static struct syscore perf_ibs_syscore =3D { + .ops =3D &perf_ibs_syscore_ops, +}; + static void perf_ibs_pm_init(void) { - register_syscore_ops(&perf_ibs_syscore_ops); + register_syscore(&perf_ibs_syscore); } =20 #else diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c index e28737ec7054..c08a9cc1be89 100644 --- a/arch/x86/hyperv/hv_init.c +++ b/arch/x86/hyperv/hv_init.c @@ -358,7 +358,7 @@ static int __init hv_pci_init(void) return 1; } =20 -static int hv_suspend(void) +static int hv_suspend(void *data) { union hv_x64_msr_hypercall_contents hypercall_msr; int ret; @@ -385,7 +385,7 @@ static int hv_suspend(void) return ret; } =20 -static void hv_resume(void) +static void hv_resume(void *data) { union hv_x64_msr_hypercall_contents hypercall_msr; int ret; @@ -412,11 +412,15 @@ static void hv_resume(void) } =20 /* Note: when the ops are called, only CPU0 is online and IRQs are disable= d. */ -static struct syscore_ops hv_syscore_ops =3D { +static const struct syscore_ops hv_syscore_ops =3D { .suspend =3D hv_suspend, .resume =3D hv_resume, }; =20 +static struct syscore hv_syscore =3D { + .ops =3D &hv_syscore_ops, +}; + static void (* __initdata old_setup_percpu_clockev)(void); =20 static void __init hv_stimer_setup_percpu_clockev(void) @@ -577,7 +581,7 @@ void __init hyperv_init(void) =20 x86_init.pci.arch_init =3D hv_pci_init; =20 - register_syscore_ops(&hv_syscore_ops); + register_syscore(&hv_syscore); =20 if (ms_hyperv.priv_high & HV_ACCESS_PARTITION_ID) hv_get_partition_id(); diff --git a/arch/x86/kernel/amd_gart_64.c b/arch/x86/kernel/amd_gart_64.c index 3485d419c2f5..e6e68a31634c 100644 --- a/arch/x86/kernel/amd_gart_64.c +++ b/arch/x86/kernel/amd_gart_64.c @@ -591,7 +591,7 @@ static void gart_fixup_northbridges(void) } } =20 -static void gart_resume(void) +static void gart_resume(void *data) { pr_info("PCI-DMA: Resuming GART IOMMU\n"); =20 @@ -600,11 +600,15 @@ static void gart_resume(void) enable_gart_translations(); } =20 -static struct syscore_ops gart_syscore_ops =3D { +static const struct syscore_ops gart_syscore_ops =3D { .resume =3D gart_resume, =20 }; =20 +static struct syscore gart_syscore =3D { + .ops =3D &gart_syscore_ops, +}; + /* * Private Northbridge GATT initialization in case we cannot use the * AGP driver for some reason. @@ -650,7 +654,7 @@ static __init int init_amd_gatt(struct agp_kern_info *i= nfo) =20 agp_gatt_table =3D gatt; =20 - register_syscore_ops(&gart_syscore_ops); + register_syscore(&gart_syscore); =20 flush_gart(); =20 diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index 680d305589a3..fd87b1562c7e 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c @@ -2381,7 +2381,7 @@ static struct { unsigned int apic_cmci; } apic_pm_state; =20 -static int lapic_suspend(void) +static int lapic_suspend(void *data) { unsigned long flags; int maxlvt; @@ -2429,7 +2429,7 @@ static int lapic_suspend(void) return 0; } =20 -static void lapic_resume(void) +static void lapic_resume(void *data) { unsigned int l, h; unsigned long flags; @@ -2504,11 +2504,15 @@ static void lapic_resume(void) * are needed on every CPU up until machine_halt/restart/poweroff. */ =20 -static struct syscore_ops lapic_syscore_ops =3D { +static const struct syscore_ops lapic_syscore_ops =3D { .resume =3D lapic_resume, .suspend =3D lapic_suspend, }; =20 +static struct syscore lapic_syscore =3D { + .ops =3D &lapic_syscore_ops, +}; + static void apic_pm_activate(void) { apic_pm_state.active =3D 1; @@ -2518,7 +2522,7 @@ static int __init init_lapic_sysfs(void) { /* XXX: remove suspend/resume procs if !apic_pm_state.active? */ if (boot_cpu_has(X86_FEATURE_APIC)) - register_syscore_ops(&lapic_syscore_ops); + register_syscore(&lapic_syscore); =20 return 0; } diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c index 1e0442e867b1..28f934f05a85 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c @@ -2308,7 +2308,12 @@ static void resume_ioapic_id(int ioapic_idx) } } =20 -static void ioapic_resume(void) +static int ioapic_suspend(void *data) +{ + return save_ioapic_entries(); +} + +static void ioapic_resume(void *data) { int ioapic_idx; =20 @@ -2318,14 +2323,18 @@ static void ioapic_resume(void) restore_ioapic_entries(); } =20 -static struct syscore_ops ioapic_syscore_ops =3D { - .suspend =3D save_ioapic_entries, +static const struct syscore_ops ioapic_syscore_ops =3D { + .suspend =3D ioapic_suspend, .resume =3D ioapic_resume, }; =20 +static struct syscore ioapic_syscore =3D { + .ops =3D &ioapic_syscore_ops, +}; + static int __init ioapic_init_ops(void) { - register_syscore_ops(&ioapic_syscore_ops); + register_syscore(&ioapic_syscore); =20 return 0; } diff --git a/arch/x86/kernel/cpu/aperfmperf.c b/arch/x86/kernel/cpu/aperfmp= erf.c index a315b0627dfb..7ffc78d5ebf2 100644 --- a/arch/x86/kernel/cpu/aperfmperf.c +++ b/arch/x86/kernel/cpu/aperfmperf.c @@ -37,7 +37,7 @@ static DEFINE_PER_CPU_SHARED_ALIGNED(struct aperfmperf, c= pu_samples) =3D { .seq =3D SEQCNT_ZERO(cpu_samples.seq) }; =20 -static void init_counter_refs(void) +static void init_counter_refs(void *data) { u64 aperf, mperf; =20 @@ -289,16 +289,20 @@ static bool __init intel_set_max_freq_ratio(void) } =20 #ifdef CONFIG_PM_SLEEP -static struct syscore_ops freq_invariance_syscore_ops =3D { +static const struct syscore_ops freq_invariance_syscore_ops =3D { .resume =3D init_counter_refs, }; =20 -static void register_freq_invariance_syscore_ops(void) +static struct syscore freq_invariance_syscore =3D { + .ops =3D &freq_invariance_syscore_ops, +}; + +static void register_freq_invariance_syscore(void) { - register_syscore_ops(&freq_invariance_syscore_ops); + register_syscore(&freq_invariance_syscore); } #else -static inline void register_freq_invariance_syscore_ops(void) {} +static inline void register_freq_invariance_syscore(void) {} #endif =20 static void freq_invariance_enable(void) @@ -308,7 +312,7 @@ static void freq_invariance_enable(void) return; } static_branch_enable_cpuslocked(&arch_scale_freq_key); - register_freq_invariance_syscore_ops(); + register_freq_invariance_syscore(); pr_info("Estimated ratio of average max frequency by base frequency (time= s 1024): %llu\n", arch_max_freq_ratio); } =20 @@ -535,7 +539,7 @@ static int __init bp_init_aperfmperf(void) if (!cpu_feature_enabled(X86_FEATURE_APERFMPERF)) return 0; =20 - init_counter_refs(); + init_counter_refs(NULL); bp_init_freq_invariance(); return 0; } @@ -544,5 +548,5 @@ early_initcall(bp_init_aperfmperf); void ap_init_aperfmperf(void) { if (cpu_feature_enabled(X86_FEATURE_APERFMPERF)) - init_counter_refs(); + init_counter_refs(NULL); } diff --git a/arch/x86/kernel/cpu/intel_epb.c b/arch/x86/kernel/cpu/intel_ep= b.c index bc7671f920a7..2c56f8730f59 100644 --- a/arch/x86/kernel/cpu/intel_epb.c +++ b/arch/x86/kernel/cpu/intel_epb.c @@ -75,7 +75,7 @@ static u8 energ_perf_values[] =3D { [EPB_INDEX_POWERSAVE] =3D ENERGY_PERF_BIAS_POWERSAVE, }; =20 -static int intel_epb_save(void) +static int intel_epb_save(void *data) { u64 epb; =20 @@ -89,7 +89,7 @@ static int intel_epb_save(void) return 0; } =20 -static void intel_epb_restore(void) +static void intel_epb_restore(void *data) { u64 val =3D this_cpu_read(saved_epb); u64 epb; @@ -114,11 +114,15 @@ static void intel_epb_restore(void) wrmsrq(MSR_IA32_ENERGY_PERF_BIAS, (epb & ~EPB_MASK) | val); } =20 -static struct syscore_ops intel_epb_syscore_ops =3D { +static const struct syscore_ops intel_epb_syscore_ops =3D { .suspend =3D intel_epb_save, .resume =3D intel_epb_restore, }; =20 +static struct syscore intel_epb_syscore =3D { + .ops =3D &intel_epb_syscore_ops, +}; + static const char * const energy_perf_strings[] =3D { [EPB_INDEX_PERFORMANCE] =3D "performance", [EPB_INDEX_BALANCE_PERFORMANCE] =3D "balance-performance", @@ -185,7 +189,7 @@ static int intel_epb_online(unsigned int cpu) { struct device *cpu_dev =3D get_cpu_device(cpu); =20 - intel_epb_restore(); + intel_epb_restore(NULL); if (!cpuhp_tasks_frozen) sysfs_merge_group(&cpu_dev->kobj, &intel_epb_attr_group); =20 @@ -199,7 +203,7 @@ static int intel_epb_offline(unsigned int cpu) if (!cpuhp_tasks_frozen) sysfs_unmerge_group(&cpu_dev->kobj, &intel_epb_attr_group); =20 - intel_epb_save(); + intel_epb_save(NULL); return 0; } =20 @@ -230,7 +234,7 @@ static __init int intel_epb_init(void) if (ret < 0) goto err_out_online; =20 - register_syscore_ops(&intel_epb_syscore_ops); + register_syscore(&intel_epb_syscore); return 0; =20 err_out_online: diff --git a/arch/x86/kernel/cpu/mce/core.c b/arch/x86/kernel/cpu/mce/core.c index 460e90a1a0b1..23bfbc7dfb8e 100644 --- a/arch/x86/kernel/cpu/mce/core.c +++ b/arch/x86/kernel/cpu/mce/core.c @@ -2410,13 +2410,13 @@ static void vendor_disable_error_reporting(void) mce_disable_error_reporting(); } =20 -static int mce_syscore_suspend(void) +static int mce_syscore_suspend(void *data) { vendor_disable_error_reporting(); return 0; } =20 -static void mce_syscore_shutdown(void) +static void mce_syscore_shutdown(void *data) { vendor_disable_error_reporting(); } @@ -2426,7 +2426,7 @@ static void mce_syscore_shutdown(void) * Only one CPU is active at this time, the others get re-added later using * CPU hotplug: */ -static void mce_syscore_resume(void) +static void mce_syscore_resume(void *data) { __mcheck_cpu_init_generic(); __mcheck_cpu_init_vendor(raw_cpu_ptr(&cpu_info)); @@ -2434,12 +2434,16 @@ static void mce_syscore_resume(void) cr4_set_bits(X86_CR4_MCE); } =20 -static struct syscore_ops mce_syscore_ops =3D { +static const struct syscore_ops mce_syscore_ops =3D { .suspend =3D mce_syscore_suspend, .shutdown =3D mce_syscore_shutdown, .resume =3D mce_syscore_resume, }; =20 +static struct syscore mce_syscore =3D { + .ops =3D &mce_syscore_ops, +}; + /* * mce_device: Sysfs support */ @@ -2840,7 +2844,7 @@ static __init int mcheck_init_device(void) if (err < 0) goto err_out_online; =20 - register_syscore_ops(&mce_syscore_ops); + register_syscore(&mce_syscore); =20 return 0; =20 diff --git a/arch/x86/kernel/cpu/microcode/core.c b/arch/x86/kernel/cpu/mic= rocode/core.c index d7baec8ec0b4..e1fdc7a64c0f 100644 --- a/arch/x86/kernel/cpu/microcode/core.c +++ b/arch/x86/kernel/cpu/microcode/core.c @@ -823,8 +823,17 @@ void microcode_bsp_resume(void) reload_early_microcode(cpu); } =20 -static struct syscore_ops mc_syscore_ops =3D { - .resume =3D microcode_bsp_resume, +static void microcode_bsp_syscore_resume(void *data) +{ + microcode_bsp_resume(); +} + +static const struct syscore_ops mc_syscore_ops =3D { + .resume =3D microcode_bsp_syscore_resume, +}; + +static struct syscore mc_syscore =3D { + .ops =3D &mc_syscore_ops, }; =20 static int mc_cpu_online(unsigned int cpu) @@ -903,7 +912,7 @@ static int __init microcode_init(void) } } =20 - register_syscore_ops(&mc_syscore_ops); + register_syscore(&mc_syscore); cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "x86/microcode:online", mc_cpu_online, mc_cpu_down_prep); =20 diff --git a/arch/x86/kernel/cpu/mtrr/legacy.c b/arch/x86/kernel/cpu/mtrr/l= egacy.c index d25882fcf181..2415ffaaf02c 100644 --- a/arch/x86/kernel/cpu/mtrr/legacy.c +++ b/arch/x86/kernel/cpu/mtrr/legacy.c @@ -41,7 +41,7 @@ struct mtrr_value { =20 static struct mtrr_value *mtrr_value; =20 -static int mtrr_save(void) +static int mtrr_save(void *data) { int i; =20 @@ -56,7 +56,7 @@ static int mtrr_save(void) return 0; } =20 -static void mtrr_restore(void) +static void mtrr_restore(void *data) { int i; =20 @@ -69,11 +69,15 @@ static void mtrr_restore(void) } } =20 -static struct syscore_ops mtrr_syscore_ops =3D { +static const struct syscore_ops mtrr_syscore_ops =3D { .suspend =3D mtrr_save, .resume =3D mtrr_restore, }; =20 +static struct syscore mtrr_syscore =3D { + .ops =3D &mtrr_syscore_ops, +}; + void mtrr_register_syscore(void) { mtrr_value =3D kcalloc(num_var_ranges, sizeof(*mtrr_value), GFP_KERNEL); @@ -86,5 +90,5 @@ void mtrr_register_syscore(void) * TBD: is there any system with such CPU which supports * suspend/resume? If no, we should remove the code. */ - register_syscore_ops(&mtrr_syscore_ops); + register_syscore(&mtrr_syscore); } diff --git a/arch/x86/kernel/cpu/umwait.c b/arch/x86/kernel/cpu/umwait.c index 933fcd7ff250..e4a31c536642 100644 --- a/arch/x86/kernel/cpu/umwait.c +++ b/arch/x86/kernel/cpu/umwait.c @@ -86,15 +86,19 @@ static int umwait_cpu_offline(unsigned int cpu) * trust the firmware nor does it matter if the same value is written * again. */ -static void umwait_syscore_resume(void) +static void umwait_syscore_resume(void *data) { umwait_update_control_msr(NULL); } =20 -static struct syscore_ops umwait_syscore_ops =3D { +static const struct syscore_ops umwait_syscore_ops =3D { .resume =3D umwait_syscore_resume, }; =20 +static struct syscore umwait_syscore =3D { + .ops =3D &umwait_syscore_ops, +}; + /* sysfs interface */ =20 /* @@ -226,7 +230,7 @@ static int __init umwait_init(void) return ret; } =20 - register_syscore_ops(&umwait_syscore_ops); + register_syscore(&umwait_syscore); =20 /* * Add umwait control interface. Ignore failure, so at least the diff --git a/arch/x86/kernel/i8237.c b/arch/x86/kernel/i8237.c index 2cd124ad9380..896d46b44284 100644 --- a/arch/x86/kernel/i8237.c +++ b/arch/x86/kernel/i8237.c @@ -19,7 +19,7 @@ * in asm/dma.h. */ =20 -static void i8237A_resume(void) +static void i8237A_resume(void *data) { unsigned long flags; int i; @@ -41,10 +41,14 @@ static void i8237A_resume(void) release_dma_lock(flags); } =20 -static struct syscore_ops i8237_syscore_ops =3D { +static const struct syscore_ops i8237_syscore_ops =3D { .resume =3D i8237A_resume, }; =20 +static struct syscore i8237_syscore =3D { + .ops =3D &i8237_syscore_ops, +}; + static int __init i8237A_init_ops(void) { /* @@ -70,7 +74,7 @@ static int __init i8237A_init_ops(void) if (x86_pnpbios_disabled() && dmi_get_bios_year() >=3D 2017) return -ENODEV; =20 - register_syscore_ops(&i8237_syscore_ops); + register_syscore(&i8237_syscore); return 0; } device_initcall(i8237A_init_ops); diff --git a/arch/x86/kernel/i8259.c b/arch/x86/kernel/i8259.c index 2bade73f49e3..f67063df6723 100644 --- a/arch/x86/kernel/i8259.c +++ b/arch/x86/kernel/i8259.c @@ -247,19 +247,19 @@ static void save_ELCR(char *trigger) trigger[1] =3D inb(PIC_ELCR2) & 0xDE; } =20 -static void i8259A_resume(void) +static void i8259A_resume(void *data) { init_8259A(i8259A_auto_eoi); restore_ELCR(irq_trigger); } =20 -static int i8259A_suspend(void) +static int i8259A_suspend(void *data) { save_ELCR(irq_trigger); return 0; } =20 -static void i8259A_shutdown(void) +static void i8259A_shutdown(void *data) { /* Put the i8259A into a quiescent state that * the kernel initialization code can get it @@ -269,12 +269,16 @@ static void i8259A_shutdown(void) outb(0xff, PIC_SLAVE_IMR); /* mask all of 8259A-2 */ } =20 -static struct syscore_ops i8259_syscore_ops =3D { +static const struct syscore_ops i8259_syscore_ops =3D { .suspend =3D i8259A_suspend, .resume =3D i8259A_resume, .shutdown =3D i8259A_shutdown, }; =20 +static struct syscore i8259_syscore =3D { + .ops =3D &i8259_syscore_ops, +}; + static void mask_8259A(void) { unsigned long flags; @@ -444,7 +448,7 @@ EXPORT_SYMBOL(legacy_pic); static int __init i8259A_init_ops(void) { if (legacy_pic =3D=3D &default_legacy_pic) - register_syscore_ops(&i8259_syscore_ops); + register_syscore(&i8259_syscore); =20 return 0; } diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index b67d7c59dca0..1500852ba03c 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -720,7 +720,7 @@ static int kvm_cpu_down_prepare(unsigned int cpu) =20 #endif =20 -static int kvm_suspend(void) +static int kvm_suspend(void *data) { u64 val =3D 0; =20 @@ -734,7 +734,7 @@ static int kvm_suspend(void) return 0; } =20 -static void kvm_resume(void) +static void kvm_resume(void *data) { kvm_cpu_online(raw_smp_processor_id()); =20 @@ -744,11 +744,15 @@ static void kvm_resume(void) #endif } =20 -static struct syscore_ops kvm_syscore_ops =3D { +static const struct syscore_ops kvm_syscore_ops =3D { .suspend =3D kvm_suspend, .resume =3D kvm_resume, }; =20 +static struct syscore kvm_syscore =3D { + .ops =3D &kvm_syscore_ops, +}; + static void kvm_pv_guest_cpu_reboot(void *unused) { kvm_guest_cpu_offline(true); @@ -858,7 +862,7 @@ static void __init kvm_guest_init(void) machine_ops.crash_shutdown =3D kvm_crash_shutdown; #endif =20 - register_syscore_ops(&kvm_syscore_ops); + register_syscore(&kvm_syscore); =20 /* * Hard lockup detection is enabled by default. Disable it, as guests diff --git a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c index e4560b33b8ad..bed7dc85612e 100644 --- a/drivers/acpi/pci_link.c +++ b/drivers/acpi/pci_link.c @@ -761,7 +761,7 @@ static int acpi_pci_link_resume(struct acpi_pci_link *l= ink) return 0; } =20 -static void irqrouter_resume(void) +static void irqrouter_resume(void *data) { struct acpi_pci_link *link; =20 @@ -888,10 +888,14 @@ static int __init acpi_irq_balance_set(char *str) =20 __setup("acpi_irq_balance", acpi_irq_balance_set); =20 -static struct syscore_ops irqrouter_syscore_ops =3D { +static const struct syscore_ops irqrouter_syscore_ops =3D { .resume =3D irqrouter_resume, }; =20 +static struct syscore irqrouter_syscore =3D { + .ops =3D &irqrouter_syscore_ops, +}; + void __init acpi_pci_link_init(void) { if (acpi_noirq) @@ -904,6 +908,6 @@ void __init acpi_pci_link_init(void) else acpi_irq_balance =3D 0; } - register_syscore_ops(&irqrouter_syscore_ops); + register_syscore(&irqrouter_syscore); acpi_scan_add_handler(&pci_link_handler); } diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c index c8ee8e42b0f6..aaf57d0aaa19 100644 --- a/drivers/acpi/sleep.c +++ b/drivers/acpi/sleep.c @@ -884,13 +884,13 @@ bool acpi_s2idle_wakeup(void) #ifdef CONFIG_PM_SLEEP static u32 saved_bm_rld; =20 -static int acpi_save_bm_rld(void) +static int acpi_save_bm_rld(void *data) { acpi_read_bit_register(ACPI_BITREG_BUS_MASTER_RLD, &saved_bm_rld); return 0; } =20 -static void acpi_restore_bm_rld(void) +static void acpi_restore_bm_rld(void *data) { u32 resumed_bm_rld =3D 0; =20 @@ -901,14 +901,18 @@ static void acpi_restore_bm_rld(void) acpi_write_bit_register(ACPI_BITREG_BUS_MASTER_RLD, saved_bm_rld); } =20 -static struct syscore_ops acpi_sleep_syscore_ops =3D { +static const struct syscore_ops acpi_sleep_syscore_ops =3D { .suspend =3D acpi_save_bm_rld, .resume =3D acpi_restore_bm_rld, }; =20 +static struct syscore acpi_sleep_syscore =3D { + .ops =3D &acpi_sleep_syscore_ops, +}; + static void acpi_sleep_syscore_init(void) { - register_syscore_ops(&acpi_sleep_syscore_ops); + register_syscore(&acpi_sleep_syscore); } #else static inline void acpi_sleep_syscore_init(void) {} diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_lo= ader/main.c index 6942c62fa59d..8191dbab92c4 100644 --- a/drivers/base/firmware_loader/main.c +++ b/drivers/base/firmware_loader/main.c @@ -1585,16 +1585,20 @@ static int fw_pm_notify(struct notifier_block *noti= fy_block, } =20 /* stop caching firmware once syscore_suspend is reached */ -static int fw_suspend(void) +static int fw_suspend(void *data) { fw_cache.state =3D FW_LOADER_NO_CACHE; return 0; } =20 -static struct syscore_ops fw_syscore_ops =3D { +static const struct syscore_ops fw_syscore_ops =3D { .suspend =3D fw_suspend, }; =20 +static struct syscore fw_syscore =3D { + .ops =3D &fw_syscore_ops, +}; + static int __init register_fw_pm_ops(void) { int ret; @@ -1610,14 +1614,14 @@ static int __init register_fw_pm_ops(void) if (ret) return ret; =20 - register_syscore_ops(&fw_syscore_ops); + register_syscore(&fw_syscore); =20 return ret; } =20 static inline void unregister_fw_pm_ops(void) { - unregister_syscore_ops(&fw_syscore_ops); + unregister_syscore(&fw_syscore); unregister_pm_notifier(&fw_cache.pm_notify); } #else diff --git a/drivers/base/syscore.c b/drivers/base/syscore.c index 13db1f78d2ce..483adb796654 100644 --- a/drivers/base/syscore.c +++ b/drivers/base/syscore.c @@ -11,32 +11,32 @@ #include #include =20 -static LIST_HEAD(syscore_ops_list); -static DEFINE_MUTEX(syscore_ops_lock); +static LIST_HEAD(syscore_list); +static DEFINE_MUTEX(syscore_lock); =20 /** - * register_syscore_ops - Register a set of system core operations. - * @ops: System core operations to register. + * register_syscore - Register a set of system core operations. + * @syscore: System core operations to register. */ -void register_syscore_ops(struct syscore_ops *ops) +void register_syscore(struct syscore *syscore) { - mutex_lock(&syscore_ops_lock); - list_add_tail(&ops->node, &syscore_ops_list); - mutex_unlock(&syscore_ops_lock); + mutex_lock(&syscore_lock); + list_add_tail(&syscore->node, &syscore_list); + mutex_unlock(&syscore_lock); } -EXPORT_SYMBOL_GPL(register_syscore_ops); +EXPORT_SYMBOL_GPL(register_syscore); =20 /** - * unregister_syscore_ops - Unregister a set of system core operations. - * @ops: System core operations to unregister. + * unregister_syscore - Unregister a set of system core operations. + * @syscore: System core operations to unregister. */ -void unregister_syscore_ops(struct syscore_ops *ops) +void unregister_syscore(struct syscore *syscore) { - mutex_lock(&syscore_ops_lock); - list_del(&ops->node); - mutex_unlock(&syscore_ops_lock); + mutex_lock(&syscore_lock); + list_del(&syscore->node); + mutex_unlock(&syscore_lock); } -EXPORT_SYMBOL_GPL(unregister_syscore_ops); +EXPORT_SYMBOL_GPL(unregister_syscore); =20 #ifdef CONFIG_PM_SLEEP /** @@ -46,7 +46,7 @@ EXPORT_SYMBOL_GPL(unregister_syscore_ops); */ int syscore_suspend(void) { - struct syscore_ops *ops; + struct syscore *syscore; int ret =3D 0; =20 trace_suspend_resume(TPS("syscore_suspend"), 0, true); @@ -59,25 +59,27 @@ int syscore_suspend(void) WARN_ONCE(!irqs_disabled(), "Interrupts enabled before system core suspend.\n"); =20 - list_for_each_entry_reverse(ops, &syscore_ops_list, node) - if (ops->suspend) { - pm_pr_dbg("Calling %pS\n", ops->suspend); - ret =3D ops->suspend(); + list_for_each_entry_reverse(syscore, &syscore_list, node) + if (syscore->ops->suspend) { + pm_pr_dbg("Calling %pS\n", syscore->ops->suspend); + ret =3D syscore->ops->suspend(syscore->data); if (ret) goto err_out; WARN_ONCE(!irqs_disabled(), - "Interrupts enabled after %pS\n", ops->suspend); + "Interrupts enabled after %pS\n", + syscore->ops->suspend); } =20 trace_suspend_resume(TPS("syscore_suspend"), 0, false); return 0; =20 err_out: - pr_err("PM: System core suspend callback %pS failed.\n", ops->suspend); + pr_err("PM: System core suspend callback %pS failed.\n", + syscore->ops->suspend); =20 - list_for_each_entry_continue(ops, &syscore_ops_list, node) - if (ops->resume) - ops->resume(); + list_for_each_entry_continue(syscore, &syscore_list, node) + if (syscore->ops->resume) + syscore->ops->resume(syscore->data); =20 return ret; } @@ -90,18 +92,19 @@ EXPORT_SYMBOL_GPL(syscore_suspend); */ void syscore_resume(void) { - struct syscore_ops *ops; + struct syscore *syscore; =20 trace_suspend_resume(TPS("syscore_resume"), 0, true); WARN_ONCE(!irqs_disabled(), "Interrupts enabled before system core resume.\n"); =20 - list_for_each_entry(ops, &syscore_ops_list, node) - if (ops->resume) { - pm_pr_dbg("Calling %pS\n", ops->resume); - ops->resume(); + list_for_each_entry(syscore, &syscore_list, node) + if (syscore->ops->resume) { + pm_pr_dbg("Calling %pS\n", syscore->ops->resume); + syscore->ops->resume(syscore->data); WARN_ONCE(!irqs_disabled(), - "Interrupts enabled after %pS\n", ops->resume); + "Interrupts enabled after %pS\n", + syscore->ops->resume); } trace_suspend_resume(TPS("syscore_resume"), 0, false); } @@ -113,16 +116,17 @@ EXPORT_SYMBOL_GPL(syscore_resume); */ void syscore_shutdown(void) { - struct syscore_ops *ops; + struct syscore *syscore; =20 - mutex_lock(&syscore_ops_lock); + mutex_lock(&syscore_lock); =20 - list_for_each_entry_reverse(ops, &syscore_ops_list, node) - if (ops->shutdown) { + list_for_each_entry_reverse(syscore, &syscore_list, node) + if (syscore->ops->shutdown) { if (initcall_debug) - pr_info("PM: Calling %pS\n", ops->shutdown); - ops->shutdown(); + pr_info("PM: Calling %pS\n", + syscore->ops->shutdown); + syscore->ops->shutdown(syscore->data); } =20 - mutex_unlock(&syscore_ops_lock); + mutex_unlock(&syscore_lock); } diff --git a/drivers/bus/mvebu-mbus.c b/drivers/bus/mvebu-mbus.c index 00cb792bda18..dd94145c9b22 100644 --- a/drivers/bus/mvebu-mbus.c +++ b/drivers/bus/mvebu-mbus.c @@ -1006,7 +1006,7 @@ static __init int mvebu_mbus_debugfs_init(void) } fs_initcall(mvebu_mbus_debugfs_init); =20 -static int mvebu_mbus_suspend(void) +static int mvebu_mbus_suspend(void *data) { struct mvebu_mbus_state *s =3D &mbus_state; int win; @@ -1040,7 +1040,7 @@ static int mvebu_mbus_suspend(void) return 0; } =20 -static void mvebu_mbus_resume(void) +static void mvebu_mbus_resume(void *data) { struct mvebu_mbus_state *s =3D &mbus_state; int win; @@ -1069,9 +1069,13 @@ static void mvebu_mbus_resume(void) } } =20 -static struct syscore_ops mvebu_mbus_syscore_ops =3D { - .suspend =3D mvebu_mbus_suspend, - .resume =3D mvebu_mbus_resume, +static const struct syscore_ops mvebu_mbus_syscore_ops =3D { + .suspend =3D mvebu_mbus_suspend, + .resume =3D mvebu_mbus_resume, +}; + +static struct syscore mvebu_mbus_syscore =3D { + .ops =3D &mvebu_mbus_syscore_ops, }; =20 static int __init mvebu_mbus_common_init(struct mvebu_mbus_state *mbus, @@ -1118,7 +1122,7 @@ static int __init mvebu_mbus_common_init(struct mvebu= _mbus_state *mbus, writel(UNIT_SYNC_BARRIER_ALL, mbus->mbuswins_base + UNIT_SYNC_BARRIER_OFF); =20 - register_syscore_ops(&mvebu_mbus_syscore_ops); + register_syscore(&mvebu_mbus_syscore); =20 return 0; } diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c index acf780a81589..2310f6f73162 100644 --- a/drivers/clk/at91/pmc.c +++ b/drivers/clk/at91/pmc.c @@ -115,7 +115,7 @@ struct pmc_data *pmc_data_allocate(unsigned int ncore, = unsigned int nsystem, /* Address in SECURAM that say if we suspend to backup mode. */ static void __iomem *at91_pmc_backup_suspend; =20 -static int at91_pmc_suspend(void) +static int at91_pmc_suspend(void *data) { unsigned int backup; =20 @@ -129,7 +129,7 @@ static int at91_pmc_suspend(void) return clk_save_context(); } =20 -static void at91_pmc_resume(void) +static void at91_pmc_resume(void *data) { unsigned int backup; =20 @@ -143,11 +143,15 @@ static void at91_pmc_resume(void) clk_restore_context(); } =20 -static struct syscore_ops pmc_syscore_ops =3D { +static const struct syscore_ops pmc_syscore_ops =3D { .suspend =3D at91_pmc_suspend, .resume =3D at91_pmc_resume, }; =20 +static struct syscore pmc_syscore =3D { + .ops =3D &pmc_syscore_ops, +}; + static const struct of_device_id pmc_dt_ids[] =3D { { .compatible =3D "atmel,sama5d2-pmc" }, { .compatible =3D "microchip,sama7g5-pmc", }, @@ -185,7 +189,7 @@ static int __init pmc_register_ops(void) return -ENOMEM; } =20 - register_syscore_ops(&pmc_syscore_ops); + register_syscore(&pmc_syscore); =20 return 0; } diff --git a/drivers/clk/imx/clk-vf610.c b/drivers/clk/imx/clk-vf610.c index 9e11f1c7c397..41eb38552a9c 100644 --- a/drivers/clk/imx/clk-vf610.c +++ b/drivers/clk/imx/clk-vf610.c @@ -139,7 +139,7 @@ static struct clk * __init vf610_get_fixed_clock( return clk; }; =20 -static int vf610_clk_suspend(void) +static int vf610_clk_suspend(void *data) { int i; =20 @@ -156,7 +156,7 @@ static int vf610_clk_suspend(void) return 0; } =20 -static void vf610_clk_resume(void) +static void vf610_clk_resume(void *data) { int i; =20 @@ -171,11 +171,15 @@ static void vf610_clk_resume(void) writel_relaxed(ccgr[i], CCM_CCGRx(i)); } =20 -static struct syscore_ops vf610_clk_syscore_ops =3D { +static const struct syscore_ops vf610_clk_syscore_ops =3D { .suspend =3D vf610_clk_suspend, .resume =3D vf610_clk_resume, }; =20 +static struct syscore vf610_clk_syscore =3D { + .ops =3D &vf610_clk_syscore_ops, +}; + static void __init vf610_clocks_init(struct device_node *ccm_node) { struct device_node *np; @@ -462,7 +466,7 @@ static void __init vf610_clocks_init(struct device_node= *ccm_node) for (i =3D 0; i < ARRAY_SIZE(clks_init_on); i++) clk_prepare_enable(clk[clks_init_on[i]]); =20 - register_syscore_ops(&vf610_clk_syscore_ops); + register_syscore(&vf610_clk_syscore); =20 /* Add the clocks to provider list */ clk_data.clks =3D clk; diff --git a/drivers/clk/ingenic/jz4725b-cgu.c b/drivers/clk/ingenic/jz4725= b-cgu.c index 590e9c85cb25..94cee44c854f 100644 --- a/drivers/clk/ingenic/jz4725b-cgu.c +++ b/drivers/clk/ingenic/jz4725b-cgu.c @@ -268,6 +268,6 @@ static void __init jz4725b_cgu_init(struct device_node = *np) if (retval) pr_err("%s: failed to register CGU Clocks\n", __func__); =20 - ingenic_cgu_register_syscore_ops(cgu); + ingenic_cgu_register_syscore(cgu); } CLK_OF_DECLARE_DRIVER(jz4725b_cgu, "ingenic,jz4725b-cgu", jz4725b_cgu_init= ); diff --git a/drivers/clk/ingenic/jz4740-cgu.c b/drivers/clk/ingenic/jz4740-= cgu.c index 3e0a30574ebb..2def3aedc8dd 100644 --- a/drivers/clk/ingenic/jz4740-cgu.c +++ b/drivers/clk/ingenic/jz4740-cgu.c @@ -266,6 +266,6 @@ static void __init jz4740_cgu_init(struct device_node *= np) if (retval) pr_err("%s: failed to register CGU Clocks\n", __func__); =20 - ingenic_cgu_register_syscore_ops(cgu); + ingenic_cgu_register_syscore(cgu); } CLK_OF_DECLARE_DRIVER(jz4740_cgu, "ingenic,jz4740-cgu", jz4740_cgu_init); diff --git a/drivers/clk/ingenic/jz4755-cgu.c b/drivers/clk/ingenic/jz4755-= cgu.c index f2c2d848dab7..17cf5dcaece9 100644 --- a/drivers/clk/ingenic/jz4755-cgu.c +++ b/drivers/clk/ingenic/jz4755-cgu.c @@ -337,7 +337,7 @@ static void __init jz4755_cgu_init(struct device_node *= np) if (retval) pr_err("%s: failed to register CGU Clocks\n", __func__); =20 - ingenic_cgu_register_syscore_ops(cgu); + ingenic_cgu_register_syscore(cgu); } /* * CGU has some children devices, this is useful for probing children devi= ces diff --git a/drivers/clk/ingenic/jz4760-cgu.c b/drivers/clk/ingenic/jz4760-= cgu.c index e407f00bd594..372fe4b07992 100644 --- a/drivers/clk/ingenic/jz4760-cgu.c +++ b/drivers/clk/ingenic/jz4760-cgu.c @@ -436,7 +436,7 @@ static void __init jz4760_cgu_init(struct device_node *= np) if (retval) pr_err("%s: failed to register CGU Clocks\n", __func__); =20 - ingenic_cgu_register_syscore_ops(cgu); + ingenic_cgu_register_syscore(cgu); } =20 /* We only probe via devicetree, no need for a platform driver */ diff --git a/drivers/clk/ingenic/jz4770-cgu.c b/drivers/clk/ingenic/jz4770-= cgu.c index 6ae1740367f9..58f1d3bad677 100644 --- a/drivers/clk/ingenic/jz4770-cgu.c +++ b/drivers/clk/ingenic/jz4770-cgu.c @@ -456,7 +456,7 @@ static void __init jz4770_cgu_init(struct device_node *= np) if (retval) pr_err("%s: failed to register CGU Clocks\n", __func__); =20 - ingenic_cgu_register_syscore_ops(cgu); + ingenic_cgu_register_syscore(cgu); } =20 /* We only probe via devicetree, no need for a platform driver */ diff --git a/drivers/clk/ingenic/jz4780-cgu.c b/drivers/clk/ingenic/jz4780-= cgu.c index 07e2f3c5c454..1e88aef7ac0f 100644 --- a/drivers/clk/ingenic/jz4780-cgu.c +++ b/drivers/clk/ingenic/jz4780-cgu.c @@ -803,6 +803,6 @@ static void __init jz4780_cgu_init(struct device_node *= np) return; } =20 - ingenic_cgu_register_syscore_ops(cgu); + ingenic_cgu_register_syscore(cgu); } CLK_OF_DECLARE_DRIVER(jz4780_cgu, "ingenic,jz4780-cgu", jz4780_cgu_init); diff --git a/drivers/clk/ingenic/pm.c b/drivers/clk/ingenic/pm.c index 341752b640d2..206d5cf2872f 100644 --- a/drivers/clk/ingenic/pm.c +++ b/drivers/clk/ingenic/pm.c @@ -15,7 +15,7 @@ =20 static void __iomem * __maybe_unused ingenic_cgu_base; =20 -static int __maybe_unused ingenic_cgu_pm_suspend(void) +static int __maybe_unused ingenic_cgu_pm_suspend(void *data) { u32 val =3D readl(ingenic_cgu_base + CGU_REG_LCR); =20 @@ -24,22 +24,26 @@ static int __maybe_unused ingenic_cgu_pm_suspend(void) return 0; } =20 -static void __maybe_unused ingenic_cgu_pm_resume(void) +static void __maybe_unused ingenic_cgu_pm_resume(void *data) { u32 val =3D readl(ingenic_cgu_base + CGU_REG_LCR); =20 writel(val & ~LCR_LOW_POWER_MODE, ingenic_cgu_base + CGU_REG_LCR); } =20 -static struct syscore_ops __maybe_unused ingenic_cgu_pm_ops =3D { +static const struct syscore_ops __maybe_unused ingenic_cgu_pm_ops =3D { .suspend =3D ingenic_cgu_pm_suspend, .resume =3D ingenic_cgu_pm_resume, }; =20 -void ingenic_cgu_register_syscore_ops(struct ingenic_cgu *cgu) +static struct syscore __maybe_unused ingenic_cgu_pm =3D { + .ops =3D &ingenic_cgu_pm_ops, +}; + +void ingenic_cgu_register_syscore(struct ingenic_cgu *cgu) { if (IS_ENABLED(CONFIG_PM_SLEEP)) { ingenic_cgu_base =3D cgu->base; - register_syscore_ops(&ingenic_cgu_pm_ops); + register_syscore(&ingenic_cgu_pm); } } diff --git a/drivers/clk/ingenic/pm.h b/drivers/clk/ingenic/pm.h index fa7540407b6b..0dcb57dc64cb 100644 --- a/drivers/clk/ingenic/pm.h +++ b/drivers/clk/ingenic/pm.h @@ -7,6 +7,6 @@ =20 struct ingenic_cgu; =20 -void ingenic_cgu_register_syscore_ops(struct ingenic_cgu *cgu); +void ingenic_cgu_register_syscore(struct ingenic_cgu *cgu); =20 #endif /* DRIVERS_CLK_INGENIC_PM_H */ diff --git a/drivers/clk/ingenic/tcu.c b/drivers/clk/ingenic/tcu.c index 7d04ef40b7cf..bc6a51da2072 100644 --- a/drivers/clk/ingenic/tcu.c +++ b/drivers/clk/ingenic/tcu.c @@ -455,7 +455,7 @@ static int __init ingenic_tcu_probe(struct device_node = *np) return ret; } =20 -static int __maybe_unused tcu_pm_suspend(void) +static int __maybe_unused tcu_pm_suspend(void *data) { struct ingenic_tcu *tcu =3D ingenic_tcu; =20 @@ -465,7 +465,7 @@ static int __maybe_unused tcu_pm_suspend(void) return 0; } =20 -static void __maybe_unused tcu_pm_resume(void) +static void __maybe_unused tcu_pm_resume(void *data) { struct ingenic_tcu *tcu =3D ingenic_tcu; =20 @@ -473,11 +473,15 @@ static void __maybe_unused tcu_pm_resume(void) clk_enable(tcu->clk); } =20 -static struct syscore_ops __maybe_unused tcu_pm_ops =3D { +static const struct syscore_ops __maybe_unused tcu_pm_ops =3D { .suspend =3D tcu_pm_suspend, .resume =3D tcu_pm_resume, }; =20 +static struct syscore __maybe_unused tcu_pm =3D { + .ops =3D &tcu_pm_ops, +}; + static void __init ingenic_tcu_init(struct device_node *np) { int ret =3D ingenic_tcu_probe(np); @@ -486,7 +490,7 @@ static void __init ingenic_tcu_init(struct device_node = *np) pr_crit("Failed to initialize TCU clocks: %d\n", ret); =20 if (IS_ENABLED(CONFIG_PM_SLEEP)) - register_syscore_ops(&tcu_pm_ops); + register_syscore(&tcu_pm); } =20 CLK_OF_DECLARE_DRIVER(jz4740_cgu, "ingenic,jz4740-tcu", ingenic_tcu_init); diff --git a/drivers/clk/ingenic/x1000-cgu.c b/drivers/clk/ingenic/x1000-cg= u.c index d80886caf393..d89bdfb7c219 100644 --- a/drivers/clk/ingenic/x1000-cgu.c +++ b/drivers/clk/ingenic/x1000-cgu.c @@ -556,7 +556,7 @@ static void __init x1000_cgu_init(struct device_node *n= p) return; } =20 - ingenic_cgu_register_syscore_ops(cgu); + ingenic_cgu_register_syscore(cgu); } /* * CGU has some children devices, this is useful for probing children devi= ces diff --git a/drivers/clk/ingenic/x1830-cgu.c b/drivers/clk/ingenic/x1830-cg= u.c index 0fd46e50a513..acf856e5009e 100644 --- a/drivers/clk/ingenic/x1830-cgu.c +++ b/drivers/clk/ingenic/x1830-cgu.c @@ -463,7 +463,7 @@ static void __init x1830_cgu_init(struct device_node *n= p) return; } =20 - ingenic_cgu_register_syscore_ops(cgu); + ingenic_cgu_register_syscore(cgu); } /* * CGU has some children devices, this is useful for probing children devi= ces diff --git a/drivers/clk/mvebu/common.c b/drivers/clk/mvebu/common.c index 785dbede4835..5adbbd91a6db 100644 --- a/drivers/clk/mvebu/common.c +++ b/drivers/clk/mvebu/common.c @@ -215,22 +215,26 @@ static struct clk *clk_gating_get_src( return ERR_PTR(-ENODEV); } =20 -static int mvebu_clk_gating_suspend(void) +static int mvebu_clk_gating_suspend(void *data) { ctrl->saved_reg =3D readl(ctrl->base); return 0; } =20 -static void mvebu_clk_gating_resume(void) +static void mvebu_clk_gating_resume(void *data) { writel(ctrl->saved_reg, ctrl->base); } =20 -static struct syscore_ops clk_gate_syscore_ops =3D { +static const struct syscore_ops clk_gate_syscore_ops =3D { .suspend =3D mvebu_clk_gating_suspend, .resume =3D mvebu_clk_gating_resume, }; =20 +static struct syscore clk_gate_syscore =3D { + .ops =3D &clk_gate_syscore_ops, +}; + void __init mvebu_clk_gating_setup(struct device_node *np, const struct clk_gating_soc_desc *desc) { @@ -284,7 +288,7 @@ void __init mvebu_clk_gating_setup(struct device_node *= np, =20 of_clk_add_provider(np, clk_gating_get_src, ctrl); =20 - register_syscore_ops(&clk_gate_syscore_ops); + register_syscore(&clk_gate_syscore); =20 return; gates_out: diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-r= k3288.c index 0a1e017df7c6..9cf3e1e43b78 100644 --- a/drivers/clk/rockchip/clk-rk3288.c +++ b/drivers/clk/rockchip/clk-rk3288.c @@ -871,7 +871,7 @@ static const int rk3288_saved_cru_reg_ids[] =3D { =20 static u32 rk3288_saved_cru_regs[ARRAY_SIZE(rk3288_saved_cru_reg_ids)]; =20 -static int rk3288_clk_suspend(void) +static int rk3288_clk_suspend(void *data) { int i, reg_id; =20 @@ -906,7 +906,7 @@ static int rk3288_clk_suspend(void) return 0; } =20 -static void rk3288_clk_resume(void) +static void rk3288_clk_resume(void *data) { int i, reg_id; =20 @@ -923,11 +923,15 @@ static void rk3288_clk_shutdown(void) writel_relaxed(0xf3030000, rk3288_cru_base + RK3288_MODE_CON); } =20 -static struct syscore_ops rk3288_clk_syscore_ops =3D { +static const struct syscore_ops rk3288_clk_syscore_ops =3D { .suspend =3D rk3288_clk_suspend, .resume =3D rk3288_clk_resume, }; =20 +static struct syscore rk3288_clk_syscore =3D { + .ops =3D &rk3288_clk_syscore_ops, +}; + static void __init rk3288_common_init(struct device_node *np, enum rk3288_variant soc) { @@ -976,7 +980,7 @@ static void __init rk3288_common_init(struct device_nod= e *np, =20 rockchip_register_restart_notifier(ctx, RK3288_GLB_SRST_FST, rk3288_clk_shutdown); - register_syscore_ops(&rk3288_clk_syscore_ops); + register_syscore(&rk3288_clk_syscore); =20 rockchip_clk_of_add_provider(np, ctx); } diff --git a/drivers/clk/samsung/clk-s5pv210-audss.c b/drivers/clk/samsung/= clk-s5pv210-audss.c index b1fd8fac3a4c..c9fcb23de183 100644 --- a/drivers/clk/samsung/clk-s5pv210-audss.c +++ b/drivers/clk/samsung/clk-s5pv210-audss.c @@ -36,7 +36,7 @@ static unsigned long reg_save[][2] =3D { {ASS_CLK_GATE, 0}, }; =20 -static int s5pv210_audss_clk_suspend(void) +static int s5pv210_audss_clk_suspend(void *data) { int i; =20 @@ -46,7 +46,7 @@ static int s5pv210_audss_clk_suspend(void) return 0; } =20 -static void s5pv210_audss_clk_resume(void) +static void s5pv210_audss_clk_resume(void *data) { int i; =20 @@ -54,10 +54,14 @@ static void s5pv210_audss_clk_resume(void) writel(reg_save[i][1], reg_base + reg_save[i][0]); } =20 -static struct syscore_ops s5pv210_audss_clk_syscore_ops =3D { +static const struct syscore_ops s5pv210_audss_clk_syscore_ops =3D { .suspend =3D s5pv210_audss_clk_suspend, .resume =3D s5pv210_audss_clk_resume, }; + +static struct syscore s5pv210_audss_clk_syscore =3D { + .ops =3D &s5pv210_audss_clk_syscore_ops, +}; #endif /* CONFIG_PM_SLEEP */ =20 /* register s5pv210_audss clocks */ @@ -175,7 +179,7 @@ static int s5pv210_audss_clk_probe(struct platform_devi= ce *pdev) } =20 #ifdef CONFIG_PM_SLEEP - register_syscore_ops(&s5pv210_audss_clk_syscore_ops); + register_syscore(&s5pv210_audss_clk_syscore); #endif =20 return 0; diff --git a/drivers/clk/samsung/clk.c b/drivers/clk/samsung/clk.c index dbc9925ca8f4..c149ca6c2217 100644 --- a/drivers/clk/samsung/clk.c +++ b/drivers/clk/samsung/clk.c @@ -271,7 +271,7 @@ void __init samsung_clk_of_register_fixed_ext(struct sa= msung_clk_provider *ctx, } =20 #ifdef CONFIG_PM_SLEEP -static int samsung_clk_suspend(void) +static int samsung_clk_suspend(void *data) { struct samsung_clock_reg_cache *reg_cache; =20 @@ -284,7 +284,7 @@ static int samsung_clk_suspend(void) return 0; } =20 -static void samsung_clk_resume(void) +static void samsung_clk_resume(void *data) { struct samsung_clock_reg_cache *reg_cache; =20 @@ -293,11 +293,15 @@ static void samsung_clk_resume(void) reg_cache->rd_num); } =20 -static struct syscore_ops samsung_clk_syscore_ops =3D { +static const struct syscore_ops samsung_clk_syscore_ops =3D { .suspend =3D samsung_clk_suspend, .resume =3D samsung_clk_resume, }; =20 +static struct syscore samsung_clk_syscore =3D { + .ops =3D &samsung_clk_syscore_ops, +}; + void samsung_clk_extended_sleep_init(void __iomem *reg_base, const unsigned long *rdump, unsigned long nr_rdump, @@ -316,7 +320,7 @@ void samsung_clk_extended_sleep_init(void __iomem *reg_= base, panic("could not allocate register dump storage.\n"); =20 if (list_empty(&clock_reg_cache_list)) - register_syscore_ops(&samsung_clk_syscore_ops); + register_syscore(&samsung_clk_syscore); =20 reg_cache->reg_base =3D reg_base; reg_cache->rd_num =3D nr_rdump; diff --git a/drivers/clk/tegra/clk-tegra210.c b/drivers/clk/tegra/clk-tegra= 210.c index 412902f573b5..504d0ea997a5 100644 --- a/drivers/clk/tegra/clk-tegra210.c +++ b/drivers/clk/tegra/clk-tegra210.c @@ -3444,7 +3444,7 @@ static void tegra210_disable_cpu_clock(u32 cpu) static u32 spare_reg_ctx, misc_clk_enb_ctx, clk_msk_arm_ctx; static u32 cpu_softrst_ctx[3]; =20 -static int tegra210_clk_suspend(void) +static int tegra210_clk_suspend(void *data) { unsigned int i; =20 @@ -3465,7 +3465,7 @@ static int tegra210_clk_suspend(void) return 0; } =20 -static void tegra210_clk_resume(void) +static void tegra210_clk_resume(void *data) { unsigned int i; =20 @@ -3523,13 +3523,17 @@ static void tegra210_cpu_clock_resume(void) } #endif =20 -static struct syscore_ops tegra_clk_syscore_ops =3D { +static const struct syscore_ops tegra_clk_syscore_ops =3D { #ifdef CONFIG_PM_SLEEP .suspend =3D tegra210_clk_suspend, .resume =3D tegra210_clk_resume, #endif }; =20 +static struct syscore tegra_clk_syscore =3D { + .ops =3D &tegra_clk_syscore_ops, +}; + static struct tegra_cpu_car_ops tegra210_cpu_car_ops =3D { .wait_for_reset =3D tegra210_wait_cpu_in_reset, .disable_clock =3D tegra210_disable_cpu_clock, @@ -3813,6 +3817,6 @@ static void __init tegra210_clock_init(struct device_= node *np) =20 tegra_cpu_car_ops =3D &tegra210_cpu_car_ops; =20 - register_syscore_ops(&tegra_clk_syscore_ops); + register_syscore(&tegra_clk_syscore); } CLK_OF_DECLARE(tegra210, "nvidia,tegra210-car", tegra210_clock_init); diff --git a/drivers/clocksource/timer-armada-370-xp.c b/drivers/clocksourc= e/timer-armada-370-xp.c index 54284c1c0651..f2b4cc40db93 100644 --- a/drivers/clocksource/timer-armada-370-xp.c +++ b/drivers/clocksource/timer-armada-370-xp.c @@ -207,14 +207,14 @@ static int armada_370_xp_timer_dying_cpu(unsigned int= cpu) =20 static u32 timer0_ctrl_reg, timer0_local_ctrl_reg; =20 -static int armada_370_xp_timer_suspend(void) +static int armada_370_xp_timer_suspend(void *data) { timer0_ctrl_reg =3D readl(timer_base + TIMER_CTRL_OFF); timer0_local_ctrl_reg =3D readl(local_base + TIMER_CTRL_OFF); return 0; } =20 -static void armada_370_xp_timer_resume(void) +static void armada_370_xp_timer_resume(void *data) { writel(0xffffffff, timer_base + TIMER0_VAL_OFF); writel(0xffffffff, timer_base + TIMER0_RELOAD_OFF); @@ -222,11 +222,15 @@ static void armada_370_xp_timer_resume(void) writel(timer0_local_ctrl_reg, local_base + TIMER_CTRL_OFF); } =20 -static struct syscore_ops armada_370_xp_timer_syscore_ops =3D { +static const struct syscore_ops armada_370_xp_timer_syscore_ops =3D { .suspend =3D armada_370_xp_timer_suspend, .resume =3D armada_370_xp_timer_resume, }; =20 +static struct syscore armada_370_xp_timer_syscore =3D { + .ops =3D &armada_370_xp_timer_syscore_ops, +}; + static unsigned long armada_370_delay_timer_read(void) { return ~readl(timer_base + TIMER0_VAL_OFF); @@ -324,7 +328,7 @@ static int __init armada_370_xp_timer_common_init(struc= t device_node *np) return res; } =20 - register_syscore_ops(&armada_370_xp_timer_syscore_ops); + register_syscore(&armada_370_xp_timer_syscore); =09 return 0; } diff --git a/drivers/cpuidle/cpuidle-psci.c b/drivers/cpuidle/cpuidle-psci.c index e75d85a8f90d..dcf20ea5ef5e 100644 --- a/drivers/cpuidle/cpuidle-psci.c +++ b/drivers/cpuidle/cpuidle-psci.c @@ -177,26 +177,30 @@ static void psci_idle_syscore_switch(bool suspend) } } =20 -static int psci_idle_syscore_suspend(void) +static int psci_idle_syscore_suspend(void *data) { psci_idle_syscore_switch(true); return 0; } =20 -static void psci_idle_syscore_resume(void) +static void psci_idle_syscore_resume(void *data) { psci_idle_syscore_switch(false); } =20 -static struct syscore_ops psci_idle_syscore_ops =3D { +static const struct syscore_ops psci_idle_syscore_ops =3D { .suspend =3D psci_idle_syscore_suspend, .resume =3D psci_idle_syscore_resume, }; =20 +static struct syscore psci_idle_syscore =3D { + .ops =3D &psci_idle_syscore_ops, +}; + static void psci_idle_init_syscore(void) { if (psci_cpuidle_use_syscore) - register_syscore_ops(&psci_idle_syscore_ops); + register_syscore(&psci_idle_syscore); } =20 static void psci_idle_init_cpuhp(void) diff --git a/drivers/gpio/gpio-mxc.c b/drivers/gpio/gpio-mxc.c index 52060b3ec745..d7666fe9dbf8 100644 --- a/drivers/gpio/gpio-mxc.c +++ b/drivers/gpio/gpio-mxc.c @@ -667,7 +667,7 @@ static const struct dev_pm_ops mxc_gpio_dev_pm_ops =3D { RUNTIME_PM_OPS(mxc_gpio_runtime_suspend, mxc_gpio_runtime_resume, NULL) }; =20 -static int mxc_gpio_syscore_suspend(void) +static int mxc_gpio_syscore_suspend(void *data) { struct mxc_gpio_port *port; int ret; @@ -684,7 +684,7 @@ static int mxc_gpio_syscore_suspend(void) return 0; } =20 -static void mxc_gpio_syscore_resume(void) +static void mxc_gpio_syscore_resume(void *data) { struct mxc_gpio_port *port; int ret; @@ -701,11 +701,15 @@ static void mxc_gpio_syscore_resume(void) } } =20 -static struct syscore_ops mxc_gpio_syscore_ops =3D { +static const struct syscore_ops mxc_gpio_syscore_ops =3D { .suspend =3D mxc_gpio_syscore_suspend, .resume =3D mxc_gpio_syscore_resume, }; =20 +static struct syscore mxc_gpio_syscore =3D { + .ops =3D &mxc_gpio_syscore_ops, +}; + static struct platform_driver mxc_gpio_driver =3D { .driver =3D { .name =3D "gpio-mxc", @@ -718,7 +722,7 @@ static struct platform_driver mxc_gpio_driver =3D { =20 static int __init gpio_mxc_init(void) { - register_syscore_ops(&mxc_gpio_syscore_ops); + register_syscore(&mxc_gpio_syscore); =20 return platform_driver_register(&mxc_gpio_driver); } diff --git a/drivers/gpio/gpio-pxa.c b/drivers/gpio/gpio-pxa.c index fa22f3faa163..664cf1eef494 100644 --- a/drivers/gpio/gpio-pxa.c +++ b/drivers/gpio/gpio-pxa.c @@ -747,7 +747,7 @@ static int __init pxa_gpio_dt_init(void) device_initcall(pxa_gpio_dt_init); =20 #ifdef CONFIG_PM -static int pxa_gpio_suspend(void) +static int pxa_gpio_suspend(void *data) { struct pxa_gpio_chip *pchip =3D pxa_gpio_chip; struct pxa_gpio_bank *c; @@ -768,7 +768,7 @@ static int pxa_gpio_suspend(void) return 0; } =20 -static void pxa_gpio_resume(void) +static void pxa_gpio_resume(void *data) { struct pxa_gpio_chip *pchip =3D pxa_gpio_chip; struct pxa_gpio_bank *c; @@ -792,14 +792,18 @@ static void pxa_gpio_resume(void) #define pxa_gpio_resume NULL #endif =20 -static struct syscore_ops pxa_gpio_syscore_ops =3D { +static const struct syscore_ops pxa_gpio_syscore_ops =3D { .suspend =3D pxa_gpio_suspend, .resume =3D pxa_gpio_resume, }; =20 +static struct syscore pxa_gpio_syscore =3D { + .ops =3D &pxa_gpio_syscore_ops, +}; + static int __init pxa_gpio_sysinit(void) { - register_syscore_ops(&pxa_gpio_syscore_ops); + register_syscore(&pxa_gpio_syscore); return 0; } postcore_initcall(pxa_gpio_sysinit); diff --git a/drivers/gpio/gpio-sa1100.c b/drivers/gpio/gpio-sa1100.c index 7f6a62f5d1ee..1938ffa2f4f3 100644 --- a/drivers/gpio/gpio-sa1100.c +++ b/drivers/gpio/gpio-sa1100.c @@ -256,7 +256,7 @@ static void sa1100_gpio_handler(struct irq_desc *desc) } while (mask); } =20 -static int sa1100_gpio_suspend(void) +static int sa1100_gpio_suspend(void *data) { struct sa1100_gpio_chip *sgc =3D &sa1100_gpio_chip; =20 @@ -275,19 +275,23 @@ static int sa1100_gpio_suspend(void) return 0; } =20 -static void sa1100_gpio_resume(void) +static void sa1100_gpio_resume(void *data) { sa1100_update_edge_regs(&sa1100_gpio_chip); } =20 -static struct syscore_ops sa1100_gpio_syscore_ops =3D { +static const struct syscore_ops sa1100_gpio_syscore_ops =3D { .suspend =3D sa1100_gpio_suspend, .resume =3D sa1100_gpio_resume, }; =20 +static struct syscore sa1100_gpio_syscore =3D { + .ops =3D &sa1100_gpio_syscore_ops, +}; + static int __init sa1100_gpio_init_devicefs(void) { - register_syscore_ops(&sa1100_gpio_syscore_ops); + register_syscore(&sa1100_gpio_syscore); return 0; } =20 diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c index 0dc4692b411a..bc36b85c7af0 100644 --- a/drivers/hv/vmbus_drv.c +++ b/drivers/hv/vmbus_drv.c @@ -2857,7 +2857,7 @@ static void hv_crash_handler(struct pt_regs *regs) hv_hyp_synic_disable_regs(cpu); }; =20 -static int hv_synic_suspend(void) +static int hv_synic_suspend(void *data) { /* * When we reach here, all the non-boot CPUs have been offlined. @@ -2884,7 +2884,7 @@ static int hv_synic_suspend(void) return 0; } =20 -static void hv_synic_resume(void) +static void hv_synic_resume(void *data) { hv_hyp_synic_enable_regs(0); =20 @@ -2896,11 +2896,15 @@ static void hv_synic_resume(void) } =20 /* The callbacks run only on CPU0, with irqs_disabled. */ -static struct syscore_ops hv_synic_syscore_ops =3D { +static const struct syscore_ops hv_synic_syscore_ops =3D { .suspend =3D hv_synic_suspend, .resume =3D hv_synic_resume, }; =20 +static struct syscore hv_synic_syscore =3D { + .ops =3D &hv_synic_syscore_ops, +}; + static int __init hv_acpi_init(void) { int ret; @@ -2943,7 +2947,7 @@ static int __init hv_acpi_init(void) hv_setup_kexec_handler(hv_kexec_handler); hv_setup_crash_handler(hv_crash_handler); =20 - register_syscore_ops(&hv_synic_syscore_ops); + register_syscore(&hv_synic_syscore); =20 return 0; =20 @@ -2957,7 +2961,7 @@ static void __exit vmbus_exit(void) { int cpu; =20 - unregister_syscore_ops(&hv_synic_syscore_ops); + unregister_syscore(&hv_synic_syscore); =20 hv_remove_kexec_handler(); hv_remove_crash_handler(); diff --git a/drivers/iommu/amd/init.c b/drivers/iommu/amd/init.c index f2991c11867c..4b65de731860 100644 --- a/drivers/iommu/amd/init.c +++ b/drivers/iommu/amd/init.c @@ -3024,7 +3024,7 @@ static void disable_iommus(void) * disable suspend until real resume implemented */ =20 -static void amd_iommu_resume(void) +static void amd_iommu_resume(void *data) { struct amd_iommu *iommu; =20 @@ -3038,7 +3038,7 @@ static void amd_iommu_resume(void) amd_iommu_enable_interrupts(); } =20 -static int amd_iommu_suspend(void) +static int amd_iommu_suspend(void *data) { /* disable IOMMUs to go out of the way for BIOS */ disable_iommus(); @@ -3046,11 +3046,15 @@ static int amd_iommu_suspend(void) return 0; } =20 -static struct syscore_ops amd_iommu_syscore_ops =3D { +static const struct syscore_ops amd_iommu_syscore_ops =3D { .suspend =3D amd_iommu_suspend, .resume =3D amd_iommu_resume, }; =20 +static struct syscore amd_iommu_syscore =3D { + .ops =3D &amd_iommu_syscore_ops, +}; + static void __init free_iommu_resources(void) { free_iommu_all(); @@ -3395,7 +3399,7 @@ static int __init state_next(void) init_state =3D IOMMU_ENABLED; break; case IOMMU_ENABLED: - register_syscore_ops(&amd_iommu_syscore_ops); + register_syscore(&amd_iommu_syscore); iommu_snp_enable(); ret =3D amd_iommu_init_pci(); init_state =3D ret ? IOMMU_INIT_ERROR : IOMMU_PCI_INIT; diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index e236c7ec221f..fdaf7f64dd33 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -2303,7 +2303,7 @@ static void iommu_flush_all(void) } } =20 -static int iommu_suspend(void) +static int iommu_suspend(void *data) { struct dmar_drhd_unit *drhd; struct intel_iommu *iommu =3D NULL; @@ -2330,7 +2330,7 @@ static int iommu_suspend(void) return 0; } =20 -static void iommu_resume(void) +static void iommu_resume(void *data) { struct dmar_drhd_unit *drhd; struct intel_iommu *iommu =3D NULL; @@ -2361,14 +2361,18 @@ static void iommu_resume(void) } } =20 -static struct syscore_ops iommu_syscore_ops =3D { +static const struct syscore_ops iommu_syscore_ops =3D { .resume =3D iommu_resume, .suspend =3D iommu_suspend, }; =20 +static struct syscore iommu_syscore =3D { + .ops =3D &iommu_syscore_ops, +}; + static void __init init_iommu_pm_ops(void) { - register_syscore_ops(&iommu_syscore_ops); + register_syscore(&iommu_syscore); } =20 #else diff --git a/drivers/irqchip/exynos-combiner.c b/drivers/irqchip/exynos-com= biner.c index e7dfcf0cda43..495848442b35 100644 --- a/drivers/irqchip/exynos-combiner.c +++ b/drivers/irqchip/exynos-combiner.c @@ -200,12 +200,13 @@ static void __init combiner_init(void __iomem *combin= er_base, =20 /** * combiner_suspend - save interrupt combiner state before suspend + * @data: syscore context * * Save the interrupt enable set register for all combiner groups since * the state is lost when the system enters into a sleep state. * */ -static int combiner_suspend(void) +static int combiner_suspend(void *data) { int i; =20 @@ -218,12 +219,13 @@ static int combiner_suspend(void) =20 /** * combiner_resume - restore interrupt combiner state after resume + * @data: syscore context * * Restore the interrupt enable set register for all combiner groups since * the state is lost when the system enters into a sleep state on suspend. * */ -static void combiner_resume(void) +static void combiner_resume(void *data) { int i; =20 @@ -240,11 +242,15 @@ static void combiner_resume(void) #define combiner_resume NULL #endif =20 -static struct syscore_ops combiner_syscore_ops =3D { +static const struct syscore_ops combiner_syscore_ops =3D { .suspend =3D combiner_suspend, .resume =3D combiner_resume, }; =20 +static struct syscore combiner_syscore =3D { + .ops =3D &combiner_syscore_ops, +}; + static int __init combiner_of_init(struct device_node *np, struct device_node *parent) { @@ -264,7 +270,7 @@ static int __init combiner_of_init(struct device_node *= np, =20 combiner_init(combiner_base, np); =20 - register_syscore_ops(&combiner_syscore_ops); + register_syscore(&combiner_syscore); =20 return 0; } diff --git a/drivers/irqchip/irq-armada-370-xp.c b/drivers/irqchip/irq-arma= da-370-xp.c index a44c49e985b7..a4d03a2d1569 100644 --- a/drivers/irqchip/irq-armada-370-xp.c +++ b/drivers/irqchip/irq-armada-370-xp.c @@ -726,7 +726,7 @@ static void __exception_irq_entry mpic_handle_irq(struc= t pt_regs *regs) } while (1); } =20 -static int mpic_suspend(void) +static int mpic_suspend(void *data) { struct mpic *mpic =3D mpic_data; =20 @@ -735,7 +735,7 @@ static int mpic_suspend(void) return 0; } =20 -static void mpic_resume(void) +static void mpic_resume(void *data) { struct mpic *mpic =3D mpic_data; bool src0, src1; @@ -788,11 +788,15 @@ static void mpic_resume(void) mpic_ipi_resume(mpic); } =20 -static struct syscore_ops mpic_syscore_ops =3D { +static const struct syscore_ops mpic_syscore_ops =3D { .suspend =3D mpic_suspend, .resume =3D mpic_resume, }; =20 +static struct syscore mpic_syscore =3D { + .ops =3D &mpic_syscore_ops, +}; + static int __init mpic_map_region(struct device_node *np, int index, void __iomem **base, phys_addr_t *phys_base) { @@ -905,7 +909,7 @@ static int __init mpic_of_init(struct device_node *node= , struct device_node *par mpic_handle_cascade_irq, mpic); } =20 - register_syscore_ops(&mpic_syscore_ops); + register_syscore(&mpic_syscore); =20 return 0; } diff --git a/drivers/irqchip/irq-bcm7038-l1.c b/drivers/irqchip/irq-bcm7038= -l1.c index 821b288587ca..674138668f1c 100644 --- a/drivers/irqchip/irq-bcm7038-l1.c +++ b/drivers/irqchip/irq-bcm7038-l1.c @@ -291,7 +291,7 @@ static int bcm7038_l1_init_one(struct device_node *dn, = unsigned int idx, static LIST_HEAD(bcm7038_l1_intcs_list); static DEFINE_RAW_SPINLOCK(bcm7038_l1_intcs_lock); =20 -static int bcm7038_l1_suspend(void) +static int bcm7038_l1_suspend(void *data) { struct bcm7038_l1_chip *intc; int boot_cpu, word; @@ -317,7 +317,7 @@ static int bcm7038_l1_suspend(void) return 0; } =20 -static void bcm7038_l1_resume(void) +static void bcm7038_l1_resume(void *data) { struct bcm7038_l1_chip *intc; int boot_cpu, word; @@ -338,11 +338,15 @@ static void bcm7038_l1_resume(void) } } =20 -static struct syscore_ops bcm7038_l1_syscore_ops =3D { +static const struct syscore_ops bcm7038_l1_syscore_ops =3D { .suspend =3D bcm7038_l1_suspend, .resume =3D bcm7038_l1_resume, }; =20 +static struct syscore bcm7038_l1_syscore =3D { + .ops =3D &bcm7038_l1_syscore_ops, +}; + static int bcm7038_l1_set_wake(struct irq_data *d, unsigned int on) { struct bcm7038_l1_chip *intc =3D irq_data_get_irq_chip_data(d); @@ -430,7 +434,7 @@ static int bcm7038_l1_probe(struct platform_device *pde= v, struct device_node *pa raw_spin_unlock(&bcm7038_l1_intcs_lock); =20 if (list_is_singular(&bcm7038_l1_intcs_list)) - register_syscore_ops(&bcm7038_l1_syscore_ops); + register_syscore(&bcm7038_l1_syscore); #endif =20 pr_info("registered BCM7038 L1 intc (%pOF, IRQs: %d)\n", diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-= its.c index 467cb78435a9..ada585bfa451 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c @@ -4992,7 +4992,7 @@ static void its_enable_quirks(struct its_node *its) its_quirks, its); } =20 -static int its_save_disable(void) +static int its_save_disable(void *data) { struct its_node *its; int err =3D 0; @@ -5028,7 +5028,7 @@ static int its_save_disable(void) return err; } =20 -static void its_restore_enable(void) +static void its_restore_enable(void *data) { struct its_node *its; int ret; @@ -5088,11 +5088,15 @@ static void its_restore_enable(void) raw_spin_unlock(&its_lock); } =20 -static struct syscore_ops its_syscore_ops =3D { +static const struct syscore_ops its_syscore_ops =3D { .suspend =3D its_save_disable, .resume =3D its_restore_enable, }; =20 +static struct syscore its_syscore =3D { + .ops =3D &its_syscore_ops, +}; + static void __init __iomem *its_map_one(struct resource *res, int *err) { void __iomem *its_base; @@ -5864,7 +5868,7 @@ int __init its_init(struct fwnode_handle *handle, str= uct rdists *rdists, } } =20 - register_syscore_ops(&its_syscore_ops); + register_syscore(&its_syscore); =20 return 0; } diff --git a/drivers/irqchip/irq-i8259.c b/drivers/irqchip/irq-i8259.c index 91b2f587119c..cca77f9948a3 100644 --- a/drivers/irqchip/irq-i8259.c +++ b/drivers/irqchip/irq-i8259.c @@ -202,13 +202,13 @@ static void mask_and_ack_8259A(struct irq_data *d) } } =20 -static void i8259A_resume(void) +static void i8259A_resume(void *data) { if (i8259A_auto_eoi >=3D 0) init_8259A(i8259A_auto_eoi); } =20 -static void i8259A_shutdown(void) +static void i8259A_shutdown(void *data) { /* Put the i8259A into a quiescent state that * the kernel initialization code can get it @@ -220,11 +220,15 @@ static void i8259A_shutdown(void) } } =20 -static struct syscore_ops i8259_syscore_ops =3D { +static const struct syscore_ops i8259_syscore_ops =3D { .resume =3D i8259A_resume, .shutdown =3D i8259A_shutdown, }; =20 +static struct syscore i8259_syscore =3D { + .ops =3D &i8259_syscore_ops, +}; + static void init_8259A(int auto_eoi) { unsigned long flags; @@ -320,7 +324,7 @@ struct irq_domain * __init __init_i8259_irqs(struct dev= ice_node *node) =20 if (request_irq(irq, no_action, IRQF_NO_THREAD, "cascade", NULL)) pr_err("Failed to register cascade interrupt\n"); - register_syscore_ops(&i8259_syscore_ops); + register_syscore(&i8259_syscore); return domain; } =20 diff --git a/drivers/irqchip/irq-imx-gpcv2.c b/drivers/irqchip/irq-imx-gpcv= 2.c index b91f5c14b405..04f7ba0657be 100644 --- a/drivers/irqchip/irq-imx-gpcv2.c +++ b/drivers/irqchip/irq-imx-gpcv2.c @@ -33,7 +33,7 @@ static void __iomem *gpcv2_idx_to_reg(struct gpcv2_irqchi= p_data *cd, int i) return cd->gpc_base + cd->cpu2wakeup + i * 4; } =20 -static int gpcv2_wakeup_source_save(void) +static int gpcv2_wakeup_source_save(void *data) { struct gpcv2_irqchip_data *cd; void __iomem *reg; @@ -52,7 +52,7 @@ static int gpcv2_wakeup_source_save(void) return 0; } =20 -static void gpcv2_wakeup_source_restore(void) +static void gpcv2_wakeup_source_restore(void *data) { struct gpcv2_irqchip_data *cd; int i; @@ -65,9 +65,13 @@ static void gpcv2_wakeup_source_restore(void) writel_relaxed(cd->saved_irq_mask[i], gpcv2_idx_to_reg(cd, i)); } =20 -static struct syscore_ops imx_gpcv2_syscore_ops =3D { - .suspend =3D gpcv2_wakeup_source_save, - .resume =3D gpcv2_wakeup_source_restore, +static const struct syscore_ops gpcv2_syscore_ops =3D { + .suspend =3D gpcv2_wakeup_source_save, + .resume =3D gpcv2_wakeup_source_restore, +}; + +static struct syscore gpcv2_syscore =3D { + .ops =3D &gpcv2_syscore_ops, }; =20 static int imx_gpcv2_irq_set_wake(struct irq_data *d, unsigned int on) @@ -276,7 +280,7 @@ static int __init imx_gpcv2_irqchip_init(struct device_= node *node, writel_relaxed(~0x1, cd->gpc_base + cd->cpu2wakeup); =20 imx_gpcv2_instance =3D cd; - register_syscore_ops(&imx_gpcv2_syscore_ops); + register_syscore(&gpcv2_syscore); =20 /* * Clear the OF_POPULATED flag set in of_irq_init so that diff --git a/drivers/irqchip/irq-loongson-eiointc.c b/drivers/irqchip/irq-l= oongson-eiointc.c index 39e5a72ccd3c..ad2105685b48 100644 --- a/drivers/irqchip/irq-loongson-eiointc.c +++ b/drivers/irqchip/irq-loongson-eiointc.c @@ -407,21 +407,25 @@ static struct irq_domain *acpi_get_vec_parent(int nod= e, struct acpi_vector_group return NULL; } =20 -static int eiointc_suspend(void) +static int eiointc_suspend(void *data) { return 0; } =20 -static void eiointc_resume(void) +static void eiointc_resume(void *data) { eiointc_router_init(0); } =20 -static struct syscore_ops eiointc_syscore_ops =3D { +static const struct syscore_ops eiointc_syscore_ops =3D { .suspend =3D eiointc_suspend, .resume =3D eiointc_resume, }; =20 +static struct syscore eiointc_syscore =3D { + .ops =3D &eiointc_syscore_ops, +}; + static int __init pch_pic_parse_madt(union acpi_subtable_headers *header, const unsigned long end) { @@ -540,7 +544,7 @@ static int __init eiointc_init(struct eiointc_priv *pri= v, int parent_irq, eiointc_router_init(0); =20 if (nr_pics =3D=3D 1) { - register_syscore_ops(&eiointc_syscore_ops); + register_syscore(&eiointc_syscore); cpuhp_setup_state_nocalls(CPUHP_AP_IRQ_EIOINTC_STARTING, "irqchip/loongarch/eiointc:starting", eiointc_router_init, NULL); diff --git a/drivers/irqchip/irq-loongson-htpic.c b/drivers/irqchip/irq-loo= ngson-htpic.c index f4abdf156de7..1c691c4be989 100644 --- a/drivers/irqchip/irq-loongson-htpic.c +++ b/drivers/irqchip/irq-loongson-htpic.c @@ -71,15 +71,19 @@ static void htpic_reg_init(void) writel(0xffff, htpic->base + HTINT_EN_OFF); } =20 -static void htpic_resume(void) +static void htpic_resume(void *data) { htpic_reg_init(); } =20 -struct syscore_ops htpic_syscore_ops =3D { +static const struct syscore_ops htpic_syscore_ops =3D { .resume =3D htpic_resume, }; =20 +static struct syscore htpic_syscore =3D { + .ops =3D &htpic_syscore_ops, +}; + static int __init htpic_of_init(struct device_node *node, struct device_no= de *parent) { unsigned int parent_irq[4]; @@ -130,7 +134,7 @@ static int __init htpic_of_init(struct device_node *nod= e, struct device_node *pa htpic_irq_dispatch, htpic); } =20 - register_syscore_ops(&htpic_syscore_ops); + register_syscore(&htpic_syscore); =20 return 0; =20 diff --git a/drivers/irqchip/irq-loongson-htvec.c b/drivers/irqchip/irq-loo= ngson-htvec.c index d8558eb35044..d2be8e954e92 100644 --- a/drivers/irqchip/irq-loongson-htvec.c +++ b/drivers/irqchip/irq-loongson-htvec.c @@ -159,7 +159,7 @@ static void htvec_reset(struct htvec *priv) } } =20 -static int htvec_suspend(void) +static int htvec_suspend(void *data) { int i; =20 @@ -169,7 +169,7 @@ static int htvec_suspend(void) return 0; } =20 -static void htvec_resume(void) +static void htvec_resume(void *data) { int i; =20 @@ -177,11 +177,15 @@ static void htvec_resume(void) writel(htvec_priv->saved_vec_en[i], htvec_priv->base + HTVEC_EN_OFF + 4 = * i); } =20 -static struct syscore_ops htvec_syscore_ops =3D { +static const struct syscore_ops htvec_syscore_ops =3D { .suspend =3D htvec_suspend, .resume =3D htvec_resume, }; =20 +static struct syscore htvec_syscore =3D { + .ops =3D &htvec_syscore_ops, +}; + static int htvec_init(phys_addr_t addr, unsigned long size, int num_parents, int parent_irq[], struct fwnode_handle *domain_handle) { @@ -214,7 +218,7 @@ static int htvec_init(phys_addr_t addr, unsigned long s= ize, =20 htvec_priv =3D priv; =20 - register_syscore_ops(&htvec_syscore_ops); + register_syscore(&htvec_syscore); =20 return 0; =20 diff --git a/drivers/irqchip/irq-loongson-pch-lpc.c b/drivers/irqchip/irq-l= oongson-pch-lpc.c index 912bf50a5c7c..3a125f3e4287 100644 --- a/drivers/irqchip/irq-loongson-pch-lpc.c +++ b/drivers/irqchip/irq-loongson-pch-lpc.c @@ -151,7 +151,7 @@ static int pch_lpc_disabled(struct pch_lpc *priv) (readl(priv->base + LPC_INT_STS) =3D=3D 0xffffffff); } =20 -static int pch_lpc_suspend(void) +static int pch_lpc_suspend(void *data) { pch_lpc_priv->saved_reg_ctl =3D readl(pch_lpc_priv->base + LPC_INT_CTL); pch_lpc_priv->saved_reg_ena =3D readl(pch_lpc_priv->base + LPC_INT_ENA); @@ -159,18 +159,22 @@ static int pch_lpc_suspend(void) return 0; } =20 -static void pch_lpc_resume(void) +static void pch_lpc_resume(void *data) { writel(pch_lpc_priv->saved_reg_ctl, pch_lpc_priv->base + LPC_INT_CTL); writel(pch_lpc_priv->saved_reg_ena, pch_lpc_priv->base + LPC_INT_ENA); writel(pch_lpc_priv->saved_reg_pol, pch_lpc_priv->base + LPC_INT_POL); } =20 -static struct syscore_ops pch_lpc_syscore_ops =3D { +static const struct syscore_ops pch_lpc_syscore_ops =3D { .suspend =3D pch_lpc_suspend, .resume =3D pch_lpc_resume, }; =20 +static struct syscore pch_lpc_syscore =3D { + .ops =3D &pch_lpc_syscore_ops, +}; + int __init pch_lpc_acpi_init(struct irq_domain *parent, struct acpi_madt_lpc_pic *acpi_pchlpc) { @@ -222,7 +226,7 @@ int __init pch_lpc_acpi_init(struct irq_domain *parent, =20 pch_lpc_priv =3D priv; pch_lpc_handle =3D irq_handle; - register_syscore_ops(&pch_lpc_syscore_ops); + register_syscore(&pch_lpc_syscore); =20 return 0; =20 diff --git a/drivers/irqchip/irq-loongson-pch-pic.c b/drivers/irqchip/irq-l= oongson-pch-pic.c index 62e6bf3a0611..c6b369a974a7 100644 --- a/drivers/irqchip/irq-loongson-pch-pic.c +++ b/drivers/irqchip/irq-loongson-pch-pic.c @@ -278,7 +278,7 @@ static void pch_pic_reset(struct pch_pic *priv) } } =20 -static int pch_pic_suspend(void) +static int pch_pic_suspend(void *data) { int i, j; =20 @@ -296,7 +296,7 @@ static int pch_pic_suspend(void) return 0; } =20 -static void pch_pic_resume(void) +static void pch_pic_resume(void *data) { int i, j; =20 @@ -313,11 +313,15 @@ static void pch_pic_resume(void) } } =20 -static struct syscore_ops pch_pic_syscore_ops =3D { +static const struct syscore_ops pch_pic_syscore_ops =3D { .suspend =3D pch_pic_suspend, .resume =3D pch_pic_resume, }; =20 +static struct syscore pch_pic_syscore =3D { + .ops =3D &pch_pic_syscore_ops, +}; + static int pch_pic_init(phys_addr_t addr, unsigned long size, int vec_base, struct irq_domain *parent_domain, struct fwnode_handle *domain_handle, u32 gsi_base) @@ -356,7 +360,7 @@ static int pch_pic_init(phys_addr_t addr, unsigned long= size, int vec_base, pch_pic_priv[nr_pics++] =3D priv; =20 if (nr_pics =3D=3D 1) - register_syscore_ops(&pch_pic_syscore_ops); + register_syscore(&pch_pic_syscore); =20 return 0; =20 diff --git a/drivers/irqchip/irq-mchp-eic.c b/drivers/irqchip/irq-mchp-eic.c index b513a899c085..2474fa467a05 100644 --- a/drivers/irqchip/irq-mchp-eic.c +++ b/drivers/irqchip/irq-mchp-eic.c @@ -109,7 +109,7 @@ static int mchp_eic_irq_set_wake(struct irq_data *d, un= signed int on) return 0; } =20 -static int mchp_eic_irq_suspend(void) +static int mchp_eic_irq_suspend(void *data) { unsigned int hwirq; =20 @@ -123,7 +123,7 @@ static int mchp_eic_irq_suspend(void) return 0; } =20 -static void mchp_eic_irq_resume(void) +static void mchp_eic_irq_resume(void *data) { unsigned int hwirq; =20 @@ -135,11 +135,15 @@ static void mchp_eic_irq_resume(void) MCHP_EIC_SCFG(hwirq)); } =20 -static struct syscore_ops mchp_eic_syscore_ops =3D { +static const struct syscore_ops mchp_eic_syscore_ops =3D { .suspend =3D mchp_eic_irq_suspend, .resume =3D mchp_eic_irq_resume, }; =20 +static struct syscore mchp_eic_syscore =3D { + .ops =3D &mchp_eic_syscore_ops, +}; + static struct irq_chip mchp_eic_chip =3D { .name =3D "eic", .flags =3D IRQCHIP_MASK_ON_SUSPEND | IRQCHIP_SET_TYPE_MASKED, @@ -258,7 +262,7 @@ static int mchp_eic_probe(struct platform_device *pdev,= struct device_node *pare goto clk_unprepare; } =20 - register_syscore_ops(&mchp_eic_syscore_ops); + register_syscore(&mchp_eic_syscore); =20 pr_info("%pOF: EIC registered, nr_irqs %u\n", node, MCHP_EIC_NIRQ); =20 diff --git a/drivers/irqchip/irq-mst-intc.c b/drivers/irqchip/irq-mst-intc.c index 9643cc3a77d7..7f760f555a76 100644 --- a/drivers/irqchip/irq-mst-intc.c +++ b/drivers/irqchip/irq-mst-intc.c @@ -143,7 +143,7 @@ static void mst_intc_polarity_restore(struct mst_intc_c= hip_data *cd) writew_relaxed(cd->saved_polarity_conf[i], addr + i * 4); } =20 -static void mst_irq_resume(void) +static void mst_irq_resume(void *data) { struct mst_intc_chip_data *cd; =20 @@ -151,7 +151,7 @@ static void mst_irq_resume(void) mst_intc_polarity_restore(cd); } =20 -static int mst_irq_suspend(void) +static int mst_irq_suspend(void *data) { struct mst_intc_chip_data *cd; =20 @@ -160,14 +160,18 @@ static int mst_irq_suspend(void) return 0; } =20 -static struct syscore_ops mst_irq_syscore_ops =3D { +static const struct syscore_ops mst_irq_syscore_ops =3D { .suspend =3D mst_irq_suspend, .resume =3D mst_irq_resume, }; =20 +static struct syscore mst_irq_syscore =3D { + .ops =3D &mst_irq_syscore_ops, +}; + static int __init mst_irq_pm_init(void) { - register_syscore_ops(&mst_irq_syscore_ops); + register_syscore(&mst_irq_syscore); return 0; } late_initcall(mst_irq_pm_init); diff --git a/drivers/irqchip/irq-mtk-cirq.c b/drivers/irqchip/irq-mtk-cirq.c index de481ba340f8..9571f622774e 100644 --- a/drivers/irqchip/irq-mtk-cirq.c +++ b/drivers/irqchip/irq-mtk-cirq.c @@ -199,7 +199,7 @@ static const struct irq_domain_ops cirq_domain_ops =3D { }; =20 #ifdef CONFIG_PM_SLEEP -static int mtk_cirq_suspend(void) +static int mtk_cirq_suspend(void *data) { void __iomem *reg; u32 value, mask; @@ -257,7 +257,7 @@ static int mtk_cirq_suspend(void) return 0; } =20 -static void mtk_cirq_resume(void) +static void mtk_cirq_resume(void *data) { void __iomem *reg =3D mtk_cirq_reg(cirq_data, CIRQ_CONTROL); u32 value; @@ -272,14 +272,18 @@ static void mtk_cirq_resume(void) writel_relaxed(value, reg); } =20 -static struct syscore_ops mtk_cirq_syscore_ops =3D { +static const struct syscore_ops mtk_cirq_syscore_ops =3D { .suspend =3D mtk_cirq_suspend, .resume =3D mtk_cirq_resume, }; =20 +static struct syscore mtk_cirq_syscore =3D { + .ops =3D &mtk_cirq_syscore_ops, +}; + static void mtk_cirq_syscore_init(void) { - register_syscore_ops(&mtk_cirq_syscore_ops); + register_syscore(&mtk_cirq_syscore); } #else static inline void mtk_cirq_syscore_init(void) {} diff --git a/drivers/irqchip/irq-renesas-rzg2l.c b/drivers/irqchip/irq-rene= sas-rzg2l.c index 1bf19deb02c4..e73d426cea6d 100644 --- a/drivers/irqchip/irq-renesas-rzg2l.c +++ b/drivers/irqchip/irq-renesas-rzg2l.c @@ -398,7 +398,7 @@ static int rzg2l_irqc_set_type(struct irq_data *d, unsi= gned int type) return irq_chip_set_type_parent(d, IRQ_TYPE_LEVEL_HIGH); } =20 -static int rzg2l_irqc_irq_suspend(void) +static int rzg2l_irqc_irq_suspend(void *data) { struct rzg2l_irqc_reg_cache *cache =3D &rzg2l_irqc_data->cache; void __iomem *base =3D rzg2l_irqc_data->base; @@ -410,7 +410,7 @@ static int rzg2l_irqc_irq_suspend(void) return 0; } =20 -static void rzg2l_irqc_irq_resume(void) +static void rzg2l_irqc_irq_resume(void *data) { struct rzg2l_irqc_reg_cache *cache =3D &rzg2l_irqc_data->cache; void __iomem *base =3D rzg2l_irqc_data->base; @@ -425,11 +425,15 @@ static void rzg2l_irqc_irq_resume(void) writel_relaxed(cache->iitsr, base + IITSR); } =20 -static struct syscore_ops rzg2l_irqc_syscore_ops =3D { +static const struct syscore_ops rzg2l_irqc_syscore_ops =3D { .suspend =3D rzg2l_irqc_irq_suspend, .resume =3D rzg2l_irqc_irq_resume, }; =20 +static struct syscore rzg2l_irqc_syscore =3D { + .ops =3D &rzg2l_irqc_syscore_ops, +}; + static const struct irq_chip rzg2l_irqc_chip =3D { .name =3D "rzg2l-irqc", .irq_eoi =3D rzg2l_irqc_eoi, @@ -577,7 +581,7 @@ static int rzg2l_irqc_common_probe(struct platform_devi= ce *pdev, struct device_n return -ENOMEM; } =20 - register_syscore_ops(&rzg2l_irqc_syscore_ops); + register_syscore(&rzg2l_irqc_syscore); =20 return 0; } diff --git a/drivers/irqchip/irq-sa11x0.c b/drivers/irqchip/irq-sa11x0.c index d8d4dff16276..e5f24c5f3f41 100644 --- a/drivers/irqchip/irq-sa11x0.c +++ b/drivers/irqchip/irq-sa11x0.c @@ -85,7 +85,7 @@ static struct sa1100irq_state { unsigned int iccr; } sa1100irq_state; =20 -static int sa1100irq_suspend(void) +static int sa1100irq_suspend(void *data) { struct sa1100irq_state *st =3D &sa1100irq_state; =20 @@ -102,7 +102,7 @@ static int sa1100irq_suspend(void) return 0; } =20 -static void sa1100irq_resume(void) +static void sa1100irq_resume(void *data) { struct sa1100irq_state *st =3D &sa1100irq_state; =20 @@ -114,14 +114,18 @@ static void sa1100irq_resume(void) } } =20 -static struct syscore_ops sa1100irq_syscore_ops =3D { +static const struct syscore_ops sa1100irq_syscore_ops =3D { .suspend =3D sa1100irq_suspend, .resume =3D sa1100irq_resume, }; =20 +static struct syscore sa1100irq_syscore =3D { + .ops =3D &sa1100irq_syscore_ops, +}; + static int __init sa1100irq_init_devicefs(void) { - register_syscore_ops(&sa1100irq_syscore_ops); + register_syscore(&sa1100irq_syscore); return 0; } =20 diff --git a/drivers/irqchip/irq-sifive-plic.c b/drivers/irqchip/irq-sifive= -plic.c index d518a8b46874..8902a0090606 100644 --- a/drivers/irqchip/irq-sifive-plic.c +++ b/drivers/irqchip/irq-sifive-plic.c @@ -252,7 +252,7 @@ static int plic_irq_set_type(struct irq_data *d, unsign= ed int type) return IRQ_SET_MASK_OK; } =20 -static int plic_irq_suspend(void) +static int plic_irq_suspend(void *data) { struct plic_priv *priv; =20 @@ -267,7 +267,7 @@ static int plic_irq_suspend(void) return 0; } =20 -static void plic_irq_resume(void) +static void plic_irq_resume(void *data) { unsigned int i, index, cpu; unsigned long flags; @@ -298,11 +298,15 @@ static void plic_irq_resume(void) } } =20 -static struct syscore_ops plic_irq_syscore_ops =3D { +static const struct syscore_ops plic_irq_syscore_ops =3D { .suspend =3D plic_irq_suspend, .resume =3D plic_irq_resume, }; =20 +static struct syscore plic_irq_syscore =3D { + .ops =3D &plic_irq_syscore_ops, +}; + static int plic_irqdomain_map(struct irq_domain *d, unsigned int irq, irq_hw_number_t hwirq) { @@ -668,7 +672,7 @@ static int plic_probe(struct fwnode_handle *fwnode) cpuhp_setup_state(CPUHP_AP_IRQ_SIFIVE_PLIC_STARTING, "irqchip/sifive/plic:starting", plic_starting_cpu, plic_dying_cpu); - register_syscore_ops(&plic_irq_syscore_ops); + register_syscore(&plic_irq_syscore); plic_global_setup_done =3D true; } } diff --git a/drivers/irqchip/irq-sun6i-r.c b/drivers/irqchip/irq-sun6i-r.c index 37d4b29763bc..23251831c06e 100644 --- a/drivers/irqchip/irq-sun6i-r.c +++ b/drivers/irqchip/irq-sun6i-r.c @@ -268,7 +268,7 @@ static const struct irq_domain_ops sun6i_r_intc_domain_= ops =3D { .free =3D irq_domain_free_irqs_common, }; =20 -static int sun6i_r_intc_suspend(void) +static int sun6i_r_intc_suspend(void *data) { u32 buf[BITS_TO_U32(MAX(SUN6I_NR_TOP_LEVEL_IRQS, SUN6I_NR_MUX_BITS))]; int i; @@ -284,7 +284,7 @@ static int sun6i_r_intc_suspend(void) return 0; } =20 -static void sun6i_r_intc_resume(void) +static void sun6i_r_intc_resume(void *data) { int i; =20 @@ -294,17 +294,21 @@ static void sun6i_r_intc_resume(void) writel_relaxed(0, base + SUN6I_IRQ_ENABLE(i)); } =20 -static void sun6i_r_intc_shutdown(void) +static void sun6i_r_intc_shutdown(void *data) { - sun6i_r_intc_suspend(); + sun6i_r_intc_suspend(data); } =20 -static struct syscore_ops sun6i_r_intc_syscore_ops =3D { +static const struct syscore_ops sun6i_r_intc_syscore_ops =3D { .suspend =3D sun6i_r_intc_suspend, .resume =3D sun6i_r_intc_resume, .shutdown =3D sun6i_r_intc_shutdown, }; =20 +static struct syscore sun6i_r_intc_syscore =3D { + .ops =3D &sun6i_r_intc_syscore_ops, +}; + static int __init sun6i_r_intc_init(struct device_node *node, struct device_node *parent, const struct sun6i_r_intc_variant *v) @@ -346,10 +350,10 @@ static int __init sun6i_r_intc_init(struct device_nod= e *node, return -ENOMEM; } =20 - register_syscore_ops(&sun6i_r_intc_syscore_ops); + register_syscore(&sun6i_r_intc_syscore); =20 sun6i_r_intc_ack_nmi(); - sun6i_r_intc_resume(); + sun6i_r_intc_resume(NULL); =20 return 0; } diff --git a/drivers/irqchip/irq-tegra.c b/drivers/irqchip/irq-tegra.c index 66cbb9f77ff3..b6382cf6359a 100644 --- a/drivers/irqchip/irq-tegra.c +++ b/drivers/irqchip/irq-tegra.c @@ -132,7 +132,7 @@ static int tegra_set_wake(struct irq_data *d, unsigned = int enable) return 0; } =20 -static int tegra_ictlr_suspend(void) +static int tegra_ictlr_suspend(void *data) { unsigned long flags; unsigned int i; @@ -161,7 +161,7 @@ static int tegra_ictlr_suspend(void) return 0; } =20 -static void tegra_ictlr_resume(void) +static void tegra_ictlr_resume(void *data) { unsigned long flags; unsigned int i; @@ -184,14 +184,18 @@ static void tegra_ictlr_resume(void) local_irq_restore(flags); } =20 -static struct syscore_ops tegra_ictlr_syscore_ops =3D { +static const struct syscore_ops tegra_ictlr_syscore_ops =3D { .suspend =3D tegra_ictlr_suspend, .resume =3D tegra_ictlr_resume, }; =20 +static struct syscore tegra_ictlr_syscore =3D { + .ops =3D &tegra_ictlr_syscore_ops, +}; + static void tegra_ictlr_syscore_init(void) { - register_syscore_ops(&tegra_ictlr_syscore_ops); + register_syscore(&tegra_ictlr_syscore); } #else #define tegra_set_wake NULL diff --git a/drivers/irqchip/irq-vic.c b/drivers/irqchip/irq-vic.c index 2bcdf216a000..e38104c5064e 100644 --- a/drivers/irqchip/irq-vic.c +++ b/drivers/irqchip/irq-vic.c @@ -120,7 +120,7 @@ static void resume_one_vic(struct vic_device *vic) writel(~vic->soft_int, base + VIC_INT_SOFT_CLEAR); } =20 -static void vic_resume(void) +static void vic_resume(void *data) { int id; =20 @@ -146,7 +146,7 @@ static void suspend_one_vic(struct vic_device *vic) writel(~vic->resume_irqs, base + VIC_INT_ENABLE_CLEAR); } =20 -static int vic_suspend(void) +static int vic_suspend(void *data) { int id; =20 @@ -156,11 +156,15 @@ static int vic_suspend(void) return 0; } =20 -static struct syscore_ops vic_syscore_ops =3D { +static const struct syscore_ops vic_syscore_ops =3D { .suspend =3D vic_suspend, .resume =3D vic_resume, }; =20 +static struct syscore vic_syscore =3D { + .ops =3D &vic_syscore_ops, +}; + /** * vic_pm_init - initcall to register VIC pm * @@ -171,7 +175,7 @@ static struct syscore_ops vic_syscore_ops =3D { static int __init vic_pm_init(void) { if (vic_id > 0) - register_syscore_ops(&vic_syscore_ops); + register_syscore(&vic_syscore); =20 return 0; } diff --git a/drivers/leds/trigger/ledtrig-cpu.c b/drivers/leds/trigger/ledt= rig-cpu.c index 05848a2fecff..679323c2ccda 100644 --- a/drivers/leds/trigger/ledtrig-cpu.c +++ b/drivers/leds/trigger/ledtrig-cpu.c @@ -94,28 +94,32 @@ void ledtrig_cpu(enum cpu_led_event ledevt) } EXPORT_SYMBOL(ledtrig_cpu); =20 -static int ledtrig_cpu_syscore_suspend(void) +static int ledtrig_cpu_syscore_suspend(void *data) { ledtrig_cpu(CPU_LED_STOP); return 0; } =20 -static void ledtrig_cpu_syscore_resume(void) +static void ledtrig_cpu_syscore_resume(void *data) { ledtrig_cpu(CPU_LED_START); } =20 -static void ledtrig_cpu_syscore_shutdown(void) +static void ledtrig_cpu_syscore_shutdown(void *data) { ledtrig_cpu(CPU_LED_HALTED); } =20 -static struct syscore_ops ledtrig_cpu_syscore_ops =3D { +static const struct syscore_ops ledtrig_cpu_syscore_ops =3D { .shutdown =3D ledtrig_cpu_syscore_shutdown, .suspend =3D ledtrig_cpu_syscore_suspend, .resume =3D ledtrig_cpu_syscore_resume, }; =20 +static struct syscore ledtrig_cpu_syscore =3D { + .ops =3D &ledtrig_cpu_syscore_ops, +}; + static int ledtrig_online_cpu(unsigned int cpu) { ledtrig_cpu(CPU_LED_START); @@ -157,7 +161,7 @@ static int __init ledtrig_cpu_init(void) led_trigger_register_simple(trig->name, &trig->_trig); } =20 - register_syscore_ops(&ledtrig_cpu_syscore_ops); + register_syscore(&ledtrig_cpu_syscore); =20 ret =3D cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "leds/trigger:starting", ledtrig_online_cpu, ledtrig_prepare_down_cpu); diff --git a/drivers/macintosh/via-pmu.c b/drivers/macintosh/via-pmu.c index b0f09c70f1ff..5fe47e784d43 100644 --- a/drivers/macintosh/via-pmu.c +++ b/drivers/macintosh/via-pmu.c @@ -2600,7 +2600,7 @@ void pmu_blink(int n) #if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32) int pmu_sys_suspended; =20 -static int pmu_syscore_suspend(void) +static int pmu_syscore_suspend(void *data) { /* Suspend PMU event interrupts */ pmu_suspend(); @@ -2614,7 +2614,7 @@ static int pmu_syscore_suspend(void) return 0; } =20 -static void pmu_syscore_resume(void) +static void pmu_syscore_resume(void *data) { struct adb_request req; =20 @@ -2634,14 +2634,18 @@ static void pmu_syscore_resume(void) pmu_sys_suspended =3D 0; } =20 -static struct syscore_ops pmu_syscore_ops =3D { +static const struct syscore_ops pmu_syscore_ops =3D { .suspend =3D pmu_syscore_suspend, .resume =3D pmu_syscore_resume, }; =20 +static struct syscore pmu_syscore =3D { + .ops =3D &pmu_syscore_ops, +}; + static int pmu_syscore_register(void) { - register_syscore_ops(&pmu_syscore_ops); + register_syscore(&pmu_syscore); =20 return 0; } diff --git a/drivers/power/reset/sc27xx-poweroff.c b/drivers/power/reset/sc= 27xx-poweroff.c index 90287c31992c..393bd1c33b73 100644 --- a/drivers/power/reset/sc27xx-poweroff.c +++ b/drivers/power/reset/sc27xx-poweroff.c @@ -28,7 +28,7 @@ static struct regmap *regmap; * taking cpus down to avoid racing regmap or spi mutex lock when poweroff * system through PMIC. */ -static void sc27xx_poweroff_shutdown(void) +static void sc27xx_poweroff_shutdown(void *data) { #ifdef CONFIG_HOTPLUG_CPU int cpu; @@ -40,10 +40,14 @@ static void sc27xx_poweroff_shutdown(void) #endif } =20 -static struct syscore_ops poweroff_syscore_ops =3D { +static const struct syscore_ops poweroff_syscore_ops =3D { .shutdown =3D sc27xx_poweroff_shutdown, }; =20 +static struct syscore poweroff_syscore =3D { + .ops =3D &poweroff_syscore_ops, +}; + static void sc27xx_poweroff_do_poweroff(void) { /* Disable the external subsys connection's power firstly */ @@ -62,7 +66,7 @@ static int sc27xx_poweroff_probe(struct platform_device *= pdev) return -ENODEV; =20 pm_power_off =3D sc27xx_poweroff_do_poweroff; - register_syscore_ops(&poweroff_syscore_ops); + register_syscore(&poweroff_syscore); return 0; } =20 diff --git a/drivers/sh/clk/core.c b/drivers/sh/clk/core.c index 7a73f5e4a1fc..f02e12dfa5f6 100644 --- a/drivers/sh/clk/core.c +++ b/drivers/sh/clk/core.c @@ -569,7 +569,7 @@ long clk_round_rate(struct clk *clk, unsigned long rate) EXPORT_SYMBOL_GPL(clk_round_rate); =20 #ifdef CONFIG_PM -static void clks_core_resume(void) +static void clks_core_resume(void *data) { struct clk *clkp; =20 @@ -588,13 +588,17 @@ static void clks_core_resume(void) } } =20 -static struct syscore_ops clks_syscore_ops =3D { +static const struct syscore_ops clks_syscore_ops =3D { .resume =3D clks_core_resume, }; =20 +static struct syscore clks_syscore =3D { + .ops =3D &clks_syscore_ops, +}; + static int __init clk_syscore_init(void) { - register_syscore_ops(&clks_syscore_ops); + register_syscore(&clks_syscore); =20 return 0; } diff --git a/drivers/sh/intc/core.c b/drivers/sh/intc/core.c index ea571eeb3078..3dde703b7766 100644 --- a/drivers/sh/intc/core.c +++ b/drivers/sh/intc/core.c @@ -394,7 +394,7 @@ int __init register_intc_controller(struct intc_desc *d= esc) return -ENOMEM; } =20 -static int intc_suspend(void) +static int intc_suspend(void *data) { struct intc_desc_int *d; =20 @@ -420,7 +420,7 @@ static int intc_suspend(void) return 0; } =20 -static void intc_resume(void) +static void intc_resume(void *data) { struct intc_desc_int *d; =20 @@ -450,11 +450,15 @@ static void intc_resume(void) } } =20 -struct syscore_ops intc_syscore_ops =3D { +static const struct syscore_ops intc_syscore_ops =3D { .suspend =3D intc_suspend, .resume =3D intc_resume, }; =20 +static struct syscore intc_syscore =3D { + .ops =3D &intc_syscore_ops, +}; + const struct bus_type intc_subsys =3D { .name =3D "intc", .dev_name =3D "intc", @@ -477,7 +481,7 @@ static int __init register_intc_devs(void) struct intc_desc_int *d; int error; =20 - register_syscore_ops(&intc_syscore_ops); + register_syscore(&intc_syscore); =20 error =3D subsys_system_register(&intc_subsys, NULL); if (!error) { diff --git a/drivers/soc/bcm/brcmstb/biuctrl.c b/drivers/soc/bcm/brcmstb/bi= uctrl.c index 364ddbe365c2..bd830649b60d 100644 --- a/drivers/soc/bcm/brcmstb/biuctrl.c +++ b/drivers/soc/bcm/brcmstb/biuctrl.c @@ -298,7 +298,7 @@ static int __init setup_hifcpubiuctrl_regs(struct devic= e_node *np) #ifdef CONFIG_PM_SLEEP static u32 cpubiuctrl_reg_save[NUM_CPU_BIUCTRL_REGS]; =20 -static int brcmstb_cpu_credit_reg_suspend(void) +static int brcmstb_cpu_credit_reg_suspend(void *data) { unsigned int i; =20 @@ -311,7 +311,7 @@ static int brcmstb_cpu_credit_reg_suspend(void) return 0; } =20 -static void brcmstb_cpu_credit_reg_resume(void) +static void brcmstb_cpu_credit_reg_resume(void *data) { unsigned int i; =20 @@ -322,10 +322,14 @@ static void brcmstb_cpu_credit_reg_resume(void) cbc_writel(cpubiuctrl_reg_save[i], i); } =20 -static struct syscore_ops brcmstb_cpu_credit_syscore_ops =3D { +static const struct syscore_ops brcmstb_cpu_credit_syscore_ops =3D { .suspend =3D brcmstb_cpu_credit_reg_suspend, .resume =3D brcmstb_cpu_credit_reg_resume, }; + +static struct syscore brcmstb_cpu_credit_syscore =3D { + .ops =3D &brcmstb_cpu_credit_syscore_ops, +}; #endif =20 =20 @@ -354,7 +358,7 @@ static int __init brcmstb_biuctrl_init(void) a72_b53_rac_enable_all(np); mcp_a72_b53_set(); #ifdef CONFIG_PM_SLEEP - register_syscore_ops(&brcmstb_cpu_credit_syscore_ops); + register_syscore(&brcmstb_cpu_credit_syscore); #endif ret =3D 0; out_put: diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c index 443e33a459be..f57e5a4b4d96 100644 --- a/drivers/soc/tegra/pmc.c +++ b/drivers/soc/tegra/pmc.c @@ -467,7 +467,7 @@ struct tegra_pmc { unsigned long *wake_type_dual_edge_map; unsigned long *wake_sw_status_map; unsigned long *wake_cntrl_level_map; - struct syscore_ops syscore; + struct syscore syscore; }; =20 static struct tegra_pmc *pmc =3D &(struct tegra_pmc) { @@ -3148,7 +3148,7 @@ static void tegra186_pmc_process_wake_events(struct t= egra_pmc *pmc, unsigned int } } =20 -static void tegra186_pmc_wake_syscore_resume(void) +static void tegra186_pmc_wake_syscore_resume(void *data) { u32 status, mask; unsigned int i; @@ -3161,7 +3161,7 @@ static void tegra186_pmc_wake_syscore_resume(void) } } =20 -static int tegra186_pmc_wake_syscore_suspend(void) +static int tegra186_pmc_wake_syscore_suspend(void *data) { wke_read_sw_wake_status(pmc); =20 @@ -3180,6 +3180,11 @@ static int tegra186_pmc_wake_syscore_suspend(void) return 0; } =20 +static const struct syscore_ops tegra186_pmc_wake_syscore_ops =3D { + .suspend =3D tegra186_pmc_wake_syscore_suspend, + .resume =3D tegra186_pmc_wake_syscore_resume, +}; + #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_ARM) static int tegra_pmc_suspend(struct device *dev) { @@ -3830,10 +3835,8 @@ static const struct tegra_pmc_regs tegra186_pmc_regs= =3D { =20 static void tegra186_pmc_init(struct tegra_pmc *pmc) { - pmc->syscore.suspend =3D tegra186_pmc_wake_syscore_suspend; - pmc->syscore.resume =3D tegra186_pmc_wake_syscore_resume; - - register_syscore_ops(&pmc->syscore); + pmc->syscore.ops =3D &tegra186_pmc_wake_syscore_ops; + register_syscore(&pmc->syscore); } =20 static void tegra186_pmc_setup_irq_polarity(struct tegra_pmc *pmc, diff --git a/drivers/thermal/intel/intel_hfi.c b/drivers/thermal/intel/inte= l_hfi.c index bd2fca7dc017..8a2f441cd2ec 100644 --- a/drivers/thermal/intel/intel_hfi.c +++ b/drivers/thermal/intel/intel_hfi.c @@ -592,7 +592,7 @@ static void hfi_disable_instance(void *ptr) hfi_disable(); } =20 -static void hfi_syscore_resume(void) +static void hfi_syscore_resume(void *data) { /* This code runs only on the boot CPU. */ struct hfi_cpu_info *info =3D &per_cpu(hfi_cpu_info, 0); @@ -603,7 +603,7 @@ static void hfi_syscore_resume(void) hfi_enable_instance(hfi_instance); } =20 -static int hfi_syscore_suspend(void) +static int hfi_syscore_suspend(void *data) { /* No locking needed. There is no concurrency with CPU offline. */ hfi_disable(); @@ -611,11 +611,15 @@ static int hfi_syscore_suspend(void) return 0; } =20 -static struct syscore_ops hfi_pm_ops =3D { +static const struct syscore_ops hfi_pm_ops =3D { .resume =3D hfi_syscore_resume, .suspend =3D hfi_syscore_suspend, }; =20 +static struct syscore hfi_pm =3D { + .ops =3D &hfi_pm_ops, +}; + static int hfi_thermal_notify(struct notifier_block *nb, unsigned long sta= te, void *_notify) { @@ -710,7 +714,7 @@ void __init intel_hfi_init(void) if (thermal_genl_register_notifier(&hfi_thermal_nb)) goto err_nl_notif; =20 - register_syscore_ops(&hfi_pm_ops); + register_syscore(&hfi_pm); =20 return; =20 diff --git a/drivers/xen/xen-acpi-processor.c b/drivers/xen/xen-acpi-proces= sor.c index 296703939846..f2e8eaf684ba 100644 --- a/drivers/xen/xen-acpi-processor.c +++ b/drivers/xen/xen-acpi-processor.c @@ -495,7 +495,7 @@ static void xen_acpi_processor_resume_worker(struct wor= k_struct *dummy) pr_info("ACPI data upload failed, error =3D %d\n", rc); } =20 -static void xen_acpi_processor_resume(void) +static void xen_acpi_processor_resume(void *data) { static DECLARE_WORK(wq, xen_acpi_processor_resume_worker); =20 @@ -509,10 +509,14 @@ static void xen_acpi_processor_resume(void) schedule_work(&wq); } =20 -static struct syscore_ops xap_syscore_ops =3D { +static const struct syscore_ops xap_syscore_ops =3D { .resume =3D xen_acpi_processor_resume, }; =20 +static struct syscore xap_syscore =3D { + .ops =3D &xap_syscore_ops, +}; + static int __init xen_acpi_processor_init(void) { int i; @@ -563,7 +567,7 @@ static int __init xen_acpi_processor_init(void) if (rc) goto err_unregister; =20 - register_syscore_ops(&xap_syscore_ops); + register_syscore(&xap_syscore); =20 return 0; err_unregister: @@ -580,7 +584,7 @@ static void __exit xen_acpi_processor_exit(void) { int i; =20 - unregister_syscore_ops(&xap_syscore_ops); + unregister_syscore(&xap_syscore); bitmap_free(acpi_ids_done); bitmap_free(acpi_id_present); bitmap_free(acpi_id_cst_present); diff --git a/include/linux/syscore_ops.h b/include/linux/syscore_ops.h index ae4d48e4c970..ac6d71be5c38 100644 --- a/include/linux/syscore_ops.h +++ b/include/linux/syscore_ops.h @@ -11,14 +11,19 @@ #include =20 struct syscore_ops { + int (*suspend)(void *data); + void (*resume)(void *data); + void (*shutdown)(void *data); +}; + +struct syscore { struct list_head node; - int (*suspend)(void); - void (*resume)(void); - void (*shutdown)(void); + const struct syscore_ops *ops; + void *data; }; =20 -extern void register_syscore_ops(struct syscore_ops *ops); -extern void unregister_syscore_ops(struct syscore_ops *ops); +extern void register_syscore(struct syscore *syscore); +extern void unregister_syscore(struct syscore *syscore); #ifdef CONFIG_PM_SLEEP extern int syscore_suspend(void); extern void syscore_resume(void); diff --git a/kernel/cpu_pm.c b/kernel/cpu_pm.c index b0f0d15085db..7481fbb947d3 100644 --- a/kernel/cpu_pm.c +++ b/kernel/cpu_pm.c @@ -173,7 +173,7 @@ int cpu_cluster_pm_exit(void) EXPORT_SYMBOL_GPL(cpu_cluster_pm_exit); =20 #ifdef CONFIG_PM -static int cpu_pm_suspend(void) +static int cpu_pm_suspend(void *data) { int ret; =20 @@ -185,20 +185,24 @@ static int cpu_pm_suspend(void) return ret; } =20 -static void cpu_pm_resume(void) +static void cpu_pm_resume(void *data) { cpu_cluster_pm_exit(); cpu_pm_exit(); } =20 -static struct syscore_ops cpu_pm_syscore_ops =3D { +static const struct syscore_ops cpu_pm_syscore_ops =3D { .suspend =3D cpu_pm_suspend, .resume =3D cpu_pm_resume, }; =20 +static struct syscore cpu_pm_syscore =3D { + .ops =3D &cpu_pm_syscore_ops, +}; + static int cpu_pm_init(void) { - register_syscore_ops(&cpu_pm_syscore_ops); + register_syscore(&cpu_pm_syscore); return 0; } core_initcall(cpu_pm_init); diff --git a/kernel/irq/generic-chip.c b/kernel/irq/generic-chip.c index bf59e37d650a..3cd0c40282c0 100644 --- a/kernel/irq/generic-chip.c +++ b/kernel/irq/generic-chip.c @@ -650,7 +650,7 @@ static struct irq_data *irq_gc_get_irq_data(struct irq_= chip_generic *gc) } =20 #ifdef CONFIG_PM -static int irq_gc_suspend(void) +static int irq_gc_suspend(void *data) { struct irq_chip_generic *gc; =20 @@ -670,7 +670,7 @@ static int irq_gc_suspend(void) return 0; } =20 -static void irq_gc_resume(void) +static void irq_gc_resume(void *data) { struct irq_chip_generic *gc; =20 @@ -693,7 +693,7 @@ static void irq_gc_resume(void) #define irq_gc_resume NULL #endif =20 -static void irq_gc_shutdown(void) +static void irq_gc_shutdown(void *data) { struct irq_chip_generic *gc; =20 @@ -709,15 +709,19 @@ static void irq_gc_shutdown(void) } } =20 -static struct syscore_ops irq_gc_syscore_ops =3D { +static const struct syscore_ops irq_gc_syscore_ops =3D { .suspend =3D irq_gc_suspend, .resume =3D irq_gc_resume, .shutdown =3D irq_gc_shutdown, }; =20 +static struct syscore irq_gc_syscore =3D { + .ops =3D &irq_gc_syscore_ops, +}; + static int __init irq_gc_init_ops(void) { - register_syscore_ops(&irq_gc_syscore_ops); + register_syscore(&irq_gc_syscore); return 0; } device_initcall(irq_gc_init_ops); diff --git a/kernel/irq/pm.c b/kernel/irq/pm.c index f7394729cedc..99ff65466d87 100644 --- a/kernel/irq/pm.c +++ b/kernel/irq/pm.c @@ -211,21 +211,26 @@ void rearm_wake_irq(unsigned int irq) =20 /** * irq_pm_syscore_resume - enable interrupt lines early + * @data: syscore context * * Enable all interrupt lines with %IRQF_EARLY_RESUME set. */ -static void irq_pm_syscore_resume(void) +static void irq_pm_syscore_resume(void *data) { resume_irqs(true); } =20 -static struct syscore_ops irq_pm_syscore_ops =3D { +static const struct syscore_ops irq_pm_syscore_ops =3D { .resume =3D irq_pm_syscore_resume, }; =20 +static struct syscore irq_pm_syscore =3D { + .ops =3D &irq_pm_syscore_ops, +}; + static int __init irq_pm_init_ops(void) { - register_syscore_ops(&irq_pm_syscore_ops); + register_syscore(&irq_pm_syscore); return 0; } =20 diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index cb79d1d2e6e5..5c132be896c9 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -3691,12 +3691,13 @@ static bool legacy_kthread_create(void) =20 /** * printk_kthreads_shutdown - shutdown all threaded printers + * @data: syscore context * * On system shutdown all threaded printers are stopped. This allows printk * to transition back to atomic printing, thus providing a robust mechanism * for the final shutdown/reboot messages to be output. */ -static void printk_kthreads_shutdown(void) +static void printk_kthreads_shutdown(void *data) { struct console *con; =20 @@ -3718,10 +3719,14 @@ static void printk_kthreads_shutdown(void) console_list_unlock(); } =20 -static struct syscore_ops printk_syscore_ops =3D { +static const struct syscore_ops printk_syscore_ops =3D { .shutdown =3D printk_kthreads_shutdown, }; =20 +static struct syscore printk_syscore =3D { + .ops =3D &printk_syscore_ops, +}; + /* * If appropriate, start nbcon kthreads and set @printk_kthreads_running. * If any kthreads fail to start, those consoles are unregistered. @@ -3789,7 +3794,7 @@ static void printk_kthreads_check_locked(void) =20 static int __init printk_set_kthreads_ready(void) { - register_syscore_ops(&printk_syscore_ops); + register_syscore(&printk_syscore); =20 console_list_lock(); printk_kthreads_ready =3D true; diff --git a/kernel/time/sched_clock.c b/kernel/time/sched_clock.c index cc1afec306b3..f39111830ca3 100644 --- a/kernel/time/sched_clock.c +++ b/kernel/time/sched_clock.c @@ -296,6 +296,11 @@ int sched_clock_suspend(void) return 0; } =20 +static int sched_clock_syscore_suspend(void *data) +{ + return sched_clock_suspend(); +} + void sched_clock_resume(void) { struct clock_read_data *rd =3D &cd.read_data[0]; @@ -305,14 +310,23 @@ void sched_clock_resume(void) rd->read_sched_clock =3D cd.actual_read_sched_clock; } =20 -static struct syscore_ops sched_clock_ops =3D { - .suspend =3D sched_clock_suspend, - .resume =3D sched_clock_resume, +static void sched_clock_syscore_resume(void *data) +{ + sched_clock_resume(); +} + +static const struct syscore_ops sched_clock_syscore_ops =3D { + .suspend =3D sched_clock_syscore_suspend, + .resume =3D sched_clock_syscore_resume, +}; + +static struct syscore sched_clock_syscore =3D { + .ops =3D &sched_clock_syscore_ops, }; =20 static int __init sched_clock_syscore_init(void) { - register_syscore_ops(&sched_clock_ops); + register_syscore(&sched_clock_syscore); =20 return 0; } diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index 3a4d3b2e3f74..744987f3db25 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -1994,6 +1994,11 @@ void timekeeping_resume(void) timerfd_resume(); } =20 +static void timekeeping_syscore_resume(void *data) +{ + timekeeping_resume(); +} + int timekeeping_suspend(void) { struct timekeeper *tks =3D &tk_core.shadow_timekeeper; @@ -2061,15 +2066,24 @@ int timekeeping_suspend(void) return 0; } =20 +static int timekeeping_syscore_suspend(void *data) +{ + return timekeeping_suspend(); +} + /* sysfs resume/suspend bits for timekeeping */ -static struct syscore_ops timekeeping_syscore_ops =3D { - .resume =3D timekeeping_resume, - .suspend =3D timekeeping_suspend, +static const struct syscore_ops timekeeping_syscore_ops =3D { + .resume =3D timekeeping_syscore_resume, + .suspend =3D timekeeping_syscore_suspend, +}; + +static struct syscore timekeeping_syscore =3D { + .ops =3D &timekeeping_syscore_ops, }; =20 static int __init timekeeping_init_ops(void) { - register_syscore_ops(&timekeeping_syscore_ops); + register_syscore(&timekeeping_syscore); return 0; } device_initcall(timekeeping_init_ops); diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 4845e5739436..87c621f63365 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -5629,7 +5629,7 @@ static int kvm_offline_cpu(unsigned int cpu) return 0; } =20 -static void kvm_shutdown(void) +static void kvm_shutdown(void *data) { /* * Disable hardware virtualization and set kvm_rebooting to indicate @@ -5647,7 +5647,7 @@ static void kvm_shutdown(void) on_each_cpu(kvm_disable_virtualization_cpu, NULL, 1); } =20 -static int kvm_suspend(void) +static int kvm_suspend(void *data) { /* * Secondary CPUs and CPU hotplug are disabled across the suspend/resume @@ -5664,7 +5664,7 @@ static int kvm_suspend(void) return 0; } =20 -static void kvm_resume(void) +static void kvm_resume(void *data) { lockdep_assert_not_held(&kvm_usage_lock); lockdep_assert_irqs_disabled(); @@ -5672,12 +5672,16 @@ static void kvm_resume(void) WARN_ON_ONCE(kvm_enable_virtualization_cpu()); } =20 -static struct syscore_ops kvm_syscore_ops =3D { +static const struct syscore_ops kvm_syscore_ops =3D { .suspend =3D kvm_suspend, .resume =3D kvm_resume, .shutdown =3D kvm_shutdown, }; =20 +static struct syscore kvm_syscore =3D { + .ops =3D &kvm_syscore_ops, +}; + int kvm_enable_virtualization(void) { int r; @@ -5694,7 +5698,7 @@ int kvm_enable_virtualization(void) if (r) goto err_cpuhp; =20 - register_syscore_ops(&kvm_syscore_ops); + register_syscore(&kvm_syscore); =20 /* * Undo virtualization enabling and bail if the system is going down. @@ -5716,7 +5720,7 @@ int kvm_enable_virtualization(void) return 0; =20 err_rebooting: - unregister_syscore_ops(&kvm_syscore_ops); + unregister_syscore(&kvm_syscore); cpuhp_remove_state(CPUHP_AP_KVM_ONLINE); err_cpuhp: kvm_arch_disable_virtualization(); @@ -5732,7 +5736,7 @@ void kvm_disable_virtualization(void) if (--kvm_usage_count) return; =20 - unregister_syscore_ops(&kvm_syscore_ops); + unregister_syscore(&kvm_syscore); cpuhp_remove_state(CPUHP_AP_KVM_ONLINE); kvm_arch_disable_virtualization(); } --=20 2.51.0 From nobody Fri Dec 19 12:15:19 2025 Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4E5B73469F7 for ; Wed, 29 Oct 2025 16:33:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761755631; cv=none; b=h9GlHBj1km7yUeQ5QVgHUwA+QDyZijcO0C7QN6YNWU7G/gUjEzaGONse1LqRQ7ux5vkNmd+WFR0+y3/X34s0dvJNnZwXfm7cugE4WRDE9/JwFLqjQaMsDm5V2ZzVzjGW3omNLR+bXs/nnQuSPt1p4BPSxu1zOx3MxNaf5eJvcmQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761755631; c=relaxed/simple; bh=nyc2pqrGN622czbqL752mZIP4IX12KOgaXiQ7fJqL2Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LTFw8KkYwwGe5TLLRfxy9dyHZDbndArZeQae45LItGt9l2psdDsykgPHavlSkQ3w3afLS0tAZ3eX4LmdVjkvM5XOLqFZUBlBFrlcQvGnqzvFG46YiCCXDG16zf9JO9zoO6fFtt8lTuBLzaxPNjoqnjHwG845oLRYUg/b1OkvgpQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=TsPkz5A0; arc=none smtp.client-ip=209.85.218.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="TsPkz5A0" Received: by mail-ej1-f48.google.com with SMTP id a640c23a62f3a-b4f323cf89bso14622766b.2 for ; Wed, 29 Oct 2025 09:33:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761755628; x=1762360428; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=oOtQpkg6YutdjljN7zgxOA0UqmJOiKsRIM6+iFOdM9w=; b=TsPkz5A0bpVSK3bFDodOhIgj/wYyMO0MoglQcGiMbEmlELok9GrfGJC/MX19dAtDWd PV9aqbzS7n9GKCMH9JbfEGzdsocDYidHLBXXUEqkzN24nFiRchS3bnV7lHvy0Zwe8PgE hYQNEP/ddtu+iQaTE2BL4+Dlj+1OBFEBuxAuKmwZUMfnCM0oAB26z0Mg6s9/FZaVLstL i0j1Ec6H6QqIp9QpyvJmECPGbGZV3UzFH+TyrwRdPZwMBIXlQCh0xfHmR5cX/sRfAFAE EiZ2Tc/IZpFGW3E/Hj0RWDZ2a39mH/qR7F0eqIV20xPkUwc+vdeSQS2opAAH39LXK2Vn 24xA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761755628; x=1762360428; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=oOtQpkg6YutdjljN7zgxOA0UqmJOiKsRIM6+iFOdM9w=; b=JPC1yWORsBuB/cYQk60WT8Z5Vz7Il7yrZbcaHVXBlUWXPEYnu+c5daccI0silmPb15 wGIuIFaF4DkccFEPCghm6B2XYQoeR/Mak3vOYF9FkJWffy49zP5esTOdDid0Wv0i40I3 +hQciE7B8/IhRLCQvKfo3/QMRLwCU/i6lgYRKfX4CpqZJggQ0dqwkw2aU5kM/pJPMxA/ zxUjRQ/AHgsiL44Y4xDczwBNQ/0XSzo9IU/zEaLJdkbDemdYhDUvek+SYNmqO4J/GwFE U4Pnbhe8poRipu2GpXua2GewfieqceZ7QAhlNxKBb+rdO8P3xbxsjplg6UNG+4NfKDya fZWw== X-Forwarded-Encrypted: i=1; AJvYcCXpsuDO/ss4EaAnoK3vttlSbgNTA6giBauTXRfJUdH1Qq+tWRJG5gjheQnOHHqCC2mZhVZ+qr6c8w03eeM=@vger.kernel.org X-Gm-Message-State: AOJu0YxN1DvCGluQ9cdMv42Rrfi9PqohEEYOHHV44kYli0/p6ammKwL7 vqyRK3Sq/FQbALVYFgrb93SdIGCOAgQ6GbObdomsszsW4BGqiLgZQfPa X-Gm-Gg: ASbGncsZntQ5L1VqX1F9jf5/7NhWcM61QvOuSqkJG7cU4o3W8PUYJzM55mWjDOqGmWC i7FEPlTaWJXXyfZ9QvqpIvPJPrcOMuu7jgL50OCNh+0NQSI8AM8I4p5sj8B7TWTp1Kz3mf2RgOC r7fBLx5vNpzP57GCjP4iDFSKmmilyRdTAqvs2viRLGorA01wYWN4kGG3Y0WVZdQFYk2cMDMjfCQ fRvtWklNC1UnDLQpYZI/krv64I95ZsbgtxJe5A4BXpvlYjBFuWs2X6do3m8RVJQlRrP1njG1zX4 m3sLuLD+izk4d+vPHPILHPzd4HRq8oN8fPnQ8cjGTyKP3ID9W+u2Jgex7pPbWH2GK65mTeW2muN KnsAw683gTSUNe96hfN0DUON0sybBNE9659XrrrrJHbpDi4Y6HY/xqg2N9VmKvJJHoAYVCcJXJB I5ykKmQYsM7OtFrrjqkFHcgpu+++nx6Wm2Ne9dueBr2Qgs9ElR+6XHGQ== X-Google-Smtp-Source: AGHT+IFucoSpcC/sMHQ4BHPU2Sj/4WR5SsWuPVRxpOY+Rb83Lsjw7eIU5fItk/Z3WAxH0T7dO6D6kQ== X-Received: by 2002:a17:906:ee81:b0:b6d:7e01:cbc5 with SMTP id a640c23a62f3a-b703d55289bmr367879066b.53.1761755627345; Wed, 29 Oct 2025 09:33:47 -0700 (PDT) Received: from localhost (p200300e41f274600f22f74fffe1f3a53.dip0.t-ipconnect.de. [2003:e4:1f27:4600:f22f:74ff:fe1f:3a53]) by smtp.gmail.com with UTF8SMTPSA id a640c23a62f3a-b6d853e5138sm1485764866b.44.2025.10.29.09.33.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Oct 2025 09:33:46 -0700 (PDT) From: Thierry Reding To: Greg Kroah-Hartman , "Rafael J. Wysocki" Cc: x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-riscv@lists.infradead.org, linux-mips@vger.kernel.org, loongarch@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-sh@vger.kernel.org, linux-pci@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 2/7] MIPS: PCI: Use contextual data instead of global variable Date: Wed, 29 Oct 2025 17:33:31 +0100 Message-ID: <20251029163336.2785270-3-thierry.reding@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251029163336.2785270-1-thierry.reding@gmail.com> References: <20251029163336.2785270-1-thierry.reding@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Thierry Reding Pass the driver-specific data via the syscore struct and use it in the syscore ops. Signed-off-by: Thierry Reding --- Changes in v3: - adjust for API changes and update commit message Changes in v2: - remove unused global variable arch/mips/pci/pci-alchemy.c | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/arch/mips/pci/pci-alchemy.c b/arch/mips/pci/pci-alchemy.c index 6bfee0f71803..f73bf60bd069 100644 --- a/arch/mips/pci/pci-alchemy.c +++ b/arch/mips/pci/pci-alchemy.c @@ -33,6 +33,7 @@ =20 struct alchemy_pci_context { struct pci_controller alchemy_pci_ctrl; /* leave as first member! */ + struct syscore syscore; void __iomem *regs; /* ctrl base */ /* tools for wired entry for config space access */ unsigned long last_elo0; @@ -46,12 +47,6 @@ struct alchemy_pci_context { int (*board_pci_idsel)(unsigned int devsel, int assert); }; =20 -/* for syscore_ops. There's only one PCI controller on Alchemy chips, so t= his - * should suffice for now. - */ -static struct alchemy_pci_context *__alchemy_pci_ctx; - - /* IO/MEM resources for PCI. Keep the memres in sync with fixup_bigphys_ad= dr * in arch/mips/alchemy/common/setup.c */ @@ -306,9 +301,7 @@ static int alchemy_pci_def_idsel(unsigned int devsel, i= nt assert) /* save PCI controller register contents. */ static int alchemy_pci_suspend(void *data) { - struct alchemy_pci_context *ctx =3D __alchemy_pci_ctx; - if (!ctx) - return 0; + struct alchemy_pci_context *ctx =3D data; =20 ctx->pm[0] =3D __raw_readl(ctx->regs + PCI_REG_CMEM); ctx->pm[1] =3D __raw_readl(ctx->regs + PCI_REG_CONFIG) & 0x0009ffff; @@ -328,9 +321,7 @@ static int alchemy_pci_suspend(void *data) =20 static void alchemy_pci_resume(void *data) { - struct alchemy_pci_context *ctx =3D __alchemy_pci_ctx; - if (!ctx) - return; + struct alchemy_pci_context *ctx =3D data; =20 __raw_writel(ctx->pm[0], ctx->regs + PCI_REG_CMEM); __raw_writel(ctx->pm[2], ctx->regs + PCI_REG_B2BMASK_CCH); @@ -359,10 +350,6 @@ static const struct syscore_ops alchemy_pci_syscore_op= s =3D { .resume =3D alchemy_pci_resume, }; =20 -static struct syscore alchemy_pci_syscore =3D { - .ops =3D &alchemy_pci_syscore_ops, -}; - static int alchemy_pci_probe(struct platform_device *pdev) { struct alchemy_pci_platdata *pd =3D pdev->dev.platform_data; @@ -480,9 +467,10 @@ static int alchemy_pci_probe(struct platform_device *p= dev) __raw_writel(val, ctx->regs + PCI_REG_CONFIG); wmb(); =20 - __alchemy_pci_ctx =3D ctx; platform_set_drvdata(pdev, ctx); - register_syscore(&alchemy_pci_syscore); + ctx->syscore.ops =3D &alchemy_pci_syscore_ops; + ctx->syscore.data =3D ctx; + register_syscore(&ctx->syscore); register_pci_controller(&ctx->alchemy_pci_ctrl); =20 dev_info(&pdev->dev, "PCI controller at %ld MHz\n", --=20 2.51.0 From nobody Fri Dec 19 12:15:19 2025 Received: from mail-ej1-f49.google.com (mail-ej1-f49.google.com [209.85.218.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 40EEB2F5306 for ; Wed, 29 Oct 2025 16:33:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761755633; cv=none; b=Cbo8OKok49xyMUVJI/Xm4poUQaPLNOxLh4NEDmwZk/khYmpx8aZhGSeMMgHdceuW7R4nMJQk0J8VC/SvxxTZPF1Yn3708LhyPy/0KEyRV3CGBza42g/Dy7/TlTnRRG532gDvZahZAjajvhsa108C3v46l7gRoKo/yeb/uF3w2cg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761755633; c=relaxed/simple; bh=T06l1/4GOHE/LpDkePy4eVSTWo0uNva18SmJ0icOHLI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=J6KWfQl3B0fNQYKg22PKfZ11ZKDfBmUQOt9bHFOYZfRzV61SVntGu15qnvYdstMIoi36oOtcKx1EK5j8LkzUjXL+nRObMiBqLIFwJbgmW9W0hIZnpLANf08bhiXFTDU9NHyxiAk1vcmh+0F5N+WGuQkCnhU40NR4gKbWsYRQuXs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=a6u7zSRA; arc=none smtp.client-ip=209.85.218.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="a6u7zSRA" Received: by mail-ej1-f49.google.com with SMTP id a640c23a62f3a-b5e19810703so8923766b.2 for ; Wed, 29 Oct 2025 09:33:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761755630; x=1762360430; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=8XbRLU+7LExsM1Q2W4kgKdkH4Wh0K6zsU36k2L5dwa0=; b=a6u7zSRALXcD5cAfl7zziHXqingpPMwA+3HQpLoOUYAN+T4DZYbzvXQku88P5LytsG dSepd0zu7KwPEm+SLTpu7V5mZsAQiytCslwBZjiW4yUtTcTJQVUXYl8R4juqoTdj51JI hCf1+U2YwclJoZF5yhDg/VxPsE6YKgy2pkmrqgE4KuIgw4dbPiW6aPL5RpFKbASmU9Fr AQZoN4oxCVq06kTWykouoPPTYq731ySwec2CxMhlePbiX0q6OgoGOpbNmyKXbrtrsNd6 Wt1rhpU4kMgjFyK9e0qmJH4LqvKrN/HO0Gl3VvRi3eWCGseFGqkfUaC9te4+Xnky0T79 IADQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761755630; x=1762360430; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8XbRLU+7LExsM1Q2W4kgKdkH4Wh0K6zsU36k2L5dwa0=; b=CEv86I4pJorhmjD3pBLRMKzhjlEfT7mUmNJT0a3VvadZVya4DRu1M1rRNtA72lxVbf OyrTGi3BciO9x2F3+fj9XfFbF/szaWlE74aeiwm5EGZnGtNfzMTVYKE1z5ztWx0vncEG eVVoFLmJDSTWhX4GHKJdBGrE0AI0r+94yMn3GNkmolD3qHxOeO2zWyaF+1MhyaErvpef +49DpKatO54K4lTobjnLU0KwduodmURJ3m1CxSB3Q8J9AU5JODiiRZecE1wxTk3g9NFX Ud6IIy1GF3QO7o5CUIeF91JogXL5cQl5I+FZUGL5G79EPYIGNL52IsGPtJLJ1egNj4Xy BVxA== X-Forwarded-Encrypted: i=1; AJvYcCWkrlSrBKNCyvMW6Dh9ohOWBEOAzbDupv5R/VyZ13Ppg1MaKlkSk1+D07tC8H1qyu7HaEW/Xkuxq7QqLeg=@vger.kernel.org X-Gm-Message-State: AOJu0YxjejHSc6M0HyYYLal8/VIOsaJaWrhzYg0VqIYwTFE0bV1MR3VI N0d2U0PYdcnhw4r+24JC4+c1ykqmFQEtpWg0m/VdoYQA7mYXeM7YPy0H X-Gm-Gg: ASbGncuHEqA5AEnC411FaoE3RLlXc5fH2FZPZmYNaGLt0pFVCaF10Bd9tMzvn/sCCLr NwV97H1tzPiCkZAfoAR+lcj5x00RH2qRtqdEOhkwIzkHWMJE8ov2ZTP1gLDPMFksiJJvjFbJA9n vYrAmaELao7Ls7pM7b3/ACfc4YHqgYcOteL+qirREDKtYncGlDPL2otiUOy5+WfVxgUCy/5hAl8 lXsLo8LVESbJabf4xEV9Fx0jHmW3XbJiydLc3CzFITNzlEnUK78rvI/0etaazkipEM15Ta6ndtY wdIl7Z6gJE5aEhNywvbtDpANxRpX2kHpzuhyTvL3x7P4QhwE6Jub4NFaMO5E4R6uVtjFA35TgT4 Uo4ZLolwdMKSGN3Ecu3bY8sI1GiWR4QOs71Fi+PI9zYVgSayl7nTs2qzXUkXuhBpIR4j5kOt58j XhAXtM/eNMM1eWY2dZzIFiGrVW8IfmHA4v/JeCRWZVNjpZ48mCpa2HgooiC/TUmW75YXOK X-Google-Smtp-Source: AGHT+IFQlpirQWvqETIaDsilJH4sjQW05iHSTqO+BVFy04krtNR3muOIO8OYFK3MmzGZwCCaLhUORw== X-Received: by 2002:a17:907:1c8c:b0:b3e:580a:1842 with SMTP id a640c23a62f3a-b703d557003mr393915166b.48.1761755629552; Wed, 29 Oct 2025 09:33:49 -0700 (PDT) Received: from localhost (p200300e41f274600f22f74fffe1f3a53.dip0.t-ipconnect.de. [2003:e4:1f27:4600:f22f:74ff:fe1f:3a53]) by smtp.gmail.com with UTF8SMTPSA id a640c23a62f3a-b6dad195456sm939661066b.72.2025.10.29.09.33.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Oct 2025 09:33:48 -0700 (PDT) From: Thierry Reding To: Greg Kroah-Hartman , "Rafael J. Wysocki" Cc: x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-riscv@lists.infradead.org, linux-mips@vger.kernel.org, loongarch@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-sh@vger.kernel.org, linux-pci@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 3/7] bus: mvebu-mbus: Use contextual data instead of global variable Date: Wed, 29 Oct 2025 17:33:32 +0100 Message-ID: <20251029163336.2785270-4-thierry.reding@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251029163336.2785270-1-thierry.reding@gmail.com> References: <20251029163336.2785270-1-thierry.reding@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Thierry Reding Pass the driver-specific data via the syscore struct and use it in the syscore ops. Signed-off-by: Thierry Reding --- Changes in v3: - adjust for API changes and update commit message drivers/bus/mvebu-mbus.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/drivers/bus/mvebu-mbus.c b/drivers/bus/mvebu-mbus.c index dd94145c9b22..d33c8e42e91c 100644 --- a/drivers/bus/mvebu-mbus.c +++ b/drivers/bus/mvebu-mbus.c @@ -130,6 +130,7 @@ struct mvebu_mbus_win_data { }; =20 struct mvebu_mbus_state { + struct syscore syscore; void __iomem *mbuswins_base; void __iomem *sdramwins_base; void __iomem *mbusbridge_base; @@ -1008,7 +1009,7 @@ fs_initcall(mvebu_mbus_debugfs_init); =20 static int mvebu_mbus_suspend(void *data) { - struct mvebu_mbus_state *s =3D &mbus_state; + struct mvebu_mbus_state *s =3D data; int win; =20 if (!s->mbusbridge_base) @@ -1042,7 +1043,7 @@ static int mvebu_mbus_suspend(void *data) =20 static void mvebu_mbus_resume(void *data) { - struct mvebu_mbus_state *s =3D &mbus_state; + struct mvebu_mbus_state *s =3D data; int win; =20 writel(s->mbus_bridge_ctrl, @@ -1074,10 +1075,6 @@ static const struct syscore_ops mvebu_mbus_syscore_o= ps =3D { .resume =3D mvebu_mbus_resume, }; =20 -static struct syscore mvebu_mbus_syscore =3D { - .ops =3D &mvebu_mbus_syscore_ops, -}; - static int __init mvebu_mbus_common_init(struct mvebu_mbus_state *mbus, phys_addr_t mbuswins_phys_base, size_t mbuswins_size, @@ -1122,7 +1119,9 @@ static int __init mvebu_mbus_common_init(struct mvebu= _mbus_state *mbus, writel(UNIT_SYNC_BARRIER_ALL, mbus->mbuswins_base + UNIT_SYNC_BARRIER_OFF); =20 - register_syscore(&mvebu_mbus_syscore); + mbus->syscore.ops =3D &mvebu_mbus_syscore_ops; + mbus->syscore.data =3D mbus; + register_syscore(&mbus->syscore); =20 return 0; } --=20 2.51.0 From nobody Fri Dec 19 12:15:19 2025 Received: from mail-ej1-f44.google.com (mail-ej1-f44.google.com [209.85.218.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 96D6334889E for ; Wed, 29 Oct 2025 16:33:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761755636; cv=none; b=etsHjIdevy5///0YJDHD0OVDEnfFK19uclUFUKnsupyFyz3TgRkPzCukZ2QzWDYpO49FGeUg9ZobBCCzHlghny05o/CI3oOle+KtW14xh/U6PzibS9mkjACmdj/WtK6Gqvwd58rKu13i1V/+5I4HRkHnzSK3MkMLzNo1LV2YSac= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761755636; c=relaxed/simple; bh=x/c8Gau2O3gfj3+358hMm8pmNs7v1wm+QbURDM7KfoM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CjFWprSzjDK/QWGxmHpFVTh5atK0RCsj3qqpkmJnVC4oEhzx+E1Ddz4PpfoPy37ssFBGdfYJ1fd38MDAqKvEtIk4g8LQL8U4bLISU+2eO2h4OTdvJJq19/JoA4J/6CnzPFzRa8kg0z/V3CM4CENw19R5jLzADzEVwVgdoRzoP0k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=nPTPgjgT; arc=none smtp.client-ip=209.85.218.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="nPTPgjgT" Received: by mail-ej1-f44.google.com with SMTP id a640c23a62f3a-b3e7cc84b82so18726966b.0 for ; Wed, 29 Oct 2025 09:33:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761755632; x=1762360432; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=U3ZWzIw+tzavBMOmDgztL9+WJKK3w3KSDq6YVOazGFI=; b=nPTPgjgTOV4QvNiw767EkPXP8nZH+vMB95IK/uUyEapExC1xYDWPM9TY7fbFAnRlyR 5go9001Apeiz1bCEoM9ktB19pnCqBYoMUiyerZmB97OscW9O+xPEWD3Y6x1trevTW6Gl gtcCynIa2cisxbIx6H8ZplCo7ErSv7aVeY2Jmyd1HkESnUSaaT5C6jz/K9oiV202/a/O ZCLReL5xckIEkVq8agGcgTNlA51Si/lOJzd6MVTxeioWIsLWGosNJ02BzgImHOjNw+nS ckb+/uuvh3BfuFZedwV9ZcgQrZ6O8PkRxXJZ+nnx1vURNkUTUuBoe6Rt32URkixI8fci PCkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761755632; x=1762360432; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=U3ZWzIw+tzavBMOmDgztL9+WJKK3w3KSDq6YVOazGFI=; b=Ud7EPqVEsppVfNOPn1sU3wn8NwFRrsaDy1Ns4Q3CtihX8RkueVSKR6f0K6r9GNYd0f JcC7aKC8p0Bm+5Yp0+EZkTzZVkClwVkSoDEhqtdFMKXosXoDQYQAnuNXCr4HcPb/8d1i QQV6+67SQ7UgZHV+T//dgAcFGFywCJyFIgRbQS2EOcxHXPIbCkmWqoFWrPCa6RwdMa7u uj2Hvc+dsqcA0elIlMUAyVEosdFhxJdOFA5S+IaSm1ggOkGCgpWJaUisy8J3+CjMHXKt nLROodZa745jWG4xJu4nKAiZ4QOlCic3LvNXpH9MhTZX/brLeQcOMSwziBdwApsjbLLg 8WGw== X-Forwarded-Encrypted: i=1; AJvYcCWlVF9ZJmY7NqqUJwY2wftnSKSjtcooSXs73hwyDzu+WDi898O54tZQtH208kCshHn8l7plEQGON3kaspw=@vger.kernel.org X-Gm-Message-State: AOJu0YyE2Onm51Ufl5CGkbaCeWRc1r6W0h1O8JX9risjJDj34HqBZVuM OTVE4yKjkeoYH7WWVzdJ+K2jxDyf76LqHzNGy26yVALzHYUcK+6DIkrT X-Gm-Gg: ASbGncsZsNK+OCpf40lqu6fUzMJ+XWMyQp84nthfokczqafzUqCMYkJz1Nh0yO1/mzY gR+6nxoaam33tOUHgWrcQDokhRZH8DbnZincZfju3KNgZDzQMDYWz+M7hl79GvleLBNfgwsDn+h 8BI+yDCSC/3OjHBlfmDsQb6Y386Gg2lBLGjjdcRBbDWcZh/aTKitq0xemseed0fhM0B7dqjtPiO oBMz2OGZVt1P/7vSpujUEnIA8ZHq7fD6tkLHo6lDzWZwkVf/TpVAml8zO0qA14LVrQufnVRjTVP KcqaNCG/oFyxzNQqvtXhkyJ33AW0xDzc5XsvNRD2kXxy8nlpmyHszlVUThR/bmDmd7atAmfbFUZ 4iGUVHleMcuG2AYIOsiwleWlMr2KBaOaUBUAucH9JsMWqTE857Eif+tpWLW2eRgzHOThRnYEeqU unLMc/UXG2wq00u1w95w1Filb5DPgIW3Xx8lvQNRn8TufeMXMfiEK/l/PnGgV8L/WtRWsc X-Google-Smtp-Source: AGHT+IHRieiPBGU6MC5P5jZHI6G/6PD4P6RVg3Iggx9u+yanu4koYZOv2T4MUr84z07ifr1PiVwzxA== X-Received: by 2002:a17:907:3da4:b0:b6d:8da0:9a24 with SMTP id a640c23a62f3a-b703d2dc3fcmr322653366b.9.1761755631652; Wed, 29 Oct 2025 09:33:51 -0700 (PDT) Received: from localhost (p200300e41f274600f22f74fffe1f3a53.dip0.t-ipconnect.de. [2003:e4:1f27:4600:f22f:74ff:fe1f:3a53]) by smtp.gmail.com with UTF8SMTPSA id a640c23a62f3a-b6da1e2226fsm1067814666b.20.2025.10.29.09.33.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Oct 2025 09:33:50 -0700 (PDT) From: Thierry Reding To: Greg Kroah-Hartman , "Rafael J. Wysocki" Cc: x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-riscv@lists.infradead.org, linux-mips@vger.kernel.org, loongarch@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-sh@vger.kernel.org, linux-pci@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 4/7] clk: ingenic: tcu: Use contextual data instead of global variable Date: Wed, 29 Oct 2025 17:33:33 +0100 Message-ID: <20251029163336.2785270-5-thierry.reding@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251029163336.2785270-1-thierry.reding@gmail.com> References: <20251029163336.2785270-1-thierry.reding@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Thierry Reding Pass the driver-specific data via the syscore struct and use it in the syscore ops. Signed-off-by: Thierry Reding --- Changes in v3: - adjust for API changes and update commit message drivers/clk/ingenic/tcu.c | 63 +++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 33 deletions(-) diff --git a/drivers/clk/ingenic/tcu.c b/drivers/clk/ingenic/tcu.c index bc6a51da2072..8c6337d8e831 100644 --- a/drivers/clk/ingenic/tcu.c +++ b/drivers/clk/ingenic/tcu.c @@ -53,9 +53,9 @@ struct ingenic_tcu { struct clk *clk; =20 struct clk_hw_onecell_data *clocks; -}; =20 -static struct ingenic_tcu *ingenic_tcu; + struct syscore syscore; +}; =20 static inline struct ingenic_tcu_clk *to_tcu_clk(struct clk_hw *hw) { @@ -332,6 +332,29 @@ static const struct of_device_id __maybe_unused ingeni= c_tcu_of_match[] __initcon { /* sentinel */ } }; =20 +static int __maybe_unused tcu_pm_suspend(void *data) +{ + struct ingenic_tcu *tcu =3D data; + + if (tcu->clk) + clk_disable(tcu->clk); + + return 0; +} + +static void __maybe_unused tcu_pm_resume(void *data) +{ + struct ingenic_tcu *tcu =3D data; + + if (tcu->clk) + clk_enable(tcu->clk); +} + +static const struct syscore_ops tcu_pm_ops __maybe_unused =3D { + .suspend =3D tcu_pm_suspend, + .resume =3D tcu_pm_resume, +}; + static int __init ingenic_tcu_probe(struct device_node *np) { const struct of_device_id *id =3D of_match_node(ingenic_tcu_of_match, np); @@ -430,7 +453,11 @@ static int __init ingenic_tcu_probe(struct device_node= *np) goto err_unregister_ost_clock; } =20 - ingenic_tcu =3D tcu; + if (IS_ENABLED(CONFIG_PM_SLEEP)) { + tcu->syscore.ops =3D &tcu_pm_ops; + tcu->syscore.data =3D tcu; + register_syscore(&tcu->syscore); + } =20 return 0; =20 @@ -455,42 +482,12 @@ static int __init ingenic_tcu_probe(struct device_nod= e *np) return ret; } =20 -static int __maybe_unused tcu_pm_suspend(void *data) -{ - struct ingenic_tcu *tcu =3D ingenic_tcu; - - if (tcu->clk) - clk_disable(tcu->clk); - - return 0; -} - -static void __maybe_unused tcu_pm_resume(void *data) -{ - struct ingenic_tcu *tcu =3D ingenic_tcu; - - if (tcu->clk) - clk_enable(tcu->clk); -} - -static const struct syscore_ops __maybe_unused tcu_pm_ops =3D { - .suspend =3D tcu_pm_suspend, - .resume =3D tcu_pm_resume, -}; - -static struct syscore __maybe_unused tcu_pm =3D { - .ops =3D &tcu_pm_ops, -}; - static void __init ingenic_tcu_init(struct device_node *np) { int ret =3D ingenic_tcu_probe(np); =20 if (ret) pr_crit("Failed to initialize TCU clocks: %d\n", ret); - - if (IS_ENABLED(CONFIG_PM_SLEEP)) - register_syscore(&tcu_pm); } =20 CLK_OF_DECLARE_DRIVER(jz4740_cgu, "ingenic,jz4740-tcu", ingenic_tcu_init); --=20 2.51.0 From nobody Fri Dec 19 12:15:19 2025 Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E176034C9A6 for ; Wed, 29 Oct 2025 16:33:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761755638; cv=none; b=CeolDgvxAKAJBbcAU5mNz9KbffaSMCDewus9sezbp0qQGOZPgunwv2SVXMDEE0BB/eN+NCCcVH8oyw79gODUc9lZnUAOrCIyUFOl+sGugPDclrqgCSYN0xIyBehbUGPcW60SDEtL0Xs0SvmoZ2SypQxmaK44f4B1+blivz/vkco= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761755638; c=relaxed/simple; bh=oprYoP8yymfB2u4RbgujgsNH+i0ZQOd4dygbCg75p/U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LBsUOvUoHjx45WZ09t5DyaEp72NQ8uPnMYkoYkH6Z+R6ON+zMIF8ZpYgjuYEls7Jnr+/rR4pNzp8/sUKKjM8KUqDcMOEQkKF9+i2kPu8DB9k7wYLQMpNPnajTTFXBkwSmJEeBfwlVkq97GYD2rn4ZOS48OLHsg7nIWCOewvL464= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ly00Kxs6; arc=none smtp.client-ip=209.85.218.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ly00Kxs6" Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-b50206773adso246092466b.0 for ; Wed, 29 Oct 2025 09:33:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761755634; x=1762360434; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=D7niwucTDN3MnvT2f7z1+zCVDCBNmgQwG7r5182Kk6g=; b=ly00Kxs6I33Cts0szvsBGq4htnfjRKgDLfJgp+irQhH6eKg2aQ+FeYSXrktnVcZglE LS1X8DzpiRogsiDYx1QlAxeVNlePirHa2e0t8myHtbCX7sceXUAroMRjnaP7pZtJAbGa ZQzZ7QGt9Cgzf9F2250kNiJs2S8eGvhA39TaZ7wBXvUJagjjHROm1FCFEM7ezV7ijWgH yYqbR7ZF6gG5NFwzSbTizMHnnb6tYgQvX8/iw3UfEgYviyLxh7pJ1sBtoXpBN5ZZsY3J VUAZn8FHew4EfgiHNxME1+S8wmyvm3kKigBup4ENf8sONeuxDxeoy2tUw78yc1EHNZon eVtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761755634; x=1762360434; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=D7niwucTDN3MnvT2f7z1+zCVDCBNmgQwG7r5182Kk6g=; b=mW5Ist+OaS7eZPiupR9vylTG8wFETLNMnTbf9XuZsQ0pF6huT+l/zI8hNbfMsJVUZ8 klLFAmS/cNH5fPDLE748kkgEeeWV1wv74b2JkJ5RJ7u3iRnhNmdiSYhwBW7yrB7CKPOn /uhrt5QS6kUTQPzp5rFjl98Bv1zLgR7Eio9+nxkBEUJIH5AlSBjICuvMPNYw6QdMnJLd FzsimJpl8HkRuq57kC1VA58yL+UBLoxYhch1GMB7xYbd8PH2JtTgGeJ6tv/JEc4ol0pO ssHWbFFQn1lNH8zAfDH5cWB6jY3whU+e+St42h5ijlUY4IOfj+LDtXze2TzwK4ISe2A8 hEZg== X-Forwarded-Encrypted: i=1; AJvYcCXKqq4p9T9IfIvEXARz2XBFql3gFXX9xQga7SUhWI8FrVtKzF5NrbLcVTRDo2Wf9aDuaGlovC35gtx+veY=@vger.kernel.org X-Gm-Message-State: AOJu0YywjwKdbmCrWKAP3Ji27DPYHLAl7NC0DaHSF/1Vbbv2QEPgPT3+ 4eghUT4RIa23NcahEZ2NlZQ82EapsSb81gYihqxd7DNewAeEVnju58hU X-Gm-Gg: ASbGncu52ukDWdLmwYrBTo8DGD37z0v1F7l7uU1MZrU3p0Yqp2PyXUof4ixfbRWxFM5 1+SZyNS5cI2vTj0TyMu/QGxbQFgwyeAVUS+xcAzByxgFhyLsxqPMvuD+1kiRtFgsFYH6DPhDNw3 o2eGwg2h+sffih2kY3cZpQX1akYBBCJ77hOEfHMQ8GopgJ2JW+JV4rCmwVAtcDJ9QeUjXreq6B3 3hLvHLbzvFHr9oobCaOUzkZW9JpPnUFiWzfnvrJ74T19XP7geK4s0vrdxIrrmzTEu3XT6sGSW54 S8kTqrSTC7wb+XKPqIpK4+5LIRCm2nJYqroRdXgvyWzp+i/rYSuXqEtZUscSC78VkTmuJBwItPK aLeWRPBZX2QO2CZUEAUp/VRe7Xz3BTl2+CX0rOWhJG836ZsQfSDp+9GrS8Tiza83S0jSAsH2XFz 6OI5EPdfIVampj37S/rCh5rrBnvjHolPmBTM/RpdbfKlP/Qv/FX9xt3TGTLEOTQ5lzBCWp X-Google-Smtp-Source: AGHT+IGxst0GGPbE3zlpzuYvmZD7MtT+fgNns/2gbspQBUcAcExwpAJ9gNyBIh9hmr+9IwgchPtgzg== X-Received: by 2002:a17:906:6a21:b0:b3f:f6d:1d9e with SMTP id a640c23a62f3a-b7051f278acmr28890666b.6.1761755633985; Wed, 29 Oct 2025 09:33:53 -0700 (PDT) Received: from localhost (p200300e41f274600f22f74fffe1f3a53.dip0.t-ipconnect.de. [2003:e4:1f27:4600:f22f:74ff:fe1f:3a53]) by smtp.gmail.com with UTF8SMTPSA id a640c23a62f3a-b6d853696a3sm1468789266b.27.2025.10.29.09.33.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Oct 2025 09:33:52 -0700 (PDT) From: Thierry Reding To: Greg Kroah-Hartman , "Rafael J. Wysocki" Cc: x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-riscv@lists.infradead.org, linux-mips@vger.kernel.org, loongarch@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-sh@vger.kernel.org, linux-pci@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 5/7] clk: mvebu: Use contextual data instead of global variable Date: Wed, 29 Oct 2025 17:33:34 +0100 Message-ID: <20251029163336.2785270-6-thierry.reding@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251029163336.2785270-1-thierry.reding@gmail.com> References: <20251029163336.2785270-1-thierry.reding@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Thierry Reding Pass the driver-specific data via the syscore struct and use it in the syscore ops. Signed-off-by: Thierry Reding --- Changes in v3: - adjust for API changes and update commit message drivers/clk/mvebu/common.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/drivers/clk/mvebu/common.c b/drivers/clk/mvebu/common.c index 5adbbd91a6db..8797de93472c 100644 --- a/drivers/clk/mvebu/common.c +++ b/drivers/clk/mvebu/common.c @@ -189,6 +189,7 @@ void __init mvebu_coreclk_setup(struct device_node *np, DEFINE_SPINLOCK(ctrl_gating_lock); =20 struct clk_gating_ctrl { + struct syscore syscore; spinlock_t *lock; struct clk **gates; int num_gates; @@ -196,11 +197,10 @@ struct clk_gating_ctrl { u32 saved_reg; }; =20 -static struct clk_gating_ctrl *ctrl; - static struct clk *clk_gating_get_src( struct of_phandle_args *clkspec, void *data) { + struct clk_gating_ctrl *ctrl =3D data; int n; =20 if (clkspec->args_count < 1) @@ -217,12 +217,16 @@ static struct clk *clk_gating_get_src( =20 static int mvebu_clk_gating_suspend(void *data) { + struct clk_gating_ctrl *ctrl =3D data; + ctrl->saved_reg =3D readl(ctrl->base); return 0; } =20 static void mvebu_clk_gating_resume(void *data) { + struct clk_gating_ctrl *ctrl =3D data; + writel(ctrl->saved_reg, ctrl->base); } =20 @@ -231,13 +235,10 @@ static const struct syscore_ops clk_gate_syscore_ops = =3D { .resume =3D mvebu_clk_gating_resume, }; =20 -static struct syscore clk_gate_syscore =3D { - .ops =3D &clk_gate_syscore_ops, -}; - void __init mvebu_clk_gating_setup(struct device_node *np, const struct clk_gating_soc_desc *desc) { + static struct clk_gating_ctrl *ctrl; struct clk *clk; void __iomem *base; const char *default_parent =3D NULL; @@ -288,7 +289,9 @@ void __init mvebu_clk_gating_setup(struct device_node *= np, =20 of_clk_add_provider(np, clk_gating_get_src, ctrl); =20 - register_syscore(&clk_gate_syscore); + ctrl->syscore.ops =3D &clk_gate_syscore_ops; + ctrl->syscore.data =3D ctrl; + register_syscore(&ctrl->syscore); =20 return; gates_out: --=20 2.51.0 From nobody Fri Dec 19 12:15:19 2025 Received: from mail-ed1-f52.google.com (mail-ed1-f52.google.com [209.85.208.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 32F0A34F27D for ; Wed, 29 Oct 2025 16:33:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761755641; cv=none; b=g84WR9GdquZU5EvM5dLwbi9QIQvp4dMKAHls7kX9zox2YPXqNTwG5mKGOyb1sKKlTrAybc8j6inlYCtlqXfZ3qXbf0mYln1v60hbYjKr229ceKBhwdYIDyAOsMxeepyOkN79eZgTlPV+J0HSdW8+M97S1uSpWcRpl8GDaPy/sP0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761755641; c=relaxed/simple; bh=KUSAVjewTwFiW9VLR1yzUFBIzCxCjea5cQlqAAL9Lys=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Hr4/BNBNFcR8Xs5VmD6hf0+MZkLnUf4mxkmx7J04P91ofilZ4+DM6TTG369q82txi3HOupuGQO7Pf7YyNP1It4IvJk9YtnEsBR8VpGbXFzgseOQWhYZ2ZGNQGkc50xtD2cngcTkt1sLAwnzKwyaI2iB9dNQ9SbtHAf7hb23FtPQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=lSdr/5bv; arc=none smtp.client-ip=209.85.208.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="lSdr/5bv" Received: by mail-ed1-f52.google.com with SMTP id 4fb4d7f45d1cf-62fc0b7bf62so4799797a12.2 for ; Wed, 29 Oct 2025 09:33:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761755636; x=1762360436; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=JhxpRTp1uOQ7/yJc+0xNuSmcJdpaGHV/pw/kDcH2Yfg=; b=lSdr/5bvX4L9Id/q8FSipvEwyetUWz4WBkeyFYVVVBlPnTV0rwAUOnpEDqL/+tXuVS GWLtaRaqPNWhScrtCqGSSZ98mmwDjO+WvH7T1yO8nP9q1FAMPcGqOuObAHYfNdZF0+9B bXXAVe9Cozlc9uzmQ8teNiGwlXYryaqB1D731+cUoqfSp2P6yQKgQ1UXp7UAWaPfZGSv RSMgbmZdoi+3AXqfLwumOuYWEKwtFi4b8lc6qU/xzrKw8n2zBAOlOBCcIWQcs4HF4ep1 /IDVCbq9wBw+RZUO8VY9DM/HQ7eVcmMHMiy9uH8+dZk4CV4dt+fw1/fa2fb9mMMDBdqD bktw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761755636; x=1762360436; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JhxpRTp1uOQ7/yJc+0xNuSmcJdpaGHV/pw/kDcH2Yfg=; b=Kx1klBWpypMG/jA/dGbQ+JDzhcuh/OXLKDV9LReC8QW7QZcvvAA8Mt29DShJlXGCn/ kaZoLbOpimmiVwLjNa/WMMGMJ+g64L2TxrlszFKKdwDVWJbkx8W1Pk5BfibzXKZafQ8x Q+aI+R8L5MijG9L7L3yRB/FTdH3O+nGVOonwxnTKaPDJ8WjW2oRhBMM/rdER//YKoBa4 csAkjp22ztvSXwipZtCO6qXcDxvc1Cj3gVPBXJshALWiCe7k/XxWhMOsbphlf0zC8VHn 8x35P65aZWpZJMcUAAgS0siM0dF/OiLsnnZyTGv6RCfNXaV2WT+0SQ/X5CJUqzA3JUCS CJYg== X-Forwarded-Encrypted: i=1; AJvYcCWAM1hNWr7CPwW2sk+l3kBMMI5r/WMrg0BciBpHx56J2fDJ9Ss6sU0RhR2bxRL1eJblUDcMc3EIt6N3APA=@vger.kernel.org X-Gm-Message-State: AOJu0YwuQsxGc6cpY+IYvMFlq8vSSQVdVSqq1MCTvrl8qUEB1Sy2UF3g Nxkt/7UB3E9bZEigbYF5sedjxAsZWk3JCuWO24HzCApV0KVCU3+Ui0Ds X-Gm-Gg: ASbGncsgdeVIHcwIwRcG7pQiZn/f8ciTVAvrAu6pBHpXYFxA0eI3IzyC0qdL/xLFWjs dBgPb6K40gW0kgbZJLHL8WvDI8BqrI5+2Hju1dkrIQl1AmLZ36FY4SEqfNeUlM5qCSs7ZBglvh2 aId38WrtQ1KrM2Pwn19XqQzJlla5QhslwJn0ZD1LulWsCa41mG204Bzn0Ty1RzF4PWKFRrLh7ou elwOsbkz58EwmTlYhCzZrf70AlE7sn+/rAJDesCWXg/+lv4mtaK0k7WH8Ky3YI902DzERmqfjkW U12f9d+r8phj+MFW8aJIFZQORtnlxtD1ruwEfgK/kLsKi6W0cSgSs9+msyLuL82gyuqQ0nMLniH u8iQPJpc1DznpAyv99PlV9oHuAV/eL9K6kEqVA3TrHI1B60VpaTCXuBWpOlwo/E96TLnUdWfWuP fXhtsK3blk79sQeWnD07F4uyqi2Uq9B/qCfpHruWa+jr48JnB1RT/yAV9puzDe7IUn0rkP X-Google-Smtp-Source: AGHT+IEBhKyqSuQzRg5+jPbNr1lJJJfXBtMjYTViFyDgVE4pc7ia4Gu9caVkoUUyuihmK5MM+ILYDA== X-Received: by 2002:a05:6402:5c9:b0:62f:50ff:b675 with SMTP id 4fb4d7f45d1cf-6404437f5a7mr2656312a12.33.1761755636037; Wed, 29 Oct 2025 09:33:56 -0700 (PDT) Received: from localhost (p200300e41f274600f22f74fffe1f3a53.dip0.t-ipconnect.de. [2003:e4:1f27:4600:f22f:74ff:fe1f:3a53]) by smtp.gmail.com with UTF8SMTPSA id 4fb4d7f45d1cf-6404de640fcsm1695354a12.8.2025.10.29.09.33.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Oct 2025 09:33:54 -0700 (PDT) From: Thierry Reding To: Greg Kroah-Hartman , "Rafael J. Wysocki" Cc: x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-riscv@lists.infradead.org, linux-mips@vger.kernel.org, loongarch@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-sh@vger.kernel.org, linux-pci@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 6/7] irqchip/irq-imx-gpcv2: Use contextual data instead of global variable Date: Wed, 29 Oct 2025 17:33:35 +0100 Message-ID: <20251029163336.2785270-7-thierry.reding@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251029163336.2785270-1-thierry.reding@gmail.com> References: <20251029163336.2785270-1-thierry.reding@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Thierry Reding Pass the driver-specific data via the syscore struct and use it in the syscore ops. Signed-off-by: Thierry Reding --- Changes in v3: - adjust for API changes and update commit message - remove unused global variable drivers/irqchip/irq-imx-gpcv2.c | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/drivers/irqchip/irq-imx-gpcv2.c b/drivers/irqchip/irq-imx-gpcv= 2.c index 04f7ba0657be..ebfc659af385 100644 --- a/drivers/irqchip/irq-imx-gpcv2.c +++ b/drivers/irqchip/irq-imx-gpcv2.c @@ -19,6 +19,7 @@ =20 =20 struct gpcv2_irqchip_data { + struct syscore syscore; struct raw_spinlock rlock; void __iomem *gpc_base; u32 wakeup_sources[IMR_NUM]; @@ -26,8 +27,6 @@ struct gpcv2_irqchip_data { u32 cpu2wakeup; }; =20 -static struct gpcv2_irqchip_data *imx_gpcv2_instance __ro_after_init; - static void __iomem *gpcv2_idx_to_reg(struct gpcv2_irqchip_data *cd, int i) { return cd->gpc_base + cd->cpu2wakeup + i * 4; @@ -35,14 +34,10 @@ static void __iomem *gpcv2_idx_to_reg(struct gpcv2_irqc= hip_data *cd, int i) =20 static int gpcv2_wakeup_source_save(void *data) { - struct gpcv2_irqchip_data *cd; + struct gpcv2_irqchip_data *cd =3D data; void __iomem *reg; int i; =20 - cd =3D imx_gpcv2_instance; - if (!cd) - return 0; - for (i =3D 0; i < IMR_NUM; i++) { reg =3D gpcv2_idx_to_reg(cd, i); cd->saved_irq_mask[i] =3D readl_relaxed(reg); @@ -54,13 +49,9 @@ static int gpcv2_wakeup_source_save(void *data) =20 static void gpcv2_wakeup_source_restore(void *data) { - struct gpcv2_irqchip_data *cd; + struct gpcv2_irqchip_data *cd =3D data; int i; =20 - cd =3D imx_gpcv2_instance; - if (!cd) - return; - for (i =3D 0; i < IMR_NUM; i++) writel_relaxed(cd->saved_irq_mask[i], gpcv2_idx_to_reg(cd, i)); } @@ -70,10 +61,6 @@ static const struct syscore_ops gpcv2_syscore_ops =3D { .resume =3D gpcv2_wakeup_source_restore, }; =20 -static struct syscore gpcv2_syscore =3D { - .ops =3D &gpcv2_syscore_ops, -}; - static int imx_gpcv2_irq_set_wake(struct irq_data *d, unsigned int on) { struct gpcv2_irqchip_data *cd =3D d->chip_data; @@ -279,8 +266,9 @@ static int __init imx_gpcv2_irqchip_init(struct device_= node *node, */ writel_relaxed(~0x1, cd->gpc_base + cd->cpu2wakeup); =20 - imx_gpcv2_instance =3D cd; - register_syscore(&gpcv2_syscore); + cd->syscore.ops =3D &gpcv2_syscore_ops; + cd->syscore.data =3D cd; + register_syscore(&cd->syscore); =20 /* * Clear the OF_POPULATED flag set in of_irq_init so that --=20 2.51.0 From nobody Fri Dec 19 12:15:19 2025 Received: from mail-ed1-f44.google.com (mail-ed1-f44.google.com [209.85.208.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EA12D350A0B for ; Wed, 29 Oct 2025 16:33:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761755642; cv=none; b=KBkTRUdPHQxyQbJoEgPHLlT3co88qlUw2WTwFYRSW3qeFwopDtuoQNB4qXi+MCPAgNKQOuoFKCgCeW6iHxh/HhAJ562c5CWqOURORQoWas8d1FYWQskjhwgLjZkbKH1vbYPYoqiFR8qeJU4WsFAYe2w/cMBDn+7MpGpln0M3vbs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761755642; c=relaxed/simple; bh=1X730H41akqVRCdUivi5jsHS02y7Sh1RLu5JYxa09ss=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dFaiE0+CHC4pmQaUVYCnmvr1NvV2erkMtNf6act0fcyorrAt0or4sbkxayxAZpg6w+lO9qfBpEVM7iPgcBhtCTewYx20J8xafjMbsMWouK9q+3aq095kqJCiBqjzkEu+lCQMtaLRe7tUE3OncCq3PT4LOlIryaJlKPDF74aVIXc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=b44pwGnt; arc=none smtp.client-ip=209.85.208.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="b44pwGnt" Received: by mail-ed1-f44.google.com with SMTP id 4fb4d7f45d1cf-63d6ee383bdso16036945a12.2 for ; Wed, 29 Oct 2025 09:33:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761755638; x=1762360438; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MkaU4JsM1D+JY4wiuorXEjJy2zEEfje0oExQGt/PLrU=; b=b44pwGntTRz8gLMUqd2gjzyocJPKEPm/g1rTfBAtqXPxeCbUzveo3LWabswC/+gXrJ uEScr3Ytkylq7c7h9FMLlQJ/+GdD44F6jngEIePa8praZsXBgwvK+75UGN+FiN7OKmw2 MGzAqbozNv7izs7u5BoKXjjeaZhw7gkRUPbJ5F/r2236rI/kFGl66tjhqA1TIklTkJaf QsnXkowHK1vlrVsSN9y6IVCcy8nGdy3RNK+lcetSjUb6kQ9DchO5w47U/9ZVuucsk1fC +BZX+tp7XaTjJ/4oq4HbpM2IIVdhD6RPs6sZGmO0Xl9j4L8RBhXYM0Bz4sKp2/XTPQAF e2HQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761755638; x=1762360438; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MkaU4JsM1D+JY4wiuorXEjJy2zEEfje0oExQGt/PLrU=; b=hjs9MRFJeD+lCGHWt0H7wz4FOpytpO3XkbhXa5Dp4/A3uWEHXI/I+8vWxbaanOWsSf k9Khyhi7cRe+JvJQKzj1ZLpGz4Nbn/kJwXKlrva3HmZqXy0848psOr6lhszxK6Vccioi 0G2WcMa4t/FiX41iK57yZG6vgWhiZe/QD0Jg8AqvNkEmXJBlJgecRdjosthIUjnC5u5r qkpQMJ6hRbJhuQTqn9Kkog0UN5YcTs1yn07vYG7JCtmobbB3yK9iTXACex3eWQO7Xmlz Yk8tPJjfTuHp8pJGlS//zMAN0M9208lUX73XGWGMrLBBP6E/3oQWCQbKv5Up4UrdYtnf mz4A== X-Forwarded-Encrypted: i=1; AJvYcCUkTWBhOhbm6pGVa2iSONyVG6Zy/NvZGvK6K+ewXrwkAZU+/Qkuzj+VivpMj7gwd2jvXA4NrcEgIPwyiRU=@vger.kernel.org X-Gm-Message-State: AOJu0YxowFOeR1FRgcvjbT2jBkO2Z4ftp+E1xhSAhx2Bm01xWeK2vxnR R6X5rUrpkavwxIriYe+KLqcYkrg6IbfUnPyrdPFFq7Nnpkqve4wi2yTf X-Gm-Gg: ASbGncut1V2Hmo3l6+5DnAjGkMnWw2UZR/f7d9VksWSaiLG2TTG0bveUfQ4mA1EZdJ9 dIpH6Ffp3MtT0y9EPG56nGf/1Ns5Tvj+Ohii50VKYjoLB9GB11Mgg4im+AZoIuwiUgZQO3sRRY3 4f2C7QwuK0MHwwGdUD7J+hHyUmfskv/0jIiaHk5V6tkN4UJ6wCYCzW8rGaTT5HlcuF0nwdO+ABi 046Cq3r/pViVf8u2Uf9+ZuImBDMa7wkrLQDbgcgZ7sFBMbZSDHiT0UsjR7UJpTXvxPUUNpzjuvk 4yfiIFPvGOWzl27LLKgHDvmdUvouJyMrgDqmqAafIgZ5gXTCRk7cYX2EwNyNJLngYfhfyL9IBut 2NdDgDk38Q/XupzAbT8ssqDyf4OcSYM6WS0jaBrun/yeKGV2+Ol+4AaxkJda/mk0A9OJ06Q06PM Ip2TKoTUpi5BdGF2RvuAuVKFYGa6/NoMi81Yc20+8I7qn+VGq/SN3kfACwVwdBUgJg69Nv X-Google-Smtp-Source: AGHT+IHnWRqBehOWBCyuY7cscNzDJLcQ8Q1/xskpkrSKjJiOMcliraM9J9uBI/ZGi7u/t3zd09QFLA== X-Received: by 2002:a05:6402:e9b:b0:634:544b:a740 with SMTP id 4fb4d7f45d1cf-64044255cf2mr2554809a12.22.1761755638150; Wed, 29 Oct 2025 09:33:58 -0700 (PDT) Received: from localhost (p200300e41f274600f22f74fffe1f3a53.dip0.t-ipconnect.de. [2003:e4:1f27:4600:f22f:74ff:fe1f:3a53]) by smtp.gmail.com with UTF8SMTPSA id 4fb4d7f45d1cf-63e86c6d7d3sm12474615a12.27.2025.10.29.09.33.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Oct 2025 09:33:56 -0700 (PDT) From: Thierry Reding To: Greg Kroah-Hartman , "Rafael J. Wysocki" Cc: x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-riscv@lists.infradead.org, linux-mips@vger.kernel.org, loongarch@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-sh@vger.kernel.org, linux-pci@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 7/7] soc/tegra: pmc: Use contextual data instead of global variable Date: Wed, 29 Oct 2025 17:33:36 +0100 Message-ID: <20251029163336.2785270-8-thierry.reding@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251029163336.2785270-1-thierry.reding@gmail.com> References: <20251029163336.2785270-1-thierry.reding@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Thierry Reding Pass the driver-specific data via the syscore struct and use it in the syscore ops. Signed-off-by: Thierry Reding --- Changes in v3: - adjust for API changes and update commit message drivers/soc/tegra/pmc.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c index f57e5a4b4d96..6e0ae0ede263 100644 --- a/drivers/soc/tegra/pmc.c +++ b/drivers/soc/tegra/pmc.c @@ -3150,6 +3150,7 @@ static void tegra186_pmc_process_wake_events(struct t= egra_pmc *pmc, unsigned int =20 static void tegra186_pmc_wake_syscore_resume(void *data) { + struct tegra_pmc *pmc =3D data; u32 status, mask; unsigned int i; =20 @@ -3163,6 +3164,8 @@ static void tegra186_pmc_wake_syscore_resume(void *da= ta) =20 static int tegra186_pmc_wake_syscore_suspend(void *data) { + struct tegra_pmc *pmc =3D data; + wke_read_sw_wake_status(pmc); =20 /* flip the wakeup trigger for dual-edge triggered pads @@ -3836,6 +3839,7 @@ static const struct tegra_pmc_regs tegra186_pmc_regs = =3D { static void tegra186_pmc_init(struct tegra_pmc *pmc) { pmc->syscore.ops =3D &tegra186_pmc_wake_syscore_ops; + pmc->syscore.data =3D pmc; register_syscore(&pmc->syscore); } =20 --=20 2.51.0