From nobody Mon Oct 6 19:04:39 2025 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (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 58689299A83; Thu, 17 Jul 2025 10:32:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752748377; cv=none; b=FIjpVxMtxV+dGQKmL6GDl0F3xdqQu2iGjFxfvo5ljx04lvKcJtgFZrucJ8UjizgB6Ad1IWdvmvkwJfwT5dVvnkWM+CqVRJ1bJl9tKd+JxUvJQ6EBg5C5FwdskEtjboS2gMSyGkk5ep+e7jFfSBuQDy5XSf2nGwN4YjaWpfhruS4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752748377; c=relaxed/simple; bh=i8X7XZvAwNf8YFXww+oDpOtzQRCCe4DQt8Xeg6kZEHM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Lz48sPEdBM5SVgd7Kt/uE5UpthTEcU118l4pGFFGVdi2i0FygBmvW0/Zd5NjYshWsqfrkxgClb774vlR6LLOHHLTS8q5soDK1IRchLnmG3HCXr7EThXkIUgTrDs+q3Ozr9X8BBw0mg1/DRgI1+dVdzP26LlH8IckSYzKDY9y+c0= 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=Am2rEdty; arc=none smtp.client-ip=209.85.221.41 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="Am2rEdty" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-3a57ae5cb17so412898f8f.0; Thu, 17 Jul 2025 03:32:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752748371; x=1753353171; 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=fmiAxeXJl7NfWYj2quZOlWIoxDl5YAGHUrINbxFGpug=; b=Am2rEdty9PotGJTvXE5W58WUawta5dD0RD2XF9EmWw1zm+XMDdnrKOUk0g+328QO8+ bcFhksN4Sbb4s9OUlpfyE7p08IjuyEGFfDbMKFdxD2wGjXQ8L6D+aM88/U4eqDnjh3VR 03DLgrK9IYmI5YiJOHQC7NA6CqfcJ2INyTWNqg/G2En4Pvk+/ONYopepiYglCUnON2qS JlnmzGYNJFt3rXwaFaDsrgC3/ifRo6z3yLPzPSqM7/i+IhCdWcRV/68H3hOGgx+y6R1v QV3kCYozeIGdOvTlmU8ScvWNcSwaNl2CmvPoOwkkOLEJsLKXQFrFu/HVrTfMw+GDsDiL THMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752748371; x=1753353171; 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=fmiAxeXJl7NfWYj2quZOlWIoxDl5YAGHUrINbxFGpug=; b=GIWvHir9wh1inrVXdgTxDHH/vNAz1cYYvUmwERBrGlmMlYjSWpD6ItQHYOS5NW5YVZ O+XU1ITLj1+kVWYYEG2XAyRtIQZ+a1m6exFd4TKbhPd+iDvnxWs9FX6N/f5doJQrhNQp an7mfWU7S918hfmcu+RnA5oYSyWx9XQo8ELeS66WRfVTGIWkONqyvmWe54Zs91CvuFwW PkHmbpsbjnxF07hoJP6qkbQIVWmI75GavKHRnRU+l5OdAYaZqSWanrh3+jE0hnAotKaV z6A5AnSBGCshhoalbjcgudaGvl9JEv4zmXMGEsDdMhtxeum3/5R2Uvu1XeGdz6eXyIr/ F2zQ== X-Forwarded-Encrypted: i=1; AJvYcCU3P3lSiJy25PPWeGdTU/NZ2dxNsJRU4mUSkibM86rCuySQI0fZ0556h0m0MQcL5SQzEx1r9taYT584Sg==@vger.kernel.org, AJvYcCULj8zUbScY1yxcqqTOJkw0csjlzuzGW0zYobTxIjJQ0KQHxVbxc8lD2ifxJF7IyaiVwMI6XbKIDQyO@vger.kernel.org, AJvYcCUZZ13hpwu0MLAdV/I1g9mqEF5tpGQwED5CIJXGc2fbvqJpNauqR2c47ZBv1ZCIvZPFIQEJuE62Ymc=@vger.kernel.org, AJvYcCVHsUVbx7K9LEh3F/EAZTNanwYnP2pvQArjSuvO8lt4SvT8WO+kzF7cnfJi3zyd7bpIFZi02nTAhxnYOnWp@vger.kernel.org, AJvYcCWYBA5TfBcuC8iALQ1Gr8xdGYCrnw/44oYGh3VH7M8PJHDf6DvEKtOAkGVQfuiVx0U/HlsrCwX502f/@vger.kernel.org X-Gm-Message-State: AOJu0Yx3MRkUfEJo928Zn7qBmUmTxPnKrtz38WaAsNxvsGuUSlSfVEl/ ShMgVdQolKMzkiebq1vkLs5gAa5tW5JQ7CSrVVqy6AsJCQqFFNAyWRYs X-Gm-Gg: ASbGnctNt9/lvvCYKpQpaXfVXlMV3/U53AVfT4gU/rC7exdFoZ3gGWtISrz+wHLnqsl vcwKy5Dk5i+AZ6IgM6PRjDTtQP9pvR3/fC3xMRkgpjfrt+nM0f/3T1aDORu7W41WxEiHZgUY9Dt tmR+lVNbDWJlY6YgtFC2/lHxgsp80XViKRzmXSlNhQ35Vn1rGD1mb8xs8cZfa6HZVGUuKVrVU77 RanrR9BHA1Mnr9b1MDVCRTzfX1EmYzOCvAR+hvIgAxMbQkvWjISnleg28Cm6r9GMPLj11QDAIFA Y/wG6Y+xfmUlhXWLsH2gPQVqjat9fwg5JjZ1rAfYY5oag6ExS18qtdNXAfpgqMzDoKRwVooC+L5 LZglHXgiCx9ijeVtz3fcGKzEi2nnr50nAMDKkNYaDSxwx4EDtFCdTZWFsGwTHb8VcJyTyqqTYv3 cV8vZpFPVzJuLSVg== X-Google-Smtp-Source: AGHT+IEKMrV8c/Mr3JU9gEtVP9yynTvipBxlgXW5f1nKxOGLuC6ebyFVEoN2I1Ei9WvFgRTQy4DTCQ== X-Received: by 2002:adf:9dc3:0:b0:3a4:f918:9db9 with SMTP id ffacd0b85a97d-3b60e5127e4mr4145956f8f.32.1752748369847; Thu, 17 Jul 2025 03:32:49 -0700 (PDT) Received: from localhost (p200300e41f4e9b00f22f74fffe1f3a53.dip0.t-ipconnect.de. [2003:e4:1f4e:9b00:f22f:74ff:fe1f:3a53]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3b5e8bd1647sm20270513f8f.1.2025.07.17.03.32.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Jul 2025 03:32:48 -0700 (PDT) From: Thierry Reding To: Greg Kroah-Hartman 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 v2 1/7] syscore: Pass context data to callbacks Date: Thu, 17 Jul 2025 12:32:35 +0200 Message-ID: <20250717103241.2806798-2-thierry.reding@gmail.com> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20250717103241.2806798-1-thierry.reding@gmail.com> References: <20250717103241.2806798-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 a pointer to the syscore_ops structure that was registered to the callbacks. This enables callbacks to act on instance data (syscore_ops can be embedded into other structures, and driver-specific data can be obtained using container_of()) rather than the current practice of relying on global variables. Signed-off-by: Thierry Reding --- Changes in v2: - add missing kerneldoc for added ops parameter arch/arm/mach-exynos/mcpm-exynos.c | 4 ++-- arch/arm/mach-exynos/suspend.c | 14 +++++++------- arch/arm/mach-pxa/irq.c | 4 ++-- arch/arm/mach-pxa/mfp-pxa2xx.c | 4 ++-- arch/arm/mach-pxa/mfp-pxa3xx.c | 4 ++-- arch/arm/mach-pxa/smemc.c | 4 ++-- arch/arm/mach-s3c/irq-pm-s3c64xx.c | 4 ++-- arch/arm/mach-s5pv210/pm.c | 2 +- arch/arm/mach-versatile/integrator_ap.c | 4 ++-- arch/arm/mm/cache-b15-rac.c | 4 ++-- arch/loongarch/kernel/smp.c | 4 ++-- arch/mips/alchemy/common/dbdma.c | 4 ++-- arch/mips/alchemy/common/irq.c | 8 ++++---- arch/mips/alchemy/common/usb.c | 4 ++-- arch/mips/pci/pci-alchemy.c | 4 ++-- arch/powerpc/platforms/cell/spu_base.c | 2 +- arch/powerpc/platforms/powermac/pic.c | 4 ++-- arch/powerpc/sysdev/fsl_lbc.c | 4 ++-- arch/powerpc/sysdev/fsl_pci.c | 4 ++-- arch/powerpc/sysdev/ipic.c | 4 ++-- arch/powerpc/sysdev/mpic.c | 4 ++-- arch/powerpc/sysdev/mpic_timer.c | 2 +- arch/sh/mm/pmb.c | 2 +- arch/x86/events/amd/ibs.c | 4 ++-- arch/x86/hyperv/hv_init.c | 4 ++-- arch/x86/kernel/amd_gart_64.c | 2 +- arch/x86/kernel/apic/apic.c | 4 ++-- arch/x86/kernel/apic/io_apic.c | 9 +++++++-- arch/x86/kernel/cpu/aperfmperf.c | 6 +++--- arch/x86/kernel/cpu/intel_epb.c | 8 ++++---- arch/x86/kernel/cpu/mce/core.c | 6 +++--- arch/x86/kernel/cpu/microcode/core.c | 7 ++++++- arch/x86/kernel/cpu/mtrr/legacy.c | 4 ++-- arch/x86/kernel/cpu/umwait.c | 2 +- arch/x86/kernel/i8237.c | 2 +- arch/x86/kernel/i8259.c | 6 +++--- arch/x86/kernel/kvm.c | 4 ++-- drivers/acpi/pci_link.c | 2 +- drivers/acpi/sleep.c | 4 ++-- drivers/base/firmware_loader/main.c | 2 +- drivers/base/syscore.c | 8 ++++---- drivers/bus/mvebu-mbus.c | 4 ++-- drivers/clk/at91/pmc.c | 4 ++-- drivers/clk/imx/clk-vf610.c | 4 ++-- drivers/clk/ingenic/pm.c | 4 ++-- drivers/clk/ingenic/tcu.c | 4 ++-- drivers/clk/mvebu/common.c | 4 ++-- drivers/clk/rockchip/clk-rk3288.c | 4 ++-- drivers/clk/samsung/clk-s5pv210-audss.c | 4 ++-- drivers/clk/samsung/clk.c | 4 ++-- drivers/clk/tegra/clk-tegra210.c | 4 ++-- drivers/clocksource/timer-armada-370-xp.c | 4 ++-- drivers/cpuidle/cpuidle-psci.c | 4 ++-- drivers/gpio/gpio-mxc.c | 4 ++-- drivers/gpio/gpio-pxa.c | 4 ++-- drivers/gpio/gpio-sa1100.c | 4 ++-- drivers/hv/vmbus_drv.c | 4 ++-- drivers/iommu/amd/init.c | 4 ++-- drivers/iommu/intel/iommu.c | 4 ++-- drivers/irqchip/exynos-combiner.c | 6 ++++-- drivers/irqchip/irq-armada-370-xp.c | 4 ++-- drivers/irqchip/irq-bcm7038-l1.c | 4 ++-- drivers/irqchip/irq-gic-v3-its.c | 4 ++-- drivers/irqchip/irq-i8259.c | 4 ++-- drivers/irqchip/irq-imx-gpcv2.c | 4 ++-- drivers/irqchip/irq-loongson-eiointc.c | 4 ++-- drivers/irqchip/irq-loongson-htpic.c | 2 +- drivers/irqchip/irq-loongson-htvec.c | 4 ++-- drivers/irqchip/irq-loongson-pch-lpc.c | 4 ++-- drivers/irqchip/irq-loongson-pch-pic.c | 4 ++-- drivers/irqchip/irq-mchp-eic.c | 4 ++-- drivers/irqchip/irq-mst-intc.c | 4 ++-- drivers/irqchip/irq-mtk-cirq.c | 4 ++-- drivers/irqchip/irq-renesas-rzg2l.c | 4 ++-- drivers/irqchip/irq-sa11x0.c | 4 ++-- drivers/irqchip/irq-sifive-plic.c | 4 ++-- drivers/irqchip/irq-sun6i-r.c | 10 +++++----- drivers/irqchip/irq-tegra.c | 4 ++-- drivers/irqchip/irq-vic.c | 4 ++-- drivers/leds/trigger/ledtrig-cpu.c | 6 +++--- drivers/macintosh/via-pmu.c | 4 ++-- drivers/power/reset/sc27xx-poweroff.c | 2 +- drivers/sh/clk/core.c | 2 +- drivers/sh/intc/core.c | 4 ++-- drivers/soc/bcm/brcmstb/biuctrl.c | 4 ++-- drivers/soc/tegra/pmc.c | 4 ++-- drivers/thermal/intel/intel_hfi.c | 4 ++-- drivers/xen/xen-acpi-processor.c | 2 +- include/linux/syscore_ops.h | 6 +++--- kernel/cpu_pm.c | 4 ++-- kernel/irq/generic-chip.c | 6 +++--- kernel/irq/pm.c | 3 ++- kernel/printk/printk.c | 3 ++- kernel/time/sched_clock.c | 14 ++++++++++++-- kernel/time/timekeeping.c | 14 ++++++++++++-- virt/kvm/kvm_main.c | 6 +++--- 96 files changed, 231 insertions(+), 197 deletions(-) diff --git a/arch/arm/mach-exynos/mcpm-exynos.c b/arch/arm/mach-exynos/mcpm= -exynos.c index fd0dbeb93357..e9ec6bc1936e 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(struct syscore_ops *ops) { /* * U-Boot SPL is hardcoded to jump to the start of ns_sram_base_addr @@ -300,7 +300,7 @@ 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); =20 diff --git a/arch/arm/mach-exynos/suspend.c b/arch/arm/mach-exynos/suspend.c index 150a1e56dcae..a147783ac7e0 100644 --- a/arch/arm/mach-exynos/suspend.c +++ b/arch/arm/mach-exynos/suspend.c @@ -53,8 +53,8 @@ struct exynos_pm_data { =20 void (*pm_prepare)(void); void (*pm_resume_prepare)(void); - void (*pm_resume)(void); - int (*pm_suspend)(void); + void (*pm_resume)(struct syscore_ops *ops); + int (*pm_suspend)(struct syscore_ops *ops); int (*cpu_suspend)(unsigned long); }; =20 @@ -376,7 +376,7 @@ static void exynos5420_pm_prepare(void) } =20 =20 -static int exynos_pm_suspend(void) +static int exynos_pm_suspend(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { unsigned long tmp; =20 diff --git a/arch/arm/mach-pxa/irq.c b/arch/arm/mach-pxa/irq.c index 5bfce8aa4102..b4f676d27169 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { int i; =20 diff --git a/arch/arm/mach-pxa/mfp-pxa2xx.c b/arch/arm/mach-pxa/mfp-pxa2xx.c index f5a3d890f682..55d697c80f45 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { int i; =20 diff --git a/arch/arm/mach-pxa/mfp-pxa3xx.c b/arch/arm/mach-pxa/mfp-pxa3xx.c index d16ab7451efe..263ffe35e893 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(struct syscore_ops *ops) { mfp_config_lpm(); return 0; } =20 -static void pxa3xx_mfp_resume(void) +static void pxa3xx_mfp_resume(struct syscore_ops *ops) { mfp_config_run(); =20 diff --git a/arch/arm/mach-pxa/smemc.c b/arch/arm/mach-pxa/smemc.c index 2d2a321d82f8..265a6b86d19d 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { __raw_writel(msc[0], MSC0); __raw_writel(msc[1], MSC1); diff --git a/arch/arm/mach-s3c/irq-pm-s3c64xx.c b/arch/arm/mach-s3c/irq-pm-= s3c64xx.c index 4a1e935bada1..0841c5df9614 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { struct irq_grp_save *grp =3D eint_grp_save; int i; diff --git a/arch/arm/mach-s5pv210/pm.c b/arch/arm/mach-s5pv210/pm.c index 6fa70f787df4..5b1dd70259f3 100644 --- a/arch/arm/mach-s5pv210/pm.c +++ b/arch/arm/mach-s5pv210/pm.c @@ -195,7 +195,7 @@ static const struct platform_suspend_ops s5pv210_suspen= d_ops =3D { /* * Syscore operations used to delay restore of certain registers. */ -static void s5pv210_pm_resume(void) +static void s5pv210_pm_resume(struct syscore_ops *ops) { s3c_pm_do_restore_core(s5pv210_core_save, ARRAY_SIZE(s5pv210_core_save)); } diff --git a/arch/arm/mach-versatile/integrator_ap.c b/arch/arm/mach-versat= ile/integrator_ap.c index 4bd6712e9f52..90718a4ca613 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(struct syscore_ops *ops) { ic_irq_enable =3D readl(VA_IC_BASE + IRQ_ENABLE); return 0; } =20 -static void irq_resume(void) +static void irq_resume(struct syscore_ops *ops) { /* disable all irq sources */ cm_clear_irqs(); diff --git a/arch/arm/mm/cache-b15-rac.c b/arch/arm/mm/cache-b15-rac.c index 6f63b90f9e1a..fcb07d2050d0 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(struct syscore_ops *ops) { /* 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(struct syscore_ops *ops) { /* Coming out of a S3 suspend/resume cycle, the read-ahead cache * register RAC_CONFIG0_REG will be restored to its default value, make diff --git a/arch/loongarch/kernel/smp.c b/arch/loongarch/kernel/smp.c index 46036d98da75..6888747beed3 100644 --- a/arch/loongarch/kernel/smp.c +++ b/arch/loongarch/kernel/smp.c @@ -535,12 +535,12 @@ int hibernate_resume_nonboot_cpu_disable(void) */ #ifdef CONFIG_PM =20 -static int loongson_ipi_suspend(void) +static int loongson_ipi_suspend(struct syscore_ops *ops) { return 0; } =20 -static void loongson_ipi_resume(void) +static void loongson_ipi_resume(struct syscore_ops *ops) { iocsr_write32(0xffffffff, LOONGARCH_IOCSR_IPI_EN); } diff --git a/arch/mips/alchemy/common/dbdma.c b/arch/mips/alchemy/common/db= dma.c index 6a3c890f7bbf..0cccf427756a 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { int i; void __iomem *addr; diff --git a/arch/mips/alchemy/common/irq.c b/arch/mips/alchemy/common/irq.c index da9f9220048f..8e999dbbed46 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { void __iomem *base =3D (void __iomem *)KSEG1ADDR(AU1300_GPIC_PHYS_ADDR); int i; diff --git a/arch/mips/alchemy/common/usb.c b/arch/mips/alchemy/common/usb.c index 5d618547ebf0..3d9bb51e00ea 100644 --- a/arch/mips/alchemy/common/usb.c +++ b/arch/mips/alchemy/common/usb.c @@ -580,13 +580,13 @@ static void alchemy_usb_pm(int susp) } } =20 -static int alchemy_usb_suspend(void) +static int alchemy_usb_suspend(struct syscore_ops *ops) { alchemy_usb_pm(1); return 0; } =20 -static void alchemy_usb_resume(void) +static void alchemy_usb_resume(struct syscore_ops *ops) { alchemy_usb_pm(0); } diff --git a/arch/mips/pci/pci-alchemy.c b/arch/mips/pci/pci-alchemy.c index 58625d1b6465..a20de7160b6b 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { struct alchemy_pci_context *ctx =3D __alchemy_pci_ctx; if (!ctx) diff --git a/arch/powerpc/platforms/cell/spu_base.c b/arch/powerpc/platform= s/cell/spu_base.c index 2c07387201d0..354770a3ebea 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(struct syscore_ops *ops) { struct spu *spu; =20 diff --git a/arch/powerpc/platforms/powermac/pic.c b/arch/powerpc/platforms= /powermac/pic.c index c37783a03d25..f3bd86befa2a 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { int i; =20 diff --git a/arch/powerpc/sysdev/fsl_lbc.c b/arch/powerpc/sysdev/fsl_lbc.c index 217cea150987..d215c6aeec8b 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { struct fsl_lbc_ctrl *ctrl; struct fsl_lbc_regs __iomem *lbc; diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c index ef7707ea0db7..64ab3f46a1b7 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { struct pci_controller *hose, *tmp; =20 diff --git a/arch/powerpc/sysdev/ipic.c b/arch/powerpc/sysdev/ipic.c index 70be2105865d..7aa9ab99ebcf 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { struct ipic *ipic =3D primary_ipic; =20 diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c index ad7310bba00b..a7b75a9d2907 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { struct mpic *mpic =3D mpics; =20 diff --git a/arch/powerpc/sysdev/mpic_timer.c b/arch/powerpc/sysdev/mpic_ti= mer.c index 7166e2e0baaf..9f9986bb2dc9 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(struct syscore_ops *ops) { struct timer_group_priv *priv; =20 diff --git a/arch/sh/mm/pmb.c b/arch/sh/mm/pmb.c index 68eb7cc6e564..7b71038bcc71 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(struct syscore_ops *ops) { struct pmb_entry *pmbe; int i; diff --git a/arch/x86/events/amd/ibs.c b/arch/x86/events/amd/ibs.c index 112f43b23ebf..6671f548a646 100644 --- a/arch/x86/events/amd/ibs.c +++ b/arch/x86/events/amd/ibs.c @@ -1718,13 +1718,13 @@ 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(struct syscore_ops *ops) { clear_APIC_ibs(); return 0; } =20 -static void perf_ibs_resume(void) +static void perf_ibs_resume(struct syscore_ops *ops) { ibs_eilvt_setup(); setup_APIC_ibs(); diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c index afdbda2dd7b7..f8efb8972084 100644 --- a/arch/x86/hyperv/hv_init.c +++ b/arch/x86/hyperv/hv_init.c @@ -314,7 +314,7 @@ static int __init hv_pci_init(void) return 1; } =20 -static int hv_suspend(void) +static int hv_suspend(struct syscore_ops *ops) { union hv_x64_msr_hypercall_contents hypercall_msr; int ret; @@ -341,7 +341,7 @@ static int hv_suspend(void) return ret; } =20 -static void hv_resume(void) +static void hv_resume(struct syscore_ops *ops) { union hv_x64_msr_hypercall_contents hypercall_msr; int ret; diff --git a/arch/x86/kernel/amd_gart_64.c b/arch/x86/kernel/amd_gart_64.c index 3485d419c2f5..8f19b48e0b16 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(struct syscore_ops *ops) { pr_info("PCI-DMA: Resuming GART IOMMU\n"); =20 diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index d73ba5a7b623..e1fec51e0e67 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c @@ -2376,7 +2376,7 @@ static struct { unsigned int apic_cmci; } apic_pm_state; =20 -static int lapic_suspend(void) +static int lapic_suspend(struct syscore_ops *ops) { unsigned long flags; int maxlvt; @@ -2424,7 +2424,7 @@ static int lapic_suspend(void) return 0; } =20 -static void lapic_resume(void) +static void lapic_resume(struct syscore_ops *ops) { unsigned int l, h; unsigned long flags; diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c index 5ba2feb2c04c..967c4a47af5a 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(struct syscore_ops *ops) +{ + return save_ioapic_entries(); +} + +static void ioapic_resume(struct syscore_ops *ops) { int ioapic_idx; =20 @@ -2319,7 +2324,7 @@ static void ioapic_resume(void) } =20 static struct syscore_ops ioapic_syscore_ops =3D { - .suspend =3D save_ioapic_entries, + .suspend =3D ioapic_suspend, .resume =3D ioapic_resume, }; =20 diff --git a/arch/x86/kernel/cpu/aperfmperf.c b/arch/x86/kernel/cpu/aperfmp= erf.c index a315b0627dfb..e971e0cfd7c6 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(struct syscore_ops *ops) { u64 aperf, mperf; =20 @@ -535,7 +535,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 +544,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..1c55c601d3f6 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { u64 val =3D this_cpu_read(saved_epb); u64 epb; @@ -185,7 +185,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 +199,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 diff --git a/arch/x86/kernel/cpu/mce/core.c b/arch/x86/kernel/cpu/mce/core.c index 4da4eab56c81..ce9112ce566b 100644 --- a/arch/x86/kernel/cpu/mce/core.c +++ b/arch/x86/kernel/cpu/mce/core.c @@ -2463,13 +2463,13 @@ static void vendor_disable_error_reporting(void) mce_disable_error_reporting(); } =20 -static int mce_syscore_suspend(void) +static int mce_syscore_suspend(struct syscore_ops *ops) { vendor_disable_error_reporting(); return 0; } =20 -static void mce_syscore_shutdown(void) +static void mce_syscore_shutdown(struct syscore_ops *ops) { vendor_disable_error_reporting(); } @@ -2479,7 +2479,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(struct syscore_ops *ops) { __mcheck_cpu_init_generic(); __mcheck_cpu_init_vendor(raw_cpu_ptr(&cpu_info)); diff --git a/arch/x86/kernel/cpu/microcode/core.c b/arch/x86/kernel/cpu/mic= rocode/core.c index b92e09a87c69..259bb5f6662f 100644 --- a/arch/x86/kernel/cpu/microcode/core.c +++ b/arch/x86/kernel/cpu/microcode/core.c @@ -775,8 +775,13 @@ void microcode_bsp_resume(void) reload_early_microcode(cpu); } =20 +static void microcode_bsp_syscore_resume(struct syscore_ops *ops) +{ + microcode_bsp_resume(); +} + static struct syscore_ops mc_syscore_ops =3D { - .resume =3D microcode_bsp_resume, + .resume =3D microcode_bsp_syscore_resume, }; =20 static int mc_cpu_online(unsigned int cpu) diff --git a/arch/x86/kernel/cpu/mtrr/legacy.c b/arch/x86/kernel/cpu/mtrr/l= egacy.c index d25882fcf181..51258e44f246 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(struct syscore_ops *ops) { int i; =20 @@ -56,7 +56,7 @@ static int mtrr_save(void) return 0; } =20 -static void mtrr_restore(void) +static void mtrr_restore(struct syscore_ops *ops) { int i; =20 diff --git a/arch/x86/kernel/cpu/umwait.c b/arch/x86/kernel/cpu/umwait.c index 933fcd7ff250..e7bb00a3fe13 100644 --- a/arch/x86/kernel/cpu/umwait.c +++ b/arch/x86/kernel/cpu/umwait.c @@ -86,7 +86,7 @@ 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(struct syscore_ops *ops) { umwait_update_control_msr(NULL); } diff --git a/arch/x86/kernel/i8237.c b/arch/x86/kernel/i8237.c index 2cd124ad9380..aaa86ed1539a 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(struct syscore_ops *ops) { unsigned long flags; int i; diff --git a/arch/x86/kernel/i8259.c b/arch/x86/kernel/i8259.c index 2bade73f49e3..0c2a8b4f4a83 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(struct syscore_ops *ops) { init_8259A(i8259A_auto_eoi); restore_ELCR(irq_trigger); } =20 -static int i8259A_suspend(void) +static int i8259A_suspend(struct syscore_ops *ops) { save_ELCR(irq_trigger); return 0; } =20 -static void i8259A_shutdown(void) +static void i8259A_shutdown(struct syscore_ops *ops) { /* Put the i8259A into a quiescent state that * the kernel initialization code can get it diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index 921c1c783bc1..607d23d47a2b 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -721,7 +721,7 @@ static int kvm_cpu_down_prepare(unsigned int cpu) =20 #endif =20 -static int kvm_suspend(void) +static int kvm_suspend(struct syscore_ops *ops) { u64 val =3D 0; =20 @@ -735,7 +735,7 @@ static int kvm_suspend(void) return 0; } =20 -static void kvm_resume(void) +static void kvm_resume(struct syscore_ops *ops) { kvm_cpu_online(raw_smp_processor_id()); =20 diff --git a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c index 08e10b6226dc..b1ab30522f98 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(struct syscore_ops *ops) { struct acpi_pci_link *link; =20 diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c index c8ee8e42b0f6..9f6b108384a7 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { u32 resumed_bm_rld =3D 0; =20 diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_lo= ader/main.c index 6942c62fa59d..171f1541b9bb 100644 --- a/drivers/base/firmware_loader/main.c +++ b/drivers/base/firmware_loader/main.c @@ -1585,7 +1585,7 @@ static int fw_pm_notify(struct notifier_block *notify= _block, } =20 /* stop caching firmware once syscore_suspend is reached */ -static int fw_suspend(void) +static int fw_suspend(struct syscore_ops *ops) { fw_cache.state =3D FW_LOADER_NO_CACHE; return 0; diff --git a/drivers/base/syscore.c b/drivers/base/syscore.c index 13db1f78d2ce..e467078faa28 100644 --- a/drivers/base/syscore.c +++ b/drivers/base/syscore.c @@ -62,7 +62,7 @@ int syscore_suspend(void) 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(); + ret =3D ops->suspend(ops); if (ret) goto err_out; WARN_ONCE(!irqs_disabled(), @@ -77,7 +77,7 @@ int syscore_suspend(void) =20 list_for_each_entry_continue(ops, &syscore_ops_list, node) if (ops->resume) - ops->resume(); + ops->resume(ops); =20 return ret; } @@ -99,7 +99,7 @@ void syscore_resume(void) list_for_each_entry(ops, &syscore_ops_list, node) if (ops->resume) { pm_pr_dbg("Calling %pS\n", ops->resume); - ops->resume(); + ops->resume(ops); WARN_ONCE(!irqs_disabled(), "Interrupts enabled after %pS\n", ops->resume); } @@ -121,7 +121,7 @@ void syscore_shutdown(void) if (ops->shutdown) { if (initcall_debug) pr_info("PM: Calling %pS\n", ops->shutdown); - ops->shutdown(); + ops->shutdown(ops); } =20 mutex_unlock(&syscore_ops_lock); diff --git a/drivers/bus/mvebu-mbus.c b/drivers/bus/mvebu-mbus.c index 00cb792bda18..92daa45cc844 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { struct mvebu_mbus_state *s =3D &mbus_state; int win; diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c index acf780a81589..ad1ac97f65c9 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { unsigned int backup; =20 diff --git a/drivers/clk/imx/clk-vf610.c b/drivers/clk/imx/clk-vf610.c index 9e11f1c7c397..94aee6c5f9f4 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { int i; =20 diff --git a/drivers/clk/ingenic/pm.c b/drivers/clk/ingenic/pm.c index 341752b640d2..b13f7f56b816 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(struct syscore_ops *ops) { u32 val =3D readl(ingenic_cgu_base + CGU_REG_LCR); =20 @@ -24,7 +24,7 @@ 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(struct syscore_ops *ops) { u32 val =3D readl(ingenic_cgu_base + CGU_REG_LCR); =20 diff --git a/drivers/clk/ingenic/tcu.c b/drivers/clk/ingenic/tcu.c index 7d04ef40b7cf..85bd4bc73c1b 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { struct ingenic_tcu *tcu =3D ingenic_tcu; =20 diff --git a/drivers/clk/mvebu/common.c b/drivers/clk/mvebu/common.c index 785dbede4835..ee77d307efe0 100644 --- a/drivers/clk/mvebu/common.c +++ b/drivers/clk/mvebu/common.c @@ -215,13 +215,13 @@ 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(struct syscore_ops *ops) { ctrl->saved_reg =3D readl(ctrl->base); return 0; } =20 -static void mvebu_clk_gating_resume(void) +static void mvebu_clk_gating_resume(struct syscore_ops *ops) { writel(ctrl->saved_reg, ctrl->base); } diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-r= k3288.c index 0a1e017df7c6..f474ba266837 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { int i, reg_id; =20 diff --git a/drivers/clk/samsung/clk-s5pv210-audss.c b/drivers/clk/samsung/= clk-s5pv210-audss.c index b1fd8fac3a4c..9bc5ed4b128e 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { int i; =20 diff --git a/drivers/clk/samsung/clk.c b/drivers/clk/samsung/clk.c index dbc9925ca8f4..a08fb9e99604 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { struct samsung_clock_reg_cache *reg_cache; =20 diff --git a/drivers/clk/tegra/clk-tegra210.c b/drivers/clk/tegra/clk-tegra= 210.c index a3488aaac3f7..6f8c2d7be0b1 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { unsigned int i; =20 diff --git a/drivers/clocksource/timer-armada-370-xp.c b/drivers/clocksourc= e/timer-armada-370-xp.c index 54284c1c0651..5f6225842018 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { writel(0xffffffff, timer_base + TIMER0_VAL_OFF); writel(0xffffffff, timer_base + TIMER0_RELOAD_OFF); diff --git a/drivers/cpuidle/cpuidle-psci.c b/drivers/cpuidle/cpuidle-psci.c index b19bc60cc627..8c6dd709b443 100644 --- a/drivers/cpuidle/cpuidle-psci.c +++ b/drivers/cpuidle/cpuidle-psci.c @@ -177,13 +177,13 @@ static void psci_idle_syscore_switch(bool suspend) } } =20 -static int psci_idle_syscore_suspend(void) +static int psci_idle_syscore_suspend(struct syscore_ops *ops) { psci_idle_syscore_switch(true); return 0; } =20 -static void psci_idle_syscore_resume(void) +static void psci_idle_syscore_resume(struct syscore_ops *ops) { psci_idle_syscore_switch(false); } diff --git a/drivers/gpio/gpio-mxc.c b/drivers/gpio/gpio-mxc.c index 433cbadc3a4c..307a1f999500 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { struct mxc_gpio_port *port; int ret; diff --git a/drivers/gpio/gpio-pxa.c b/drivers/gpio/gpio-pxa.c index 13f7da2a9486..0fc8d4d0c885 100644 --- a/drivers/gpio/gpio-pxa.c +++ b/drivers/gpio/gpio-pxa.c @@ -753,7 +753,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(struct syscore_ops *ops) { struct pxa_gpio_chip *pchip =3D pxa_gpio_chip; struct pxa_gpio_bank *c; @@ -774,7 +774,7 @@ static int pxa_gpio_suspend(void) return 0; } =20 -static void pxa_gpio_resume(void) +static void pxa_gpio_resume(struct syscore_ops *ops) { struct pxa_gpio_chip *pchip =3D pxa_gpio_chip; struct pxa_gpio_bank *c; diff --git a/drivers/gpio/gpio-sa1100.c b/drivers/gpio/gpio-sa1100.c index e9d054d78ccb..dd3250067646 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(struct syscore_ops *ops) { struct sa1100_gpio_chip *sgc =3D &sa1100_gpio_chip; =20 @@ -275,7 +275,7 @@ static int sa1100_gpio_suspend(void) return 0; } =20 -static void sa1100_gpio_resume(void) +static void sa1100_gpio_resume(struct syscore_ops *ops) { sa1100_update_edge_regs(&sa1100_gpio_chip); } diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c index 2ed5a1e89d69..2800e8ff1392 100644 --- a/drivers/hv/vmbus_drv.c +++ b/drivers/hv/vmbus_drv.c @@ -2801,7 +2801,7 @@ static void hv_crash_handler(struct pt_regs *regs) hv_synic_disable_regs(cpu); }; =20 -static int hv_synic_suspend(void) +static int hv_synic_suspend(struct syscore_ops *ops) { /* * When we reach here, all the non-boot CPUs have been offlined. @@ -2828,7 +2828,7 @@ static int hv_synic_suspend(void) return 0; } =20 -static void hv_synic_resume(void) +static void hv_synic_resume(struct syscore_ops *ops) { hv_synic_enable_regs(0); =20 diff --git a/drivers/iommu/amd/init.c b/drivers/iommu/amd/init.c index 7b5af6176de9..878d9f05dee3 100644 --- a/drivers/iommu/amd/init.c +++ b/drivers/iommu/amd/init.c @@ -2922,7 +2922,7 @@ static void disable_iommus(void) * disable suspend until real resume implemented */ =20 -static void amd_iommu_resume(void) +static void amd_iommu_resume(struct syscore_ops *ops) { struct amd_iommu *iommu; =20 @@ -2936,7 +2936,7 @@ static void amd_iommu_resume(void) amd_iommu_enable_interrupts(); } =20 -static int amd_iommu_suspend(void) +static int amd_iommu_suspend(struct syscore_ops *ops) { /* disable IOMMUs to go out of the way for BIOS */ disable_iommus(); diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index 8f02009a2568..a863e579beec 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -2310,7 +2310,7 @@ static void iommu_flush_all(void) } } =20 -static int iommu_suspend(void) +static int iommu_suspend(struct syscore_ops *ops) { struct dmar_drhd_unit *drhd; struct intel_iommu *iommu =3D NULL; @@ -2337,7 +2337,7 @@ static int iommu_suspend(void) return 0; } =20 -static void iommu_resume(void) +static void iommu_resume(struct syscore_ops *ops) { struct dmar_drhd_unit *drhd; struct intel_iommu *iommu =3D NULL; diff --git a/drivers/irqchip/exynos-combiner.c b/drivers/irqchip/exynos-com= biner.c index e7dfcf0cda43..69f68fce309d 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 + * @ops: 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(struct syscore_ops *ops) { int i; =20 @@ -218,12 +219,13 @@ static int combiner_suspend(void) =20 /** * combiner_resume - restore interrupt combiner state after resume + * @ops: 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(struct syscore_ops *ops) { int i; =20 diff --git a/drivers/irqchip/irq-armada-370-xp.c b/drivers/irqchip/irq-arma= da-370-xp.c index a44c49e985b7..31a34721e1ca 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { struct mpic *mpic =3D mpic_data; bool src0, src1; diff --git a/drivers/irqchip/irq-bcm7038-l1.c b/drivers/irqchip/irq-bcm7038= -l1.c index 04fac0cc857f..38d5d9aa5f92 100644 --- a/drivers/irqchip/irq-bcm7038-l1.c +++ b/drivers/irqchip/irq-bcm7038-l1.c @@ -292,7 +292,7 @@ static int __init bcm7038_l1_init_one(struct device_nod= e *dn, 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(struct syscore_ops *ops) { struct bcm7038_l1_chip *intc; int boot_cpu, word; @@ -318,7 +318,7 @@ static int bcm7038_l1_suspend(void) return 0; } =20 -static void bcm7038_l1_resume(void) +static void bcm7038_l1_resume(struct syscore_ops *ops) { struct bcm7038_l1_chip *intc; int boot_cpu, word; diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-= its.c index 467cb78435a9..0ebc15f054ed 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { struct its_node *its; int ret; diff --git a/drivers/irqchip/irq-i8259.c b/drivers/irqchip/irq-i8259.c index 91b2f587119c..e9b186b7b9fd 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(struct syscore_ops *ops) { if (i8259A_auto_eoi >=3D 0) init_8259A(i8259A_auto_eoi); } =20 -static void i8259A_shutdown(void) +static void i8259A_shutdown(struct syscore_ops *ops) { /* Put the i8259A into a quiescent state that * the kernel initialization code can get it diff --git a/drivers/irqchip/irq-imx-gpcv2.c b/drivers/irqchip/irq-imx-gpcv= 2.c index b91f5c14b405..bdee15a327f3 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { struct gpcv2_irqchip_data *cd; int i; diff --git a/drivers/irqchip/irq-loongson-eiointc.c b/drivers/irqchip/irq-l= oongson-eiointc.c index b2860eb2d32c..917672f0004d 100644 --- a/drivers/irqchip/irq-loongson-eiointc.c +++ b/drivers/irqchip/irq-loongson-eiointc.c @@ -358,12 +358,12 @@ 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(struct syscore_ops *ops) { return 0; } =20 -static void eiointc_resume(void) +static void eiointc_resume(struct syscore_ops *ops) { eiointc_router_init(0); } diff --git a/drivers/irqchip/irq-loongson-htpic.c b/drivers/irqchip/irq-loo= ngson-htpic.c index f4abdf156de7..723a2a1169c2 100644 --- a/drivers/irqchip/irq-loongson-htpic.c +++ b/drivers/irqchip/irq-loongson-htpic.c @@ -71,7 +71,7 @@ static void htpic_reg_init(void) writel(0xffff, htpic->base + HTINT_EN_OFF); } =20 -static void htpic_resume(void) +static void htpic_resume(struct syscore_ops *ops) { htpic_reg_init(); } diff --git a/drivers/irqchip/irq-loongson-htvec.c b/drivers/irqchip/irq-loo= ngson-htvec.c index d8558eb35044..a7d4953a1381 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(struct syscore_ops *ops) { int i; =20 @@ -169,7 +169,7 @@ static int htvec_suspend(void) return 0; } =20 -static void htvec_resume(void) +static void htvec_resume(struct syscore_ops *ops) { int i; =20 diff --git a/drivers/irqchip/irq-loongson-pch-lpc.c b/drivers/irqchip/irq-l= oongson-pch-lpc.c index 2d4c3ec128b8..ce86bd209a9b 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(struct syscore_ops *ops) { 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,7 +159,7 @@ static int pch_lpc_suspend(void) return 0; } =20 -static void pch_lpc_resume(void) +static void pch_lpc_resume(struct syscore_ops *ops) { 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); diff --git a/drivers/irqchip/irq-loongson-pch-pic.c b/drivers/irqchip/irq-l= oongson-pch-pic.c index 62e6bf3a0611..7b15d2a31491 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { int i, j; =20 diff --git a/drivers/irqchip/irq-mchp-eic.c b/drivers/irqchip/irq-mchp-eic.c index 516a3a0e359c..ad8252b6c656 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { unsigned int hwirq; =20 diff --git a/drivers/irqchip/irq-mst-intc.c b/drivers/irqchip/irq-mst-intc.c index 9643cc3a77d7..a89d27821eb3 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { struct mst_intc_chip_data *cd; =20 diff --git a/drivers/irqchip/irq-mtk-cirq.c b/drivers/irqchip/irq-mtk-cirq.c index de481ba340f8..321c1f761e1f 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { void __iomem *reg =3D mtk_cirq_reg(cirq_data, CIRQ_CONTROL); u32 value; diff --git a/drivers/irqchip/irq-renesas-rzg2l.c b/drivers/irqchip/irq-rene= sas-rzg2l.c index 360d88687e4f..3a0edbbda0b2 100644 --- a/drivers/irqchip/irq-renesas-rzg2l.c +++ b/drivers/irqchip/irq-renesas-rzg2l.c @@ -399,7 +399,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(struct syscore_ops *ops) { struct rzg2l_irqc_reg_cache *cache =3D &rzg2l_irqc_data->cache; void __iomem *base =3D rzg2l_irqc_data->base; @@ -411,7 +411,7 @@ static int rzg2l_irqc_irq_suspend(void) return 0; } =20 -static void rzg2l_irqc_irq_resume(void) +static void rzg2l_irqc_irq_resume(struct syscore_ops *ops) { struct rzg2l_irqc_reg_cache *cache =3D &rzg2l_irqc_data->cache; void __iomem *base =3D rzg2l_irqc_data->base; diff --git a/drivers/irqchip/irq-sa11x0.c b/drivers/irqchip/irq-sa11x0.c index d8d4dff16276..f4365341fcc6 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { struct sa1100irq_state *st =3D &sa1100irq_state; =20 diff --git a/drivers/irqchip/irq-sifive-plic.c b/drivers/irqchip/irq-sifive= -plic.c index bf69a4802b71..7dedfcbe220b 100644 --- a/drivers/irqchip/irq-sifive-plic.c +++ b/drivers/irqchip/irq-sifive-plic.c @@ -243,7 +243,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(struct syscore_ops *ops) { unsigned int i, cpu; unsigned long flags; @@ -274,7 +274,7 @@ static int plic_irq_suspend(void) return 0; } =20 -static void plic_irq_resume(void) +static void plic_irq_resume(struct syscore_ops *ops) { unsigned int i, index, cpu; unsigned long flags; diff --git a/drivers/irqchip/irq-sun6i-r.c b/drivers/irqchip/irq-sun6i-r.c index 37d4b29763bc..45d926a1c75b 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { int i; =20 @@ -294,9 +294,9 @@ 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(struct syscore_ops *ops) { - sun6i_r_intc_suspend(); + sun6i_r_intc_suspend(ops); } =20 static struct syscore_ops sun6i_r_intc_syscore_ops =3D { @@ -349,7 +349,7 @@ static int __init sun6i_r_intc_init(struct device_node = *node, register_syscore_ops(&sun6i_r_intc_syscore_ops); =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..7951c98bd6ed 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { unsigned long flags; unsigned int i; diff --git a/drivers/irqchip/irq-vic.c b/drivers/irqchip/irq-vic.c index 2bcdf216a000..33173ce84c4b 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { int id; =20 diff --git a/drivers/leds/trigger/ledtrig-cpu.c b/drivers/leds/trigger/ledt= rig-cpu.c index 05848a2fecff..48a99dfa28d8 100644 --- a/drivers/leds/trigger/ledtrig-cpu.c +++ b/drivers/leds/trigger/ledtrig-cpu.c @@ -94,18 +94,18 @@ 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(struct syscore_ops *ops) { ledtrig_cpu(CPU_LED_STOP); return 0; } =20 -static void ledtrig_cpu_syscore_resume(void) +static void ledtrig_cpu_syscore_resume(struct syscore_ops *ops) { ledtrig_cpu(CPU_LED_START); } =20 -static void ledtrig_cpu_syscore_shutdown(void) +static void ledtrig_cpu_syscore_shutdown(struct syscore_ops *ops) { ledtrig_cpu(CPU_LED_HALTED); } diff --git a/drivers/macintosh/via-pmu.c b/drivers/macintosh/via-pmu.c index b0f09c70f1ff..36919fae06b8 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(struct syscore_ops *ops) { /* 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(struct syscore_ops *ops) { struct adb_request req; =20 diff --git a/drivers/power/reset/sc27xx-poweroff.c b/drivers/power/reset/sc= 27xx-poweroff.c index 90287c31992c..b1c2d1038a8e 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(struct syscore_ops *ops) { #ifdef CONFIG_HOTPLUG_CPU int cpu; diff --git a/drivers/sh/clk/core.c b/drivers/sh/clk/core.c index 7a73f5e4a1fc..b8e2b391acd1 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(struct syscore_ops *ops) { struct clk *clkp; =20 diff --git a/drivers/sh/intc/core.c b/drivers/sh/intc/core.c index ea571eeb3078..53e468644883 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { struct intc_desc_int *d; =20 diff --git a/drivers/soc/bcm/brcmstb/biuctrl.c b/drivers/soc/bcm/brcmstb/bi= uctrl.c index 364ddbe365c2..d8c3aac61886 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { unsigned int i; =20 diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c index a94cf7d15b8e..455e55cbd2cc 100644 --- a/drivers/soc/tegra/pmc.c +++ b/drivers/soc/tegra/pmc.c @@ -3141,7 +3141,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(struct syscore_ops *ops) { u32 status, mask; unsigned int i; @@ -3154,7 +3154,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(struct syscore_ops *ops) { wke_read_sw_wake_status(pmc); =20 diff --git a/drivers/thermal/intel/intel_hfi.c b/drivers/thermal/intel/inte= l_hfi.c index bd2fca7dc017..568c4844593c 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(struct syscore_ops *ops) { /* 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(struct syscore_ops *ops) { /* No locking needed. There is no concurrency with CPU offline. */ hfi_disable(); diff --git a/drivers/xen/xen-acpi-processor.c b/drivers/xen/xen-acpi-proces= sor.c index 296703939846..3d7ae6296367 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(struct syscore_ops *ops) { static DECLARE_WORK(wq, xen_acpi_processor_resume_worker); =20 diff --git a/include/linux/syscore_ops.h b/include/linux/syscore_ops.h index ae4d48e4c970..2bec5eb6f4b4 100644 --- a/include/linux/syscore_ops.h +++ b/include/linux/syscore_ops.h @@ -12,9 +12,9 @@ =20 struct syscore_ops { struct list_head node; - int (*suspend)(void); - void (*resume)(void); - void (*shutdown)(void); + int (*suspend)(struct syscore_ops *ops); + void (*resume)(struct syscore_ops *ops); + void (*shutdown)(struct syscore_ops *ops); }; =20 extern void register_syscore_ops(struct syscore_ops *ops); diff --git a/kernel/cpu_pm.c b/kernel/cpu_pm.c index b0f0d15085db..512efe0f209d 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(struct syscore_ops *ops) { int ret; =20 @@ -185,7 +185,7 @@ static int cpu_pm_suspend(void) return ret; } =20 -static void cpu_pm_resume(void) +static void cpu_pm_resume(struct syscore_ops *ops) { cpu_cluster_pm_exit(); cpu_pm_exit(); diff --git a/kernel/irq/generic-chip.c b/kernel/irq/generic-chip.c index bf59e37d650a..10ed53c322ce 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { 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(struct syscore_ops *ops) { struct irq_chip_generic *gc; =20 diff --git a/kernel/irq/pm.c b/kernel/irq/pm.c index 445912d51033..ec95049fe590 100644 --- a/kernel/irq/pm.c +++ b/kernel/irq/pm.c @@ -215,10 +215,11 @@ void rearm_wake_irq(unsigned int irq) =20 /** * irq_pm_syscore_resume - enable interrupt lines early + * @ops: syscore context * * Enable all interrupt lines with %IRQF_EARLY_RESUME set. */ -static void irq_pm_syscore_resume(void) +static void irq_pm_syscore_resume(struct syscore_ops *ops) { resume_irqs(true); } diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index 0efbcdda9aab..94cba646e66a 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -3666,12 +3666,13 @@ static bool legacy_kthread_create(void) =20 /** * printk_kthreads_shutdown - shutdown all threaded printers + * @ops: 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(struct syscore_ops *ops) { struct console *con; =20 diff --git a/kernel/time/sched_clock.c b/kernel/time/sched_clock.c index cc1afec306b3..2a85e684153b 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(struct syscore_ops *ops) +{ + return sched_clock_suspend(); +} + void sched_clock_resume(void) { struct clock_read_data *rd =3D &cd.read_data[0]; @@ -305,9 +310,14 @@ void sched_clock_resume(void) rd->read_sched_clock =3D cd.actual_read_sched_clock; } =20 +static void sched_clock_syscore_resume(struct syscore_ops *ops) +{ + sched_clock_resume(); +} + static struct syscore_ops sched_clock_ops =3D { - .suspend =3D sched_clock_suspend, - .resume =3D sched_clock_resume, + .suspend =3D sched_clock_syscore_suspend, + .resume =3D sched_clock_syscore_resume, }; =20 static int __init sched_clock_syscore_init(void) diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index 243fe25e680a..4f15e0bc8395 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -1988,6 +1988,11 @@ void timekeeping_resume(void) timerfd_resume(); } =20 +static void timekeeping_syscore_resume(struct syscore_ops *ops) +{ + timekeeping_resume(); +} + int timekeeping_suspend(void) { struct timekeeper *tks =3D &tk_core.shadow_timekeeper; @@ -2055,10 +2060,15 @@ int timekeeping_suspend(void) return 0; } =20 +static int timekeeping_syscore_suspend(struct syscore_ops *ops) +{ + 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, + .resume =3D timekeeping_syscore_resume, + .suspend =3D timekeeping_syscore_suspend, }; =20 static int __init timekeeping_init_ops(void) diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 6c07dd423458..d9d191ee1a1b 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -5617,7 +5617,7 @@ static int kvm_offline_cpu(unsigned int cpu) return 0; } =20 -static void kvm_shutdown(void) +static void kvm_shutdown(struct syscore_ops *ops) { /* * Disable hardware virtualization and set kvm_rebooting to indicate @@ -5635,7 +5635,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(struct syscore_ops *ops) { /* * Secondary CPUs and CPU hotplug are disabled across the suspend/resume @@ -5652,7 +5652,7 @@ static int kvm_suspend(void) return 0; } =20 -static void kvm_resume(void) +static void kvm_resume(struct syscore_ops *ops) { lockdep_assert_not_held(&kvm_usage_lock); lockdep_assert_irqs_disabled(); --=20 2.50.0 From nobody Mon Oct 6 19:04:39 2025 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (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 3D56629A303; Thu, 17 Jul 2025 10:32:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752748376; cv=none; b=cHX50J/33y96Dz81tlrNH9aVgPb1M6tFsup73Fms0hq2sYHAKHCXlviodfXdwBcYkOIMzuXaOMbGbC/y/3QcidoM/Qb4IxWySiBgIp3L0O4b/x9Uku2BhY516i3qdk78z+thKu/BIw8b8wszK7Vdiy+Fmrr72NzRXm/oVDok8sk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752748376; c=relaxed/simple; bh=ZDH9nnnANcSRpb0zEHcYNiYeeyt7UKzoc2r8+K/c0NE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CVIjMed2bbaDQscZk/DrMlqEdpGs/PgPrq/NsGMI8BhGs36G8XQhGXqDV0inY+iY7Dh7hPHuPp9ipbLgcElqOlKxHESiN9TFtWERAppBcsWtE5V9Vwvc0ANxYZluG1gr9PO2WBpG8t6JtpPZPd//VPHFba8eg4MfnNoQaNXOHwA= 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=gxmrbYX0; arc=none smtp.client-ip=209.85.128.51 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="gxmrbYX0" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-455e6fb8057so7835465e9.3; Thu, 17 Jul 2025 03:32:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752748372; x=1753353172; 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=2aLo6QmBH2sfDcjFNDrVzv+tdtk/K/9cagqqXKGweA0=; b=gxmrbYX0V6Z0uuuSUU6daFXRE7GrDib+L9TU98yyTuOQHTnoQZrxj+Zs0uGTzRNi+B S9djrrlia4+CsvyrUQsmUkNnS/hKfGIJdg6w6Bzb1ml3i9+LxgiI9rOq1jowpiNKRTf3 HXLtt3Ha4PclphGrLjhMu4mRfATjriPuWzLy1ke7P0mJwCO8meaMue3ZDEviS7vjlJXb abnWSy6Lq/CWcmERSsRyfJDz3iJxuHNLlVvHBG3NpxareCUTpy+aOq8yDTm2QlzMGQrO /D46xqEcT7EOFALh+2VuKv6+QWI5+OVvDKdiEn1bhu/pYGgDBy4xAFhu/zXRnt2O365+ JsUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752748372; x=1753353172; 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=2aLo6QmBH2sfDcjFNDrVzv+tdtk/K/9cagqqXKGweA0=; b=WgOhI+EJz2LcsQZ2PEtjxsAptgnCMXxzZGo7LlR1nKo3RzG2W/wif1hSTxBRf1nvV2 6lPKTRQRaTcnzm2ddVpTwdgeq4d87JqIjanUn2S7KE9qCOGcLXlIM81ww3Daca+rD7n7 MdqTKmFHbKnx+yLogY94Dltb6alm+lVY59/j/uxVo/PyAXbiWmV3m92fZ7nSvEXdoXz/ ejLCteOvz5Mv5sZrmF+wfSurWfSAtUkYwoIGjXZ6jzs3FB6m4VFdNS7ODT7WS1tZZyCS oVgIc1NbbyfNiBJI+a17ah+2DgbxQkHheLcOtEPEX6yyiycZnjBmAsNopsAoKZvsYa/N N8bw== X-Forwarded-Encrypted: i=1; AJvYcCV629OZtgFvwjLgCKQtvOsB+D6+2xvosO3nV6yVteUMepdBXNu4loqH7HTPCeyTFBByrpfOePbVY3cjhjKF@vger.kernel.org, AJvYcCVnsMOZhvRxWB28cYWS6r++cLJPcy6q1AikT17k2u4HHco9gBULRPCohiChY/MHUh5U3nJES7SB394=@vger.kernel.org, AJvYcCWZTsHgSKOV1Le7TfasEoZMTyCd0+am8Lc6AoW7LEigmXG7Vn4QFceYSw8oCdaba/qeG7tH/Nd8UmWM@vger.kernel.org, AJvYcCXSdAP3uCgscOaZdnG79v6zfR7r0USgoVKA56anHbcxz26yJJ7zP+jcM6hVNygHJKnuJ7CdudzEHtj6@vger.kernel.org, AJvYcCXmgzgNGAi8ntizFcVVjBMMVixS/i9Ug1lbkUkNiG1QnM3PI6PlQ/Tn+QKe7u1VCxNNEBwX7bvbJI19uA==@vger.kernel.org X-Gm-Message-State: AOJu0Yx6NvUKkMW4/nMpeD/JnTpxC8xkjK1RSPxZa442ewEeFQdBwY2v OFfiipvwkriiGVF/aGXiqzkQIEBa2eiTyrxld8lWOYaVINCtzkbdV2o0xhwyvA== X-Gm-Gg: ASbGncv5AvdTsFuCpI4fIQFY57gDAZE8VDnOv7k34GisXLHsIF4UIIn26/fby7rHZGI vO1ShRP6fjicrwS1rUCl3Orzwgg1nJ4oBsFe063kJtYHgNY7XGZlZ8GYag6v6A3q6PzwRFrVaYz RpnJYWw/s3+5CDZDN8B+N9i4uYwdB/9ivSluxXHja9eiWJoRyk+8r2meHxydvuv6DdVYI0ImAWU 2B7M4Bqf8zyKm7KE+AhHFKW/8w/RtPds3d7/FsqXXUkIytI0OXhchcM/f7oxgazdCjtEl80aZAH Kms+65NKnoJfs3o52/LEwrqS7fUriJr+Gnad4m1MFJgliGuAAofjfMLezhYdAJ4UXi6n4kEhU1p Xs6VRBrxggAC+QtfkMksfBZ6BENXGKOIlKs/TJCZXl1OiOwZ9pzridIFkXFI3roix31csNaodT/ qsmidEtu0g6n6Z5A== X-Google-Smtp-Source: AGHT+IHy7PA+ydb4zAWKmtnVkxvp2yVipMuhRsPFmT5ULPVHvkEqwkx5+jJwmnytUHEZv9na/OVQiw== X-Received: by 2002:a05:600c:1d20:b0:454:a37a:db67 with SMTP id 5b1f17b1804b1-4562e36c7a6mr69982365e9.17.1752748372489; Thu, 17 Jul 2025 03:32:52 -0700 (PDT) Received: from localhost (p200300e41f4e9b00f22f74fffe1f3a53.dip0.t-ipconnect.de. [2003:e4:1f4e:9b00:f22f:74ff:fe1f:3a53]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3b5e8bd15bfsm20610595f8f.19.2025.07.17.03.32.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Jul 2025 03:32:50 -0700 (PDT) From: Thierry Reding To: Greg Kroah-Hartman 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 v2 2/7] MIPS: Embed syscore_ops in PCI context Date: Thu, 17 Jul 2025 12:32:36 +0200 Message-ID: <20250717103241.2806798-3-thierry.reding@gmail.com> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20250717103241.2806798-1-thierry.reding@gmail.com> References: <20250717103241.2806798-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 This enables the syscore callbacks to obtain the PCI context without relying on a separate global variable. Signed-off-by: Thierry Reding --- arch/mips/pci/pci-alchemy.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/arch/mips/pci/pci-alchemy.c b/arch/mips/pci/pci-alchemy.c index a20de7160b6b..02f0616518e1 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_ops pmops; void __iomem *regs; /* ctrl base */ /* tools for wired entry for config space access */ unsigned long last_elo0; @@ -46,6 +47,12 @@ struct alchemy_pci_context { int (*board_pci_idsel)(unsigned int devsel, int assert); }; =20 +static inline struct alchemy_pci_context * +syscore_to_pci_context(struct syscore_ops *ops) +{ + return container_of(ops, struct alchemy_pci_context, pmops); +} + /* for syscore_ops. There's only one PCI controller on Alchemy chips, so t= his * should suffice for now. */ @@ -306,9 +313,7 @@ static int alchemy_pci_def_idsel(unsigned int devsel, i= nt assert) /* save PCI controller register contents. */ static int alchemy_pci_suspend(struct syscore_ops *ops) { - struct alchemy_pci_context *ctx =3D __alchemy_pci_ctx; - if (!ctx) - return 0; + struct alchemy_pci_context *ctx =3D syscore_to_pci_context(ops); =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 +333,7 @@ static int alchemy_pci_suspend(struct syscore_ops *ops) =20 static void alchemy_pci_resume(struct syscore_ops *ops) { - struct alchemy_pci_context *ctx =3D __alchemy_pci_ctx; - if (!ctx) - return; + struct alchemy_pci_context *ctx =3D syscore_to_pci_context(ops); =20 __raw_writel(ctx->pm[0], ctx->regs + PCI_REG_CMEM); __raw_writel(ctx->pm[2], ctx->regs + PCI_REG_B2BMASK_CCH); @@ -354,11 +357,6 @@ static void alchemy_pci_resume(struct syscore_ops *ops) 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 int alchemy_pci_probe(struct platform_device *pdev) { struct alchemy_pci_platdata *pd =3D pdev->dev.platform_data; @@ -478,7 +476,9 @@ 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); + ctx->pmops.suspend =3D alchemy_pci_suspend; + ctx->pmops.resume =3D alchemy_pci_resume; + register_syscore_ops(&ctx->pmops); register_pci_controller(&ctx->alchemy_pci_ctrl); =20 dev_info(&pdev->dev, "PCI controller at %ld MHz\n", --=20 2.50.0 From nobody Mon Oct 6 19:04:39 2025 Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) (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 5A7A129AAFD; Thu, 17 Jul 2025 10:32:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752748378; cv=none; b=pTwgyvHTb9S+gR2X7ya05vIyROxV8yMlLSQScvJRGEOr7MbqoEBZVcYHP9XSBewOuVAIwoKShej1snvOYO28oIs6atcpqukg/aQ8mZoMiJFPc1k6NYw+3++F5txF0rAHaQsnL2TZuKkyEMfqsLU4g4eGRdJWVze7n4Iq3M9BlFg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752748378; c=relaxed/simple; bh=Ngdxmfsw7khuHkpFPEaaMiq7KTg8BovR3y92Uhy13MY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aEg4aDqctzAyyi48sbW9Bu7S/1gbAcjnu4yOlZJMWmevvh6Pl/i/kTTsNKBouas8nCzyLeuHCTucmOOsL7YgRwltl/G2UGuMx13UDUTHd6JzeL9IBY2YMAbrx8XR96Msl90o9Gl3rpmIO/gmwe9McuVv/bFbeCQznH/Lmr1KJg8= 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=E1/gMg7j; arc=none smtp.client-ip=209.85.221.42 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="E1/gMg7j" Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-3a548a73ff2so761284f8f.0; Thu, 17 Jul 2025 03:32:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752748375; x=1753353175; 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=3GoTBLEmLxVjzP5x5JCQ9EAKICcOeZGsg/sgJv78VUk=; b=E1/gMg7jpSl/MEfjC3iz4aomo7hZtZg7t8yHZdW6U06EnqJM9bzyw32F1AuQn5Ytkt T+uiEYwp8yzSWD7cUas/hwhop24FpKutwcnwOn7/uboofksbvx3lPXO6goLXQTzQNmhg F0XHJ+zhck/xc/YPxbRNKBfupy3kyE56rMG9KmmKClGchs73LsObKpoKCWByALAfWQl0 dC9amEK0xM4HIEu/yZdPKwwgr/0ETyTs51j74poEnqwH3kOrcVEVOggVz5H6vvE1K0wA rbvbcLg4izQedhYTcVd2qzjVMDp0rGuB/e8PYiPbXjLvWjOD/tCwojm4FPllIQZkVReF Qa4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752748375; x=1753353175; 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=3GoTBLEmLxVjzP5x5JCQ9EAKICcOeZGsg/sgJv78VUk=; b=o6v4b2DfJubCnnLb6e2LTM707sHddzOePxedwfguL/8KgmJkfA+ReVujNV2pwp4BeC UOqD+HA8oXDoQmueJd4LqYuzbzZn53D/GdmCoL3v8SEqSNtxO7lAhFwSMLdlZWPsIrbH Sc64zHgYLCMZLbqxLks1mez8soKUpqONpGlhm6KzFvCpcukSnOocp1cDfjTTCEve+WgQ 4wVJoRt43E8L9qPjyeZoqbdh+IY3tAAQtVjONzAjvDqp9y4FSHurC/qCFob+8/HG8sK2 NnUGntVctNGJrhF/EGREkgoJqG4wqNsxAbhgRfEgx4b36l4U1xDUpBpVsxQm5raY8jZp 55Ng== X-Forwarded-Encrypted: i=1; AJvYcCV16sOk9txjLOJSVDBBitGWJfCITIPqHZCULYylHS/DBonuTQCDrJXkXHIA+HzpHklsVoSXkSDcn1J/@vger.kernel.org, AJvYcCVCBtoWD5gjiMaUNHOSzTXKPDOPjsfSegugzZBzbB0OG0QDXrnjIWx2tZEzlmdlaILxom975MaiwktF8lZz@vger.kernel.org, AJvYcCVKKYLY7IaORtNjv9P99x/ro1b7CT7K3cjyORBnN5QegV//53CHqBZ6acdd+gZ5IqlgN6tASdkNcza8@vger.kernel.org, AJvYcCW0rnShKoazCPfEAYAFmteXWNbGAQ98hpiFz35MUBx+JZbl1Zbpg8Oq5KsQ+cKjrLLq+TlRso7A8Zs=@vger.kernel.org, AJvYcCW980sHKFutvGe/+dw2RZG45c6xBAYTYMkfmfeG6b1GKGHBTvrmL/ur90AWDt6H8op9pA7VaOQPMmHSTQ==@vger.kernel.org X-Gm-Message-State: AOJu0YxjVwIu9yuKY6Q65vc0+kEr419ZYvdFdANsaTjl75b9EOu6UDRK 9+L8d3o5t9jGs7zaPnyhaXzWyiWrsDndQOuB//IvOEcU5YcQRUwa2Qo0 X-Gm-Gg: ASbGncsQmSZCu/kJ4G0ywUQl1m79dIyEf8cLmzWoxUKM7/btpLrm6BSuWb/ghKzs7uR WQ9+OSdpQvFFtr1IplbGEY9bfWK5HBXKqwx1o+RK/w0dfp8BVgxBdkekyclbQi2zQe8DjnmC9Qz bHZVi/VVmpOx3Q1WnbFYlFGmdoPqO28I8KzxFS3lclwYuHPXEGQm/5ARFCq2QfLLd50Dps7sBWe BM06UmiqrrhTzxXnSqYgnjxWlen6elWUCJwcm27Jsd1ID15nT5TmA0+JqTVyLi998TX2rWmoB6k QWGmsZTMWlvIBSssOM02JkeSDJzQnWv/4ikXyuFbrIq/I5tRm+/cE0J/OVPdD4f4e1HZn29FRKc gdGXl3eB3irJXjychG8Ro9DZC4k0yTaAV3L4pM6YGjI7I/9oqGLl5hcc4TwaXOWxafCsf4sj26P DXC+2vVZ+mdi6eIg== X-Google-Smtp-Source: AGHT+IFzelVEVcHZ/OEffn+B3ZOPH1G6XXdnoiZLhN8P1cfO9z6/oEzmEO+w51ye1sA65QFg9m/KUA== X-Received: by 2002:a05:6000:2d84:b0:3a4:fb33:85ce with SMTP id ffacd0b85a97d-3b60dd7d98emr3809652f8f.46.1752748374338; Thu, 17 Jul 2025 03:32:54 -0700 (PDT) Received: from localhost (p200300e41f4e9b00f22f74fffe1f3a53.dip0.t-ipconnect.de. [2003:e4:1f4e:9b00:f22f:74ff:fe1f:3a53]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3b5e8bd163csm20204660f8f.4.2025.07.17.03.32.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Jul 2025 03:32:53 -0700 (PDT) From: Thierry Reding To: Greg Kroah-Hartman 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 v2 3/7] bus: mvebu-mbus: Embed syscore_ops in mbus context Date: Thu, 17 Jul 2025 12:32:37 +0200 Message-ID: <20250717103241.2806798-4-thierry.reding@gmail.com> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20250717103241.2806798-1-thierry.reding@gmail.com> References: <20250717103241.2806798-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 This enables the syscore callbacks to obtain the mbus context without relying on a separate global variable. Signed-off-by: Thierry Reding --- drivers/bus/mvebu-mbus.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/drivers/bus/mvebu-mbus.c b/drivers/bus/mvebu-mbus.c index 92daa45cc844..1f22bff0773c 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_ops syscore; void __iomem *mbuswins_base; void __iomem *sdramwins_base; void __iomem *mbusbridge_base; @@ -148,6 +149,12 @@ struct mvebu_mbus_state { struct mvebu_mbus_win_data wins[MBUS_WINS_MAX]; }; =20 +static inline struct mvebu_mbus_state * +syscore_to_mbus(struct syscore_ops *ops) +{ + return container_of(ops, struct mvebu_mbus_state, syscore); +} + static struct mvebu_mbus_state mbus_state; =20 /* @@ -1008,7 +1015,7 @@ fs_initcall(mvebu_mbus_debugfs_init); =20 static int mvebu_mbus_suspend(struct syscore_ops *ops) { - struct mvebu_mbus_state *s =3D &mbus_state; + struct mvebu_mbus_state *s =3D syscore_to_mbus(ops); int win; =20 if (!s->mbusbridge_base) @@ -1042,7 +1049,7 @@ static int mvebu_mbus_suspend(struct syscore_ops *ops) =20 static void mvebu_mbus_resume(struct syscore_ops *ops) { - struct mvebu_mbus_state *s =3D &mbus_state; + struct mvebu_mbus_state *s =3D syscore_to_mbus(ops); int win; =20 writel(s->mbus_bridge_ctrl, @@ -1069,11 +1076,6 @@ static void mvebu_mbus_resume(struct syscore_ops *op= s) } } =20 -static struct syscore_ops mvebu_mbus_syscore_ops =3D { - .suspend =3D mvebu_mbus_suspend, - .resume =3D mvebu_mbus_resume, -}; - static int __init mvebu_mbus_common_init(struct mvebu_mbus_state *mbus, phys_addr_t mbuswins_phys_base, size_t mbuswins_size, @@ -1118,7 +1120,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_ops(&mvebu_mbus_syscore_ops); + mbus->syscore.suspend =3D mvebu_mbus_suspend; + mbus->syscore.resume =3D mvebu_mbus_resume; + register_syscore_ops(&mbus->syscore); =20 return 0; } --=20 2.50.0 From nobody Mon Oct 6 19:04:39 2025 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (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 4748829ACFD; Thu, 17 Jul 2025 10:32:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752748380; cv=none; b=juObumEueWgRCOQGm5Rsu6X94PKlYlkyjBxUtKEbsBakuTZjksHIxflzDo2VnGXa+OnZkccEuPrSzf/3PMfKw/zQ3U3MHGczYKybYXwdV0OKyATiGJF4WemkBf6HmPiU7RpqOCxH095lb8kV9Y61UmdFm82GkBJNSAQBAH8tDYw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752748380; c=relaxed/simple; bh=gxJPOLe/NygmZOPFvcbQJrkty4d46bYlbvQiaExURr8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Hca9q8qeTvhJRY4tu7I1ffecINNsMH18E04DC66fpzf0i6ludjmvSKZiC/RhDhykgBdWs4kgaHUy7En7STxYZZKG1rY4gFlPjHW8UEoAtmh3vnPiGZH8jMhVH97VfOGDqsnUqOrlkBE1/yFdr6t1ohxihFoXkHGMZJbtOCWZeYE= 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=LHiErBpj; arc=none smtp.client-ip=209.85.128.47 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="LHiErBpj" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-455b00283a5so4935075e9.0; Thu, 17 Jul 2025 03:32:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752748377; x=1753353177; 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=5KTffJpKMpn8uJ1Va+yFB5k6/yxUZURkt0Rt5PLMCHI=; b=LHiErBpjTZebKUhdFcTo2scjZYFPCvzxOwnFjJiwtWLf3vH3FW4t/AWB/YfaiZgSKN iPQlvd1mmTHhL80Ejvq1f/KZoUFLK3m4qaacx9ojSDsC0aq6qlffLtUE29s4DctUjjvt con5rSEwHqNoXnXCDLjg2Gupk8e53pWNirNbL4KmwX7PtOxDwYSn3oQwlBmfKOJFPs7/ 7RXrETG7/PyS9eui8zXNCcnbAUVJ2GzCyVscoAMI+76IR0/TLu4dDQNl6up+dKLJ2eYm nVZYsQhxZ62oVIvYZkxiUQxCsNPO1J9Jj35dj84K7qgzly2vwtMUutnkYPaBGgPOac8x grKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752748377; x=1753353177; 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=5KTffJpKMpn8uJ1Va+yFB5k6/yxUZURkt0Rt5PLMCHI=; b=aVvHiSDvXUrxtZ7n3P2Q8Zeh4temb5OowPffC1huHU9d5UY5VIjvLJSclnffXRgVSJ nVKWkq5B1bcat3v6TOU9CkWSURX+aGuNJIW8DQQxn6xvRcF+pTVDA9OIrZvHU8IN0lP0 aVk68DJ+qehin503i+10jkc1HPyXu7r8LJ6aXGG875i/ZFlx0rlZnQDyOaXhmd+hLINO 4Ex6tSDfl8QiF4PGNdxzE7YBzggXn9wwadyCEmsPNg5H+8oshfeMXuIFx722LoE43SMU w5aizEs2eULdhRCr7efaPe6o+cMbvOATUYJQFxAM12YCLWmjjIELk5XA4IY+B6nUVcxM xpDA== X-Forwarded-Encrypted: i=1; AJvYcCUTQ5cdIfBFMEtk/dX9xGsdiwtidiLIHmiqmw2CC4lrecDIXqaAsbFBdfz9LqKY5GuSMRMrRT+oX5yM@vger.kernel.org, AJvYcCUTWf1yWEWaVJfeGuls0OUEI1lEIDxM4MuKo6odTxoGsGKr/l0QpIqVGrPiQcZnpdxfO7p+wOfAXn6J2vcj@vger.kernel.org, AJvYcCUpQm7QggrB5sct6Tg3IoEmu9c2znaPPGVtLPWj4VlOrlRRPhaLUtBWy2pr/AsthtBZKWSl+tF+M9m4@vger.kernel.org, AJvYcCUt9pxuJX/+vt5VLCM1WrRYuxsEGg69yGt/Dl2cyeyQoRKXInkF1VsAgIVPRMjGznQx/pmkto/D8Rmf+Q==@vger.kernel.org, AJvYcCXgflYZaNyfSiP+KkBtbY00yP6VQB8+zBhjShIolemWO2+PFr6TF8ozAmDt91QoH68u/mEY23HYjTw=@vger.kernel.org X-Gm-Message-State: AOJu0Yw4Xw6SfVYhWyIlaOLiwyoPCikdI8iwNHdFyoLz4OhG72gGsgPw V9RHwF9vE8q+jaJa8/HRA4g4gyPo7+yMWGjJsGmzcSNZTk160Of0YyDH X-Gm-Gg: ASbGncu7yODN/qezTYmmlSIOD4VpaDW2JZXRHT+7J9/QzuhO7qXeaSh2BFUgtDXMV42 fEkGYithXJ+A6oySxCNKw18vq93eojLK95ZObLXat6Im8Z2Bqdc3t1FplPw8sTeGogCwjD1fXc9 0I1XSQyl5br+WYkLwuADDq0imVov6zm3CdVRQvVtSj9JGiBZkF9UlvRkDD7XHfcbGUym+iJPwMY NEaq3lD+VfIJBhY737hr7DHyfVhzZIsXW8pqJJBsXZXD8nyLfpK/WZgLJTofPyKQ7JSqkgcR4+9 6hEZbyXglaLR2VXrguhoiRPVujIbtkM4KEwf2QVNg3TsqvaAw4j/XxpLm4vxfY6xofwMBxhYmcF xsW4R5BYntMUXDeCztpBGSyrbc6cNynHUSEk3YsunGw7oBsKeY//+GROJFFk/p6LgBjWBTgn625 8vt7ga7IXgOif0KjLrFPB0TP6F X-Google-Smtp-Source: AGHT+IHc8vQXtNpyThvJpHCdFDQv27nKu7NYwqVFIiEhHTf13nJ3NAM+LgvjkH4nGyp8L9aYlCB8Ng== X-Received: by 2002:a05:600c:5246:b0:456:207e:fd86 with SMTP id 5b1f17b1804b1-4562e03bdf0mr74830065e9.2.1752748376435; Thu, 17 Jul 2025 03:32:56 -0700 (PDT) Received: from localhost (p200300e41f4e9b00f22f74fffe1f3a53.dip0.t-ipconnect.de. [2003:e4:1f4e:9b00:f22f:74ff:fe1f:3a53]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-45634f4c34dsm18373635e9.6.2025.07.17.03.32.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Jul 2025 03:32:55 -0700 (PDT) From: Thierry Reding To: Greg Kroah-Hartman 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 v2 4/7] clk: ingenic: tcu: Embed syscore_ops in TCU context Date: Thu, 17 Jul 2025 12:32:38 +0200 Message-ID: <20250717103241.2806798-5-thierry.reding@gmail.com> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20250717103241.2806798-1-thierry.reding@gmail.com> References: <20250717103241.2806798-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 This enables the syscore callbacks to obtain the TCU context without relying on a separate global variable. Signed-off-by: Thierry Reding --- drivers/clk/ingenic/tcu.c | 54 ++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/drivers/clk/ingenic/tcu.c b/drivers/clk/ingenic/tcu.c index 85bd4bc73c1b..503a58d08224 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_ops syscore; +}; =20 static inline struct ingenic_tcu_clk *to_tcu_clk(struct clk_hw *hw) { @@ -332,6 +332,24 @@ static const struct of_device_id __maybe_unused ingeni= c_tcu_of_match[] __initcon { /* sentinel */ } }; =20 +static int __maybe_unused tcu_pm_suspend(struct syscore_ops *ops) +{ + struct ingenic_tcu *tcu =3D container_of(ops, typeof(*tcu), syscore); + + if (tcu->clk) + clk_disable(tcu->clk); + + return 0; +} + +static void __maybe_unused tcu_pm_resume(struct syscore_ops *ops) +{ + struct ingenic_tcu *tcu =3D container_of(ops, typeof(*tcu), syscore); + + if (tcu->clk) + clk_enable(tcu->clk); +} + 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 +448,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.suspend =3D tcu_pm_suspend; + tcu->syscore.resume =3D tcu_pm_resume; + register_syscore_ops(&tcu->syscore); + } =20 return 0; =20 @@ -455,38 +477,12 @@ static int __init ingenic_tcu_probe(struct device_nod= e *np) return ret; } =20 -static int __maybe_unused tcu_pm_suspend(struct syscore_ops *ops) -{ - struct ingenic_tcu *tcu =3D ingenic_tcu; - - if (tcu->clk) - clk_disable(tcu->clk); - - return 0; -} - -static void __maybe_unused tcu_pm_resume(struct syscore_ops *ops) -{ - struct ingenic_tcu *tcu =3D ingenic_tcu; - - if (tcu->clk) - clk_enable(tcu->clk); -} - -static struct syscore_ops __maybe_unused tcu_pm_ops =3D { - .suspend =3D tcu_pm_suspend, - .resume =3D tcu_pm_resume, -}; - 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_ops(&tcu_pm_ops); } =20 CLK_OF_DECLARE_DRIVER(jz4740_cgu, "ingenic,jz4740-tcu", ingenic_tcu_init); --=20 2.50.0 From nobody Mon Oct 6 19:04:39 2025 Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.50]) (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 4951B29B783; Thu, 17 Jul 2025 10:33:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752748381; cv=none; b=nd/ZNSohL1RQujwGwfkjCcGGWb6hSW+V8AVhASY//sZYc5p7rDGghVpJ2JrMns47Tt/FZqNyf+1KMpxDFHahvJQmzwFAugMzwB7E+YhK38VDoNCrXnstV2WWPLDPL5oN1f88jQIGoZ1VwiBUkYGepJxn9HMC8DsXEXh9jkNSe44= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752748381; c=relaxed/simple; bh=vp8F/aC/cZooJCbJwE+TaQJZ/3NVmFILN3IZLxtFeec=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=s0i6FyWwmCrwuZi1qlp1PLz/8K5zSX/6yHnT8gdwXwmJ8Np8PN+bpKf0EK5rD3LqTu67ach40NXF3Bg8Htie1psKZyE8u7NAsr5B9ydv+IZ6RNV+SEgnFS9rX947YMdZf5qvwGQ3EZunL8Z6rA3zJRPF77U0kuCGy5K60hSzygE= 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=mB9ahfT8; arc=none smtp.client-ip=209.85.221.50 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="mB9ahfT8" Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-3a6f2c6715fso647342f8f.1; Thu, 17 Jul 2025 03:32:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752748378; x=1753353178; 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=oAFLXGS25z8S0WanVyIjmw4Vp4se3d5lBR+FdNubaFk=; b=mB9ahfT8yCESDDeAwana1ppqWZz3NNxvxpdfKZ6bFloSz+90TlQnhZgQoRdshXkYF9 evPGvljb6mS+x0YYfYs7Vo10Uia409QJDTllIMv+p04I8xUCQkiFRItPvcs5KfWE99dk ybGn7Bq8nz4fx+Om7rauZwA65+Riluy3ZWzj4Ofu6mANGZQ0GhvPj9BEmmGuCW5rKyTw kvpSIQg7yCbQs88zazRewj7QWIO6u9759WCigxjpo+NG5gN9vk5PMXhl8k55yNXOQwDm wSfSAnb33PkzF+qgkXXO3jfd2ZxAVlLvI1WSV1IMnrSGs7r7V+DU5wCK8StWBv4ECHOP FpaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752748378; x=1753353178; 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=oAFLXGS25z8S0WanVyIjmw4Vp4se3d5lBR+FdNubaFk=; b=j3pvzKz09OTba2B47mLdMhHGGx7Ic6Q228HjWkOpRLWUcXEdwVKvxvF76BjtOa0RdB Cq6p1niMSrd0BmDIUrDqXBcIY6rEWeEM/NglFZPKLtDqyYsImCrXYbRgIg41Nm6zCFcn pZAmzG9ty93Auuvu01k6JYPvgEPP3tP5TChYyJWLKPVbgxD8t6y/tpjAxrBrGkySaLbZ KcurOMgUwrkSYExqexUG3enHxQfr825ljrImtV/lzDebD4PSgpkLISlp11BnNNDrd8uH 8lxvSx7364l8uK3diZxZsaoOgpJxHeKmJWNOfY6SuvOzplMVgeTuFV737JIni7Qu8PPK Xy7A== X-Forwarded-Encrypted: i=1; AJvYcCU/9NkzTc1741zW389aFolVTl25doiBX7+WHPqkVYLVVRTsbD8u5hJ2U1wXr7JUHNf+fWmxR8ilENRTwfUN@vger.kernel.org, AJvYcCUbtfiUlZ0mSQpK/T0Y8sml5+IUNhFuNLzS+lXKSQXH1yCBwsn/JIAejijTNvtDqIYsTWLPw4itWWJL@vger.kernel.org, AJvYcCV5OekxXsrAF7PRnz4cA5WCjGLQGUAlqU9Fj9OveMtaJSEqtJK+sGVuklu8Nm/WgVg0qqDJ4YLd+F2iEQ==@vger.kernel.org, AJvYcCXHl4Um6s6ft/5EfuXFy+iQ2XlXgAKd1eCG01g8Ni0eUwRJnaDRRiRn1H/KksQAXWf3whJa5CXgKTM=@vger.kernel.org, AJvYcCXb0qVTnPLqpU81BOG9Ji1Q6GU0jIVtAFtrbRt79pOYZPC9KBsNy+kMUSaZtxAfUKc1c+CukDgVejjU@vger.kernel.org X-Gm-Message-State: AOJu0YzUd4g8FuFd4EQWZ1Y3pqW3aN5iM+jIAWUs6n7CG0ZAgqjg4x1z xbnCkUbUKJcZTcW9dLfu98iOzjOIEh5k4V5yFy7d/i6bfnAnoYhyRDeq X-Gm-Gg: ASbGncteV7MUSsZ126eMjFf1UfvfpH2Z56cYgi/gQysrhGs4grO3oe3Go5DhoHL3Kjp qvPoZ2LTwdH9KCOZr04DiOzlFgDVkTpF6x5AJ5xj/zeK4qlCbpglGqDDwQ2nSYAJdaosI2nZZXm ZY/SaHCaygIzN2vNzBiNzEhoRaSGvnEOgGqefp/UybxS9bOnLDZWsiEaWW2VWvbPBwUXyKfBuM5 nvH1PehuTs6OCZXbUjpx1+l188cEfUv/FCsMIV5XVjclX2PSMEGkuevRTmunj1LkkV7M6omxC/k eaIZoRaLR3tm3MWBqIg7aXYGXvOhZY1z3HuDOIOW9h6L3wlo4CS06VJfidN3CZPN6rWz8U5ZXIe yznPrBcZ2H3ouXExMs2r1q/PLGQW14Ze6LWS7Q/rjkO0v48mXTKEpEtAzQTBz3A5ukrI9yAXaro RkAcAoVEynCITB7Q== X-Google-Smtp-Source: AGHT+IEdwrBNkg9M8guchW0vI+6tEPzp3HT7pxcYs5sGp6dD4O7OxQ4GRP3g0Y8ml2hczWmCiC6jOQ== X-Received: by 2002:a05:6000:1887:b0:3a4:cfbf:519b with SMTP id ffacd0b85a97d-3b60e5103fcmr4782590f8f.44.1752748378428; Thu, 17 Jul 2025 03:32:58 -0700 (PDT) Received: from localhost (p200300e41f4e9b00f22f74fffe1f3a53.dip0.t-ipconnect.de. [2003:e4:1f4e:9b00:f22f:74ff:fe1f:3a53]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3b5e8dc91d8sm20127132f8f.42.2025.07.17.03.32.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Jul 2025 03:32:57 -0700 (PDT) From: Thierry Reding To: Greg Kroah-Hartman 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 v2 5/7] clk: mvebu: Embed syscore_ops in clock context Date: Thu, 17 Jul 2025 12:32:39 +0200 Message-ID: <20250717103241.2806798-6-thierry.reding@gmail.com> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20250717103241.2806798-1-thierry.reding@gmail.com> References: <20250717103241.2806798-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 This enables the syscore callbacks to obtain the clock context without relying on a separate global variable. Signed-off-by: Thierry Reding --- drivers/clk/mvebu/common.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/drivers/clk/mvebu/common.c b/drivers/clk/mvebu/common.c index ee77d307efe0..53712c3e5087 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_ops syscore; spinlock_t *lock; struct clk **gates; int num_gates; @@ -196,11 +197,15 @@ struct clk_gating_ctrl { u32 saved_reg; }; =20 -static struct clk_gating_ctrl *ctrl; +static inline struct clk_gating_ctrl *from_syscore(struct syscore_ops *ops) +{ + return container_of(ops, struct clk_gating_ctrl, syscore); +} =20 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,23 +222,23 @@ static struct clk *clk_gating_get_src( =20 static int mvebu_clk_gating_suspend(struct syscore_ops *ops) { + struct clk_gating_ctrl *ctrl =3D from_syscore(ops); + ctrl->saved_reg =3D readl(ctrl->base); return 0; } =20 static void mvebu_clk_gating_resume(struct syscore_ops *ops) { + struct clk_gating_ctrl *ctrl =3D from_syscore(ops); + writel(ctrl->saved_reg, ctrl->base); } =20 -static struct syscore_ops clk_gate_syscore_ops =3D { - .suspend =3D mvebu_clk_gating_suspend, - .resume =3D mvebu_clk_gating_resume, -}; - 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; @@ -284,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_ops(&clk_gate_syscore_ops); + ctrl->syscore.suspend =3D mvebu_clk_gating_suspend; + ctrl->syscore.resume =3D mvebu_clk_gating_resume; + register_syscore_ops(&ctrl->syscore); =20 return; gates_out: --=20 2.50.0 From nobody Mon Oct 6 19:04:39 2025 Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.50]) (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 46D5629C33D; Thu, 17 Jul 2025 10:33:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752748383; cv=none; b=mSTZLta51sdUZ4lZd48OBMfo1Kdpnp3EIvhlCxLQTfQQuMbD2xkzEAMflhG8Xuv9CJpJbj++vjf/iKa7T+K+IsikCw4uhvp6vLJd9KZmRGaTOgJJrmE0DAbL/a0JRf1FNfoknVUskPcQNlaAxnEbayGkT0EeK4qf3VpvVn00DLQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752748383; c=relaxed/simple; bh=HzpHN8YcpcUGQ8cTxUMkyRM0WI773zFQRBMcOx7t8Uk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DpFm9/QlUNV3VNZJWzMfqBKGGlIQvOrKfhnu6PTQz8SUH8AnVRTCDETMkidb4uf0aure3KdvpK57S6YGpuQCTvpVm7Eg0Rv6RxPPp8jQuGCQhPuKzcFy/xGLa0Nin/wQ4F6Hh2X9aaOHu9Lrkg5FF/TbqMLyRTw/hOqeTAhALZk= 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=Y2MGXGuG; arc=none smtp.client-ip=209.85.221.50 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="Y2MGXGuG" Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-3b611665b96so435362f8f.2; Thu, 17 Jul 2025 03:33:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752748381; x=1753353181; 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=jGNFpZqODfmzhJr9aiRrd+TX86pzNqh5cw08oNQmcLU=; b=Y2MGXGuGCVADOfYxQcO17jonVzGmRBMuAhtwNi1GFvrCtTB8QxrhXttqLwwJOoY9Q3 phoiT1tQUaxSJhtbLwpFwFak+0CAB8LTosY/iio/Xls6HOIfwYgwgnvLH9esNOEMexgN zoloLzV5chxPop177WeZYbqqjXCZ+EIkdqN6fO1f5aNiU6lx6I5vHzgOzK4B1GuFthXo kfwD3iaRyNC67CvRb3VrqXo8WbW8vWjFywC8ZpAksuAdFSVjNnQwW5a5Rdohc74AiqPA 4abG6AC2IETzHcuI1ao35xZ3+Y5ySWt7/KuZVyDNpjfXjDOQlpYsPV0AHVmfQV8SfSpc 1xKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752748381; x=1753353181; 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=jGNFpZqODfmzhJr9aiRrd+TX86pzNqh5cw08oNQmcLU=; b=xSqo5oTI1efwMaG7zk2YZ2piS0f3KD7tA7lDflwM4rb1A+WDpzB3H6ZS5NQ6NoTpLR x+po0p9LhJIlr9UAgggFoZ+0cepdy5kQ4O451hRF2hBlrauq6AGyKDm9UvZ3rdUsz2xy 1SRYUqCnzHJXoyjSAbMfa5fcUJTz0o2mg6BxOBpHmjCS5L6xf34IwAipGDkC3idBMJfO sXQjzqkz1uIwu64UNtzjIQ3BC4le2c+fvyasxAwK4o10bUnGXymRQcVWqGlHJa63+mGA 16i3CLorJ7evOEgTP9IDRyi2hCL+vRjpcU+EQ60wfBZNHhwubW8SYqhWM3mGerCtAM8T XGtg== X-Forwarded-Encrypted: i=1; AJvYcCUkD4qKGikYl6QyFyH8+5JEnaVNlkMmBLse9u8M1CKDC+bQFrcHt2KznG4f2LjFRbSA+WnpdobJp27h@vger.kernel.org, AJvYcCVGVUmVzxImBKIKUtUiRcoDPhXslXBx+94cyHxtM13lWfGaioMGhw53DjrCb5XHGz0nQD12jgCxZ7g=@vger.kernel.org, AJvYcCWeqGrdt6BZRq96Nk8LNtkZ3xNUfi9I4q9sGzuI2D7s8JBm5AwSFP2dcMW+aVrua8ofUZ+8gAJWInns@vger.kernel.org, AJvYcCWnCDW3eWxjwjbRo2Fk/f5ke7YSJEY0uRk0widWB8AuXjuLcdPvQa6YlJOH3S8lIEj4OJWPDVK3I7M7JQ==@vger.kernel.org, AJvYcCXY+R+tmi2z53eG9w1DJ8xMZfAM2Q5gtAV7VQVHtv6CobK1g7PJ89kf8KLeVhj0jNVrFuMn2nJFzuQ/L+rr@vger.kernel.org X-Gm-Message-State: AOJu0Yz0ea3Eif7/dp3tYJuqI9tVH5QP7sTcClDjsGkI8xagQsUAjaBG x3FAA+rtE9+VGwboKJjV5W7dwNE2zV3VgAVVC+Q8oQr+bCWuFWue8vS4 X-Gm-Gg: ASbGncuyrW6hNht6Cwd1qtgFg4GoB56l4SymPv+Uv7bzZ/xxd2BVnfaZov5tub8VoC9 +A7ViaBffPuSdNX47QGpwudRato7jtWnAAXQKCC2clJb1O7S6kVu5Li9WTqlc1cHJrgYrZZcqfV u2t5aabouaBM9V72FXDmgC/R5Q6CW4wySkT8BR0PsGbVcc2UKRu+63NV6T+0lbfvN4pjG3D5RcZ tmVCqQbfnOjmYD2ubCJNe3kJzukg7leXjIzsnTMWFDWaLVeGGwluSmq68LvRO+tMqL6ZvtzQeKZ 7NVaTg8+IhGXU8L8fIQNtZygjp2Xddj0qezhDIjzbgmSLYmORFmpLjGdRbKyDRV0iXT425S7UEK IkDKcD4CJk2vDRDSDN2fNw8H5PFQIqpeTi/SI4SzGL2U2ITmdPwCwdDVp6srmyvc+oTirDWt5Td lW9tDP0bzg6yccvA== X-Google-Smtp-Source: AGHT+IEJyseOSQ7/RZYPnww/L9LgeDBNM4g6hD4cUsfsALyidX4LqCToCF9T7Owp+uYfqFCAdatHoQ== X-Received: by 2002:a05:6000:2901:b0:3b6:1ed:9ad2 with SMTP id ffacd0b85a97d-3b60e51b8bdmr5306916f8f.42.1752748380572; Thu, 17 Jul 2025 03:33:00 -0700 (PDT) Received: from localhost (p200300e41f4e9b00f22f74fffe1f3a53.dip0.t-ipconnect.de. [2003:e4:1f4e:9b00:f22f:74ff:fe1f:3a53]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3b5e8bd1924sm20547938f8f.16.2025.07.17.03.32.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Jul 2025 03:32:59 -0700 (PDT) From: Thierry Reding To: Greg Kroah-Hartman 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 v2 6/7] irqchip/irq-imx-gpcv2: Embed syscore_ops in chip context Date: Thu, 17 Jul 2025 12:32:40 +0200 Message-ID: <20250717103241.2806798-7-thierry.reding@gmail.com> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20250717103241.2806798-1-thierry.reding@gmail.com> References: <20250717103241.2806798-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 This enables the syscore callbacks to obtain the IRQ chip context without relying on a separate global variable. Signed-off-by: Thierry Reding --- drivers/irqchip/irq-imx-gpcv2.c | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/drivers/irqchip/irq-imx-gpcv2.c b/drivers/irqchip/irq-imx-gpcv= 2.c index bdee15a327f3..8e606baf3a01 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_ops syscore; struct raw_spinlock rlock; void __iomem *gpc_base; u32 wakeup_sources[IMR_NUM]; @@ -26,7 +27,11 @@ struct gpcv2_irqchip_data { u32 cpu2wakeup; }; =20 -static struct gpcv2_irqchip_data *imx_gpcv2_instance __ro_after_init; +static inline struct gpcv2_irqchip_data * +from_syscore(struct syscore_ops *ops) +{ + return container_of(ops, struct gpcv2_irqchip_data, syscore); +} =20 static void __iomem *gpcv2_idx_to_reg(struct gpcv2_irqchip_data *cd, int i) { @@ -35,14 +40,10 @@ static void __iomem *gpcv2_idx_to_reg(struct gpcv2_irqc= hip_data *cd, int i) =20 static int gpcv2_wakeup_source_save(struct syscore_ops *ops) { - struct gpcv2_irqchip_data *cd; + struct gpcv2_irqchip_data *cd =3D from_syscore(ops); 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,22 +55,13 @@ static int gpcv2_wakeup_source_save(struct syscore_ops = *ops) =20 static void gpcv2_wakeup_source_restore(struct syscore_ops *ops) { - struct gpcv2_irqchip_data *cd; + struct gpcv2_irqchip_data *cd =3D from_syscore(ops); 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)); } =20 -static struct syscore_ops imx_gpcv2_syscore_ops =3D { - .suspend =3D gpcv2_wakeup_source_save, - .resume =3D gpcv2_wakeup_source_restore, -}; - static int imx_gpcv2_irq_set_wake(struct irq_data *d, unsigned int on) { struct gpcv2_irqchip_data *cd =3D d->chip_data; @@ -275,8 +267,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_ops(&imx_gpcv2_syscore_ops); + cd->syscore.suspend =3D gpcv2_wakeup_source_save; + cd->syscore.resume =3D gpcv2_wakeup_source_restore; + register_syscore_ops(&cd->syscore); =20 /* * Clear the OF_POPULATED flag set in of_irq_init so that --=20 2.50.0 From nobody Mon Oct 6 19:04:39 2025 Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.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 4BAF529DB80; Thu, 17 Jul 2025 10:33:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752748385; cv=none; b=Ry7eP7v+cwpgeEM7bgaUUciArhb9Xb+0ZzDpzXkEBsOt+iaUDfqNVkKkXVvT+X/lffRv7LuWtKhexyRa5cpa4nfyKj/fXIg2XU82NzhZV5dqhYfKmuGkSqnx+QCuWUmVv/glbm4fM8L0fk7TVW2z5jLRdhomW8eU9Zyf6fILo3U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752748385; c=relaxed/simple; bh=Q1EP3fcNvNx8PjpgFAFaM/WAmgg9+NrPEMcfSO1OfvQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CfFKh0hJzZCRVJDWUIOzjMjBoe3C7zxfp7CPmBl5CEmahF18aHVZ390pAD0BM87c+3UIrQnEKEyuSxHxEP0CQhOnOx8s6TPVngykibcBrmjxa6t6BHKtsTCavFPa9OefXgiynJpeT8XkLXY+GsgFMtZM7iZnebJ4JRAXckeuUZ4= 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=Yam7EXq6; arc=none smtp.client-ip=209.85.221.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="Yam7EXq6" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-3a50956e5d3so605085f8f.1; Thu, 17 Jul 2025 03:33:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752748383; x=1753353183; 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=5hAdkFjzlZ96J9ZvADDEOxzZCwxKXpOY5bpgjR9cuyI=; b=Yam7EXq6THzjjWwUzB6kw/P2K3YvTODJTJ/ZckCQDkpPtGQ0YZ6HJ91DGmrWTuGfP9 vHIGhc3omFgcLJbPX1622yccZxFgR6+vO57908tCFrtGjeYbtJQioCexWafg4CwfxQN4 jCfu0K/pJzEDQGgzuNxUmJ30aDsKOPcjuYRVjO4XGQWUnzIyQGMM6+uJRpfU2IAlVRAL XmlboH8neQ7Kh0ELpMWsQ9xHCFBjLDlOnl3+/PLa8d2cUbLIhe8Dz9m4KPObnjHVJva4 V1ak2G59iG3nPpdPd/zNyygPVzSUJIVrvco1VUNe/gpkTQLo9gkzfy2uxLv5ihDfN0XI 34nw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752748383; x=1753353183; 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=5hAdkFjzlZ96J9ZvADDEOxzZCwxKXpOY5bpgjR9cuyI=; b=dP+URilrA6NaiTf2dHYsfjouX97DV1n91JX5s+jg30GwCdF06EtGvywMsNwwQZu4Kb ty8McIfWoelCfs6WGvxaXZx7XotHmboNof4AlqXNdyDS+nPWvYUXcWYietYzgM6raUuN quUY+HnfdL4iw/V1juJfV8oSP5jSD72Am9EngdJuGuaxopFrvHyXdwCRDhOF3LO+RVaE sQmYvn2tyM0UIkX9HEAt3ETlT1smf/+5rtE9Ehlhddwt5xIWi+IejQIpY4/m87kevO+F ytXbqZWHe3Kxe+1cUNxiMAHsSY3aVBmT0PedHAr19mbdVG2wCIHDUaNglvMKFkz70BnN JBdQ== X-Forwarded-Encrypted: i=1; AJvYcCUjwCk4QONUExn1aLjkZAunFU6H7kZJOQ+u/RmM1ihR3GAGq2kdT5K9iLQMyQEbIKB1aegs4lEKhgk=@vger.kernel.org, AJvYcCVRtuKFMEhN26vawTsN7TvDn9kglvcupgvawUkWFoEP8JjTnuMGVslvPvzuO24RNuGiLVDv2zf+kLtPXA==@vger.kernel.org, AJvYcCWXH2uhy4ncDrAn/okj+PaClMt0hxTHt0xPTez9v3qtNu8ZjKGQ/KL+TG56nEIwDDFwa9XIgo+vxk8y@vger.kernel.org, AJvYcCWbjC/JIrV9tF0vAR9BqBc5fBIniVrSnQwaVam5fi4wzXhRrDfLnHaFl2FGpeS5df+2yE6TYxfLgrEM@vger.kernel.org, AJvYcCXbNiNOGFZn75Z/k/bhYrTmMyIo5KPBwx5zEXOQ9gCZspXo4pzjQCkjyJLtMx39I44h9apKo8nzdnziXVES@vger.kernel.org X-Gm-Message-State: AOJu0YyI+ucyFEZUrOk9eLpxKDbJznRsYDP0O0mB4LIifSy8cjDSM4tL ZkxR5+6srVBTsaDn7JGu2UIBES42tK9Dvdxz0tG7iFcgKpaWn4SCcYeG X-Gm-Gg: ASbGncufmnJcGb/kVFS3APtBNCgvvL+ny/E3spAOGeqTgljT0QeCJEcV7Dn1WNYKCTZ Tuw7XA/rsD7ySAFaI4+fZ8D8yNLAuvpR6d/BcMtgCEBeOt8CrB4g+1fdVfAk/KQCT7UEs01u5hO BRB3z5ZxlZColeUfEPRGVcnUF8bGG91vqB292chyI2ZfGADgLXp6jhXK/37Z11BTpBO0h8Mq0xI njFooRqrmzUT1Xxc1GuzPIOpq96jcu6QX02jUO9jW3q0EwHhvGVkZa8LadUGRKrviT9f7Y1x2N4 mcgzdI1emMa53iCl2clruCnEECITLr7ZrwCzgNu+kxMYGZtZe+ipjuTHQwAOXrdDJv8XbpmX4p7 fz6xK80H2yZY78yMjHlm5FDpVvgTQGjhMDnIkj6vS4OT/A4OPR7ZybQJ1mGEpHAZsmmPLQsl+Oq /GaIJBU//Fmiy8TeV1wPnYZn/s X-Google-Smtp-Source: AGHT+IEqfCFpIQcuogdtVlks+s7mtGT9PHZg7lN5UDyP9j1DEHEgnDRrYCSmStX9iLPaLpOJf76oyg== X-Received: by 2002:a05:6000:1ac9:b0:3b6:d7c:f4ce with SMTP id ffacd0b85a97d-3b60dd88801mr5936545f8f.54.1752748382518; Thu, 17 Jul 2025 03:33:02 -0700 (PDT) Received: from localhost (p200300e41f4e9b00f22f74fffe1f3a53.dip0.t-ipconnect.de. [2003:e4:1f4e:9b00:f22f:74ff:fe1f:3a53]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3b612db7060sm2629613f8f.52.2025.07.17.03.33.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Jul 2025 03:33:01 -0700 (PDT) From: Thierry Reding To: Greg Kroah-Hartman 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 v2 7/7] soc/tegra: pmc: Derive PMC context from syscore ops Date: Thu, 17 Jul 2025 12:32:41 +0200 Message-ID: <20250717103241.2806798-8-thierry.reding@gmail.com> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20250717103241.2806798-1-thierry.reding@gmail.com> References: <20250717103241.2806798-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 Rather than relying on a global variable, make use of the fact that the syscore ops are embedded in the PMC context and can be obtained via container_of(). Signed-off-by: Thierry Reding --- drivers/soc/tegra/pmc.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c index 455e55cbd2cc..a5c179636a69 100644 --- a/drivers/soc/tegra/pmc.c +++ b/drivers/soc/tegra/pmc.c @@ -3143,6 +3143,7 @@ static void tegra186_pmc_process_wake_events(struct t= egra_pmc *pmc, unsigned int =20 static void tegra186_pmc_wake_syscore_resume(struct syscore_ops *ops) { + struct tegra_pmc *pmc =3D container_of(ops, struct tegra_pmc, syscore); u32 status, mask; unsigned int i; =20 @@ -3156,6 +3157,8 @@ static void tegra186_pmc_wake_syscore_resume(struct s= yscore_ops *ops) =20 static int tegra186_pmc_wake_syscore_suspend(struct syscore_ops *ops) { + struct tegra_pmc *pmc =3D container_of(ops, struct tegra_pmc, syscore); + wke_read_sw_wake_status(pmc); =20 /* flip the wakeup trigger for dual-edge triggered pads --=20 2.50.0