On Thu, May 21, 2026 at 3:33 PM Kees Cook <[email protected]> wrote: > > Using Coccinelle, rewrite every struct kernel_param_ops initializer that > sets .get into a DEFINE_KERNEL_PARAM_OPS-family macro invocation, > for example: > > @@ > declarer name DEFINE_KERNEL_PARAM_OPS; > identifier OPS; > expression SET, GET; > @@ > - const struct kernel_param_ops OPS = { > - .set = SET, > - .get = GET, > - }; > + DEFINE_KERNEL_PARAM_OPS(OPS, SET, GET); > > Using the macro for initialization means future changes can manipulate > the struct layout and callback prototypes without having to change every > initializer. > > Signed-off-by: Kees Cook <[email protected]>
For ACPI and hibernation: Acked-by: Rafael J. Wysocki (Intel) <[email protected]> > --- > mm/kfence/core.c | 7 +- > arch/powerpc/kvm/book3s_hv.c | 5 +- > arch/s390/kernel/perf_cpum_sf.c | 6 +- > arch/um/drivers/vfio_kern.c | 6 +- > arch/um/drivers/virtio_uml.c | 6 +- > arch/x86/kernel/msr.c | 6 +- > arch/x86/kvm/mmu/mmu.c | 12 +-- > arch/x86/kvm/svm/avic.c | 6 +- > arch/x86/kvm/vmx/vmx.c | 6 +- > arch/x86/platform/uv/uv_nmi.c | 12 +-- > block/disk-events.c | 6 +- > drivers/acpi/sysfs.c | 25 +++---- > drivers/block/loop.c | 12 +-- > drivers/block/null_blk/main.c | 12 +-- > drivers/block/rnbd/rnbd-srv.c | 6 +- > drivers/block/ublk_drv.c | 7 +- > drivers/char/ipmi/ipmi_msghandler.c | 6 +- > drivers/char/ipmi/ipmi_watchdog.c | 17 ++--- > drivers/crypto/hisilicon/hpre/hpre_main.c | 16 +--- > drivers/crypto/hisilicon/sec2/sec_main.c | 23 ++---- > drivers/crypto/hisilicon/zip/zip_crypto.c | 5 +- > drivers/crypto/hisilicon/zip/zip_main.c | 21 ++---- > drivers/dma/dmatest.c | 20 ++--- > drivers/edac/i10nm_base.c | 6 +- > drivers/firmware/efi/efi-pstore.c | 6 +- > drivers/firmware/qcom/qcom_scm.c | 6 +- > drivers/firmware/qemu_fw_cfg.c | 6 +- > drivers/gpu/drm/drm_panic.c | 6 +- > drivers/gpu/drm/i915/i915_mitigations.c | 5 +- > drivers/gpu/drm/imagination/pvr_fw_trace.c | 6 +- > drivers/hid/hid-cougar.c | 6 +- > drivers/hid/hid-steam.c | 6 +- > drivers/infiniband/hw/hfi1/driver.c | 5 +- > drivers/infiniband/ulp/iser/iscsi_iser.c | 6 +- > drivers/infiniband/ulp/isert/ib_isert.c | 6 +- > drivers/infiniband/ulp/srp/ib_srp.c | 5 +- > drivers/input/misc/ati_remote2.c | 13 ++-- > drivers/input/mouse/psmouse-base.c | 6 +- > drivers/media/usb/uvc/uvc_driver.c | 6 +- > drivers/misc/lis3lv02d/lis3lv02d.c | 5 +- > drivers/net/wireless/ath/wil6210/main.c | 10 +-- > drivers/nvme/host/multipath.c | 12 +-- > drivers/nvme/host/pci.c | 18 ++--- > drivers/nvme/target/rdma.c | 5 +- > drivers/nvme/target/tcp.c | 5 +- > drivers/platform/x86/acerhdf.c | 5 +- > drivers/power/supply/bq27xxx_battery.c | 6 +- > drivers/power/supply/test_power.c | 75 ++++++++----------- > drivers/scsi/sg.c | 6 +- > drivers/target/target_core_user.c | 13 ++-- > .../processor_thermal_soc_slider.c | 12 +-- > drivers/thermal/intel/intel_powerclamp.c | 20 +---- > drivers/tty/hvc/hvc_iucv.c | 6 +- > drivers/tty/sysrq.c | 6 +- > drivers/ufs/core/ufs-fault-injection.c | 5 +- > drivers/ufs/core/ufs-mcq.c | 18 ++--- > drivers/ufs/core/ufs-txeq.c | 5 +- > drivers/ufs/core/ufshcd.c | 12 +-- > drivers/usb/core/quirks.c | 6 +- > drivers/usb/gadget/legacy/serial.c | 5 +- > drivers/usb/storage/usb.c | 5 +- > drivers/vhost/scsi.c | 7 +- > drivers/virt/nitro_enclaves/ne_misc_dev.c | 6 +- > drivers/virtio/virtio_mmio.c | 6 +- > fs/ceph/super.c | 10 +-- > fs/fuse/dir.c | 5 +- > fs/nfs/namespace.c | 6 +- > fs/nfs/super.c | 6 +- > fs/ubifs/super.c | 6 +- > kernel/locking/locktorture.c | 6 +- > kernel/panic.c | 6 +- > kernel/params.c | 44 +++-------- > kernel/power/hibernate.c | 6 +- > kernel/rcu/tree.c | 18 ++--- > kernel/sched/ext.c | 11 +-- > kernel/workqueue.c | 12 +-- > lib/dynamic_debug.c | 6 +- > lib/test_dynamic_debug.c | 6 +- > mm/damon/lru_sort.c | 19 ++--- > mm/damon/reclaim.c | 19 ++--- > mm/damon/stat.c | 6 +- > mm/memory_hotplug.c | 12 +-- > mm/page_reporting.c | 11 +-- > mm/shuffle.c | 6 +- > mm/zswap.c | 14 ++-- > net/batman-adv/bat_algo.c | 6 +- > net/ceph/ceph_common.c | 5 +- > net/ipv4/tcp_dctcp.c | 6 +- > net/sunrpc/auth.c | 6 +- > net/sunrpc/xprtsock.c | 18 ++--- > samples/damon/mtier.c | 6 +- > samples/damon/prcl.c | 6 +- > samples/damon/wsse.c | 6 +- > security/apparmor/lsm.c | 34 +++------ > sound/hda/controllers/intel.c | 5 +- > sound/usb/card.c | 7 +- > 96 files changed, 307 insertions(+), 660 deletions(-) > > diff --git a/mm/kfence/core.c b/mm/kfence/core.c > index 655dc5ce3240..e14102c01520 100644 > --- a/mm/kfence/core.c > +++ b/mm/kfence/core.c > @@ -92,10 +92,9 @@ static int param_get_sample_interval(char *buffer, const > struct kernel_param *kp > return param_get_ulong(buffer, kp); > } > > -static const struct kernel_param_ops sample_interval_param_ops = { > - .set = param_set_sample_interval, > - .get = param_get_sample_interval, > -}; > +static DEFINE_KERNEL_PARAM_OPS(sample_interval_param_ops, > + param_set_sample_interval, > + param_get_sample_interval); > module_param_cb(sample_interval, &sample_interval_param_ops, > &kfence_sample_interval, 0600); > > /* Pool usage% threshold when currently covered allocations are skipped. */ > diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c > index 61dbeea317f3..0c15f0426671 100644 > --- a/arch/powerpc/kvm/book3s_hv.c > +++ b/arch/powerpc/kvm/book3s_hv.c > @@ -114,10 +114,7 @@ module_param(one_vm_per_core, bool, S_IRUGO | S_IWUSR); > MODULE_PARM_DESC(one_vm_per_core, "Only run vCPUs from the same VM on a core > (requires POWER8 or older)"); > > #ifdef CONFIG_KVM_XICS > -static const struct kernel_param_ops module_param_ops = { > - .set = param_set_int, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(module_param_ops, param_set_int, > param_get_int); > > module_param_cb(kvm_irq_bypass, &module_param_ops, &kvm_irq_bypass, 0644); > MODULE_PARM_DESC(kvm_irq_bypass, "Bypass passthrough interrupt > optimization"); > diff --git a/arch/s390/kernel/perf_cpum_sf.c b/arch/s390/kernel/perf_cpum_sf.c > index 7bfeb5208177..76119542562b 100644 > --- a/arch/s390/kernel/perf_cpum_sf.c > +++ b/arch/s390/kernel/perf_cpum_sf.c > @@ -2029,10 +2029,8 @@ static int param_set_sfb_size(const char *val, const > struct kernel_param *kp) > } > > #define param_check_sfb_size(name, p) __param_check(name, p, void) > -static const struct kernel_param_ops param_ops_sfb_size = { > - .set = param_set_sfb_size, > - .get = param_get_sfb_size, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_sfb_size, param_set_sfb_size, > + param_get_sfb_size); > > enum { > RS_INIT_FAILURE_BSDES = 2, /* Bad basic sampling size */ > diff --git a/arch/um/drivers/vfio_kern.c b/arch/um/drivers/vfio_kern.c > index e6dab473cde4..fb7988dc5482 100644 > --- a/arch/um/drivers/vfio_kern.c > +++ b/arch/um/drivers/vfio_kern.c > @@ -628,10 +628,8 @@ static int uml_vfio_cmdline_get(char *buffer, const > struct kernel_param *kp) > return 0; > } > > -static const struct kernel_param_ops uml_vfio_cmdline_param_ops = { > - .set = uml_vfio_cmdline_set, > - .get = uml_vfio_cmdline_get, > -}; > +static DEFINE_KERNEL_PARAM_OPS(uml_vfio_cmdline_param_ops, > uml_vfio_cmdline_set, > + uml_vfio_cmdline_get); > > device_param_cb(device, ¨_vfio_cmdline_param_ops, NULL, 0400); > __uml_help(uml_vfio_cmdline_param_ops, > diff --git a/arch/um/drivers/virtio_uml.c b/arch/um/drivers/virtio_uml.c > index 7425a8548141..f9ae745f4586 100644 > --- a/arch/um/drivers/virtio_uml.c > +++ b/arch/um/drivers/virtio_uml.c > @@ -1398,10 +1398,8 @@ static int vu_cmdline_get(char *buffer, const struct > kernel_param *kp) > return strlen(buffer) + 1; > } > > -static const struct kernel_param_ops vu_cmdline_param_ops = { > - .set = vu_cmdline_set, > - .get = vu_cmdline_get, > -}; > +static DEFINE_KERNEL_PARAM_OPS(vu_cmdline_param_ops, vu_cmdline_set, > + vu_cmdline_get); > > device_param_cb(device, &vu_cmdline_param_ops, NULL, S_IRUSR); > __uml_help(vu_cmdline_param_ops, > diff --git a/arch/x86/kernel/msr.c b/arch/x86/kernel/msr.c > index 4469c784eaa0..5f4e1814dc4d 100644 > --- a/arch/x86/kernel/msr.c > +++ b/arch/x86/kernel/msr.c > @@ -322,10 +322,8 @@ static int get_allow_writes(char *buf, const struct > kernel_param *kp) > return sprintf(buf, "%s\n", res); > } > > -static const struct kernel_param_ops allow_writes_ops = { > - .set = set_allow_writes, > - .get = get_allow_writes > -}; > +static DEFINE_KERNEL_PARAM_OPS(allow_writes_ops, set_allow_writes, > + get_allow_writes); > > module_param_cb(allow_writes, &allow_writes_ops, NULL, 0600); > > diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c > index 24fbc9ea502a..996818ee9b09 100644 > --- a/arch/x86/kvm/mmu/mmu.c > +++ b/arch/x86/kvm/mmu/mmu.c > @@ -74,15 +74,11 @@ static int get_nx_huge_pages(char *buffer, const struct > kernel_param *kp); > static int set_nx_huge_pages(const char *val, const struct kernel_param *kp); > static int set_nx_huge_pages_recovery_param(const char *val, const struct > kernel_param *kp); > > -static const struct kernel_param_ops nx_huge_pages_ops = { > - .set = set_nx_huge_pages, > - .get = get_nx_huge_pages, > -}; > +static DEFINE_KERNEL_PARAM_OPS(nx_huge_pages_ops, set_nx_huge_pages, > + get_nx_huge_pages); > > -static const struct kernel_param_ops nx_huge_pages_recovery_param_ops = { > - .set = set_nx_huge_pages_recovery_param, > - .get = param_get_uint, > -}; > +static DEFINE_KERNEL_PARAM_OPS(nx_huge_pages_recovery_param_ops, > + set_nx_huge_pages_recovery_param, > param_get_uint); > > module_param_cb(nx_huge_pages, &nx_huge_pages_ops, &nx_huge_pages, 0644); > __MODULE_PARM_TYPE(nx_huge_pages, "bool"); > diff --git a/arch/x86/kvm/svm/avic.c b/arch/x86/kvm/svm/avic.c > index adf211860949..7907f9addff9 100644 > --- a/arch/x86/kvm/svm/avic.c > +++ b/arch/x86/kvm/svm/avic.c > @@ -87,11 +87,7 @@ static int avic_param_get(char *buffer, const struct > kernel_param *kp) > return param_get_bool(buffer, kp); > } > > -static const struct kernel_param_ops avic_ops = { > - .flags = KERNEL_PARAM_OPS_FL_NOARG, > - .set = avic_param_set, > - .get = avic_param_get, > -}; > +static DEFINE_KERNEL_PARAM_OPS_NOARG(avic_ops, avic_param_set, > avic_param_get); > > /* > * Enable / disable AVIC. In "auto" mode (default behavior), AVIC is enabled > diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c > index a29896a9ef14..07f4c7209ac0 100644 > --- a/arch/x86/kvm/vmx/vmx.c > +++ b/arch/x86/kvm/vmx/vmx.c > @@ -465,10 +465,8 @@ static int vmentry_l1d_flush_get(char *s, const struct > kernel_param *kp) > } > #endif > > -static const struct kernel_param_ops vmentry_l1d_flush_ops = { > - .set = vmentry_l1d_flush_set, > - .get = vmentry_l1d_flush_get, > -}; > +static DEFINE_KERNEL_PARAM_OPS(vmentry_l1d_flush_ops, vmentry_l1d_flush_set, > + vmentry_l1d_flush_get); > module_param_cb(vmentry_l1d_flush, &vmentry_l1d_flush_ops, NULL, 0644); > > static __always_inline void vmx_disable_fb_clear(struct vcpu_vmx *vmx) > diff --git a/arch/x86/platform/uv/uv_nmi.c b/arch/x86/platform/uv/uv_nmi.c > index 5c50e550ab63..a7ac80b5f8d9 100644 > --- a/arch/x86/platform/uv/uv_nmi.c > +++ b/arch/x86/platform/uv/uv_nmi.c > @@ -123,10 +123,8 @@ static int param_set_local64(const char *val, const > struct kernel_param *kp) > return 0; > } > > -static const struct kernel_param_ops param_ops_local64 = { > - .get = param_get_local64, > - .set = param_set_local64, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_local64, param_set_local64, > + param_get_local64); > #define param_check_local64(name, p) __param_check(name, p, local64_t) > > static local64_t uv_nmi_count; > @@ -232,10 +230,8 @@ static int param_set_action(const char *val, const > struct kernel_param *kp) > return -EINVAL; > } > > -static const struct kernel_param_ops param_ops_action = { > - .get = param_get_action, > - .set = param_set_action, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_action, param_set_action, > + param_get_action); > #define param_check_action(name, p) __param_check(name, p, enum action_t) > > module_param_named(action, uv_nmi_action, action, 0644); > diff --git a/block/disk-events.c b/block/disk-events.c > index 074731ecc3d2..f2d4b48294c6 100644 > --- a/block/disk-events.c > +++ b/block/disk-events.c > @@ -416,10 +416,8 @@ static int disk_events_set_dfl_poll_msecs(const char > *val, > return 0; > } > > -static const struct kernel_param_ops disk_events_dfl_poll_msecs_param_ops = { > - .set = disk_events_set_dfl_poll_msecs, > - .get = param_get_ulong, > -}; > +static DEFINE_KERNEL_PARAM_OPS(disk_events_dfl_poll_msecs_param_ops, > + disk_events_set_dfl_poll_msecs, > param_get_ulong); > > #undef MODULE_PARAM_PREFIX > #define MODULE_PARAM_PREFIX "block." > diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c > index a625de3c3c8b..3d32a5280432 100644 > --- a/drivers/acpi/sysfs.c > +++ b/drivers/acpi/sysfs.c > @@ -138,15 +138,11 @@ static int param_get_debug_level(char *buffer, const > struct kernel_param *kp) > return result; > } > > -static const struct kernel_param_ops param_ops_debug_layer = { > - .set = param_set_uint, > - .get = param_get_debug_layer, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_debug_layer, param_set_uint, > + param_get_debug_layer); > > -static const struct kernel_param_ops param_ops_debug_level = { > - .set = param_set_uint, > - .get = param_get_debug_level, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_debug_level, param_set_uint, > + param_get_debug_level); > > module_param_cb(debug_layer, ¶m_ops_debug_layer, &acpi_dbg_layer, 0644); > module_param_cb(debug_level, ¶m_ops_debug_level, &acpi_dbg_level, 0644); > @@ -201,15 +197,12 @@ static int param_get_trace_method_name(char *buffer, > const struct kernel_param * > return sysfs_emit(buffer, "%s\n", acpi_gbl_trace_method_name); > } > > -static const struct kernel_param_ops param_ops_trace_method = { > - .set = param_set_trace_method_name, > - .get = param_get_trace_method_name, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_trace_method, > + param_set_trace_method_name, > + param_get_trace_method_name); > > -static const struct kernel_param_ops param_ops_trace_attrib = { > - .set = param_set_uint, > - .get = param_get_uint, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_trace_attrib, param_set_uint, > + param_get_uint); > > module_param_cb(trace_method_name, ¶m_ops_trace_method, > &trace_method_name, 0644); > module_param_cb(trace_debug_layer, ¶m_ops_trace_attrib, > &acpi_gbl_trace_dbg_layer, 0644); > diff --git a/drivers/block/loop.c b/drivers/block/loop.c > index 0000913f7efc..147ad561e584 100644 > --- a/drivers/block/loop.c > +++ b/drivers/block/loop.c > @@ -1806,10 +1806,8 @@ static int max_loop_param_set_int(const char *val, > return 0; > } > > -static const struct kernel_param_ops max_loop_param_ops = { > - .set = max_loop_param_set_int, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(max_loop_param_ops, max_loop_param_set_int, > + param_get_int); > > module_param_cb(max_loop, &max_loop_param_ops, &max_loop, 0444); > MODULE_PARM_DESC(max_loop, "Maximum number of loop devices"); > @@ -1836,10 +1834,8 @@ static int loop_set_hw_queue_depth(const char *s, > const struct kernel_param *p) > return 0; > } > > -static const struct kernel_param_ops loop_hw_qdepth_param_ops = { > - .set = loop_set_hw_queue_depth, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(loop_hw_qdepth_param_ops, > + loop_set_hw_queue_depth, param_get_int); > > device_param_cb(hw_queue_depth, &loop_hw_qdepth_param_ops, &hw_queue_depth, > 0444); > MODULE_PARM_DESC(hw_queue_depth, "Queue depth for each hardware queue. > Default: " __stringify(LOOP_DEFAULT_HW_Q_DEPTH)); > diff --git a/drivers/block/null_blk/main.c b/drivers/block/null_blk/main.c > index f8c0fd57e041..332ad6ac838a 100644 > --- a/drivers/block/null_blk/main.c > +++ b/drivers/block/null_blk/main.c > @@ -149,10 +149,8 @@ static int null_set_queue_mode(const char *str, const > struct kernel_param *kp) > return null_param_store_val(str, &g_queue_mode, NULL_Q_BIO, > NULL_Q_MQ); > } > > -static const struct kernel_param_ops null_queue_mode_param_ops = { > - .set = null_set_queue_mode, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(null_queue_mode_param_ops, > null_set_queue_mode, > + param_get_int); > > device_param_cb(queue_mode, &null_queue_mode_param_ops, &g_queue_mode, 0444); > MODULE_PARM_DESC(queue_mode, "Block interface to use > (0=bio,1=rq,2=multiqueue)"); > @@ -193,10 +191,8 @@ static int null_set_irqmode(const char *str, const > struct kernel_param *kp) > NULL_IRQ_TIMER); > } > > -static const struct kernel_param_ops null_irqmode_param_ops = { > - .set = null_set_irqmode, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(null_irqmode_param_ops, null_set_irqmode, > + param_get_int); > > device_param_cb(irqmode, &null_irqmode_param_ops, &g_irqmode, 0444); > MODULE_PARM_DESC(irqmode, "IRQ completion handler. 0-none, 1-softirq, > 2-timer"); > diff --git a/drivers/block/rnbd/rnbd-srv.c b/drivers/block/rnbd/rnbd-srv.c > index 10e8c438bb43..81961f7c883a 100644 > --- a/drivers/block/rnbd/rnbd-srv.c > +++ b/drivers/block/rnbd/rnbd-srv.c > @@ -49,10 +49,8 @@ static struct kparam_string dev_search_path_kparam_str = { > .string = dev_search_path > }; > > -static const struct kernel_param_ops dev_search_path_ops = { > - .set = dev_search_path_set, > - .get = param_get_string, > -}; > +static DEFINE_KERNEL_PARAM_OPS(dev_search_path_ops, dev_search_path_set, > + param_get_string); > > module_param_cb(dev_search_path, &dev_search_path_ops, > &dev_search_path_kparam_str, 0444); > diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c > index 8e5f3738c203..f7bf7ea2d088 100644 > --- a/drivers/block/ublk_drv.c > +++ b/drivers/block/ublk_drv.c > @@ -5874,10 +5874,9 @@ static int ublk_get_max_unprivileged_ublks(char *buf, > return sysfs_emit(buf, "%u\n", unprivileged_ublks_max); > } > > -static const struct kernel_param_ops ublk_max_unprivileged_ublks_ops = { > - .set = ublk_set_max_unprivileged_ublks, > - .get = ublk_get_max_unprivileged_ublks, > -}; > +static DEFINE_KERNEL_PARAM_OPS(ublk_max_unprivileged_ublks_ops, > + ublk_set_max_unprivileged_ublks, > + ublk_get_max_unprivileged_ublks); > > module_param_cb(ublks_max, &ublk_max_unprivileged_ublks_ops, > &unprivileged_ublks_max, 0644); > diff --git a/drivers/char/ipmi/ipmi_msghandler.c > b/drivers/char/ipmi/ipmi_msghandler.c > index 869ac87a4b6a..b5fed11707e8 100644 > --- a/drivers/char/ipmi/ipmi_msghandler.c > +++ b/drivers/char/ipmi/ipmi_msghandler.c > @@ -102,10 +102,8 @@ static int panic_op_read_handler(char *buffer, const > struct kernel_param *kp) > return sprintf(buffer, "%s\n", event_str); > } > > -static const struct kernel_param_ops panic_op_ops = { > - .set = panic_op_write_handler, > - .get = panic_op_read_handler > -}; > +static DEFINE_KERNEL_PARAM_OPS(panic_op_ops, panic_op_write_handler, > + panic_op_read_handler); > module_param_cb(panic_op, &panic_op_ops, NULL, 0600); > MODULE_PARM_DESC(panic_op, "Sets if the IPMI driver will attempt to store > panic information in the event log in the event of a panic. Set to 'none' > for no, 'event' for a single event, or 'string' for a generic event and the > panic string in IPMI OEM events."); > > diff --git a/drivers/char/ipmi/ipmi_watchdog.c > b/drivers/char/ipmi/ipmi_watchdog.c > index a013ddbf1466..91a99417d204 100644 > --- a/drivers/char/ipmi/ipmi_watchdog.c > +++ b/drivers/char/ipmi/ipmi_watchdog.c > @@ -193,10 +193,8 @@ static int set_param_timeout(const char *val, const > struct kernel_param *kp) > return rv; > } > > -static const struct kernel_param_ops param_ops_timeout = { > - .set = set_param_timeout, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_timeout, set_param_timeout, > + param_get_int); > #define param_check_timeout param_check_int > > typedef int (*action_fn)(const char *intval, char *outval); > @@ -259,17 +257,12 @@ static int set_param_wdog_ifnum(const char *val, const > struct kernel_param *kp) > return 0; > } > > -static const struct kernel_param_ops param_ops_wdog_ifnum = { > - .set = set_param_wdog_ifnum, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_wdog_ifnum, set_param_wdog_ifnum, > + param_get_int); > > #define param_check_wdog_ifnum param_check_int > > -static const struct kernel_param_ops param_ops_str = { > - .set = set_param_str, > - .get = get_param_str, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_str, set_param_str, get_param_str); > > module_param(ifnum_to_use, wdog_ifnum, 0644); > MODULE_PARM_DESC(ifnum_to_use, "The interface number to use for the watchdog > " > diff --git a/drivers/crypto/hisilicon/hpre/hpre_main.c > b/drivers/crypto/hisilicon/hpre/hpre_main.c > index 357ab5e5887e..1104184c2f63 100644 > --- a/drivers/crypto/hisilicon/hpre/hpre_main.c > +++ b/drivers/crypto/hisilicon/hpre/hpre_main.c > @@ -420,10 +420,8 @@ static int hpre_cluster_regs_show(struct seq_file *s, > void *unused) > > DEFINE_SHOW_ATTRIBUTE(hpre_cluster_regs); > > -static const struct kernel_param_ops hpre_uacce_mode_ops = { > - .set = uacce_mode_set, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(hpre_uacce_mode_ops, uacce_mode_set, > + param_get_int); > > /* > * uacce_mode = 0 means hpre only register to crypto, > @@ -441,19 +439,13 @@ static int pf_q_num_set(const char *val, const struct > kernel_param *kp) > return hisi_qm_q_num_set(val, kp, PCI_DEVICE_ID_HUAWEI_HPRE_PF); > } > > -static const struct kernel_param_ops hpre_pf_q_num_ops = { > - .set = pf_q_num_set, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(hpre_pf_q_num_ops, pf_q_num_set, > param_get_int); > > static u32 pf_q_num = HPRE_PF_DEF_Q_NUM; > module_param_cb(pf_q_num, &hpre_pf_q_num_ops, &pf_q_num, 0444); > MODULE_PARM_DESC(pf_q_num, "Number of queues in PF of CS(2-1024)"); > > -static const struct kernel_param_ops vfs_num_ops = { > - .set = vfs_num_set, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(vfs_num_ops, vfs_num_set, param_get_int); > > static u32 vfs_num; > module_param_cb(vfs_num, &vfs_num_ops, &vfs_num, 0444); > diff --git a/drivers/crypto/hisilicon/sec2/sec_main.c > b/drivers/crypto/hisilicon/sec2/sec_main.c > index 056bd8f4da5a..3d13f2faa3d0 100644 > --- a/drivers/crypto/hisilicon/sec2/sec_main.c > +++ b/drivers/crypto/hisilicon/sec2/sec_main.c > @@ -362,10 +362,8 @@ static int sec_pf_q_num_set(const char *val, const > struct kernel_param *kp) > return hisi_qm_q_num_set(val, kp, PCI_DEVICE_ID_HUAWEI_SEC_PF); > } > > -static const struct kernel_param_ops sec_pf_q_num_ops = { > - .set = sec_pf_q_num_set, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(sec_pf_q_num_ops, sec_pf_q_num_set, > + param_get_int); > > static u32 pf_q_num = SEC_PF_DEF_Q_NUM; > module_param_cb(pf_q_num, &sec_pf_q_num_ops, &pf_q_num, 0444); > @@ -391,18 +389,13 @@ static int sec_ctx_q_num_set(const char *val, const > struct kernel_param *kp) > return param_set_int(val, kp); > } > > -static const struct kernel_param_ops sec_ctx_q_num_ops = { > - .set = sec_ctx_q_num_set, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(sec_ctx_q_num_ops, sec_ctx_q_num_set, > + param_get_int); > static u32 ctx_q_num = SEC_CTX_Q_NUM_DEF; > module_param_cb(ctx_q_num, &sec_ctx_q_num_ops, &ctx_q_num, 0444); > MODULE_PARM_DESC(ctx_q_num, "Queue num in ctx (2 default, 2, 4, ..., 32)"); > > -static const struct kernel_param_ops vfs_num_ops = { > - .set = vfs_num_set, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(vfs_num_ops, vfs_num_set, param_get_int); > > static u32 vfs_num; > module_param_cb(vfs_num, &vfs_num_ops, &vfs_num, 0444); > @@ -454,10 +447,8 @@ u64 sec_get_alg_bitmap(struct hisi_qm *qm, u32 high, u32 > low) > return ((u64)cap_val_h << SEC_ALG_BITMAP_SHIFT) | (u64)cap_val_l; > } > > -static const struct kernel_param_ops sec_uacce_mode_ops = { > - .set = uacce_mode_set, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(sec_uacce_mode_ops, uacce_mode_set, > + param_get_int); > > /* > * uacce_mode = 0 means sec only register to crypto, > diff --git a/drivers/crypto/hisilicon/zip/zip_crypto.c > b/drivers/crypto/hisilicon/zip/zip_crypto.c > index 70adde049b53..8f8d57420fb4 100644 > --- a/drivers/crypto/hisilicon/zip/zip_crypto.c > +++ b/drivers/crypto/hisilicon/zip/zip_crypto.c > @@ -108,10 +108,7 @@ static int sgl_sge_nr_set(const char *val, const struct > kernel_param *kp) > return param_set_ushort(val, kp); > } > > -static const struct kernel_param_ops sgl_sge_nr_ops = { > - .set = sgl_sge_nr_set, > - .get = param_get_ushort, > -}; > +static DEFINE_KERNEL_PARAM_OPS(sgl_sge_nr_ops, sgl_sge_nr_set, > param_get_ushort); > > static u16 sgl_sge_nr = HZIP_SGL_SGE_NR; > module_param_cb(sgl_sge_nr, &sgl_sge_nr_ops, &sgl_sge_nr, 0444); > diff --git a/drivers/crypto/hisilicon/zip/zip_main.c > b/drivers/crypto/hisilicon/zip/zip_main.c > index 44df9c859bd8..e07d0cf8eca8 100644 > --- a/drivers/crypto/hisilicon/zip/zip_main.c > +++ b/drivers/crypto/hisilicon/zip/zip_main.c > @@ -394,10 +394,7 @@ static int perf_mode_set(const char *val, const struct > kernel_param *kp) > return param_set_int(val, kp); > } > > -static const struct kernel_param_ops zip_com_perf_ops = { > - .set = perf_mode_set, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(zip_com_perf_ops, perf_mode_set, > param_get_int); > > /* > * perf_mode = 0 means enable high compression rate mode, > @@ -408,10 +405,8 @@ static u32 perf_mode = HZIP_HIGH_COMP_RATE; > module_param_cb(perf_mode, &zip_com_perf_ops, &perf_mode, 0444); > MODULE_PARM_DESC(perf_mode, "ZIP high perf mode 0(default), 1(enable)"); > > -static const struct kernel_param_ops zip_uacce_mode_ops = { > - .set = uacce_mode_set, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(zip_uacce_mode_ops, uacce_mode_set, > + param_get_int); > > /* > * uacce_mode = 0 means zip only register to crypto, > @@ -429,19 +424,13 @@ static int pf_q_num_set(const char *val, const struct > kernel_param *kp) > return hisi_qm_q_num_set(val, kp, PCI_DEVICE_ID_HUAWEI_ZIP_PF); > } > > -static const struct kernel_param_ops pf_q_num_ops = { > - .set = pf_q_num_set, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(pf_q_num_ops, pf_q_num_set, param_get_int); > > static u32 pf_q_num = HZIP_PF_DEF_Q_NUM; > module_param_cb(pf_q_num, &pf_q_num_ops, &pf_q_num, 0444); > MODULE_PARM_DESC(pf_q_num, "Number of queues in PF(v1 2-4096, v2 2-1024)"); > > -static const struct kernel_param_ops vfs_num_ops = { > - .set = vfs_num_set, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(vfs_num_ops, vfs_num_set, param_get_int); > > static u32 vfs_num; > module_param_cb(vfs_num, &vfs_num_ops, &vfs_num, 0444); > diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c > index df38681a1ff4..a7bddadcc52d 100644 > --- a/drivers/dma/dmatest.c > +++ b/drivers/dma/dmatest.c > @@ -154,20 +154,15 @@ static struct dmatest_info { > > static int dmatest_run_set(const char *val, const struct kernel_param *kp); > static int dmatest_run_get(char *val, const struct kernel_param *kp); > -static const struct kernel_param_ops run_ops = { > - .set = dmatest_run_set, > - .get = dmatest_run_get, > -}; > +static DEFINE_KERNEL_PARAM_OPS(run_ops, dmatest_run_set, dmatest_run_get); > static bool dmatest_run; > module_param_cb(run, &run_ops, &dmatest_run, 0644); > MODULE_PARM_DESC(run, "Run the test (default: false)"); > > static int dmatest_chan_set(const char *val, const struct kernel_param *kp); > static int dmatest_chan_get(char *val, const struct kernel_param *kp); > -static const struct kernel_param_ops multi_chan_ops = { > - .set = dmatest_chan_set, > - .get = dmatest_chan_get, > -}; > +static DEFINE_KERNEL_PARAM_OPS(multi_chan_ops, dmatest_chan_set, > + dmatest_chan_get); > > static char test_channel[20]; > static struct kparam_string newchan_kps = { > @@ -178,9 +173,7 @@ module_param_cb(channel, &multi_chan_ops, &newchan_kps, > 0644); > MODULE_PARM_DESC(channel, "Bus ID of the channel to test (default: any)"); > > static int dmatest_test_list_get(char *val, const struct kernel_param *kp); > -static const struct kernel_param_ops test_list_ops = { > - .get = dmatest_test_list_get, > -}; > +static DEFINE_KERNEL_PARAM_OPS(test_list_ops, NULL, dmatest_test_list_get); > module_param_cb(test_list, &test_list_ops, NULL, 0444); > MODULE_PARM_DESC(test_list, "Print current test list"); > > @@ -292,10 +285,7 @@ static int dmatest_wait_get(char *val, const struct > kernel_param *kp) > return param_get_bool(val, kp); > } > > -static const struct kernel_param_ops wait_ops = { > - .get = dmatest_wait_get, > - .set = param_set_bool, > -}; > +static DEFINE_KERNEL_PARAM_OPS(wait_ops, param_set_bool, dmatest_wait_get); > module_param_cb(wait, &wait_ops, &wait, 0444); > MODULE_PARM_DESC(wait, "Wait for tests to complete (default: false)"); > > diff --git a/drivers/edac/i10nm_base.c b/drivers/edac/i10nm_base.c > index 63df35444214..ab05e58faaa8 100644 > --- a/drivers/edac/i10nm_base.c > +++ b/drivers/edac/i10nm_base.c > @@ -1284,10 +1284,8 @@ static int set_decoding_via_mca(const char *buf, const > struct kernel_param *kp) > return ret; > } > > -static const struct kernel_param_ops decoding_via_mca_param_ops = { > - .set = set_decoding_via_mca, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(decoding_via_mca_param_ops, > set_decoding_via_mca, > + param_get_int); > > module_param_cb(decoding_via_mca, &decoding_via_mca_param_ops, > &decoding_via_mca, 0644); > MODULE_PARM_DESC(decoding_via_mca, "decoding_via_mca: 0=off(default), > 1=enable"); > diff --git a/drivers/firmware/efi/efi-pstore.c > b/drivers/firmware/efi/efi-pstore.c > index a253b6144945..fd0f3579fd54 100644 > --- a/drivers/firmware/efi/efi-pstore.c > +++ b/drivers/firmware/efi/efi-pstore.c > @@ -43,10 +43,8 @@ static int efi_pstore_disable_set(const char *val, const > struct kernel_param *kp > return 0; > } > > -static const struct kernel_param_ops pstore_disable_ops = { > - .set = efi_pstore_disable_set, > - .get = param_get_bool, > -}; > +static DEFINE_KERNEL_PARAM_OPS(pstore_disable_ops, efi_pstore_disable_set, > + param_get_bool); > > module_param_cb(pstore_disable, &pstore_disable_ops, &pstore_disable, 0644); > __MODULE_PARM_TYPE(pstore_disable, "bool"); > diff --git a/drivers/firmware/qcom/qcom_scm.c > b/drivers/firmware/qcom/qcom_scm.c > index 9b06a69d3a6d..ef57df53e087 100644 > --- a/drivers/firmware/qcom/qcom_scm.c > +++ b/drivers/firmware/qcom/qcom_scm.c > @@ -2725,10 +2725,8 @@ static int set_download_mode(const char *val, const > struct kernel_param *kp) > return 0; > } > > -static const struct kernel_param_ops download_mode_param_ops = { > - .get = get_download_mode, > - .set = set_download_mode, > -}; > +static DEFINE_KERNEL_PARAM_OPS(download_mode_param_ops, set_download_mode, > + get_download_mode); > > module_param_cb(download_mode, &download_mode_param_ops, NULL, 0644); > MODULE_PARM_DESC(download_mode, "download mode: off/0/N for no dump mode, > full/on/1/Y for full dump mode, mini for minidump mode and full,mini for both > full and minidump mode together are acceptable values"); > diff --git a/drivers/firmware/qemu_fw_cfg.c b/drivers/firmware/qemu_fw_cfg.c > index 87a5421bc7d5..c87a5449ba8c 100644 > --- a/drivers/firmware/qemu_fw_cfg.c > +++ b/drivers/firmware/qemu_fw_cfg.c > @@ -897,10 +897,8 @@ static int fw_cfg_cmdline_get(char *buf, const struct > kernel_param *kp) > return 0; > } > > -static const struct kernel_param_ops fw_cfg_cmdline_param_ops = { > - .set = fw_cfg_cmdline_set, > - .get = fw_cfg_cmdline_get, > -}; > +static DEFINE_KERNEL_PARAM_OPS(fw_cfg_cmdline_param_ops, fw_cfg_cmdline_set, > + fw_cfg_cmdline_get); > > device_param_cb(ioport, &fw_cfg_cmdline_param_ops, NULL, S_IRUSR); > device_param_cb(mmio, &fw_cfg_cmdline_param_ops, NULL, S_IRUSR); > diff --git a/drivers/gpu/drm/drm_panic.c b/drivers/gpu/drm/drm_panic.c > index d6d3b8d85dea..c35d1adf2ce3 100644 > --- a/drivers/gpu/drm/drm_panic.c > +++ b/drivers/gpu/drm/drm_panic.c > @@ -847,10 +847,8 @@ static int drm_panic_type_get(char *buffer, const struct > kernel_param *kp) > drm_panic_type_map[drm_panic_type]); > } > > -static const struct kernel_param_ops drm_panic_ops = { > - .set = drm_panic_type_set, > - .get = drm_panic_type_get, > -}; > +static DEFINE_KERNEL_PARAM_OPS(drm_panic_ops, drm_panic_type_set, > + drm_panic_type_get); > > module_param_cb(panic_screen, &drm_panic_ops, NULL, 0644); > MODULE_PARM_DESC(panic_screen, > diff --git a/drivers/gpu/drm/i915/i915_mitigations.c > b/drivers/gpu/drm/i915/i915_mitigations.c > index def7302ef7fe..6061eae84e9c 100644 > --- a/drivers/gpu/drm/i915/i915_mitigations.c > +++ b/drivers/gpu/drm/i915/i915_mitigations.c > @@ -124,10 +124,7 @@ static int mitigations_get(char *buffer, const struct > kernel_param *kp) > return count; > } > > -static const struct kernel_param_ops ops = { > - .set = mitigations_set, > - .get = mitigations_get, > -}; > +static DEFINE_KERNEL_PARAM_OPS(ops, mitigations_set, mitigations_get); > > module_param_cb_unsafe(mitigations, &ops, NULL, 0600); > MODULE_PARM_DESC(mitigations, > diff --git a/drivers/gpu/drm/imagination/pvr_fw_trace.c > b/drivers/gpu/drm/imagination/pvr_fw_trace.c > index 6193811ef7be..2df7274e21a8 100644 > --- a/drivers/gpu/drm/imagination/pvr_fw_trace.c > +++ b/drivers/gpu/drm/imagination/pvr_fw_trace.c > @@ -71,10 +71,8 @@ pvr_fw_trace_init_mask_set(const char *val, const struct > kernel_param *kp) > return 0; > } > > -const struct kernel_param_ops pvr_fw_trace_init_mask_ops = { > - .set = pvr_fw_trace_init_mask_set, > - .get = param_get_hexint, > -}; > +DEFINE_KERNEL_PARAM_OPS(pvr_fw_trace_init_mask_ops, > pvr_fw_trace_init_mask_set, > + param_get_hexint); > > param_check_hexint(init_fw_trace_mask, &pvr_fw_trace_init_mask); > module_param_cb(init_fw_trace_mask, &pvr_fw_trace_init_mask_ops, > &pvr_fw_trace_init_mask, 0600); > diff --git a/drivers/hid/hid-cougar.c b/drivers/hid/hid-cougar.c > index ad027c45f162..271048bdf7fc 100644 > --- a/drivers/hid/hid-cougar.c > +++ b/drivers/hid/hid-cougar.c > @@ -314,10 +314,8 @@ static int cougar_param_set_g6_is_space(const char *val, > return 0; > } > > -static const struct kernel_param_ops cougar_g6_is_space_ops = { > - .set = cougar_param_set_g6_is_space, > - .get = param_get_bool, > -}; > +static DEFINE_KERNEL_PARAM_OPS(cougar_g6_is_space_ops, > + cougar_param_set_g6_is_space, param_get_bool); > module_param_cb(g6_is_space, &cougar_g6_is_space_ops, &g6_is_space, 0644); > > static const struct hid_device_id cougar_id_table[] = { > diff --git a/drivers/hid/hid-steam.c b/drivers/hid/hid-steam.c > index 197126d6e081..962ed60492ea 100644 > --- a/drivers/hid/hid-steam.c > +++ b/drivers/hid/hid-steam.c > @@ -1840,10 +1840,8 @@ static int steam_param_set_lizard_mode(const char *val, > return 0; > } > > -static const struct kernel_param_ops steam_lizard_mode_ops = { > - .set = steam_param_set_lizard_mode, > - .get = param_get_bool, > -}; > +static DEFINE_KERNEL_PARAM_OPS(steam_lizard_mode_ops, > + steam_param_set_lizard_mode, param_get_bool); > > module_param_cb(lizard_mode, &steam_lizard_mode_ops, &lizard_mode, 0644); > MODULE_PARM_DESC(lizard_mode, > diff --git a/drivers/infiniband/hw/hfi1/driver.c > b/drivers/infiniband/hw/hfi1/driver.c > index c7259cc39013..5b9b0b38b419 100644 > --- a/drivers/infiniband/hw/hfi1/driver.c > +++ b/drivers/infiniband/hw/hfi1/driver.c > @@ -42,10 +42,7 @@ MODULE_PARM_DESC(cu, "Credit return units"); > unsigned long hfi1_cap_mask = HFI1_CAP_MASK_DEFAULT; > static int hfi1_caps_set(const char *val, const struct kernel_param *kp); > static int hfi1_caps_get(char *buffer, const struct kernel_param *kp); > -static const struct kernel_param_ops cap_ops = { > - .set = hfi1_caps_set, > - .get = hfi1_caps_get > -}; > +static DEFINE_KERNEL_PARAM_OPS(cap_ops, hfi1_caps_set, hfi1_caps_get); > module_param_cb(cap_mask, &cap_ops, &hfi1_cap_mask, S_IWUSR | S_IRUGO); > MODULE_PARM_DESC(cap_mask, "Bit mask of enabled/disabled HW features"); > > diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.c > b/drivers/infiniband/ulp/iser/iscsi_iser.c > index 7df441685780..758e527ca7c4 100644 > --- a/drivers/infiniband/ulp/iser/iscsi_iser.c > +++ b/drivers/infiniband/ulp/iser/iscsi_iser.c > @@ -90,10 +90,8 @@ module_param_named(debug_level, iser_debug_level, int, > S_IRUGO | S_IWUSR); > MODULE_PARM_DESC(debug_level, "Enable debug tracing if > 0 > (default:disabled)"); > > static int iscsi_iser_set(const char *val, const struct kernel_param *kp); > -static const struct kernel_param_ops iscsi_iser_size_ops = { > - .set = iscsi_iser_set, > - .get = param_get_uint, > -}; > +static DEFINE_KERNEL_PARAM_OPS(iscsi_iser_size_ops, iscsi_iser_set, > + param_get_uint); > > static unsigned int iscsi_max_lun = 512; > module_param_cb(max_lun, &iscsi_iser_size_ops, &iscsi_max_lun, S_IRUGO); > diff --git a/drivers/infiniband/ulp/isert/ib_isert.c > b/drivers/infiniband/ulp/isert/ib_isert.c > index 348005e71891..bd91900a0ebf 100644 > --- a/drivers/infiniband/ulp/isert/ib_isert.c > +++ b/drivers/infiniband/ulp/isert/ib_isert.c > @@ -30,10 +30,8 @@ MODULE_PARM_DESC(debug_level, "Enable debug tracing if > 0 > (default:0)"); > > static int isert_sg_tablesize_set(const char *val, > const struct kernel_param *kp); > -static const struct kernel_param_ops sg_tablesize_ops = { > - .set = isert_sg_tablesize_set, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(sg_tablesize_ops, isert_sg_tablesize_set, > + param_get_int); > > static int isert_sg_tablesize = ISCSI_ISER_MIN_SG_TABLESIZE; > module_param_cb(sg_tablesize, &sg_tablesize_ops, &isert_sg_tablesize, 0644); > diff --git a/drivers/infiniband/ulp/srp/ib_srp.c > b/drivers/infiniband/ulp/srp/ib_srp.c > index b58868e1cf11..a81515f52a4f 100644 > --- a/drivers/infiniband/ulp/srp/ib_srp.c > +++ b/drivers/infiniband/ulp/srp/ib_srp.c > @@ -195,10 +195,7 @@ static int srp_tmo_set(const char *val, const struct > kernel_param *kp) > return res; > } > > -static const struct kernel_param_ops srp_tmo_ops = { > - .get = srp_tmo_get, > - .set = srp_tmo_set, > -}; > +static DEFINE_KERNEL_PARAM_OPS(srp_tmo_ops, srp_tmo_set, srp_tmo_get); > > static inline struct srp_target_port *host_to_target(struct Scsi_Host *host) > { > diff --git a/drivers/input/misc/ati_remote2.c > b/drivers/input/misc/ati_remote2.c > index 8db2dca84975..8b4ef7e163d3 100644 > --- a/drivers/input/misc/ati_remote2.c > +++ b/drivers/input/misc/ati_remote2.c > @@ -89,19 +89,16 @@ static int ati_remote2_get_mode_mask(char *buffer, > > static unsigned int channel_mask = ATI_REMOTE2_MAX_CHANNEL_MASK; > #define param_check_channel_mask(name, p) __param_check(name, p, unsigned > int) > -static const struct kernel_param_ops param_ops_channel_mask = { > - .set = ati_remote2_set_channel_mask, > - .get = ati_remote2_get_channel_mask, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_channel_mask, > + ati_remote2_set_channel_mask, > + ati_remote2_get_channel_mask); > module_param(channel_mask, channel_mask, 0644); > MODULE_PARM_DESC(channel_mask, "Bitmask of channels to accept > <15:Channel16>...<1:Channel2><0:Channel1>"); > > static unsigned int mode_mask = ATI_REMOTE2_MAX_MODE_MASK; > #define param_check_mode_mask(name, p) __param_check(name, p, unsigned int) > -static const struct kernel_param_ops param_ops_mode_mask = { > - .set = ati_remote2_set_mode_mask, > - .get = ati_remote2_get_mode_mask, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_mode_mask, > ati_remote2_set_mode_mask, > + ati_remote2_get_mode_mask); > module_param(mode_mask, mode_mask, 0644); > MODULE_PARM_DESC(mode_mask, "Bitmask of modes to accept > <4:PC><3:AUX4><2:AUX3><1:AUX2><0:AUX1>"); > > diff --git a/drivers/input/mouse/psmouse-base.c > b/drivers/input/mouse/psmouse-base.c > index 6ab5f1d96eae..f9ebb1fd0b6f 100644 > --- a/drivers/input/mouse/psmouse-base.c > +++ b/drivers/input/mouse/psmouse-base.c > @@ -45,10 +45,8 @@ MODULE_LICENSE("GPL"); > static unsigned int psmouse_max_proto = PSMOUSE_AUTO; > static int psmouse_set_maxproto(const char *val, const struct kernel_param > *); > static int psmouse_get_maxproto(char *buffer, const struct kernel_param *kp); > -static const struct kernel_param_ops param_ops_proto_abbrev = { > - .set = psmouse_set_maxproto, > - .get = psmouse_get_maxproto, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_proto_abbrev, psmouse_set_maxproto, > + psmouse_get_maxproto); > #define param_check_proto_abbrev(name, p) __param_check(name, p, > unsigned int) > module_param_named(proto, psmouse_max_proto, proto_abbrev, 0644); > MODULE_PARM_DESC(proto, "Highest protocol extension to probe (bare, imps, > exps, any). Useful for KVM switches."); > diff --git a/drivers/media/usb/uvc/uvc_driver.c > b/drivers/media/usb/uvc/uvc_driver.c > index 31b4ac3b48c1..2338cab7fef9 100644 > --- a/drivers/media/usb/uvc/uvc_driver.c > +++ b/drivers/media/usb/uvc/uvc_driver.c > @@ -2488,10 +2488,8 @@ static int param_set_nodrop(const char *val, const > struct kernel_param *kp) > return param_set_bool(val, kp); > } > > -static const struct kernel_param_ops param_ops_nodrop = { > - .set = param_set_nodrop, > - .get = param_get_uint, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_nodrop, param_set_nodrop, > + param_get_uint); > > param_check_uint(nodrop, &uvc_no_drop_param); > module_param_cb(nodrop, ¶m_ops_nodrop, &uvc_no_drop_param, 0644); > diff --git a/drivers/misc/lis3lv02d/lis3lv02d.c > b/drivers/misc/lis3lv02d/lis3lv02d.c > index 21e8ad0a7444..6e40c14be51e 100644 > --- a/drivers/misc/lis3lv02d/lis3lv02d.c > +++ b/drivers/misc/lis3lv02d/lis3lv02d.c > @@ -103,10 +103,7 @@ static int param_set_axis(const char *val, const struct > kernel_param *kp) > return ret; > } > > -static const struct kernel_param_ops param_ops_axis = { > - .set = param_set_axis, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_axis, param_set_axis, > param_get_int); > > #define param_check_axis(name, p) param_check_int(name, p) > > diff --git a/drivers/net/wireless/ath/wil6210/main.c > b/drivers/net/wireless/ath/wil6210/main.c > index d5aec72ecdce..e566d94d5f5c 100644 > --- a/drivers/net/wireless/ath/wil6210/main.c > +++ b/drivers/net/wireless/ath/wil6210/main.c > @@ -62,10 +62,7 @@ static int mtu_max_set(const char *val, const struct > kernel_param *kp) > return ret; > } > > -static const struct kernel_param_ops mtu_max_ops = { > - .set = mtu_max_set, > - .get = param_get_uint, > -}; > +static DEFINE_KERNEL_PARAM_OPS(mtu_max_ops, mtu_max_set, param_get_uint); > > module_param_cb(mtu_max, &mtu_max_ops, &mtu_max, 0444); > MODULE_PARM_DESC(mtu_max, " Max MTU value."); > @@ -91,10 +88,7 @@ static int ring_order_set(const char *val, const struct > kernel_param *kp) > return 0; > } > > -static const struct kernel_param_ops ring_order_ops = { > - .set = ring_order_set, > - .get = param_get_uint, > -}; > +static DEFINE_KERNEL_PARAM_OPS(ring_order_ops, ring_order_set, > param_get_uint); > > module_param_cb(rx_ring_order, &ring_order_ops, &rx_ring_order, 0444); > MODULE_PARM_DESC(rx_ring_order, " Rx ring order; size = 1 << order"); > diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c > index 263161cb8ac0..f7362377e427 100644 > --- a/drivers/nvme/host/multipath.c > +++ b/drivers/nvme/host/multipath.c > @@ -30,10 +30,8 @@ static int multipath_param_set(const char *val, const > struct kernel_param *kp) > return 0; > } > > -static const struct kernel_param_ops multipath_param_ops = { > - .set = multipath_param_set, > - .get = param_get_bool, > -}; > +static DEFINE_KERNEL_PARAM_OPS(multipath_param_ops, multipath_param_set, > + param_get_bool); > > module_param_cb(multipath, &multipath_param_ops, &multipath, 0444); > MODULE_PARM_DESC(multipath, > @@ -55,10 +53,8 @@ static int multipath_always_on_set(const char *val, > return 0; > } > > -static const struct kernel_param_ops multipath_always_on_ops = { > - .set = multipath_always_on_set, > - .get = param_get_bool, > -}; > +static DEFINE_KERNEL_PARAM_OPS(multipath_always_on_ops, > multipath_always_on_set, > + param_get_bool); > > module_param_cb(multipath_always_on, &multipath_always_on_ops, > &multipath_always_on, 0444); > diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c > index 9fd04cd7c5cb..c77e9b848d03 100644 > --- a/drivers/nvme/host/pci.c > +++ b/drivers/nvme/host/pci.c > @@ -100,10 +100,8 @@ MODULE_PARM_DESC(sgl_threshold, > #define NVME_PCI_MIN_QUEUE_SIZE 2 > #define NVME_PCI_MAX_QUEUE_SIZE 4095 > static int io_queue_depth_set(const char *val, const struct kernel_param > *kp); > -static const struct kernel_param_ops io_queue_depth_ops = { > - .set = io_queue_depth_set, > - .get = param_get_uint, > -}; > +static DEFINE_KERNEL_PARAM_OPS(io_queue_depth_ops, io_queue_depth_set, > + param_get_uint); > > static unsigned int io_queue_depth = 1024; > module_param_cb(io_queue_depth, &io_queue_depth_ops, &io_queue_depth, 0644); > @@ -232,10 +230,8 @@ static int quirks_param_set(const char *value, const > struct kernel_param *kp) > } > > static char quirks_param[128]; > -static const struct kernel_param_ops quirks_param_ops = { > - .set = quirks_param_set, > - .get = param_get_string, > -}; > +static DEFINE_KERNEL_PARAM_OPS(quirks_param_ops, quirks_param_set, > + param_get_string); > > static struct kparam_string quirks_param_string = { > .maxlen = sizeof(quirks_param), > @@ -257,10 +253,8 @@ static int io_queue_count_set(const char *val, const > struct kernel_param *kp) > return param_set_uint(val, kp); > } > > -static const struct kernel_param_ops io_queue_count_ops = { > - .set = io_queue_count_set, > - .get = param_get_uint, > -}; > +static DEFINE_KERNEL_PARAM_OPS(io_queue_count_ops, io_queue_count_set, > + param_get_uint); > > static unsigned int write_queues; > module_param_cb(write_queues, &io_queue_count_ops, &write_queues, 0644); > diff --git a/drivers/nvme/target/rdma.c b/drivers/nvme/target/rdma.c > index e6e2c3f9afdf..dc544813300f 100644 > --- a/drivers/nvme/target/rdma.c > +++ b/drivers/nvme/target/rdma.c > @@ -147,10 +147,7 @@ module_param_named(use_srq, nvmet_rdma_use_srq, bool, > 0444); > MODULE_PARM_DESC(use_srq, "Use shared receive queue."); > > static int srq_size_set(const char *val, const struct kernel_param *kp); > -static const struct kernel_param_ops srq_size_ops = { > - .set = srq_size_set, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(srq_size_ops, srq_size_set, param_get_int); > > static int nvmet_rdma_srq_size = 1024; > module_param_cb(srq_size, &srq_size_ops, &nvmet_rdma_srq_size, 0644); > diff --git a/drivers/nvme/target/tcp.c b/drivers/nvme/target/tcp.c > index 164a564ba3b4..2f336cd7e559 100644 > --- a/drivers/nvme/target/tcp.c > +++ b/drivers/nvme/target/tcp.c > @@ -46,10 +46,7 @@ static int set_params(const char *str, const struct > kernel_param *kp) > return param_store_val(str, kp->arg, 0, INT_MAX); > } > > -static const struct kernel_param_ops set_param_ops = { > - .set = set_params, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(set_param_ops, set_params, param_get_int); > > /* Define the socket priority to use for connections were it is desirable > * that the NIC consider performing optimized packet processing or filtering. > diff --git a/drivers/platform/x86/acerhdf.c b/drivers/platform/x86/acerhdf.c > index 5ce5ad3efe69..bd59c3f3f2c5 100644 > --- a/drivers/platform/x86/acerhdf.c > +++ b/drivers/platform/x86/acerhdf.c > @@ -762,10 +762,7 @@ static int interval_set_uint(const char *val, const > struct kernel_param *kp) > return 0; > } > > -static const struct kernel_param_ops interval_ops = { > - .set = interval_set_uint, > - .get = param_get_uint, > -}; > +static DEFINE_KERNEL_PARAM_OPS(interval_ops, interval_set_uint, > param_get_uint); > > module_param_cb(interval, &interval_ops, &interval, 0000); > MODULE_PARM_DESC(interval, "Polling interval of temperature check"); > diff --git a/drivers/power/supply/bq27xxx_battery.c > b/drivers/power/supply/bq27xxx_battery.c > index 45f0e39b8c2d..09829ee1a49d 100644 > --- a/drivers/power/supply/bq27xxx_battery.c > +++ b/drivers/power/supply/bq27xxx_battery.c > @@ -1133,10 +1133,8 @@ static int poll_interval_param_set(const char *val, > const struct kernel_param *k > return ret; > } > > -static const struct kernel_param_ops param_ops_poll_interval = { > - .get = param_get_uint, > - .set = poll_interval_param_set, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_poll_interval, > poll_interval_param_set, > + param_get_uint); > > static unsigned int poll_interval = 360; > module_param_cb(poll_interval, ¶m_ops_poll_interval, &poll_interval, > 0644); > diff --git a/drivers/power/supply/test_power.c > b/drivers/power/supply/test_power.c > index 2c0e9ad820c0..0bf2bef3383a 100644 > --- a/drivers/power/supply/test_power.c > +++ b/drivers/power/supply/test_power.c > @@ -649,60 +649,47 @@ static int param_set_battery_extension(const char *key, > > #define param_get_battery_extension param_get_bool > > -static const struct kernel_param_ops param_ops_ac_online = { > - .set = param_set_ac_online, > - .get = param_get_ac_online, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_ac_online, param_set_ac_online, > + param_get_ac_online); > > -static const struct kernel_param_ops param_ops_usb_online = { > - .set = param_set_usb_online, > - .get = param_get_usb_online, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_usb_online, param_set_usb_online, > + param_get_usb_online); > > -static const struct kernel_param_ops param_ops_battery_status = { > - .set = param_set_battery_status, > - .get = param_get_battery_status, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_battery_status, > + param_set_battery_status, > + param_get_battery_status); > > -static const struct kernel_param_ops param_ops_battery_present = { > - .set = param_set_battery_present, > - .get = param_get_battery_present, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_battery_present, > + param_set_battery_present, > + param_get_battery_present); > > -static const struct kernel_param_ops param_ops_battery_technology = { > - .set = param_set_battery_technology, > - .get = param_get_battery_technology, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_battery_technology, > + param_set_battery_technology, > + param_get_battery_technology); > > -static const struct kernel_param_ops param_ops_battery_health = { > - .set = param_set_battery_health, > - .get = param_get_battery_health, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_battery_health, > + param_set_battery_health, > + param_get_battery_health); > > -static const struct kernel_param_ops param_ops_battery_capacity = { > - .set = param_set_battery_capacity, > - .get = param_get_battery_capacity, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_battery_capacity, > + param_set_battery_capacity, > + param_get_battery_capacity); > > -static const struct kernel_param_ops param_ops_battery_voltage = { > - .set = param_set_battery_voltage, > - .get = param_get_battery_voltage, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_battery_voltage, > + param_set_battery_voltage, > + param_get_battery_voltage); > > -static const struct kernel_param_ops param_ops_battery_charge_counter = { > - .set = param_set_battery_charge_counter, > - .get = param_get_battery_charge_counter, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_battery_charge_counter, > + param_set_battery_charge_counter, > + param_get_battery_charge_counter); > > -static const struct kernel_param_ops param_ops_battery_current = { > - .set = param_set_battery_current, > - .get = param_get_battery_current, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_battery_current, > + param_set_battery_current, > + param_get_battery_current); > > -static const struct kernel_param_ops param_ops_battery_extension = { > - .set = param_set_battery_extension, > - .get = param_get_battery_extension, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_battery_extension, > + param_set_battery_extension, > + param_get_battery_extension); > > #define param_check_ac_online(name, p) __param_check(name, p, void); > #define param_check_usb_online(name, p) __param_check(name, p, void); > diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c > index 2b4b2a1a8e44..c075b567f84e 100644 > --- a/drivers/scsi/sg.c > +++ b/drivers/scsi/sg.c > @@ -1644,10 +1644,8 @@ static int def_reserved_size_set(const char *val, > const struct kernel_param *kp) > return 0; > } > > -static const struct kernel_param_ops def_reserved_size_ops = { > - .set = def_reserved_size_set, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(def_reserved_size_ops, def_reserved_size_set, > + param_get_int); > > module_param_cb(def_reserved_size, &def_reserved_size_ops, > &def_reserved_size, > S_IRUGO | S_IWUSR); > diff --git a/drivers/target/target_core_user.c > b/drivers/target/target_core_user.c > index edc2afd5f4ee..676a12b44e88 100644 > --- a/drivers/target/target_core_user.c > +++ b/drivers/target/target_core_user.c > @@ -255,10 +255,9 @@ static int tcmu_get_global_max_data_area(char *buffer, > return sprintf(buffer, "%d\n", > TCMU_PAGES_TO_MBS(tcmu_global_max_pages)); > } > > -static const struct kernel_param_ops tcmu_global_max_data_area_op = { > - .set = tcmu_set_global_max_data_area, > - .get = tcmu_get_global_max_data_area, > -}; > +static DEFINE_KERNEL_PARAM_OPS(tcmu_global_max_data_area_op, > + tcmu_set_global_max_data_area, > + tcmu_get_global_max_data_area); > > module_param_cb(global_max_data_area_mb, &tcmu_global_max_data_area_op, NULL, > S_IWUSR | S_IRUGO); > @@ -292,10 +291,8 @@ static int tcmu_set_block_netlink(const char *str, > return 0; > } > > -static const struct kernel_param_ops tcmu_block_netlink_op = { > - .set = tcmu_set_block_netlink, > - .get = tcmu_get_block_netlink, > -}; > +static DEFINE_KERNEL_PARAM_OPS(tcmu_block_netlink_op, tcmu_set_block_netlink, > + tcmu_get_block_netlink); > > module_param_cb(block_netlink, &tcmu_block_netlink_op, NULL, S_IWUSR | > S_IRUGO); > MODULE_PARM_DESC(block_netlink, "Block new netlink commands."); > diff --git > a/drivers/thermal/intel/int340x_thermal/processor_thermal_soc_slider.c > b/drivers/thermal/intel/int340x_thermal/processor_thermal_soc_slider.c > index 91f291627132..68275c3f2c9b 100644 > --- a/drivers/thermal/intel/int340x_thermal/processor_thermal_soc_slider.c > +++ b/drivers/thermal/intel/int340x_thermal/processor_thermal_soc_slider.c > @@ -83,10 +83,8 @@ static int slider_def_balance_get(char *buf, const struct > kernel_param *kp) > return sysfs_emit(buf, "%02x\n", > slider_values[SOC_POWER_SLIDER_BALANCE]); > } > > -static const struct kernel_param_ops slider_def_balance_ops = { > - .set = slider_def_balance_set, > - .get = slider_def_balance_get, > -}; > +static DEFINE_KERNEL_PARAM_OPS(slider_def_balance_ops, > slider_def_balance_set, > + slider_def_balance_get); > > module_param_cb(slider_balance, &slider_def_balance_ops, NULL, 0644); > MODULE_PARM_DESC(slider_balance, "Set slider default value for balance"); > @@ -117,10 +115,8 @@ static int slider_def_offset_get(char *buf, const struct > kernel_param *kp) > return sysfs_emit(buf, "%02x\n", slider_offset); > } > > -static const struct kernel_param_ops slider_offset_ops = { > - .set = slider_def_offset_set, > - .get = slider_def_offset_get, > -}; > +static DEFINE_KERNEL_PARAM_OPS(slider_offset_ops, slider_def_offset_set, > + slider_def_offset_get); > > /* > * To enhance power efficiency dynamically, the firmware can optionally > diff --git a/drivers/thermal/intel/intel_powerclamp.c > b/drivers/thermal/intel/intel_powerclamp.c > index ccf380da12f2..98fbc6892714 100644 > --- a/drivers/thermal/intel/intel_powerclamp.c > +++ b/drivers/thermal/intel/intel_powerclamp.c > @@ -112,10 +112,7 @@ static int duration_get(char *buf, const struct > kernel_param *kp) > return ret; > } > > -static const struct kernel_param_ops duration_ops = { > - .set = duration_set, > - .get = duration_get, > -}; > +static DEFINE_KERNEL_PARAM_OPS(duration_ops, duration_set, duration_get); > > module_param_cb(duration, &duration_ops, NULL, 0644); > MODULE_PARM_DESC(duration, "forced idle time for each attempt in msec."); > @@ -203,10 +200,7 @@ static int cpumask_get(char *buf, const struct > kernel_param *kp) > return cpumap_print_to_pagebuf(false, buf, idle_injection_cpu_mask); > } > > -static const struct kernel_param_ops cpumask_ops = { > - .set = cpumask_set, > - .get = cpumask_get, > -}; > +static DEFINE_KERNEL_PARAM_OPS(cpumask_ops, cpumask_set, cpumask_get); > > module_param_cb(cpumask, &cpumask_ops, NULL, 0644); > MODULE_PARM_DESC(cpumask, "Mask of CPUs to use for idle injection."); > @@ -252,10 +246,7 @@ static int max_idle_set(const char *arg, const struct > kernel_param *kp) > return ret; > } > > -static const struct kernel_param_ops max_idle_ops = { > - .set = max_idle_set, > - .get = param_get_byte, > -}; > +static DEFINE_KERNEL_PARAM_OPS(max_idle_ops, max_idle_set, param_get_byte); > > module_param_cb(max_idle, &max_idle_ops, &max_idle, 0644); > MODULE_PARM_DESC(max_idle, "maximum injected idle time to the total CPU time > ratio in percent range:1-100"); > @@ -299,10 +290,7 @@ static int window_size_set(const char *arg, const struct > kernel_param *kp) > return ret; > } > > -static const struct kernel_param_ops window_size_ops = { > - .set = window_size_set, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(window_size_ops, window_size_set, > param_get_int); > > module_param_cb(window_size, &window_size_ops, &window_size, 0644); > MODULE_PARM_DESC(window_size, "sliding window in number of clamping cycles\n" > diff --git a/drivers/tty/hvc/hvc_iucv.c b/drivers/tty/hvc/hvc_iucv.c > index 37db8a3e5158..29612a4a32cb 100644 > --- a/drivers/tty/hvc/hvc_iucv.c > +++ b/drivers/tty/hvc/hvc_iucv.c > @@ -1290,10 +1290,8 @@ static int param_get_vmidfilter(char *buffer, const > struct kernel_param *kp) > > #define param_check_vmidfilter(name, p) __param_check(name, p, void) > > -static const struct kernel_param_ops param_ops_vmidfilter = { > - .set = param_set_vmidfilter, > - .get = param_get_vmidfilter, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_vmidfilter, param_set_vmidfilter, > + param_get_vmidfilter); > > /** > * hvc_iucv_init() - z/VM IUCV HVC device driver initialization > diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c > index c2e4b31b699a..c6279c496279 100644 > --- a/drivers/tty/sysrq.c > +++ b/drivers/tty/sysrq.c > @@ -1074,10 +1074,8 @@ static int sysrq_reset_seq_param_set(const char > *buffer, > return 0; > } > > -static const struct kernel_param_ops param_ops_sysrq_reset_seq = { > - .get = param_get_ushort, > - .set = sysrq_reset_seq_param_set, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_sysrq_reset_seq, > + sysrq_reset_seq_param_set, param_get_ushort); > > #define param_check_sysrq_reset_seq(name, p) \ > __param_check(name, p, unsigned short) > diff --git a/drivers/ufs/core/ufs-fault-injection.c > b/drivers/ufs/core/ufs-fault-injection.c > index 55db38e75cc4..7d2873da7dc5 100644 > --- a/drivers/ufs/core/ufs-fault-injection.c > +++ b/drivers/ufs/core/ufs-fault-injection.c > @@ -11,10 +11,7 @@ > static int ufs_fault_get(char *buffer, const struct kernel_param *kp); > static int ufs_fault_set(const char *val, const struct kernel_param *kp); > > -static const struct kernel_param_ops ufs_fault_ops = { > - .get = ufs_fault_get, > - .set = ufs_fault_set, > -}; > +static DEFINE_KERNEL_PARAM_OPS(ufs_fault_ops, ufs_fault_set, ufs_fault_get); > > enum { FAULT_INJ_STR_SIZE = 80 }; > > diff --git a/drivers/ufs/core/ufs-mcq.c b/drivers/ufs/core/ufs-mcq.c > index c1b1d67a1ddc..83100aad2a97 100644 > --- a/drivers/ufs/core/ufs-mcq.c > +++ b/drivers/ufs/core/ufs-mcq.c > @@ -43,10 +43,8 @@ static int rw_queue_count_set(const char *val, const > struct kernel_param *kp) > num_possible_cpus()); > } > > -static const struct kernel_param_ops rw_queue_count_ops = { > - .set = rw_queue_count_set, > - .get = param_get_uint, > -}; > +static DEFINE_KERNEL_PARAM_OPS(rw_queue_count_ops, rw_queue_count_set, > + param_get_uint); > > static unsigned int rw_queues; > module_param_cb(rw_queues, &rw_queue_count_ops, &rw_queues, 0644); > @@ -59,10 +57,8 @@ static int read_queue_count_set(const char *val, const > struct kernel_param *kp) > num_possible_cpus()); > } > > -static const struct kernel_param_ops read_queue_count_ops = { > - .set = read_queue_count_set, > - .get = param_get_uint, > -}; > +static DEFINE_KERNEL_PARAM_OPS(read_queue_count_ops, read_queue_count_set, > + param_get_uint); > > static unsigned int read_queues; > module_param_cb(read_queues, &read_queue_count_ops, &read_queues, 0644); > @@ -75,10 +71,8 @@ static int poll_queue_count_set(const char *val, const > struct kernel_param *kp) > num_possible_cpus()); > } > > -static const struct kernel_param_ops poll_queue_count_ops = { > - .set = poll_queue_count_set, > - .get = param_get_uint, > -}; > +static DEFINE_KERNEL_PARAM_OPS(poll_queue_count_ops, poll_queue_count_set, > + param_get_uint); > > static unsigned int poll_queues = 1; > module_param_cb(poll_queues, &poll_queue_count_ops, &poll_queues, 0644); > diff --git a/drivers/ufs/core/ufs-txeq.c b/drivers/ufs/core/ufs-txeq.c > index b2dc89124353..3bdd87b434ad 100644 > --- a/drivers/ufs/core/ufs-txeq.c > +++ b/drivers/ufs/core/ufs-txeq.c > @@ -23,10 +23,7 @@ static int txeq_gear_set(const char *val, const struct > kernel_param *kp) > return param_set_uint_minmax(val, kp, UFS_HS_G1, UFS_HS_GEAR_MAX); > } > > -static const struct kernel_param_ops txeq_gear_ops = { > - .set = txeq_gear_set, > - .get = param_get_uint, > -}; > +static DEFINE_KERNEL_PARAM_OPS(txeq_gear_ops, txeq_gear_set, param_get_uint); > > static unsigned int adaptive_txeq_gear = UFS_HS_G6; > module_param_cb(adaptive_txeq_gear, &txeq_gear_ops, &adaptive_txeq_gear, > 0644); > diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c > index 4805e40ed4d7..4e930710d9a6 100644 > --- a/drivers/ufs/core/ufshcd.c > +++ b/drivers/ufs/core/ufshcd.c > @@ -128,10 +128,8 @@ static int uic_cmd_timeout_set(const char *val, const > struct kernel_param *kp) > UIC_CMD_TIMEOUT_MAX); > } > > -static const struct kernel_param_ops uic_cmd_timeout_ops = { > - .set = uic_cmd_timeout_set, > - .get = param_get_uint, > -}; > +static DEFINE_KERNEL_PARAM_OPS(uic_cmd_timeout_ops, uic_cmd_timeout_set, > + param_get_uint); > > module_param_cb(uic_cmd_timeout, &uic_cmd_timeout_ops, &uic_cmd_timeout, > 0644); > MODULE_PARM_DESC(uic_cmd_timeout, > @@ -145,10 +143,8 @@ static int dev_cmd_timeout_set(const char *val, const > struct kernel_param *kp) > QUERY_REQ_TIMEOUT_MAX); > } > > -static const struct kernel_param_ops dev_cmd_timeout_ops = { > - .set = dev_cmd_timeout_set, > - .get = param_get_uint, > -}; > +static DEFINE_KERNEL_PARAM_OPS(dev_cmd_timeout_ops, dev_cmd_timeout_set, > + param_get_uint); > > module_param_cb(dev_cmd_timeout, &dev_cmd_timeout_ops, &dev_cmd_timeout, > 0644); > MODULE_PARM_DESC(dev_cmd_timeout, > diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c > index 0ffdaefba508..d52ecc886925 100644 > --- a/drivers/usb/core/quirks.c > +++ b/drivers/usb/core/quirks.c > @@ -160,10 +160,8 @@ static int quirks_param_set(const char *value, const > struct kernel_param *kp) > return 0; > } > > -static const struct kernel_param_ops quirks_param_ops = { > - .set = quirks_param_set, > - .get = param_get_string, > -}; > +static DEFINE_KERNEL_PARAM_OPS(quirks_param_ops, quirks_param_set, > + param_get_string); > > static struct kparam_string quirks_param_string = { > .maxlen = sizeof(quirks_param), > diff --git a/drivers/usb/gadget/legacy/serial.c > b/drivers/usb/gadget/legacy/serial.c > index 4974bee6049a..e34717e553da 100644 > --- a/drivers/usb/gadget/legacy/serial.c > +++ b/drivers/usb/gadget/legacy/serial.c > @@ -121,10 +121,7 @@ static int enable_set(const char *s, const struct > kernel_param *kp) > return ret; > } > > -static const struct kernel_param_ops enable_ops = { > - .set = enable_set, > - .get = param_get_bool, > -}; > +static DEFINE_KERNEL_PARAM_OPS(enable_ops, enable_set, param_get_bool); > > module_param_cb(enable, &enable_ops, &enable, 0644); > > diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c > index fa83fe0defe2..71dd623b95c9 100644 > --- a/drivers/usb/storage/usb.c > +++ b/drivers/usb/storage/usb.c > @@ -158,10 +158,7 @@ static int delay_use_get(char *s, const struct > kernel_param *kp) > return format_delay_ms(delay_ms, 3, "ms", s, PAGE_SIZE); > } > > -static const struct kernel_param_ops delay_use_ops = { > - .set = delay_use_set, > - .get = delay_use_get, > -}; > +static DEFINE_KERNEL_PARAM_OPS(delay_use_ops, delay_use_set, delay_use_get); > module_param_cb(delay_use, &delay_use_ops, &delay_use, 0644); > MODULE_PARM_DESC(delay_use, "time to delay before using a new device"); > > diff --git a/drivers/vhost/scsi.c b/drivers/vhost/scsi.c > index 9a1253b9d8c5..fd52f2213e27 100644 > --- a/drivers/vhost/scsi.c > +++ b/drivers/vhost/scsi.c > @@ -87,10 +87,9 @@ static int vhost_scsi_get_inline_sg_cnt(char *buf, > return sprintf(buf, "%u\n", vhost_scsi_inline_sg_cnt); > } > > -static const struct kernel_param_ops vhost_scsi_inline_sg_cnt_op = { > - .get = vhost_scsi_get_inline_sg_cnt, > - .set = vhost_scsi_set_inline_sg_cnt, > -}; > +static DEFINE_KERNEL_PARAM_OPS(vhost_scsi_inline_sg_cnt_op, > + vhost_scsi_set_inline_sg_cnt, > + vhost_scsi_get_inline_sg_cnt); > > module_param_cb(inline_sg_cnt, &vhost_scsi_inline_sg_cnt_op, NULL, 0644); > MODULE_PARM_DESC(inline_sg_cnt, "Set the number of scatterlist entries to > pre-allocate. The default is 2048."); > diff --git a/drivers/virt/nitro_enclaves/ne_misc_dev.c > b/drivers/virt/nitro_enclaves/ne_misc_dev.c > index c91300a73f50..218ddd93f960 100644 > --- a/drivers/virt/nitro_enclaves/ne_misc_dev.c > +++ b/drivers/virt/nitro_enclaves/ne_misc_dev.c > @@ -86,10 +86,8 @@ struct ne_devs ne_devs = { > */ > static int ne_set_kernel_param(const char *val, const struct kernel_param > *kp); > > -static const struct kernel_param_ops ne_cpu_pool_ops = { > - .get = param_get_string, > - .set = ne_set_kernel_param, > -}; > +static DEFINE_KERNEL_PARAM_OPS(ne_cpu_pool_ops, ne_set_kernel_param, > + param_get_string); > > static char ne_cpus[NE_CPUS_SIZE]; > static struct kparam_string ne_cpus_arg = { > diff --git a/drivers/virtio/virtio_mmio.c b/drivers/virtio/virtio_mmio.c > index 595c2274fbb5..f6df9c76ee81 100644 > --- a/drivers/virtio/virtio_mmio.c > +++ b/drivers/virtio/virtio_mmio.c > @@ -748,10 +748,8 @@ static int vm_cmdline_get(char *buffer, const struct > kernel_param *kp) > return strlen(buffer) + 1; > } > > -static const struct kernel_param_ops vm_cmdline_param_ops = { > - .set = vm_cmdline_set, > - .get = vm_cmdline_get, > -}; > +static DEFINE_KERNEL_PARAM_OPS(vm_cmdline_param_ops, vm_cmdline_set, > + vm_cmdline_get); > > device_param_cb(device, &vm_cmdline_param_ops, NULL, S_IRUSR); > > diff --git a/fs/ceph/super.c b/fs/ceph/super.c > index c05fbd4237f8..dec8024b8ac7 100644 > --- a/fs/ceph/super.c > +++ b/fs/ceph/super.c > @@ -1684,10 +1684,8 @@ static int param_set_metrics(const char *val, const > struct kernel_param *kp) > return 0; > } > > -static const struct kernel_param_ops param_ops_metrics = { > - .set = param_set_metrics, > - .get = param_get_bool, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_metrics, param_set_metrics, > + param_get_bool); > > bool disable_send_metrics = false; > module_param_cb(disable_send_metrics, ¶m_ops_metrics, > &disable_send_metrics, 0644); > @@ -1695,9 +1693,7 @@ MODULE_PARM_DESC(disable_send_metrics, "Enable sending > perf metrics to ceph clus > > /* for both v1 and v2 syntax */ > static bool mount_support = true; > -static const struct kernel_param_ops param_ops_mount_syntax = { > - .get = param_get_bool, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_mount_syntax, NULL, param_get_bool); > module_param_cb(mount_syntax_v1, ¶m_ops_mount_syntax, &mount_support, > 0444); > module_param_cb(mount_syntax_v2, ¶m_ops_mount_syntax, &mount_support, > 0444); > > diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c > index b658b6baf72f..cc955c9952d1 100644 > --- a/fs/fuse/dir.c > +++ b/fs/fuse/dir.c > @@ -71,10 +71,7 @@ static int inval_wq_set(const char *val, const struct > kernel_param *kp) > > return 0; > } > -static const struct kernel_param_ops inval_wq_ops = { > - .set = inval_wq_set, > - .get = param_get_uint, > -}; > +static DEFINE_KERNEL_PARAM_OPS(inval_wq_ops, inval_wq_set, param_get_uint); > module_param_cb(inval_wq, &inval_wq_ops, &inval_wq, 0644); > __MODULE_PARM_TYPE(inval_wq, "uint"); > MODULE_PARM_DESC(inval_wq, > diff --git a/fs/nfs/namespace.c b/fs/nfs/namespace.c > index af9be0c5f516..f2fba60dc5ed 100644 > --- a/fs/nfs/namespace.c > +++ b/fs/nfs/namespace.c > @@ -372,10 +372,8 @@ static int param_get_nfs_timeout(char *buffer, const > struct kernel_param *kp) > return sysfs_emit(buffer, "%li\n", num); > } > > -static const struct kernel_param_ops param_ops_nfs_timeout = { > - .set = param_set_nfs_timeout, > - .get = param_get_nfs_timeout, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_nfs_timeout, param_set_nfs_timeout, > + param_get_nfs_timeout); > #define param_check_nfs_timeout(name, p) __param_check(name, p, int) > > module_param(nfs_mountpoint_expiry_timeout, nfs_timeout, 0644); > diff --git a/fs/nfs/super.c b/fs/nfs/super.c > index 4cd420b14ce3..59d89a18aba6 100644 > --- a/fs/nfs/super.c > +++ b/fs/nfs/super.c > @@ -1419,10 +1419,8 @@ static int param_set_portnr(const char *val, const > struct kernel_param *kp) > *((unsigned int *)kp->arg) = num; > return 0; > } > -static const struct kernel_param_ops param_ops_portnr = { > - .set = param_set_portnr, > - .get = param_get_uint, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_portnr, param_set_portnr, > + param_get_uint); > #define param_check_portnr(name, p) __param_check(name, p, unsigned int) > > module_param_named(callback_tcpport, nfs_callback_set_tcpport, portnr, 0644); > diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c > index 9a77d8b64ffa..e44f8e18f756 100644 > --- a/fs/ubifs/super.c > +++ b/fs/ubifs/super.c > @@ -36,10 +36,8 @@ static int ubifs_default_version_set(const char *val, > const struct kernel_param > return param_set_int(val, kp); > } > > -static const struct kernel_param_ops ubifs_default_version_ops = { > - .set = ubifs_default_version_set, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(ubifs_default_version_ops, > + ubifs_default_version_set, param_get_int); > > int ubifs_default_version = UBIFS_FORMAT_VERSION; > module_param_cb(default_version, &ubifs_default_version_ops, > &ubifs_default_version, 0600); > diff --git a/kernel/locking/locktorture.c b/kernel/locking/locktorture.c > index e618bcf75e2d..38ae3b596ef2 100644 > --- a/kernel/locking/locktorture.c > +++ b/kernel/locking/locktorture.c > @@ -98,10 +98,8 @@ static bool cpumask_nonempty(cpumask_var_t mask) > return cpumask_available(mask) && !cpumask_empty(mask); > } > > -static const struct kernel_param_ops lt_bind_ops = { > - .set = param_set_cpumask, > - .get = param_get_cpumask, > -}; > +static DEFINE_KERNEL_PARAM_OPS(lt_bind_ops, param_set_cpumask, > + param_get_cpumask); > > module_param_cb(bind_readers, <_bind_ops, &bind_readers, 0444); > module_param_cb(bind_writers, <_bind_ops, &bind_writers, 0444); > diff --git a/kernel/panic.c b/kernel/panic.c > index 42e5ebde4585..8698374b0d21 100644 > --- a/kernel/panic.c > +++ b/kernel/panic.c > @@ -1214,10 +1214,8 @@ static int panic_print_set(const char *val, const > struct kernel_param *kp) > return param_set_ulong(val, kp); > } > > -static const struct kernel_param_ops panic_print_ops = { > - .set = panic_print_set, > - .get = param_get_ulong, > -}; > +static DEFINE_KERNEL_PARAM_OPS(panic_print_ops, panic_print_set, > + param_get_ulong); > __core_param_cb(panic_print, &panic_print_ops, &panic_print, 0644); > > static int __init oops_setup(char *s) > diff --git a/kernel/params.c b/kernel/params.c > index 2cbad1f4dd06..e19fff2926bc 100644 > --- a/kernel/params.c > +++ b/kernel/params.c > @@ -297,11 +297,8 @@ void param_free_charp(void *arg) > } > EXPORT_SYMBOL(param_free_charp); > > -const struct kernel_param_ops param_ops_charp = { > - .set = param_set_charp, > - .get = param_get_charp, > - .free = param_free_charp, > -}; > +DEFINE_KERNEL_PARAM_OPS_FREE(param_ops_charp, param_set_charp, > param_get_charp, > + param_free_charp); > EXPORT_SYMBOL(param_ops_charp); > > /* Actually could be a bool or an int, for historical reasons. */ > @@ -322,11 +319,7 @@ int param_get_bool(char *buffer, const struct > kernel_param *kp) > } > EXPORT_SYMBOL(param_get_bool); > > -const struct kernel_param_ops param_ops_bool = { > - .flags = KERNEL_PARAM_OPS_FL_NOARG, > - .set = param_set_bool, > - .get = param_get_bool, > -}; > +DEFINE_KERNEL_PARAM_OPS_NOARG(param_ops_bool, param_set_bool, > param_get_bool); > EXPORT_SYMBOL(param_ops_bool); > > int param_set_bool_enable_only(const char *val, const struct kernel_param > *kp) > @@ -353,11 +346,8 @@ int param_set_bool_enable_only(const char *val, const > struct kernel_param *kp) > } > EXPORT_SYMBOL_GPL(param_set_bool_enable_only); > > -const struct kernel_param_ops param_ops_bool_enable_only = { > - .flags = KERNEL_PARAM_OPS_FL_NOARG, > - .set = param_set_bool_enable_only, > - .get = param_get_bool, > -}; > +DEFINE_KERNEL_PARAM_OPS_NOARG(param_ops_bool_enable_only, > + param_set_bool_enable_only, param_get_bool); > EXPORT_SYMBOL_GPL(param_ops_bool_enable_only); > > /* This one must be bool. */ > @@ -381,10 +371,7 @@ int param_get_invbool(char *buffer, const struct > kernel_param *kp) > } > EXPORT_SYMBOL(param_get_invbool); > > -const struct kernel_param_ops param_ops_invbool = { > - .set = param_set_invbool, > - .get = param_get_invbool, > -}; > +DEFINE_KERNEL_PARAM_OPS(param_ops_invbool, param_set_invbool, > param_get_invbool); > EXPORT_SYMBOL(param_ops_invbool); > > int param_set_bint(const char *val, const struct kernel_param *kp) > @@ -403,11 +390,7 @@ int param_set_bint(const char *val, const struct > kernel_param *kp) > } > EXPORT_SYMBOL(param_set_bint); > > -const struct kernel_param_ops param_ops_bint = { > - .flags = KERNEL_PARAM_OPS_FL_NOARG, > - .set = param_set_bint, > - .get = param_get_int, > -}; > +DEFINE_KERNEL_PARAM_OPS_NOARG(param_ops_bint, param_set_bint, param_get_int); > EXPORT_SYMBOL(param_ops_bint); > > /* We break the rule and mangle the string. */ > @@ -515,11 +498,8 @@ static void param_array_free(void *arg) > arr->ops->free(arr->elem + arr->elemsize * i); > } > > -const struct kernel_param_ops param_array_ops = { > - .set = param_array_set, > - .get = param_array_get, > - .free = param_array_free, > -}; > +DEFINE_KERNEL_PARAM_OPS_FREE(param_array_ops, param_array_set, > param_array_get, > + param_array_free); > EXPORT_SYMBOL(param_array_ops); > > int param_set_copystring(const char *val, const struct kernel_param *kp) > @@ -544,10 +524,8 @@ int param_get_string(char *buffer, const struct > kernel_param *kp) > } > EXPORT_SYMBOL(param_get_string); > > -const struct kernel_param_ops param_ops_string = { > - .set = param_set_copystring, > - .get = param_get_string, > -}; > +DEFINE_KERNEL_PARAM_OPS(param_ops_string, param_set_copystring, > + param_get_string); > EXPORT_SYMBOL(param_ops_string); > > /* sysfs output in /sys/modules/XYZ/parameters/ */ > diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c > index af8d07bafe02..aba1e4489447 100644 > --- a/kernel/power/hibernate.c > +++ b/kernel/power/hibernate.c > @@ -1528,10 +1528,8 @@ static int hibernate_compressor_param_set(const char > *compressor, > return ret; > } > > -static const struct kernel_param_ops hibernate_compressor_param_ops = { > - .set = hibernate_compressor_param_set, > - .get = param_get_string, > -}; > +static DEFINE_KERNEL_PARAM_OPS(hibernate_compressor_param_ops, > + hibernate_compressor_param_set, > param_get_string); > > static struct kparam_string hibernate_compressor_param_string = { > .maxlen = sizeof(hibernate_compressor), > diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c > index 55df6d37145e..e675d7f1b4ee 100644 > --- a/kernel/rcu/tree.c > +++ b/kernel/rcu/tree.c > @@ -498,15 +498,11 @@ static int param_set_next_fqs_jiffies(const char *val, > const struct kernel_param > return ret; > } > > -static const struct kernel_param_ops first_fqs_jiffies_ops = { > - .set = param_set_first_fqs_jiffies, > - .get = param_get_ulong, > -}; > +static DEFINE_KERNEL_PARAM_OPS(first_fqs_jiffies_ops, > + param_set_first_fqs_jiffies, param_get_ulong); > > -static const struct kernel_param_ops next_fqs_jiffies_ops = { > - .set = param_set_next_fqs_jiffies, > - .get = param_get_ulong, > -}; > +static DEFINE_KERNEL_PARAM_OPS(next_fqs_jiffies_ops, > param_set_next_fqs_jiffies, > + param_get_ulong); > > module_param_cb(jiffies_till_first_fqs, &first_fqs_jiffies_ops, > &jiffies_till_first_fqs, 0644); > module_param_cb(jiffies_till_next_fqs, &next_fqs_jiffies_ops, > &jiffies_till_next_fqs, 0644); > @@ -3979,10 +3975,8 @@ static int param_get_do_rcu_barrier(char *buffer, > const struct kernel_param *kp) > return sprintf(buffer, "%d\n", atomic_read((atomic_t *)kp->arg)); > } > > -static const struct kernel_param_ops do_rcu_barrier_ops = { > - .set = param_set_do_rcu_barrier, > - .get = param_get_do_rcu_barrier, > -}; > +static DEFINE_KERNEL_PARAM_OPS(do_rcu_barrier_ops, param_set_do_rcu_barrier, > + param_get_do_rcu_barrier); > static atomic_t do_rcu_barrier; > module_param_cb(do_rcu_barrier, &do_rcu_barrier_ops, &do_rcu_barrier, 0644); > > diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c > index 345aa11b84b2..fcf31e3e4965 100644 > --- a/kernel/sched/ext.c > +++ b/kernel/sched/ext.c > @@ -166,20 +166,15 @@ static int set_slice_us(const char *val, const struct > kernel_param *kp) > return param_set_uint_minmax(val, kp, 100, 100 * USEC_PER_MSEC); > } > > -static const struct kernel_param_ops slice_us_param_ops = { > - .set = set_slice_us, > - .get = param_get_uint, > -}; > +static DEFINE_KERNEL_PARAM_OPS(slice_us_param_ops, set_slice_us, > param_get_uint); > > static int set_bypass_lb_intv_us(const char *val, const struct kernel_param > *kp) > { > return param_set_uint_minmax(val, kp, 0, 10 * USEC_PER_SEC); > } > > -static const struct kernel_param_ops bypass_lb_intv_us_param_ops = { > - .set = set_bypass_lb_intv_us, > - .get = param_get_uint, > -}; > +static DEFINE_KERNEL_PARAM_OPS(bypass_lb_intv_us_param_ops, > + set_bypass_lb_intv_us, param_get_uint); > > #undef MODULE_PARAM_PREFIX > #define MODULE_PARAM_PREFIX "sched_ext." > diff --git a/kernel/workqueue.c b/kernel/workqueue.c > index 5f747f241a5f..42562b811d94 100644 > --- a/kernel/workqueue.c > +++ b/kernel/workqueue.c > @@ -7162,10 +7162,8 @@ static int wq_affn_dfl_get(char *buffer, const struct > kernel_param *kp) > return scnprintf(buffer, PAGE_SIZE, "%s\n", > wq_affn_names[wq_affn_dfl]); > } > > -static const struct kernel_param_ops wq_affn_dfl_ops = { > - .set = wq_affn_dfl_set, > - .get = wq_affn_dfl_get, > -}; > +static DEFINE_KERNEL_PARAM_OPS(wq_affn_dfl_ops, wq_affn_dfl_set, > + wq_affn_dfl_get); > > module_param_cb(default_affinity_scope, &wq_affn_dfl_ops, NULL, 0644); > > @@ -7861,10 +7859,8 @@ static int wq_watchdog_param_set_thresh(const char > *val, > return 0; > } > > -static const struct kernel_param_ops wq_watchdog_thresh_ops = { > - .set = wq_watchdog_param_set_thresh, > - .get = param_get_ulong, > -}; > +static DEFINE_KERNEL_PARAM_OPS(wq_watchdog_thresh_ops, > + wq_watchdog_param_set_thresh, param_get_ulong); > > module_param_cb(watchdog_thresh, &wq_watchdog_thresh_ops, > &wq_watchdog_thresh, > 0644); > diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c > index 18a71a9108d3..cf0405ba0dbd 100644 > --- a/lib/dynamic_debug.c > +++ b/lib/dynamic_debug.c > @@ -807,10 +807,8 @@ int param_get_dyndbg_classes(char *buffer, const struct > kernel_param *kp) > } > EXPORT_SYMBOL(param_get_dyndbg_classes); > > -const struct kernel_param_ops param_ops_dyndbg_classes = { > - .set = param_set_dyndbg_classes, > - .get = param_get_dyndbg_classes, > -}; > +DEFINE_KERNEL_PARAM_OPS(param_ops_dyndbg_classes, param_set_dyndbg_classes, > + param_get_dyndbg_classes); > EXPORT_SYMBOL(param_ops_dyndbg_classes); > > #define PREFIX_SIZE 128 > diff --git a/lib/test_dynamic_debug.c b/lib/test_dynamic_debug.c > index 77c2a669b6af..30880b6c726a 100644 > --- a/lib/test_dynamic_debug.c > +++ b/lib/test_dynamic_debug.c > @@ -23,10 +23,8 @@ static int param_get_do_prints(char *buffer, const struct > kernel_param *kp) > do_prints(); > return scnprintf(buffer, PAGE_SIZE, "did do_prints\n"); > } > -static const struct kernel_param_ops param_ops_do_prints = { > - .set = param_set_do_prints, > - .get = param_get_do_prints, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_do_prints, param_set_do_prints, > + param_get_do_prints); > module_param_cb(do_prints, ¶m_ops_do_prints, NULL, 0600); > > /* > diff --git a/mm/damon/lru_sort.c b/mm/damon/lru_sort.c > index 8494040b1ee4..5feb93c5262e 100644 > --- a/mm/damon/lru_sort.c > +++ b/mm/damon/lru_sort.c > @@ -405,10 +405,8 @@ static int damon_lru_sort_addr_unit_store(const char > *val, > return 0; > } > > -static const struct kernel_param_ops addr_unit_param_ops = { > - .set = damon_lru_sort_addr_unit_store, > - .get = param_get_ulong, > -}; > +static DEFINE_KERNEL_PARAM_OPS(addr_unit_param_ops, > + damon_lru_sort_addr_unit_store, > param_get_ulong); > > module_param_cb(addr_unit, &addr_unit_param_ops, &addr_unit, 0600); > MODULE_PARM_DESC(addr_unit, > @@ -446,10 +444,8 @@ static int damon_lru_sort_enabled_load(char *buffer, > return sprintf(buffer, "%c\n", damon_lru_sort_enabled() ? 'Y' : 'N'); > } > > -static const struct kernel_param_ops enabled_param_ops = { > - .set = damon_lru_sort_enabled_store, > - .get = damon_lru_sort_enabled_load, > -}; > +static DEFINE_KERNEL_PARAM_OPS(enabled_param_ops, > damon_lru_sort_enabled_store, > + damon_lru_sort_enabled_load); > > module_param_cb(enabled, &enabled_param_ops, &enabled, 0600); > MODULE_PARM_DESC(enabled, > @@ -478,10 +474,9 @@ static int damon_lru_sort_kdamond_pid_load(char *buffer, > return sprintf(buffer, "%d\n", kdamond_pid); > } > > -static const struct kernel_param_ops kdamond_pid_param_ops = { > - .set = damon_lru_sort_kdamond_pid_store, > - .get = damon_lru_sort_kdamond_pid_load, > -}; > +static DEFINE_KERNEL_PARAM_OPS(kdamond_pid_param_ops, > + damon_lru_sort_kdamond_pid_store, > + damon_lru_sort_kdamond_pid_load); > > /* > * PID of the DAMON thread > diff --git a/mm/damon/reclaim.c b/mm/damon/reclaim.c > index fe7fce26cf6c..27e772b095fa 100644 > --- a/mm/damon/reclaim.c > +++ b/mm/damon/reclaim.c > @@ -307,10 +307,8 @@ static int damon_reclaim_addr_unit_store(const char *val, > return 0; > } > > -static const struct kernel_param_ops addr_unit_param_ops = { > - .set = damon_reclaim_addr_unit_store, > - .get = param_get_ulong, > -}; > +static DEFINE_KERNEL_PARAM_OPS(addr_unit_param_ops, > + damon_reclaim_addr_unit_store, > param_get_ulong); > > module_param_cb(addr_unit, &addr_unit_param_ops, &addr_unit, 0600); > MODULE_PARM_DESC(addr_unit, > @@ -348,10 +346,8 @@ static int damon_reclaim_enabled_load(char *buffer, > return sprintf(buffer, "%c\n", damon_reclaim_enabled() ? 'Y' : 'N'); > } > > -static const struct kernel_param_ops enabled_param_ops = { > - .set = damon_reclaim_enabled_store, > - .get = damon_reclaim_enabled_load, > -}; > +static DEFINE_KERNEL_PARAM_OPS(enabled_param_ops, > damon_reclaim_enabled_store, > + damon_reclaim_enabled_load); > > module_param_cb(enabled, &enabled_param_ops, &enabled, 0600); > MODULE_PARM_DESC(enabled, > @@ -380,10 +376,9 @@ static int damon_reclaim_kdamond_pid_load(char *buffer, > return sprintf(buffer, "%d\n", kdamond_pid); > } > > -static const struct kernel_param_ops kdamond_pid_param_ops = { > - .set = damon_reclaim_kdamond_pid_store, > - .get = damon_reclaim_kdamond_pid_load, > -}; > +static DEFINE_KERNEL_PARAM_OPS(kdamond_pid_param_ops, > + damon_reclaim_kdamond_pid_store, > + damon_reclaim_kdamond_pid_load); > > /* > * PID of the DAMON thread > diff --git a/mm/damon/stat.c b/mm/damon/stat.c > index 3951b762cbdd..6eb548793802 100644 > --- a/mm/damon/stat.c > +++ b/mm/damon/stat.c > @@ -22,10 +22,8 @@ static int damon_stat_enabled_store( > static int damon_stat_enabled_load(char *buffer, > const struct kernel_param *kp); > > -static const struct kernel_param_ops enabled_param_ops = { > - .set = damon_stat_enabled_store, > - .get = damon_stat_enabled_load, > -}; > +static DEFINE_KERNEL_PARAM_OPS(enabled_param_ops, damon_stat_enabled_store, > + damon_stat_enabled_load); > > static bool enabled __read_mostly = IS_ENABLED( > CONFIG_DAMON_STAT_ENABLED_DEFAULT); > diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c > index 2a943ec57c85..42e0cf313281 100644 > --- a/mm/memory_hotplug.c > +++ b/mm/memory_hotplug.c > @@ -109,10 +109,8 @@ static int get_memmap_mode(char *buffer, const struct > kernel_param *kp) > return sprintf(buffer, "%c\n", mode ? 'Y' : 'N'); > } > > -static const struct kernel_param_ops memmap_mode_ops = { > - .set = set_memmap_mode, > - .get = get_memmap_mode, > -}; > +static DEFINE_KERNEL_PARAM_OPS(memmap_mode_ops, set_memmap_mode, > + get_memmap_mode); > module_param_cb(memmap_on_memory, &memmap_mode_ops, &memmap_mode, 0444); > MODULE_PARM_DESC(memmap_on_memory, "Enable memmap on memory for memory > hotplug\n" > "With value \"force\" it could result in memory wastage due " > @@ -163,10 +161,8 @@ static int get_online_policy(char *buffer, const struct > kernel_param *kp) > * (auto_movable_ratio, auto_movable_numa_aware) allows for > it > */ > static int online_policy __read_mostly = ONLINE_POLICY_CONTIG_ZONES; > -static const struct kernel_param_ops online_policy_ops = { > - .set = set_online_policy, > - .get = get_online_policy, > -}; > +static DEFINE_KERNEL_PARAM_OPS(online_policy_ops, set_online_policy, > + get_online_policy); > module_param_cb(online_policy, &online_policy_ops, &online_policy, 0644); > MODULE_PARM_DESC(online_policy, > "Set the online policy (\"contig-zones\", \"auto-movable\") " > diff --git a/mm/page_reporting.c b/mm/page_reporting.c > index 7418f2e500bb..61351e12b4d9 100644 > --- a/mm/page_reporting.c > +++ b/mm/page_reporting.c > @@ -23,15 +23,8 @@ static int page_order_update_notify(const char *val, const > struct kernel_param * > return param_set_uint_minmax(val, kp, 0, MAX_PAGE_ORDER); > } > > -static const struct kernel_param_ops page_reporting_param_ops = { > - .set = &page_order_update_notify, > - /* > - * For the get op, use param_get_int instead of param_get_uint. > - * This is to make sure that when unset the initialized value of > - * -1 is shown correctly > - */ > - .get = ¶m_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(page_reporting_param_ops, > + &page_order_update_notify, ¶m_get_int); > > module_param_cb(page_reporting_order, &page_reporting_param_ops, > &page_reporting_order, 0644); > diff --git a/mm/shuffle.c b/mm/shuffle.c > index fb1393b8b3a9..114fe7467516 100644 > --- a/mm/shuffle.c > +++ b/mm/shuffle.c > @@ -23,10 +23,8 @@ static __meminit int shuffle_param_set(const char *val, > return 0; > } > > -static const struct kernel_param_ops shuffle_param_ops = { > - .set = shuffle_param_set, > - .get = param_get_bool, > -}; > +static DEFINE_KERNEL_PARAM_OPS(shuffle_param_ops, shuffle_param_set, > + param_get_bool); > module_param_cb(shuffle, &shuffle_param_ops, &shuffle_param, 0400); > > /* > diff --git a/mm/zswap.c b/mm/zswap.c > index 4b5149173b0e..ed3aa07c2f1d 100644 > --- a/mm/zswap.c > +++ b/mm/zswap.c > @@ -90,21 +90,17 @@ static DEFINE_STATIC_KEY_MAYBE(CONFIG_ZSWAP_DEFAULT_ON, > zswap_ever_enabled); > static bool zswap_enabled = IS_ENABLED(CONFIG_ZSWAP_DEFAULT_ON); > static int zswap_enabled_param_set(const char *, > const struct kernel_param *); > -static const struct kernel_param_ops zswap_enabled_param_ops = { > - .set = zswap_enabled_param_set, > - .get = param_get_bool, > -}; > +static DEFINE_KERNEL_PARAM_OPS(zswap_enabled_param_ops, > zswap_enabled_param_set, > + param_get_bool); > module_param_cb(enabled, &zswap_enabled_param_ops, &zswap_enabled, 0644); > > /* Crypto compressor to use */ > static char *zswap_compressor = CONFIG_ZSWAP_COMPRESSOR_DEFAULT; > static int zswap_compressor_param_set(const char *, > const struct kernel_param *); > -static const struct kernel_param_ops zswap_compressor_param_ops = { > - .set = zswap_compressor_param_set, > - .get = param_get_charp, > - .free = param_free_charp, > -}; > +static DEFINE_KERNEL_PARAM_OPS_FREE(zswap_compressor_param_ops, > + zswap_compressor_param_set, > param_get_charp, > + param_free_charp); > module_param_cb(compressor, &zswap_compressor_param_ops, > &zswap_compressor, 0644); > > diff --git a/net/batman-adv/bat_algo.c b/net/batman-adv/bat_algo.c > index 49e5861b58ec..54d66a948298 100644 > --- a/net/batman-adv/bat_algo.c > +++ b/net/batman-adv/bat_algo.c > @@ -134,10 +134,8 @@ static int batadv_param_set_ra(const char *val, const > struct kernel_param *kp) > return param_set_copystring(algo_name, kp); > } > > -static const struct kernel_param_ops batadv_param_ops_ra = { > - .set = batadv_param_set_ra, > - .get = param_get_string, > -}; > +static DEFINE_KERNEL_PARAM_OPS(batadv_param_ops_ra, batadv_param_set_ra, > + param_get_string); > > static struct kparam_string batadv_param_string_ra = { > .maxlen = sizeof(batadv_routing_algo), > diff --git a/net/ceph/ceph_common.c b/net/ceph/ceph_common.c > index 952121849180..633202a99e4a 100644 > --- a/net/ceph/ceph_common.c > +++ b/net/ceph/ceph_common.c > @@ -52,9 +52,8 @@ static int param_get_supported_features(char *buffer, > { > return sprintf(buffer, "0x%llx", CEPH_FEATURES_SUPPORTED_DEFAULT); > } > -static const struct kernel_param_ops param_ops_supported_features = { > - .get = param_get_supported_features, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_supported_features, NULL, > + param_get_supported_features); > module_param_cb(supported_features, ¶m_ops_supported_features, NULL, > 0444); > > diff --git a/net/ipv4/tcp_dctcp.c b/net/ipv4/tcp_dctcp.c > index 274e628e7cf8..2c9c3d0f3c3d 100644 > --- a/net/ipv4/tcp_dctcp.c > +++ b/net/ipv4/tcp_dctcp.c > @@ -64,10 +64,8 @@ static int dctcp_shift_g_set(const char *val, const struct > kernel_param *kp) > return param_set_uint_minmax(val, kp, 0, 10); > } > > -static const struct kernel_param_ops dctcp_shift_g_ops = { > - .set = dctcp_shift_g_set, > - .get = param_get_uint, > -}; > +static DEFINE_KERNEL_PARAM_OPS(dctcp_shift_g_ops, dctcp_shift_g_set, > + param_get_uint); > > module_param_cb(dctcp_shift_g, &dctcp_shift_g_ops, &dctcp_shift_g, 0644); > MODULE_PARM_DESC(dctcp_shift_g, "parameter g for updating dctcp_alpha"); > diff --git a/net/sunrpc/auth.c b/net/sunrpc/auth.c > index 68c0595ea2fd..64a3e894fd4c 100644 > --- a/net/sunrpc/auth.c > +++ b/net/sunrpc/auth.c > @@ -83,10 +83,8 @@ static int param_get_hashtbl_sz(char *buffer, const struct > kernel_param *kp) > > #define param_check_hashtbl_sz(name, p) __param_check(name, p, unsigned int); > > -static const struct kernel_param_ops param_ops_hashtbl_sz = { > - .set = param_set_hashtbl_sz, > - .get = param_get_hashtbl_sz, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_hashtbl_sz, param_set_hashtbl_sz, > + param_get_hashtbl_sz); > > module_param_named(auth_hashtable_size, auth_hashbits, hashtbl_sz, 0644); > MODULE_PARM_DESC(auth_hashtable_size, "RPC credential cache hashtable size"); > diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c > index 2e1fe6013361..e8d087798994 100644 > --- a/net/sunrpc/xprtsock.c > +++ b/net/sunrpc/xprtsock.c > @@ -3710,10 +3710,8 @@ static int param_set_portnr(const char *val, const > struct kernel_param *kp) > RPC_MAX_RESVPORT); > } > > -static const struct kernel_param_ops param_ops_portnr = { > - .set = param_set_portnr, > - .get = param_get_uint, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_portnr, param_set_portnr, > + param_get_uint); > > #define param_check_portnr(name, p) \ > __param_check(name, p, unsigned int); > @@ -3729,10 +3727,8 @@ static int param_set_slot_table_size(const char *val, > RPC_MAX_SLOT_TABLE); > } > > -static const struct kernel_param_ops param_ops_slot_table_size = { > - .set = param_set_slot_table_size, > - .get = param_get_uint, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_slot_table_size, > + param_set_slot_table_size, param_get_uint); > > #define param_check_slot_table_size(name, p) \ > __param_check(name, p, unsigned int); > @@ -3745,10 +3741,8 @@ static int param_set_max_slot_table_size(const char > *val, > RPC_MAX_SLOT_TABLE_LIMIT); > } > > -static const struct kernel_param_ops param_ops_max_slot_table_size = { > - .set = param_set_max_slot_table_size, > - .get = param_get_uint, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_max_slot_table_size, > + param_set_max_slot_table_size, param_get_uint); > > #define param_check_max_slot_table_size(name, p) \ > __param_check(name, p, unsigned int); > diff --git a/samples/damon/mtier.c b/samples/damon/mtier.c > index 775838a23d93..c8018a7ea891 100644 > --- a/samples/damon/mtier.c > +++ b/samples/damon/mtier.c > @@ -38,10 +38,8 @@ module_param(node0_mem_free_bp, ulong, 0600); > static int damon_sample_mtier_enable_store( > const char *val, const struct kernel_param *kp); > > -static const struct kernel_param_ops enabled_param_ops = { > - .set = damon_sample_mtier_enable_store, > - .get = param_get_bool, > -}; > +static DEFINE_KERNEL_PARAM_OPS(enabled_param_ops, > + damon_sample_mtier_enable_store, > param_get_bool); > > static bool enabled __read_mostly; > module_param_cb(enabled, &enabled_param_ops, &enabled, 0600); > diff --git a/samples/damon/prcl.c b/samples/damon/prcl.c > index b7c50f2656ce..7cab9bd0f7bd 100644 > --- a/samples/damon/prcl.c > +++ b/samples/damon/prcl.c > @@ -22,10 +22,8 @@ module_param(target_pid, int, 0600); > static int damon_sample_prcl_enable_store( > const char *val, const struct kernel_param *kp); > > -static const struct kernel_param_ops enabled_param_ops = { > - .set = damon_sample_prcl_enable_store, > - .get = param_get_bool, > -}; > +static DEFINE_KERNEL_PARAM_OPS(enabled_param_ops, > + damon_sample_prcl_enable_store, > param_get_bool); > > static bool enabled __read_mostly; > module_param_cb(enabled, &enabled_param_ops, &enabled, 0600); > diff --git a/samples/damon/wsse.c b/samples/damon/wsse.c > index 799ad4443943..56634853bd0b 100644 > --- a/samples/damon/wsse.c > +++ b/samples/damon/wsse.c > @@ -23,10 +23,8 @@ module_param(target_pid, int, 0600); > static int damon_sample_wsse_enable_store( > const char *val, const struct kernel_param *kp); > > -static const struct kernel_param_ops enabled_param_ops = { > - .set = damon_sample_wsse_enable_store, > - .get = param_get_bool, > -}; > +static DEFINE_KERNEL_PARAM_OPS(enabled_param_ops, > + damon_sample_wsse_enable_store, > param_get_bool); > > static bool enabled __read_mostly; > module_param_cb(enabled, &enabled_param_ops, &enabled, 0600); > diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c > index 3491e9f60194..8a253c743363 100644 > --- a/security/apparmor/lsm.c > +++ b/security/apparmor/lsm.c > @@ -1767,38 +1767,30 @@ static struct security_hook_list apparmor_hooks[] > __ro_after_init = { > static int param_set_aabool(const char *val, const struct kernel_param *kp); > static int param_get_aabool(char *buffer, const struct kernel_param *kp); > #define param_check_aabool param_check_bool > -static const struct kernel_param_ops param_ops_aabool = { > - .flags = KERNEL_PARAM_OPS_FL_NOARG, > - .set = param_set_aabool, > - .get = param_get_aabool > -}; > +static DEFINE_KERNEL_PARAM_OPS_NOARG(param_ops_aabool, param_set_aabool, > + param_get_aabool); > > static int param_set_aauint(const char *val, const struct kernel_param *kp); > static int param_get_aauint(char *buffer, const struct kernel_param *kp); > #define param_check_aauint param_check_uint > -static const struct kernel_param_ops param_ops_aauint = { > - .set = param_set_aauint, > - .get = param_get_aauint > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_aauint, param_set_aauint, > + param_get_aauint); > > static int param_set_aacompressionlevel(const char *val, > const struct kernel_param *kp); > static int param_get_aacompressionlevel(char *buffer, > const struct kernel_param *kp); > #define param_check_aacompressionlevel param_check_int > -static const struct kernel_param_ops param_ops_aacompressionlevel = { > - .set = param_set_aacompressionlevel, > - .get = param_get_aacompressionlevel > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_aacompressionlevel, > + param_set_aacompressionlevel, > + param_get_aacompressionlevel); > > static int param_set_aalockpolicy(const char *val, const struct kernel_param > *kp); > static int param_get_aalockpolicy(char *buffer, const struct kernel_param > *kp); > #define param_check_aalockpolicy param_check_bool > -static const struct kernel_param_ops param_ops_aalockpolicy = { > - .flags = KERNEL_PARAM_OPS_FL_NOARG, > - .set = param_set_aalockpolicy, > - .get = param_get_aalockpolicy > -}; > +static DEFINE_KERNEL_PARAM_OPS_NOARG(param_ops_aalockpolicy, > + param_set_aalockpolicy, > + param_get_aalockpolicy); > > static int param_set_debug(const char *val, const struct kernel_param *kp); > static int param_get_debug(char *buffer, const struct kernel_param *kp); > @@ -1879,10 +1871,8 @@ module_param_named(paranoid_load, aa_g_paranoid_load, > aabool, S_IRUGO); > static int param_get_aaintbool(char *buffer, const struct kernel_param *kp); > static int param_set_aaintbool(const char *val, const struct kernel_param > *kp); > #define param_check_aaintbool param_check_int > -static const struct kernel_param_ops param_ops_aaintbool = { > - .set = param_set_aaintbool, > - .get = param_get_aaintbool > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_aaintbool, param_set_aaintbool, > + param_get_aaintbool); > /* Boot time disable flag */ > static int apparmor_enabled __ro_after_init = 1; > module_param_named(enabled, apparmor_enabled, aaintbool, 0444); > diff --git a/sound/hda/controllers/intel.c b/sound/hda/controllers/intel.c > index c87d75dbd8aa..02bd61e67902 100644 > --- a/sound/hda/controllers/intel.c > +++ b/sound/hda/controllers/intel.c > @@ -164,10 +164,7 @@ MODULE_PARM_DESC(ctl_dev_id, "Use control device > identifier (based on codec addr > > #ifdef CONFIG_PM > static int param_set_xint(const char *val, const struct kernel_param *kp); > -static const struct kernel_param_ops param_ops_xint = { > - .set = param_set_xint, > - .get = param_get_int, > -}; > +static DEFINE_KERNEL_PARAM_OPS(param_ops_xint, param_set_xint, > param_get_int); > #define param_check_xint param_check_int > > static int power_save = CONFIG_SND_HDA_POWER_SAVE_DEFAULT; > diff --git a/sound/usb/card.c b/sound/usb/card.c > index f42d72cd0378..34cbb9d72315 100644 > --- a/sound/usb/card.c > +++ b/sound/usb/card.c > @@ -118,11 +118,8 @@ static int param_set_quirkp(const char *val, > return param_set_charp(val, kp); > } > > -static const struct kernel_param_ops param_ops_quirkp = { > - .set = param_set_quirkp, > - .get = param_get_charp, > - .free = param_free_charp, > -}; > +static DEFINE_KERNEL_PARAM_OPS_FREE(param_ops_quirkp, param_set_quirkp, > + param_get_charp, param_free_charp); > > #define param_check_quirkp param_check_charp > > -- > 2.34.1 >
